Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙

2023-07-30,,

keepalived 高可用集群

1. keepalived服务概念说明

# 1.1 keepalived软件的作用?
Keepalived软件起初是专为LVS负载均衡软件设计的,
用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 Keepalived软件主要是通过VRRP协议实现高可用功能的。
VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,
VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,
整个网络可以不间断地运行 # 1.2 keepalived软件工作原理?(重点)
原理
1)VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,
VRRP的出现是为了解决静态路由的单点故障。
2)VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。
3)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,
就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,
但一般Keepalived系统运维工作中都是一对。 # 1.3 keepalived软件主要功能?
①. 管理LVS负载均衡软件
②. 实现对LVS集群节点健康检查功能
③. 作为系统网络服务的高可用功能

2. 部署keepalived高可用服务:

# 1)确认反向代理服务是否工作正常
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
web01 www.etiantian.org
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
web02 www.etiantian.org
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
web03 www.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.9/oldboy.html
web03 bbs.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.8/oldboy.html
web02 bbs.etiantian.org
[root@lb01 ~]# curl -H host:bbs.etiantian.org 10.0.0.7/oldboy.html
web01 bbs.etiantian.org # 2)安装部署高可用keepalived服务(05和06主机)
# 第一步:安装keepalived服务软件
yum install -y keepalived # 第二步:编写keepalived配置文件
vim /etc/keepalived/keepalived.conf
# man keepalived.conf --- 配置文件说明信息
# 配置文件结构:
GLOBAL CONFIGURATION --- 全局配置(*)
VRRPD CONFIGURATION --- vrrp配置(*)
LVS CONFIGURATION --- LVS服务相关配置 # lb01主负载均衡器配置
global_defs {
router_id lb01 # 在一个集群中,每一台主机的 router_id 都是唯一的
} vrrp_instance group01 { # 相同的集群中,实例是一样的
state MASTER # 只是一个描述性信息
interface eth0
virtual_router_id 51 # 主备发送 组播包 的时间间隔
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # VIP:虚IP地址(用户访问的是这个地址)
10.0.0.3/24 dev eth0 label eth0:1
}
} # lb02配置信息
global_defs {
router_id LVS_DEVEL
} vrrp_instance group01 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
} # 重启 keepalived 服务
/etc/init.d/keepalived reload # 开启为 start # 开启 keepalived 服务后会在 主(MASTER)上的 eth0 网卡上生成 虚ip 10.0.0.3
# 不管 VIP 在哪台主机上,用户访问时都是访问的 10.0.0.3 这个 ip

3. 部署keepalived高可用服务问题

# 同时在keepalived高可用集群中,出现了两个虚拟IP地址信息,这种情况就称为脑裂

# 脑裂情况出现原因:
1. 心跳线出现问题
网卡配置有问题
交换设备有问题
线缆连接有问题
2. 有防火墙软件阻止问题
3. virtual_router_id配置数值不正确
# 总之:只要备服务器收不到组播包,就会成为主,而主资源没有释放,就会出现脑裂 利用shell脚本实现监控管理:
备用设备有VIP就是表示不正常
01. 真正实现主备切换
02. 出现脑裂情况了 #!/bin/bash
check_info=$(ip a|grep -c 10.0.0.3)
if [ $check_info -ne 0 ]
then
echo "keepalived server error!!!"
fi

4. 实现nginx反向代理监控虚拟IP地址

1)编写nginx反向代理配置 (两台反向代理服务器都要做如下配置)
server {
listen 10.0.0.3:80; # 在 监听的端口前加上 虚ip
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 10.0.0.3:80; # 在 监听的端口前加上 虚ip
server_name bbs.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
/application/nginx/sbin/nginx -s stop # ngxin 中只要涉及到 ip 地址的修改,都要进行真正的重启nginx(先stop 再start)
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
tcp 0 0 10.0.0.3:80 0.0.0.0:* LISTEN 53334/nginx 2)# 实现监听本地网卡上没有的IP地址
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p
# 监听网卡上没有的 ip 地址

4. 将keepalived服务和反向代理nginx服务建立联系

