firewalld防火墙简介
firewalld防火墙一种动态防火墙,是一款典型的包过滤防火墙,也就是网络层防火墙,同时支持IPV6与IPV4地址,通过命令字符firewall-cmd来管理,firewalld默认存在多个区域,帮助我们管理我们的数据流量。
为什么说firewalld是一种动态防火墙了?
为了更好的理解什么是动态防火墙,我们需要拿iptables(静态防火墙)和firewalld(动态防火墙)做一个对比。就iptables而言,用户新添加完防火墙策略后,需要重载后才能生效,在这个过程中iptables service首先会对旧的防火墙策略进行清空,然后重新完整的加载所有的新的防火墙规则;但对firewalld防火墙而言,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可。
提示: iptables和firewalld不是相对独立的,两者之间存在一定的联系, firewalld 提供了一个 daemon 和 service,还有命令行和图形界面配置工具,它仅仅是替代了 iptables service 部分,其底层还是使用 iptables 作为防火墙规则管理入口。
为了更直观的看到两者之间的关系整张图看看
如果想了解更多有关firewalld的知识,可参考https://firewalld.org/documentation/
firewalld默认区域
区域 | 默认配置说明 |
---|---|
trusted | 允许所有流量的传入 |
home | 允许与某些预定义服务相关的服务传入,其余拒绝 |
internal | 默认值时与home相同 |
work | 允许ssh与与定义的服务匹配的流量传入 |
public | 新添加网络接口的默认区域 |
external | 默认将此区域转发的地址进行伪装 |
dmz | 允许ssh与预定义匹配的流量传入 |
block | 拒绝所有流量传入 |
drop | 丢弃所有流量 |
firewalld的基本使用
命令语法:firewall-cmd [--zone=zone] 动作 [--permanent]
注: 如果不指定–zone选项,则为当前所在的默认区域,–permanent选项为是否将改动写入到区域配置文件中,所有没有--permanent
选项的配置均是临时配置,重启服务后失效。
firewall的状态
以下所有命令均以firewall-cmd
开头
--state #查看防火墙的状态
--reload #重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
--complete-reload #重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
--panic-on #紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式
动作中查看操作
以下所有命令均以firewall-cmd
开头
--get-icmptypes #查看支持的所有ICMP类型
--get-zones #查看所有区域
--get-default-zone #查看当前的默认区域
--get-active-zones #查看当前正在使用的区域
--get-services #查看当前区域支持的服务
--list-services #查看当前区域开放的服务列表
--list-all #查看此区域内的所有配置,类似与iptables -L -n
更改区域操作
以下所有命令均以firewall-cmd
开头
--set-default-zone=dmz #更改默认的区域
新建--add或删除--remove规则:
--add-interface=eth0 #将网络接口添加到默认的区域内
--add-port=12222/tcp --permanent #添加端口到区域开放列表中
--add-port=5000-10000/tcp --permanent #将端口范围添加到开放列表中;
--add-service=ftp --permanent #添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)
--add-source=192.168.1.1 #添加源地址的流量到指定区域
--remove-source=192.168.1.1 #删除源地址的流量到指定区域
--change-interface=eth1 #改变指定的接口到其他区域
--remove-service=http #在home区域内将http服务删除在开放列表中删除
--add-masquerade #开启SNAT(源地址转换)
--query-masquerade #查询SNAT的状态
--remove-interface=eth0 #将网络接口在默认的区域内删除
--query-interface=eth0 #确定该网卡接口是否存在于此区域
--add-forward-port=port=12345:proto=tcp:toport=22:toaddr=192.168.1.10 #端口转发
Rich规则
Rich规则简介
当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则:
.rich-rules 富规则,功能强,表达性语言,查看帮助:man 5 firewalld.richlanguage
.rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发,伪装和限制速率
rich规则实施顺序有以下四点:
- 该区域的端口转发,伪造规则
- 该区域的日志规则
- 该区域的允许规则
- 该区域的拒绝规则
说明: 每个匹配的规则都生效,所有规则都不匹配,该区域默认规则生效。
Rich规则语法
Rich规则选项:
以下所有命令均以firewall-cmd
开头
--add-rich-rule=’rule’ #新建rich规则
--remove-rich-rule=’rule’ #删除rich规则
--query-rich-rule=’rule’ #查看单条rich规则
--list-rich-rules #查看rich规则列表
Rich规则示例:
#拒绝从192.168.1.10的所有流量
firewall-cmd --permanent --zone=cla***oom --add-rich-rule=‘rule family=ipv4 source address=192.168.1.10/32 reject‘
#限制每分钟只有两个连接到ftp服务
firewall-cmd --add-rich-rule=’rule service name=ftp limitvalue=2/m accept’
#抛弃esp协议的所有数据包
firewall-cmd --permanent --add-rich-rule=‘rule protocol value=esp drop‘
#接受所有192.168.1.0/24子网端口范置7900-7905的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule=‘rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept‘
##开启SNAT
firewall-cmd --permanent --add-rich-rule=‘rule family=ipv4 source address=192.168.1.0/24 masquerade‘
##使用rule规则实现端口转发,to-addr选项如果不指定默认转发到本机
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.10'
以上是关于firewalld的基本操作命令,如果想结合具体的实验案例来熟悉firewalld,可参考https://blog.csdn.net/weixin_42342456/article/details/86518814