iptables 与 firewalld 防火墙

发布于2020-08-28   657 次阅读


本文最后更新于2022年6月1日,已超过 1 年没更新!内容可能已失效,请自行测试。

防火墙管理工具

在 RHEL 7 系统中,firewalld 防火墙取代了 iptables 防火墙.

iptables与 firewalld 都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已

  • iptables服务把配置好的防火墙策略交由内核层面的 netfilter 网络过滤器来处理
  • firewalld服务是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理

iptables

早期的 Linux 系统中,默认使用的是 iptables 防火墙管理服务来配置防火墙

策略与规则链

防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)

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

  • 在进行路由选择前处理数据包(PREROUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在进行路由选择后处理数据包(POSTROUTING)

iptables中基本的命令参数

参数作用
-P设置默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d匹配目标地址
-i网卡名称匹配从这块网卡流入的数据
-o网卡名称匹配从这块网卡流出的数据
-p匹配协议,如TCP、UDP、ICMP
--dport num匹配目标端口号
--sport num匹配来源端口号
iptables中常用的参数以及作用
查看已有的防火墙规则链
iptables -L 
清空已有的防火墙规则链
iptables -F 
把 INPUT 规则链的默认策略设置为拒绝
iptables -P INPUT DROP
向 INPUT 链中添加允许 ICMP 流量进入的策略规则
 iptables -I INPUT -p icmp -j ACCEPT 
删除 INPUT规则链中允许 ICMP流量的规则
iptables -D INPUT 1 
将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j  ACCEPT
向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略规则
iptables -I INPUT -p tcp --dport 12345 -j REJECT 
iptables -I INPUT -p udp --dport 12345 -j REJECT 
向 INPUT 规则链中添加拒绝 192.168.10.5 主机访问本机 80 端口的策略规则
iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
向 INPUT 规则链中添加拒绝所有主机访问本机 1000~1024 端口的策略规则
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp--dport 1000:1024 -j REJECT
如果想让配置的防火墙策略永久生效,执行保存命令
service iptables save

firewalld

终端管理工具

用 firewall-cmd 命令设置防火墙策略时添加--permanent参数就可以永久生效

想让配置的策略立即生效 需要手动执行

firewall-cmd --reload
查看 firewalld 服务当前所使用的区域
firewall-cmd --get-default-zone
查询 ifcfg-ens32网卡在 firewalld 服务中的区域
firewall-cmd --get-zone-of-interface=ifcfg-ens32

服务的访问控制列表

TCP Wrappers服务的防火墙策略由两个控制列表文件所控制, 用户可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量.控制列表文件修改后会立即生效,系统将会先检查允许控制列表文件(/etc/hosts.allow),如果匹配到相应的允许策略则放行流量;如果没有匹配,则去进一步匹配拒绝控制列表文件(/etc/hosts.deny) ,若找到匹配项则拒绝该流量.如果这两个文件全都没有匹配到,则默认放行流量

编写拒绝策略规则文件,禁止访问本机 sshd 服务的所有流量

vim /etc/hosts.deny
# 
# hosts.deny This file contains access rules which are used to 
# deny connections to network services that either use 
# the tcp_wrappers library or that have been 
# started through a tcp_wrappers-enabled xinetd. 
# 
# The rules in this file can also be set up in 
# /etc/hosts.allow with a 'deny' option instead. 
# 
# See 'man 5 hosts_options' and 'man 5 hosts_access' 
# for information on rule syntax. 
# See 'man tcpd' for information on tcp_wrappers 
sshd:*

在允许策略规则文件中添加一条规则,使其放行源自 192.168.10.0/24 网段,访问本机 sshd服务的所有流量

vim /etc/hosts.allow
# 
# hosts.allow This file contains access rules which are used to 
# allow or deny connections to network services that 
# either use the tcp_wrappers library or that have been 
# started through a tcp_wrappers-enabled xinetd. 
# 
# See 'man 5 hosts_options' and 'man 5 hosts_access' 
# for information on rule syntax. 
# See 'man tcpd' for information on tcp_wrappers 
sshd:192.168.10. 
  • 在 RHEL 7 系统中,iptables 是否已经被 firewalld 服务彻底取代?
    • iptables 和 firewalld 服务均可用于 RHEL 7 系统
  • 简述防火墙策略规则中 DROP 和 REJECT 的不同之处
    • DROP的动作是丢包,不响应;REJECT 是拒绝请求,同时向发送方回送拒绝信息
  • 如何把 iptables 服务的 INPUT 规则链默认策略设置为 DROP?
    • iptables -P INPUT DROP
  • 编写一条防火墙策略规则,禁止源自 192.168.10.0/24 网段的流量访问本机的 sshd 服务(22 端口)
    • iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j REJECT
  • firewalld 中区域的作用
    • 可以依据不同的工作场景来调用不同的 firewalld区域,实现大量防火墙策略规则的快速切换
  • 如何在 firewalld 中把默认的区域设置为 dmz?
    • firewall-cmd --set-default-zone=dmz

=

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。