1.火墙介绍
1.1 netfilter
- netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
1.2 iptables
-
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
-
iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的,是用来填写netfilter的工具。
netfilter/iptables 的最大优点是它可以配置有状态的防火墙。
1.3 iptables&firewalld
-
iptables的防火墙策略是
交由内核层面的netfilter网络过滤器来处理
的,而firewalld则是交由内核层面的nftables包过滤框架来处理
。 -
相较于iptables防火墙而言,
firewalld支持动态更新技术并加入了区域(zone)的概念
,即不同的防火墙策略集合,用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
2.火墙管理工具切换
2.1 iptables -------> fiewalld的切换
systemctl disable --now iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
2.2 firewalld----->iptables的切换
systemct disable --now firewalld
即刻开机不启动firewalld
systemctl mask firewalld
冻结firewalld使不被其他程序打开
firewall-cmd --state
查看firewalld状态
dnf install iptables-services -y
安装iptables
systemctl enable --now iptables
启动iptables并设定开机启动
systemctl status iptables.service
查看iptables状态
3. iptables 的使用
3.1 iptables策略记录文件
/etc/sysconfig/iptables
#iptables策略记录文件
iptables -nL
#与iptables策略记录文件一致
3.2 永久保存策略
二选一:
iptales-save > /etc/sysconfig/iptables
读取火墙策略信息并导入iptables策略记录文件service iptables save
保存策略信息
4.火墙默认策略
4.1 默认的3张表
表 | 介绍 | 链 |
---|---|---|
filter | 经过本机内核的数据 | (input、output 、forward) |
nat | 不经过内核的数据 | (postrouting、prerouting、input、output) |
mangle | 当filter和nat表不够用时使用 | (input 、output 、forward 、postrouting、 prerouting |
iptables -t filter -L
iptables -t nat -L
iptables -t mangle -L
4.2 默认策略中的5条链
链 | 解释 |
---|---|
input | 输入 |
output | 输出 |
forward | 转发 |
postrouting | 路由之后 |
prerouting | 路由之前 |
4.3 iptables命令
iptables的命令 | 用途 |
---|---|
-t | 指定表名称 |
-n | 不做解析(显示主机IP) |
-L | 查看 |
-A | 添加策略 |
-D | 删除策略 |
-p | 协议 |
- -dport | 目的地端口 |
-s | 来源 |
-j | 动作 |
-j ACCEPT | 允许 |
-j DROP | 丢弃(无回应) |
-j REJECT | 拒绝(有回应) |
-j SNAT | 源地址转换 |
-j DNAT | 目的地地址转换 |
-N | 新建链 |
-E | 更改链名称 |
-X | 删除链 |
-D | 删除规则 |
-I | 插入规则 |
-R | 更改规则 |
-P | 更改默认规则 |
4.3.1 查看表信息
iptables -L 默认查看
iptables -nL 不做地址解析
iptables -t filter -nL -t指定表,-n不做地址解析,-L查看
4.3.2 策略读取规则
注意:火墙中的策略读取是 从上到下的读取方式,当所读取到的策略和当前的资源达到的匹配的程度,就执行当前的策略,不会读取后续的策略了。
iptables -F
iptables -nL
iptables -A INPUT -j REJECT
[westos@westos_student28 ~]$ ssh root@172.25.254.128
ssh: connect to host 172.25.254.128 port 22: Connection refused
[westos@westos_student28 ~]$ ping 172.25.254.128
PING 172.25.254.128 (172.25.254.128) 56(84) bytes of data.
From 172.25.254.128 icmp_seq=1 Destination Port Unreachable
不可以ping通和连接
iptables -D INPUT 1
[westos@westos_student28 ~]$ ping 172.25.254.128
PING 172.25.254.128 (172.25.254.128) 56(84) bytes of data.
64 bytes from 172.25.254.128: icmp_seq=1 ttl=64 time=0.184 ms
[westos@westos_student28 ~]$ ssh root@172.25.254.128
root@172.25.254.128's password:
可以ping通和连接
iptables -A INPUT -j DROP
[westos@westos_student28 ~]$ ping 172.25.254.128
PING 172.25.254.128 (172.25.254.128) 56(84) bytes of data.
^C 卡在连接页面,没有回应
iptables -D INPUT 1
iptables -A INPUT -j REJECT
iptables -A INPUT -s 172.25.254.28 -j ACCEPT
访问被拒绝,火墙中的策略读取是由上到下,当所读取到的策略和当前的资源达到匹配的程度,就执行当前的策略,不往后读取。
iptables -D INPUT 2
iptables -I INPUT 1 -s 172.25.254.28 -j ACCEPT
访问被允许,通信成功。
4.3.3 只允许指定IP访问SSH(指定服务)
iptables -F
iptables -A INPUT -s 172.25.254.28 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT
只可以访问ssh,无法ping通:
[root@westos_student28 ~]# ping 172.25.254.128
PING 172.25.254.128 (172.25.254.128) 56(84) bytes of data.
From 172.25.254.128 icmp_seq=1 Destination Port Unreachable`
4.3.4 -R 更改策略
iptables -R INPUT 1 -s 172.25.254.28 -p tcp --dport 80 -j ACCEPT
[root@node111 Desktop]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- node111 anywhere tcp dpt:ssh
------>更改为
ACCEPT tcp -- 172.25.254.28 anywhere tcp dpt:http
4.3.5 -R更改默认策略
注意:默认策略是ACCEPT,如果想要更改可以使用-P,但注意**-P后面不能指定为REJECT**,只能跟ACCEPT或者DROP。
[root@node111 Desktop]# iptables -D INPUT 2
[root@node111 Desktop]# iptables -D INPUT 1
[root@node111 Desktop]# iptables -P INPUT DROP
[root@node111 Desktop]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
4.3.6 对链的控制
iptables -N westos 新建链
iptables -E westos MMYXY 更改链名称
iptables -X MMYXY 删除链
4.4 数据包状态
-
1.数据包的状态转变:为了解决掉在传输数据包时由于火墙读取策略导致的延迟问题,转换数据包的状态可以使已经检测过的数据包再次传输时直接通过火墙策略而不必等候火墙策略的读取。
-
2.数据包的三种状态:
状态 | 含义 |
---|---|
RELATED | 建立过连接的 |
ESTABLISHED | 正在连接的 |
NEW | 新的 |
- 3.在添加火墙策略时写入数据包的状态:
iptables -F
(1)设定建立过连接和正在建立连接的数据包的火墙策略为允许:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
(2)设定本机的回环接口允许新的数据包:
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
(3)对于新的指定服务的数据包添加火墙策略设定为允许:
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
(4)添加火墙策略,设定除指定IP的所有主机都可以进行的服务:
iptables -A INPUT -m state --state NEW ! -s 172.25.264.28 -p tcp --dport 22 -j ACCEPT
(!代表非)
(5)对于剩余其他新的数据包添加火墙策略设定为拒绝:
iptables -A INPUT -m state --state NEW -j REJECT
(5)永久保存火墙策略
service iptables save
实验:
[root@node111 Desktop]# iptables -F
[root@node111 Desktop]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@node111 Desktop]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
[root@node111 Desktop]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
[root@node111 Desktop]# iptables -A INPUT -m state --state NEW ! -s 172.25.254.28 -p tcp --dport 22 -j ACCEPT
[root@node111 Desktop]# iptables -A INPUT -m state --state NEW -j REJECT
[root@node111 Desktop]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
测试:
28不可以
[root@westos_student28 ~]# ping 172.25.254.128
PING 172.25.254.128 (172.25.254.128) 56(84) bytes of data.
From 172.25.254.128 icmp_seq=1 Destination Port Unreachable
[root@westos_student28 ~]# ssh [email protected]
ssh: connect to host 172.25.254.128 port 22: Connection refused
除指定IP的主机,可以进行ssh连接
4.5 NAT表中的SNAT和DNAT
实验环境:
双网卡主机:172.25.254.228和1.1.1.228
单网卡主机1:1.1.1.128 相当于内网主机
单网卡主机2:172.25.254.128 相当于外网主机
4.5.1 SNAT:在路由之后做的源地址转换
实验目的:
可以让单网卡主机连接到不同网段的主机 ,使1(内网)- - ->172(外网)
双网卡主机:node222
enp1s0 inet 172.25.254.228
enp7s0 inet 1.1.1.228
路由转换功能开启:
[root@node222 network-scripts]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
iptables -t nat -A POSTROUTING -o enp1s0 -j SNAT --to-source 172.25.254.228
#iptables -t nat -A PREROUTING -i enp1s0 -j DNAT --to-dest 1.1.1.228
[root@node222 ~]# iptables -nL 空
[root@node222 ~]# iptables -t nat -L
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- anywhere anywhere to:172.25.254.228
[root@node222 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@node222 ~]# systemctl restart iptables.service
单网卡主机1:1.1.1.128
ifconfig : 1.1.1.128
route -n : 1.1.1.228
单网卡主机2: 172.25.254.28
问题:
双网卡主机可以ping通单网卡主机2
单网卡主机1可以ping同双网卡主机,ping单网卡主机2不行
测试:
1.1.1.228可以ping通172.25.254.228,也可以ssh上