# 假如 keepalived 主机服务器的 nginx 挂掉了,此时的 虚ip 依然会在 keepalived主服务器中,这样用户访问就会出现问题
# 所以此时需要将 keepalived服务和 nginx 反向代理服务建立联系,即 nginx 反向代理服务挂掉的时候,keepalived服务也要自动关闭 1)编写脚本
#!/bin/bash
web_info=$(ps -ef|grep [n]ginx|wc -l)
if [ $web_info -lt 2 ]
then
/etc/init.d/keepalived stop
fi 2)运行脚本,实现监控nginx服务
# 编辑keepalived服务配置文件
vrrp_script check_web { script "/server/scripts/check_web.sh" # 定义我自己写的一个监控脚本,脚本必须有执行权限 interval 2 # 指定脚本间隔时间(s) weight 2 #脚本执行完成,让优先级值和权重值进行运算,从而实现主备切换
}
# vrrp_script 配置添加到全局配置和vrrp实例配置之间 track_script { # 调用我写的监控脚本
check_web
}
# track_script 配置要放到 vrrp实例 中 chmod +x check_web.sh --- 修改脚本可执行权限

5. 实现高可用集群架构中双主配置(互为主备配置)

# lb01 主机的 keepalived 配置文件的实例修改为如下:
vrrp_instance gorup01 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
vrrp_instance gorup02 { # 新增一个实例 gorup02
state BACKUP # 实例 group02 中lb01主机为 备
interface eth0
virtual_router_id 52 # 修改为一个新的 virtual_router_id
priority 100 # 优先级相对lb02主机中的 group02 要变小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev eth0 label eth0:1 # 添加一个新的 虚ip 10.0.0.4
}
} # lb02 主机的 keepalived 配置文件的实例修改为如下:
vrrp_instance gorup01 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
} vrrp_instance gorup02 { # 新增一个实例 gorup02
state MASTER # 实例 group02 中lb02主机为 主
interface eth0
virtual_router_id 52
priority 150 # 优先级相对lb01主机中的 group02 要变大
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev eth0 label eth0:1 # 添加一个新的 虚ip 10.0.0.4
}
} # 修改nginx反向代理监控地址信息
# lb01 主机
[root@lb01 ~]# vim /application/nginx/conf/nginx.conf server {
listen 10.0.0.3:80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
}
}
server {
listen 10.0.0.4:80; # 新增 bbs.etiantian.org 对应的 虚ip 为 10.0.0.4
server_name bbs.etiantian.org;
proxy_set_header host $host;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
} # lb02 主机
[root@lb02 ~]# vim /application/nginx/conf/nginx.conf server {
listen 10.0.0.3:80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
}
}
server {
listen 10.0.0.4:80; # 新增 bbs.etiantian.org 对应的 虚ip 为 10.0.0.4
server_name bbs.etiantian.org;
proxy_set_header host $host;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
}
}

HTTPS安全证书访问连接实践配置

1:网络安全涉及的问题:

①. 网络安全问题-数据机密性问题
传输的数据可能会被第三方随时都能看到 ②. 网络安全问题-数据完整性问题
传输的数据不能随意让任何人进行修改 ③. 网络安全问题-身份验证问题
第一次通讯时,需要确认通讯双方的身份正确

2:网络安全涉及的问题:

