firewalld
firewalld介绍
firewalld是一个可以配置和监控系统防火墙规则的守护进程。涵盖了iptables, ip6tables和ebtables的设置。
firewalld特点
- 实现了动态防火墙功能
- 可以通过DBus消息系统与 firewalld通信,以请求打开网络端口从而动态管理防火墙规则
- 使用XML文件存储防火墙规则,实现配置持久化。
firewalld安装
一般安装完CentOS7 Linux系统以后,默认自带firewalld防火墙服务。如果没有,请执行以下命令安装:
# yum -y install firewalld
# systemctl start firewalld
# systemctl enable firewalld
firewalld预定义区域说明
区域 | 说明 |
| 允许所有传入流量 |
| 除非与传出流量相关或与ssh等预定义服务匹配,否则拒绝传入流量。新网络接口的默认区域 |
| 除非与传出流量相关或与ssh等预定义服务匹配,否则拒绝传入流量. |
| 除非与传出流量相关或与ssh,samba-client等预定义服务匹配,否则拒绝传入流量 |
| 初始状态与home区域相同 |
| 除非与传出流量相关或与ssh预定义服务匹配,否则拒绝传入流量。通过此区域转发的IPV4传出流量将进行伪装,使其看起来是来自传出网络接口的IPv4地址而不是主机的源IP |
| 除非与传出流量相关或与ssh预定义服务匹配,否则拒绝传入流量 |
| 除非与传出流量相关,否则拒绝所有传入流量 |
| 除非与传出流量相关,否则丢弃所有传入流量 |
firewalld配置方法
- 使用图形工具firewall-config
- 使用命令行工具firewalld-cmd
- 直接编辑/etc/firewalld/目录中的配置文件
firewall-cmd命令
- 检查firewalld服务是否正在运行
# systemctl status firewalld | grep 'Active:'
# firewall-cmd --state
- 获取预定义信息
firewall-cmd预定义信息包括可用的区,可用的服务名,可用的ICMP阻塞类型。
firewall-cmd命令显示预定义信息的选项说明
选项 | 说明 |
| 显示预定义的区域 |
| 显示预定义的服务 |
| 显示预定义的ICMP阻塞类型 |
配置文件在/etc/firewalld/{zones,services,icmptypes}
目录下生成相应的XML配置文件自定义自己的区域,服务,ICMP阻塞类型。
使用firewall-cmd命令显示预定义信息
- 显示预定义区
# firewall-cmd --get-zones
- 显示预定义的服务
# firewall-cmd --get-services
- 显示预定义的ICMP类型
# firewall-cmd --get-icmptypes | fmt -5
- 区域管理
使用firewall-cmd
命令获取和管理区域, 为指定区域绑定网络接口等.firewall-cmd
命令区域管理选项说明
选项 | 说明 |
| 显示网络连接或接口的默认区域 |
| 设置网络连接或接口的默认区域 |
| 显示已激活的所有区域 |
| 显示指定接口绑定的区域 |
| 为指定的区域绑定网络接口 |
| 为指定的区域更改绑定的网络接口 |
| 为指定的区域解除绑定的网络接口 |
| 显示所有的区域及其规则 |
| 显示指定区域的所有规则,省略时 |
- 显示默认区域
# firewall-cmd --get-default-zone
- 显示默认区域的所有规则
# firewall-cmd --list-all
- 显示网络接口
ens33
对应的区域
# firewall-cmd --get-zone-of-interface=ens33
- 更改网络接口
ens33
对应的区域
# firewall-cmd --zone=internal --change-interface=ens33
# firewall-cmd --zone=internal --list-interfaces
# firewall-cmd --get-zone-of-interface=ens33
- 显示已激活的所有区域
# firewall-cmd --get-active-zones
- 管理区域中的服务
- 对于每个区,可以配置允许访问的服务.
- 对于预定义的服务
firewall-cmd --get-services
, 可以使用服务名或端口号配置。 - 对于非预定义的服务只能使用端口号配置。
firewall-cmd命令区域中服务管理的选项说明
选项 | 说明 |
| 显示指定区域内允许访问的所有服务 |
| 为指定区域设置允许访问的某项服务 |
| 删除指定区域已设置的允许访问的某项服务 |
| 显示指定区域内允许访问的所有端口号 |
| 为指定区域设置允许访问的某个/某段端口号(包括协议名) |
| 删除指定区域已设置的允许访问的端口号(包括协议名) |
| 显示指定区域内拒绝访问的所有ICMP类型 |
| 为指定区域设置拒绝访问的某项ICMP类型 |
| 删除指定区域已设置的拒绝访问的某项ICMP类型 |
省略
--zone=<zone>
时表示对默认区域进行操作
- 为默认区域设置允许访问的服务或端口号
# firewall-cmd --list-services
# firewall-cmd --add-service=http
- 为internal区域设置允许访问的服务或端口号
# firewall-cmd --zone=internal --add-service=mysql
# firewall-cmd --zone=internal --remove-service=samba-client
# firewall-cmd --zone=internal --list-services
# firewall-cmd --zone=internal --add-port=8080/tcp
# firewall-cmd --zone=internal --list-ports
- 为默认区域设置禁止访问的ICMP类型
# firewall-cmd --add-icmp-block=source-quench
# firewall-cmd --list-icmp-blocks
- IP伪装与端口转发
- firewalld支持SNAT和DNAT配置。
- 可以使用firewall-cmd方便地配置IP伪装(一种SNAT)和端口转发(一种DNAT)
firewall-cmd命令区域的IP伪装与端口转发
选项 | 说明 |
| 显示指定区域内设置的IPv4端口转发 |
| 为指定区域设置IPV4端口转发 |
| 为指定区域删除IPV4端口转发的设置 |
| 查看指定的区域是否启用了IP伪装(IPV4) |
| 为指定的区域启用IP伪装(IPv4) |
| 为指定的区域禁用IP伪装(IPv4) |
使用firewall-cmd命令设置IP伪装和端口转发
- 为默认区域开启IP伪装
# firewall-cmd --add-masquerade
# firewall-cmd --query-masquerade
- 为默认区域设置端口转发
// 对public区域的80端口的访问重定向到3128端口
# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=3128
// 对public区域的21端口的访问重定向到192.0.2.155的21端口
# firewall-cmd --add-forward-port=port=21:proto=tcp:toaddr=192.0.2.155
// 对public区域的22155端口的访问重定向到192.0.2.155的22端口
# firewall-cmd --add-forward-port=port=22155:proto=tcp:toport=22:toaddr=192.0.2.155
// 对public区域的22166端口的访问重定向到192.0.2.166的22端口
# firewall-cmd --add-forward-port=port=22166:proto=tcp:toport=22:toaddr=192.0.2.166
// 显示默认区域设置的转发端口
# firewall-cmd --list-forward-ports
// 删除默认区域已设置的端口转发规则
# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=3128
# firewall-cmd --remove-forward-port=port=22166:proto=tcp:toport=22:toaddr=192.0.2.166
# firewall-cmd --list-forward-ports
- 两种配置模式
firewall-cmd分为两种配置模式:
- 运行时模式(Runtime mode): 表示当前内存中运行的防火墙配置。
- 持久性模式(Permanent mode): 表示重启防火墙或重新加载防火墙规则时的配置。
firewall-cmd命令与配置模式相关的选项说明
选项 | 说明 |
| 重新加载防火墙规则并保持状态信息,即将持久配置应用为运行时配置 |
| 带有此选项的命令用于设置持久化规则,这些规则只有重新启动firewalld或重新加载防火墙规则时才会生效; 不带此参数的命令用于设置运行时规则 |
| 将当前的运行时配置写入规则配置文件使之成为持久性配置 |
若用户想同时配置运行时规则和持久性规则,有以下3种方法:
- 方法1: 独立设置运行时规则和持久性规则
# firewall-cmd --zone=public --add-service=https
# firewall-cmd --zone=public --add-service=https --permanent
- 方法2:设置持久性规则,而后重新加载配置使之成为运行时规则
# firewall-cmd --zone=public --add-service=https --permanent
# firewall-cmd --reload
- 方法3: 设置运行时规则,而后将其写入配置文件使之成为持久化规则。
# firewall-cmd --zone=public --add-service=https
# firewall-cmd --runtime-to-permanent
- 高级配置
firewall-cmd还支持两种高级配置方法:
- 使用复杂规则(Rich Rule)
使用–add-rich-rule='rule’选项指定复杂规则,其中的rule需要使用特定的语法。
// 添加一条复杂规则允许源自192.166.0.0/24网络访问本机的MySQL服务
# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.166.0.0/24" service name="mysql" accept'
// 显示复杂规则
# firewall-cmd --list-rich-rules
// 删除已定义的复杂规则
# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.166.0.0/24" service name="mysql" accept'
- 使用直接接口(Direct Interface)
使用firewall-cmd命令的–direct选项可以直接使用iptables ip6tables和ebtables的命令语法.
// 在filter表的IN_public_allow链首插入一条规则允许访问本机的666端口.
# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 666 -j ACCEPT
// 显示filter表IN_public_allow的链规则
# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
// 删除filter表IN_public_allow链中已定义的规则
# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 666 -j ACCEPT
使用firewall-cmd --permanent --direct
命令配置的规则将写入单独的配置文件/etc/firewalld/direct.xml
.
- 使用恐慌(Panic)模式
当服务器遭受严重的网络攻击时,可以启用Panic模式,进入此模式后会丢弃所有的入站和出站流量并丢弃已建立的连接包.
# firewall-cmd --panic-on
关闭Panic模式
# firewall-cmd --panic-off
显示当前是否处于Panic模式
# firewall-cmd --query-panic
firewall-cmd常用命令操作到此结束,非常感谢各位技术同仁能够阅读此博文,多多指教。