防火墙
防火墙种类
软件防火墙:软件技术实现对数据包的过滤(iptables Firewall)
硬件防火墙:使用硬件设备对数据包过滤
使用软件防火墙Iptables/Firewall与linux操作系统内核中的netfilter系统内核模块交互,实现数据包的过滤
防火墙的类型
主机型防火墙:保护自己本机应用
网络型防火墙:保护其他服务器甚至服务器集群的应用安全
Firewall防火墙工具
四个区域
public(默认区域)
默认区域,仅允许部分服务通过
trusted
无条件信任区域
block
明确拒绝,并返回报文
drop
拒绝,直接丢弃,不返回报文
Iptables的四表五链
iptables的四表
①Filter表
iptables的默认表,用于对数据包过滤
包含三链:INPUT OUTPUT FORWARD
INPUT:入站链,配置入站规则(允许和拒绝)
OUTPUT:出站链,配置出站规则
FORWARD:流量转发链(防火墙把外部流量转发到集群内)
②NAT表
网络地址转换,包括源(SNAT)目的(DNAT)的地址转换和端口映射
包含三链:PREROUTING POSTROUTING OUTPUT
PREROUTING:客户端目标地址转换链。在容器中使用较多,把客户端的请求发送到主机上的对应端口,再通过主机端口与容器内部端口映射转发到容器内部
POSTROUTING:公司内部网络访问互联网时使用到的链,一般使用NAT转换,把私网地址转换成公网达到外部通信的效果,外部公网访问内部网络也通过NAT转换,把公网地址转换成企业内部的一个私网地址以后实现网络通信
③Mangle表
修改经过的数据包标志位,调整TTL值,设置Qos服务质量等,进行策略路由(选择使用网卡来进行数据的收发)等
包含五链:PREROUTING FORWARD POSTROUTING INPUT
④Raw表
配置数据包的早期处理,防止数据包洪水攻击,状态跟踪表,用于跟踪数据包
两条链:OUTPUT PREROUTING
iptables的五链
- INPUT:
- 用于处理进入本机的数据包。
- OUTPUT:
- 用于处理从本机发出的数据包。
- FORWARD:
- 用于处理经过本机但目的地不是本机的数据包(路由功能)。
- PREROUTING:
- 在NAT表中,用于处理到达本机、在路由决策之前的数据包。
- POSTROUTING:
- 在NAT表中,用于处理从本机发出、在发送到网络之前的数据包。
Iptables命令
格式
iptables [-t 表名] [-A/-I添加方式]链名[-p协议] [-s,-d源和目标地址] [--sport --dport源目标端口] [-j操作]
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
选项
-t table(表名) #不指定,默认为filter表
-A/-I 追加到表尾和插入到表头 #有上到下优先匹配,匹配到就停止
-p 协议 tcp/udp
查看Iptables列表
iptables -L #以文字形式显示
iptables -nL #以数字形式显示
准备两台主机
ip地址 | 主机名 |
---|---|
192.168.113.254 | docker |
192.168.113.253 | ansible |
[root@docker ~]# ping -c3 192.168.113.253
PING 192.168.113.253 (192.168.113.253) 56(84) bytes of data.
64 bytes from 192.168.113.253: icmp_seq=1 ttl=64 time=0.299 ms
64 bytes from 192.168.113.253: icmp_seq=2 ttl=64 time=0.239 ms
64 bytes from 192.168.113.253: icmp_seq=3 ttl=64 time=0.209 ms
修改Iptables规则,使得两台主机无法通信
首先安装iptables
yum install -y iptables-services.x86_64
启动iptables服务
systemctl start iptables.service
在ansible主机(253)上修改Iptables入站规则,拒绝接收docker(254)的icmp报文
iptables -t filter -I INPUT -p icmp -s 192.168.113.254 -d 192.168.113.253 -j REJECT
检查
[root@ansible ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT 1 -- 192.168.113.254 192.168.113.253 reject-with icmp-port-unreachable
再次ping主机(253)发现无法ping通
[root@docker ~]# ping -c3 192.168.113.253
PING 192.168.113.253 (192.168.113.253) 56(84) bytes of data.
From 192.168.113.253 icmp_seq=1 Destination Port Unreachable
From 192.168.113.253 icmp_seq=2 Destination Port Unreachable
From 192.168.113.253 icmp_seq=3 Destination Port Unreachable
删除规则
先查看规则在第几行
[root@ansible ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT 1 -- 192.168.113.254 192.168.113.253 reject-with icmp-port-unreachable
删除第一条规则
[root@ansible ~]# iptables -t filter -D INPUT 1
[root@ansible ~]# iptables -nL --line-number
清空所有规则
iptables -t filter -F
修改Iptables默认规则
#先添加一下22端口放行,以免远程连接断开
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -P INPUT DROP
检查(发现默认策略已经变为DROP状态)
[root@docker ~]# iptables -t filter -nL
Chain INPUT (policy DROP)