①. 网络安全问题-数据机密性问题解决
a) 利用普通加密算法解决机密性
利用相应算法,对传输数据(明文数据)进行加密(密文数据);再利用对应算法,将加密数据解密变为真实数据
优点:实现了数据机密传输,避免了明文传输数据的危险性。
缺点:利用加密算法,将明文改密文,如果第三方获得加密算法,即可将传输密文再次变为明文 b) 利用对称加密算法解决机密性(重要的一种加密方式)
对称加密算法就好比将普通算法的规则手册放入到了保险柜里,只有获取保险柜和保险柜钥匙才能获取《算法手册》
优点:密钥加密算法计算速度非常快;解决了普通加密算法的安全问题
缺点:加解密过程的安全性完全依赖于密钥,并且对称加密密钥是公开的,当通讯加密对象过多时,无法解决密钥管理问题。 ②. 网络安全问题-数据完整性问题解决
a) 利用单项加密算法(全网备份数据完整性)
根据数据生成特征码(数据指纹信息);接收数据方获取数据信息算出特征码,验证是否与发送过来的特征码一致
若特征码一致,表示数据完整性没被破坏;若特征码不一致,表示数据已被破坏,直接丢弃
****************************************************************************
扩展说明:
01:不同数据的特征码(数据指纹信息)是不可能一致的
单项加密算法特征
· 数据输入一样,特征码信息输出必然相同
· 雪崩效应,输入的微小改变,将造成输出的巨大改变
· 定长输出,无论源数据多大,但结果都是一样的
· 不可逆的,无法根据数据指纹,还原出原来的数据信息。
**************************************************************************** 优点:有效的解决了数据完整性问题
缺点:没有考虑中间人攻击对数据信息的影响 b) 利用单项加密算法(加密特征码)
利用对称加密算法对数据加密的同时,也对特征码进行加密;
接收方拥有和发送方一样的密钥,才可以解密加密后的数据和特征码
而中间人加密的特征码是没有办法让接收方进行解密的,所以接收方获取不了特征码,直接丢弃数据
****************************************************************************
扩展说明:
01:那么对称密钥如何有效的让通讯双方获取呢
需要进行对称密钥协商过程,即通过密钥交换机制(Internet key exchange IKE)
实现密钥交换机制的协议称为diffie-hellman协议
**************************************************************************** ③. 网络安全问题-身份验证问题解决
a)利用非对称密钥加密算法(公钥加密算法)
发送方建立私钥和公钥,将公钥发送给接收方,从而实现发送数据方的身份验证 让你的母亲验证你的爸爸身份信息,你的母亲就称为证书颁发机构
公钥信息在网站访问过程中,被称为证书(身份证) 网络安全问题结论:实现网络安全性,需要解决问题的顺序为
1. 解决身份验证问题
2. 解决数据完整性问题
3. 解决数据机密性问题

3:网络安全证书由来:

根据上述结论可知,网络安全性最首先要解决的就是身份验证问题;
而解决身份验证问题,最主要的方式就是借助私钥和公钥
而最主要的公钥信息获取就变得尤为重要;利用第三方公正者,公正公钥信息 目前标准的证书存储格式是x509,还有其他的证书格式,需要包含的内容为:
证书==身份证
? 公钥信息,以及证书过期时间
? 证书的合法拥有人信息
? 证书该如何被使用(不用关注)
? CA颁发机构信息
? CA签名的校验码

4: OpenSSL软件详细说明

# 获取OpenSSL软件的版本信息:
rpm -qa openssl
openssl version <- 查看openssl版本信息 # 获取OpenSSL配置文件信息:
/etc/pki/tls/openssl.cnf <- openssl配置文件,主要用于配置成私有ca时进行使用
# 说明:基本上openssl配置文件不需要运维过多修改配置 # 利用openssl软件实现HTTPS访问过程
# 实现HTTPS:
[root@web01 ~]# mkdir -p /server/key
[root@web01 ~]# cd /server/key/ # 生成的 key 放到该目录下 # 第一步:创建出一个私钥文件(出生证明) --- 运维人员需要会
# 方法1:
openssl genrsa 2048 >server.key <- 创建私钥信息,并指定私钥的长度为2048,并将生成的私钥信息保存在一个文件中 # 方法2:
openssl genrsa -out server.key 2048 <- 将私钥信息直接进行保存,加密长度一定要放在输出文件后面 # 方法3:
(umask 077;openssl genrsa -out server1024.key 1024) <- 利用小括号,实现子shell功能,临时修改umask,使之创建的私钥文件权限为600 # 第二步:生成证书文件信息(公钥)
# ①. 生成自签发证书 --- 运维人员可以自行操作
[root@NFS-server-01 ~]# openssl req -new -x509 -key server.key -out server.crt -days 365
req <- 用于请求创建一个证书文件
new <- 表示创建的是新的证书
x509 <- 表示定义证书的格式为标准格式
key <- 表示调用的私钥文件信息
out <- 表示输出证书文件信息
days <- 表示证书的有效期
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN <- 定义生成证书的国家
State or Province Name (full name) []:BJ <- 定义生成证书的省份
Locality Name (eg, city) [Default City]:BJ <- 定义生成证书的城市
Organization Name (eg, company) [Default Company Ltd]:oldboy <- 定义生成证书的组织
Organizational Unit Name (eg, section) []:it <- 定义生成证书的职能部门
Common Name (eg, your name or your server's hostname) []:oldboy.com.cn <- 定义主机服务器名称
说明:此输出信息非常重要,客户端在获取证书前,会利用主机名与相应服务器之间建立连接,然后获得证书
Email Address []: # ②. 向证书颁发机构申请证书 --- ca证书版本机构完成
# 生成请求证书文件 (户口本) --- 运维人员完成
openssl req -new -key server.key -out server.csr # 获取得到证书文件 (身份证) --- ca颁发机构完成
# 省略 # 第三步:配置网站服务,加载私钥和证书信息
# 修改 nignx 配置文件中的 server 为如下:
server {
listen 443; # https 的端口号为 443
server_name www.etiantian.org; ssl on; # 打开 ssl
ssl_certificate /server/key/server.crt; # 公钥路径
ssl_certificate_key /server/key/server.key; # 私钥路径 root html/www;
index index.html index.htm;
} # 要求:访问 www.etiantian.org 的 http 时,自动跳转为 https
# nginx 配置文件中的 server 修改为如下:
server { # 作用:访问 www.etiantian.org 的 http 时,自动跳转为 https
listen 80;
server_name www.etiantian.org;
rewrite ^(.*)$ https://$host$1 permanent; # ^表示 URL信息, (.*) 表示 URI 信息;$host表示 URL信息,$1表示 (.*) 中的信息(即也是URI信息); permanent 表示永久跳转
} server {
listen 443;
server_name www.etiantian.org; ssl on;
ssl_certificate /server/key/server.crt;
ssl_certificate_key /server/key/server.key; root html/www;
index index.html index.htm;
} [root@web01 conf]# netstat -lntup|grep [n]ginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3401/nginx
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3401/nginx

iptables防火墙网路安全实践配置

1. iptables防火墙网路安全前言介绍

学好iptables的基础:
OSI7层模型以及不同层对应哪些协议?
TCP/IP三次握手,四次断开的过程,TCP HEADER,状态转换
常用的服务端口要非常清楚了解。
常用服务协议原理http协议,icmp协议。 企业中安全配置原则:
尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射。
并发不是特别大情况有外网IP,可以开启防火墙服务。
大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。

2. iptables防火墙概念介绍

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤
的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。 iptables是linux2.4及2.6内核中集成的服务。
iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制

3. iptables防火墙使用时名词概念理解

容器:装东西的器皿,docker容器技术,将镜像装在了一个系统中,这个系统就称为容器
iptables称为一个容器---装着防火墙的表
防火墙的表又是一个容器---装着防火墙的链
防火墙的链也是一个容器---装着防火墙的规则
iptables---表---链---规则 # 规则:防火墙一条一条安全策略
1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,
向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
4. 防火墙的默认规则是所有规则执行完才执行的。 # 表和链说明:4表5链
Filter: 实现防火墙安全过滤功能
· INPUT 对于指定到本地套接字的包,即到达本地防火墙服务器的数据包 外面---->(门)房子iptables
· FORWARD 路由穿过的数据包,即经过本地防火墙服务器的数据包 外面-----(前门)房子(后门)---房子
· OUTPUT 本地创建的数据包 外面<-----(门)房子iptables NAT: 实现将数据包中IP地址或者端口信息,内网到外网进行改写/外网到内网进行改写
· PREROUTING 一进来就对数据包进行改变 在路由之前,进行数据包IP地址或端口信息的转换
· OUTPUT 本地创建的数据包在路由之前进行改变 本地防火墙要出去的流量进行相应转换(了解)
· POSTROUTING 在数据包即将出去时改变数据包信息 在路由之后,进行数据包IP地址或端口信息的转换 Managle 对数据进行标记 raw 忽略不计

4. iptables防火墙操作实践练习

# 1)iptables防火墙配置初始化
/etc/init.d/iptables start
chkconfig iptables on
iptables -F --- 清除防火墙默认规则
iptables -X --- 清除防火墙自定义链
iptables -Z --- 清除防火墙技术器信息 # 2)iptables防护墙信息查看方法
/etc/init.d/iptables status
iptables -L --- -L 以列表形式显示所有规则信息
iptables -L -n --- -n 以数字形式显示IP地址或端口信息,不要转换为字符串显示
iptables -t nat -L -n --- -t 表示指定查看或者配置相应的表
iptables -L -n -v --- -v 表示显示详细规则信息,包含匹配计数器数值信息
iptables -L -n --line-number --- --line-number 显示规则序号信息 # 3)iptables防火墙端口规则配置:
# 实践01:阻止用户访问服务器的22端口
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP --- -A 表示添加规则到相应链上,默认表示添加规则到结尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP --- -D 表示删除规则从相应链上。
iptables -t filter -D INPUT 规则序号
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP --- -I 表示插入规则到相应链上,默认表示插入规则到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定规则插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP --- -R 指定将配置好的规则信息进行替换 # 总结防火墙参数信息:
-A --- 表示将规则添加到指定链上
-I --- 表示将规则插入到指定链上
-D --- 表示将规则从指定链上删除
-R --- 表示将规则信息进行修改
-p --- 指定相应服务协议信息(tcp udp icmp all)
--dport --- 表示指定目标端口信息
--sport --- 表示指定源端口号信息
-j --- 指定对相应匹配规则执行什么操作(ACCEPT DROP* REJECT) # 实践02:阻止相应网段主机访问服务端指定端口服务
10.0.0.0/24 -- 22端口(阻止)
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP # 总结参数信息:
-s --- 指定匹配的源地址网段信息,或者匹配的主机信息
-d --- 指定匹配的目标地址网段信息,或者匹配的主机信息
-i --- 指定匹配的进入流量接口信息 只能配置在INPUT链上
-o --- 指定匹配的发出流量接口信息 只能配置在OUTPUT链上 # 实践03:除了某个地址可以访问22端口之外,其余地址都不能访问
10.0.0.1 ~ 10.0.0.253 中 , 10.0.0.9(只允许)
# 方式1:
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP # 方式2:
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j DROP
通过利用 !进行规则取反,进行策略控制 实践04:指定阻止访问多个端口服务
22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP --- 匹配连续的端口号访问
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP --- 匹配不连续的端口号访问 总结参数信息:
-m --- 指定应用扩展模块参数
multiport --- 可以匹配多个不连续端口信息 # 实践05: 通过防火墙实现禁ping功能
# 实现ping功能测试链路是否正常,基于icmp协议实现的
# icmp协议有多种类型:
# icmp-type 8:请求类型 icmp-type 0:回复类型 # 情况一:实现禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP # ping 的请求禁止输入
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP # ping 的响应禁止输出 # 情况二:实现禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP # ping 的请求禁止输出
iptables -A INPUT -p icmp --icmp-type 0 -j DROP # ping 的响应禁止输入 # 默认情况:所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP # 实践06:实现防火墙状态机制控制
NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的 iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

5. 企业当中应用防火墙方法

# 项目:部署一个最安全的企业级防火墙(案例)
# 两种思想:针对默认规则而言。
# 逛公园:黑名单
# 1、默认规则默认是允许的状态。
# 看电影:白名单(更安全,推荐配置)
# 2、默认规则默认是不允许的状态。更安全。
# 看电影的思想更安全。 # 1)保存防火墙配置文件信息
cp /etc/sysconfig/iptables{,.bak} # 2)清除配置规则
iptables -F <- 清空iptables所有规则信息(清除filter)
iptables -X <- 清空iptables自定义链配置(清除filter)
iptables -Z <- 清空iptables计数器信息(清除filter) # 3)别把自己踢出到门外
iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT # 4)配置防火墙filter上各个链的默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT -P --- 指定相应链的默认规则策略,是允许还是阻止 # 5)允许iptables服务端ping自己的网卡地址
iptables -A INPUT -i lo -j ACCEPT --- 让自己可以ping自己 # 6)指定外网可以访问的端口信息
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT # 7)企业中内网之间不要配置防火墙策略
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT --- 允许架构内部服务进行访问 # 8)企业之间有合作关系的,不要将友商的网络禁止(主要经常改动)
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT --- 允许一些合作企业的外网服务器进行访问
iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT # 9)如果防火墙上配置了FTP服务,需要配置网络状态机制
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT --- 允许web服务与ftp服务器建立连接 # 10)实现iptables策略配置永久保存
# ①. 利用防火墙启动脚本命令参数,实现永久保存
/etc/init.d/iptables save # ②. 利用防火墙配置信息保存命令,实现永久保存
iptables-save >/etc/sysconfig/iptables # 实例拓展:避免自己被踢出门外
01. 去机房重启系统或者登陆服务器删除刚才的禁止规则。
02. 让机房人员重启服务器或者让机房人员拿用户密码登录进去
03. 通过服务器的远程管理卡管理(推荐)
04. 先写一个定时任务,每5分钟就停止防火墙
05. 测试环境测试好,写成脚本,批量执行 # 以上内容为防火墙filter表的配置实践与原理说明

6. 防火墙nat表的配置实践

iptables NAT:(配置NAT表示就是配置以下两个链)
01. postrouting(内网---外网-NAT 源私网IP地址---源公网IP地址)
路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址)
02. prerouting(外网---内网-NAT 目标公网IP地址---目标私网IP地址 映射目标端口)
路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址) # 实践一:iptables实现共享上网方法(postrouting)
# 第一步:配置内网服务器,设置网关地址
[root@web02 ~]# /etc/init.d/iptables stop # --- 内网服务器停止防火墙服务
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@web02 ~]# ifdown eth0 # --- 模拟关闭内网服务器外网网卡
[root@web02 ~]# setup # --- 修改内网网卡网关和DNS地址信息
[root@web02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 172.16.1.7 0.0.0.0 UG 0 0 0 eth1
# 说明:内网服务器网关地址指定为共享上网服务器内网网卡地址(172.16.1.7) # 第二步:配置共享上网服务器,开启共享上网服务器路由转发功能
[root@web01 ~]# vim /etc/sysctl.conf
[root@web01 ~]# sysctl -p
net.ipv4.ip_forward = 1 # 第三步:配置共享上网服务器,实现内网访问外网的NAT映射
[root@web01 ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7 -s 172.16.1.0/24 --- 指定将哪些内网网段进行映射转换
-o eth0 --- 指定在共享上网哪个网卡接口上做NAT地址转换
-j SNAT --- 将源地址进行转换变更
-j DNAT --- 将目标地址进行转换变更
--to-source ip地址 --- 将源地址映射为什么IP地址
--to-destination ip地址 --- 将目标地址映射为什么IP地址 # 扩展如果开启:forward默认drop策略,配置forward链如下(172.16.1.7 主机)
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT # 网络数据包传输过程一定是有去有回的 # 实践二:iptables实现共享上网方法(postrouting)
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 伪装共享上网
# 说明:在企业中如何没有固定外网IP地址,可以采取以上伪装映射的方式进行共享上网 # 总结:配置映射方法
01. 指定哪些网段需要进行映射 -s 172.16.1.0/24
02. 指定在哪做映射 -o eth0
03. 用什么方法做映射 -j SNAT/DNAT
04. 映射成什么地址 --to-source ip地址/--to-destination ip地址 # 实践三:iptables实现外网IP的端口映射到内网IP的端口
# 需求:将网关的IP和9000端口映射到内网服务器的22端口
# 端口映射 10.0.0.7:9000 -->172.16.1.8:22
# 实现命令:
iptables -t nat -A PREROUTING -d 10.0.0.7 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22 # -d 10.0.0.8目标地址。
# -j DNAT 目的地址改写。

Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙的相关教程结束。

《Linux(13):期中架构(5)--- 前端部分:keepalived高可用 & HTTPS & iptables防火墙.doc》

下载本文的Word格式文档,以方便收藏与打印。