FirewallD防火墙

2024-12-12 17:04:43 470

FirewallD防火墙

FirewallD是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:

1.    FirewallD 使用区域和服务而不是链式规则。

2.    它动态管理规则集,允许更新规则而不破坏现有会话和连接。

FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。

安装与管理 FirewallD

CentOS 7 和 Fedora 20+ 已经包含了 FirewallD,但是默认没有激活。可以像其它的 systemd 单元那样控制它。

# 1. FirewallD服务管理
systemctl
start firewalld
systemctl enable firewalld

systemctl
stop firewalld
systemctl disable firewalld

firewall-cmd
--state # 检查防火墙状态。输出应该是 running 或者 not running。
systemctl status firewalld

firewall-cmd
--reload # 重新加载 FirewallD 配置

防火墙的区域

区域”是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 FirewallD 后,public 将是默认区域。

区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal 区域上允许 DHCP,但在external 区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。

firewall-cmd --get-default-zone # 找到默认区域

firewall-cmd
--set-default-zone=internal # 修改默认区域

firewall-cmd
--get-active-zones # 查看你网络接口使用的区域

firewall-cmd
--zone=public --list-all # 得到特定区域的所有配置

sudo firewall-cmd --list-all-zones # 得到所有区域的配置

与服务一起使用

FirewallD 可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。 默认支持的服务的配置文件位于 /usr/lib/firewalld/services,用户创建的服务文件在 /etc/firewalld/services 中。

firewall-cmd --get-services
firewall-cmd
--zone=public --add-service=http --permanent
firewall-cmd
--zone=public --remove-service=http --permanent

允许或者拒绝任意端口/协议

firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd
--zone=public --remove-port=12345/tcp --permanent

端口转发

# 范例:在同一台服务器上将 80 端口的流量转发到 12345 端口
firewall-cmd
--zone="public" --add-forward-port=port=80:proto=tcp:toport=12345

# 要将端口转发到另外一台服务器上
# 在需要的区域中激活 masquerade
firewall-cmd
--zone=public --add-masquerade
firewall-cmd
--zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9

# 要删除规则,用 --remove 替换 --add
firewall-cmd
--zone=public --remove-masquerade

富规则

丰富规则的语法有很多,但都完整地记录在 firewalld.richlanguage(5) 的手册页中(或在终端中 man firewalld.richlanguage)。 使用 --add-rich-rule--list-rich-rules --remove-rich-rule 和 firewall-cmd 命令来管理它们。

# 范例1: 允许来自主机 192.168.0.14 的所有 IPv4 流量。
firewall-cmd
--zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

# 范例2:拒绝来自主机 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量。
firewall-cmd
--zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject'

# 范例3:允许来自主机 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,并将流量转发到 6532 端口上。
firewall-cmd
--zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532'

# 范例4:将主机 172.31.4.2 上 80 端口的 IPv4 流量转发到 8080 端口(需要在区域上激活 masquerade)。
firewall-cmd
--zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2'

# 列出你目前的丰富规则
firewall-cmd
--list-rich-rules

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: