防火墙对于管制进出 Linux 服务器的网络流量至关重要。它可能定义一组防火墙规定来管制主机上的传入流量。本文介绍如何增加、删除、启用和禁用防火墙规定和区域。什么是 FirewallD“firewalld”是 firewall daemon。它提供了一个动静治理的防火墙,带有一个十分弱小的过滤零碎,称为 Netfilter,由 Linux 内核提供。FirewallD 应用 zones 和 services 的概念,而 iptables 应用 chain 和 rules。与 iptables 相比,“FirewallD”提供了一种非常灵活的形式来解决防火墙治理。每个 zones 都能够依照指定的规范进行配置,以依据你的要求承受或回绝某些服务或端口,并且它能够与一个或多个网络接口相关联。默认区域为 public 区域。[yijiFirewalld zones[/yiji] 以下命令列出 FirewallD 提供的 zones。运行以下命令以列出 zones:[root@server1 ~]# firewall-cmd –get-zones
block dmz drop external home internal public trusted work
block: 对于 IPv4,任何传入连贯都会被 icmp-host-prohibited 音讯回绝,对于 IPv6 则是 icmp6-adm-prohibited。dmz: 利用于你的 DMZ 区域的计算机,这些计算机可公开拜访,但对外部网络的拜访受到限制。仅承受选定的传入连贯。drop: 任何传入连贯都将在没有任何告诉的状况下被抛弃。只容许传出连贯。external: 用于在零碎中充当路由器时启用 NAT 假装的内部网络。只容许选定的传入连贯。home: 用于家庭网络。仅承受选定的传入连贯。internal: 用于外部网络,网络上的其余零碎通常是可信赖的。仅承受选定的传入连贯。public: 用于公共区域,仅承受选定的传入连贯。trusted: 承受所有网络连接。work: 用于工作区域,同一网络上的其余计算机大多受信赖。仅承受选定的传入连贯。Firewalld servicesFirewalld 的 service 配置是预约义的服务。要列出可用的服务模块,请运行以下命令:[root@server1 ~]# firewall-cmd –get-services
Firewalld 的长期设置和永恒设置 Firewalld 应用两个独立的配置,即长期设置和永恒设置:长期设置: 长期设置不会在零碎重启时放弃不变。这意味着长期设置不会主动保留到永恒设置中。永恒设置: 永恒设置会存储在配置文件中,将在每次重新启动时加载并成为新的长期设置。启用、禁用 FirewalldFirewalld 默认装置在 Centos7/ 8 中,上面命令时如何启用或者停用 firewalld:# 启用 Firewalld
[root@server1 ~]# systemctl start firewalld
禁用 Firewalld
[root@server1 ~]# systemctl stop firewalld
开机启动
[root@server1 ~]# systemctl enable firewlald
禁止开机启动
[root@server1 ~]# systemctl disable firewalld
查看 firewlald 的状态:[root@server1 ~]# systemctl status firewalld
或者
[root@server1 ~]# firewall-cmd –state
running
zone 治理 Firewalld 为每个区域提供不同级别的安全性,公共区域设置为默认区域。上面命令查看默认区域:[root@server1 ~]# firewall-cmd –get-default-zone
public
上面命令查看默认区域的配置:[root@server1 ~]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client ntp ssh
ports: 2222/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
通过应用选项 ”–zone”和“–change-interface”的组合,能够轻松更改 zone 中的接口。例如,要将“ens33”接口调配给“home”区域,请运行以下命令:[root@server1 ~]# firewall-cmd –zone=home –change-interface=ens33
success
[root@server1 ~]# firewall-cmd –zone=home –list-all
home (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
要查看所有流动的 zone,请运行以下命令:[root@server1 ~]# firewall-cmd –get-active-zones
home
interfaces: ens33
public
interfaces: ens160
要更改默认 zone,请应用以下命令。例如,要将默认区域更改为 home,请运行以下命令:[root@server1 ~]# firewall-cmd –set-default-zone=home
要找出与 ens160 接口关联的区域,请运行以下命令:[root@server1 ~]# firewall-cmd –get-zone-of-interface=ens160
public
要创立新 zone,请应用以下命令。例如,要创立一个名为“test”的新区域,并永恒失效,请运行:[root@server1 ~]# firewall-cmd –permanent –new-zone=test
success
[root@server1 ~]# firewall-cmd –reload
success
凋谢和敞开端口关上特定端口容许用户从内部拜访零碎,这代表了平安危险。因而,仅在必要时为某些服务关上所需的端口。要获取以后区域中凋谢的端口列表,请运行以下命令:[root@server1 ~]# firewall-cmd –list-ports
2222/tcp
上面实例将特定端口永恒增加到列表中:[root@server1 ~]# firewall-cmd –permanent –add-port=8080/tcp
success
[root@server1 ~]# firewall-cmd –reload
success
同样,要删除特定端口,请运行以下命令:[root@server1 ~]# firewall-cmd –remove-port=8080/tcp
success
能够应用以下命令每次确认端口是否已增加或删除:[root@server1 ~]# firewall-cmd –list-ports
如果要为特定区域凋谢端口,例如,以下命令将为 home 区域关上端口 80:[root@server1 ~]# firewall-cmd –permanent –zone=home –add-port=80/tcp
success
[root@server1 ~]# firewall-cmd –reload
success
同样,要从凋谢的端口中删除特定区域的特定端口,请运行:[root@server1 ~]# firewall-cmd –zone=home –remove-port=80/tcp
success
http://www.cctime.com/html/20…
http://www.dzwww.com/synr/syc…
http://www.techweb.com.cn/it/…
增加和移除服务类型 Firewalld 服务配置是预约义的服务,如果启用了服务,则会主动加载。应用预约义服务使用户能够更轻松地启用和禁用对服务的拜访。预约义的服务配置文件位于 /usr/lib/firewalld/services 目录中。Firewalld 的服务,你不须要记住任何端口,并且能够一次性容许所有端口。例如,执行以下命令容许 samba 服务。samba 服务须要启用以下一组端口:“139/tcp 和 445/tcp”以及“137/udp 和 138/udp”。增加 ’samba’ 服务后,所有端口都会同时激活,因为所有端口信息都在 samba 服务配置中。上面是 Firewalld 中预约义的 samba 的服务配置文件:[root@server1 ~]# cat /usr/lib/firewalld/services/samba.xml
上面是在 home 区域放行 samba 服务:[root@server1 ~]# firewall-cmd –permanent –zone=home –add-service=samba
success
[root@server1 ~]# firewall-cmd –reload
success
要获取无关 samba 服务的更多信息,请运行以下命令:[root@server1 ~]# firewall-cmd –info-service=samba
samba
ports: 137/udp 138/udp 139/tcp 445/tcp
protocols:
source-ports:
modules: netbios-ns
destination:
要一次增加多个服务,请执行以下命令。例如,要增加 http 和 https 服务,请运行以下命令:[root@server1 ~]# firewall-cmd –permanent –zone=home –add-service={http,https}
success
[root@server1 ~]# firewall-cmd –reload
success
设置端口转发端口转发是一种将任何传入网络流量从一个端口转发到另一个外部端口或另一台机器上的内部端口的办法。留神:端口转发必须开启 IP 假装。应用上面显示的命令为 external 区域启用假装。[root@server1 ~]# firewall-cmd –permanent –zone=external –add-masquerade
要查看是否为区域启用了 IP 假装,请运行以下命令:[root@server1 ~]# firewall-cmd –zone=external –query-masquerade
yes
显示 yes,示意曾经开启假装。要将端口重定向到同一零碎上的另一个端口,例如:将 80 端口的所有数据包重定向到 8080 端口:[root@server1 ~]# firewall-cmd –permanent –zone=external –add-forward-port=port=80:proto=tcp:toport=8080
success
如果要将流量转发到另一台服务器,例如:将所有 80 端口的数据包重定向到 IP 为 10.0.0.75 的服务器上的 8080 端口:[root@server1 ~]# firewall-cmd –permanent –zone=external –add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.75
success
例如,要容许来自特定源地址的流量,仅容许从特定子网连贯到服务器,请运行以下命令:[root@server1 ~]# firewall-cmd –permanent –zone=home –add-source=192.168.1.0/24
success
富规定设置富规定容许应用易于了解的命令创立更简单的防火墙规定,但丰盛的规定很难记住,能够查看手册 man firewalld.richlanguage 并找到示例。富规定的个别规定构造如下:
rule
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]
要容许来自地址 192.168.0.0/24 的拜访,请运行以下命令:[root@server1 ~]# firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.0.0/24″ accept’
success
要容许来自地址 192.168.0.0/24 的连贯拜访 ssh 服务,请运行以下命令:[root@server1 ~]# firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.0.0/24″ service name=”ssh” log prefix=”ssh” level=”info” accept’
success
要回绝来自 192.168.10.0/24 的流量拜访 ssh 服务,请运行以下命令:[root@server1 ~]# firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.10.0/24″ port port=22 protocol=tcp reject’
success
要删除任何富规定,请应用 –remove-rich-rule 选项,上面应用 –list-rich-rules 列出富规定,而后删除掉富规定:[root@server1 ~]# firewall-cmd –zone=public –list-rich-rules
rule family=”ipv4″ source address=”192.168.0.0/24″ accept
rule family=”ipv4″ source address=”192.168.0.0/24″ service name=”ssh” log prefix=”ssh” level=”info” accept
rule family=”ipv4″ source address=”192.168.10.0/24″ port port=”22″ protocol=”tcp” reject
[root@server1 ~]# firewall-cmd –zone=public –remove-rich-rule=’rule family=”ipv4″ source address=”192.168.0.0/24″ accept’
success
[root@server1 ~]# firewall-cmd –zone=public –remove-rich-rule=’rule family=”ipv4″ source address=”192.168.0.0/24″ service name=”ssh” log prefix=”ssh” level=”info” accept’
success
[root@server1 ~]# firewall-cmd –zone=public –remove-rich-rule=’rule family=”ipv4″ source address=”192.168.10.0/24″ port port=”22″ protocol=”tcp” reject’
success
Firewalld 的 Direct 规定 Direct 规定相似于 iptables 命令,对于相熟 iptables 命令的用户很有用。或者,您能够编辑 /etc/firewalld/direct.xml 文件中的规定并从新加载防火墙以激活这些规定。Direct 规定次要由服务或应用程序用来增加特定的防火墙规定。以下 Direct 规定将在服务器上关上端口 8080:[root@server1 ~]# firewall-cmd –permanent –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 8081 -j ACCEPT
success
[root@server1 ~]# firewall-cmd –reload
success
要列出以后区域中的 Direct 规定,请运行:[root@server1 ~]# firewall-cmd –direct –get-all-rules
ipv4 filter INPUT 0 -p tcp –dport 8080 -j ACCEPT
ipv4 filter INPUT 0 -p tcp –dport 8081 -j ACCEPT
应用上面命令删除 Direct 规定:[root@server1 ~]# firewall-cmd –direct –get-all-rules
ipv4 filter INPUT 0 -p tcp –dport 8080 -j ACCEPT
ipv4 filter INPUT 0 -p tcp –dport 8081 -j ACCEPT
[root@server1 ~]# firewall-cmd –permanent –direct –remove-rule ipv4 filter INPUT 0 -p tcp –dport 8080 -j ACCEPT
success
[root@server1 ~]# firewall-cmd –reload
success
如何清空一个表的链?上面是语法和实例:firewall-cmd –direct –remove-rules ipv4 [table] [chain]
[root@server1 ~]# firewall-cmd –permanent –direct –remove-rules ipv4 filter INPUT
success
[root@server1 ~]# firewall-cmd –reload
success
[root@server1 ~]# firewall-cmd –direct –get-all-rules
总结本文带你理解了 firewalld 的残缺用法,例如 zones、容许 / 拒绝服务和端口、端口转发、Rich Rules、Direct 规定等。