RHEL 7中的防火墙(1) ---- iptables

时间:2024-05-31 13:44:59

RHEL7系统中存在两种类型的防火墙: iptables和firewalld,严格意义上讲,iptables和firewalld都不是真正的防火墙,它们只是用来定义防火墙策略的管理工具而已。

iptables会把配置好的防火墙策略交给内核层面的 netfilter 处理;firewalld把配置好的防火墙策略交给内核层层面的nftables包过滤框架处理。

防火墙以从上向下的顺序来读取配置的策略规则,在找到匹配项后立即结束匹配工作病区执行匹配项中定义的行为(放行或阻止)。若在读取所有策略规则后没有匹配项,就执行默认策略。

iptables服务把用于处理过滤流量的策略称之为规则,多条规则组成了一个规则链,规则链按照数据包处理位置的不同进行分类,可分为:

  • 数据路由前处理数据包 — PREROUTING
  • 数据流入时处理 — INPUT
  • 数据流出时处理 — OUTPUT
  • 输出转法时处理 — FORWARD
  • 数据路由后处理 — POSTROUTING

通常从内网向外网发送的数据都是良性的,通常需要处理的是从外网流向内网的数据,也就是INPUT规则链。iptables对不同数据的处理动作有:

  • ACCEPT — 允许流量通过
  • REJECT — 拒绝流量通过,且回复流量发送方被拒绝
  • LOG — 记录日志信息
  • DROP — 直接将流量丢弃,不响应发送方

iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功就会根据策略规则所预设的动作来处理这些流量,以下是常见的参数:

参数 作用
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 将规则加入规则链末尾
-I 将规则插入规则链头部
-s 匹配源地址,加"!"表示除这个ip外
-d 匹配目的地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp、udp、icmp
-j 指定该条规则的行为,有ACCEPT、REJECT、LOG、REJECT
–dport 匹配目标端口号
–sport 匹配源端口号

查看已有防火墙规则 iptables -L
RHEL 7中的防火墙(1) ---- iptables
其中的policy ACCEPT表示默认动作是放行, target是对具体规则的动作,prot是协议,source是源地址,destination是目的地址

清空已有防火墙规则 iptables -F
RHEL 7中的防火墙(1) ---- iptables

设置指定规则链的默认动作 iptables -P 规则链名称 ACCEPT/REJECT/LOG/DROP
RHEL 7中的防火墙(1) ---- iptables
以上把INPUT规则链设置为drop后,xshell就无法连接到该目标linux主机了,此时ping该台主机也直接timed out
RHEL 7中的防火墙(1) ---- iptables
需要注意的是规则链的默认拒绝动作只能是DROP,而不能是REJECT。

在平常工作中,经常使用ping来检查目的主机是否在线,可以向防火墙的INPUT规则链中添加一条允许ICMP流量进入的规则,允许ping命令检测行为

向规则链中插入规则: iptables -I 规则链名 规则
(以下命令在linux主机上执行)
RHEL 7中的防火墙(1) ---- iptables
然后在ping该台主机就可以ping通了
RHEL 7中的防火墙(1) ---- iptables

删除规则链中指定的规则 iptables -D 规则链名 规则索引(从1开始)
RHEL 7中的防火墙(1) ---- iptables
把INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量:
RHEL 7中的防火墙(1) ---- iptables
注意第一条规则使用选项 -I 将其插入到规则链头部,第二条规则使用 -A 将其添加到规则链尾部,这是因为防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有流量都将被拒绝

向INPUT规则链中添加拒绝所有人访问主机18001端口的规则:
RHEL 7中的防火墙(1) ---- iptables
向INPUT规则链中添加拒绝192.168.56.104主机访问本机80端口(通常为web服务)的规则:
RHEL 7中的防火墙(1) ---- iptables
向INPUT规则链中添加拒绝所有主机访问本机 1000~1024端口的规则:
RHEL 7中的防火墙(1) ---- iptables

需要注意的是,使用iptables命令配置的防火墙规则默认在系统重启后失效,若想要防火墙策略永久生效,需要执行命令 service iptables save