环境信息
firewalld
是 iptables
的一个封装,可以让你更容易地管理 iptables
规则, 它并不是 iptables
的替代品。虽然 iptables
命令仍可用于 firewalld
,但建议使用 firewalld
时仅使用 firewalld
命令。 [1]
firewalld
是 iptables
的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables
相比,使用 firewalld
有两个主要区别:
firewalld
使用区域和服务而不是链式规则。
它动态管理规则集,允许更新规则而不破坏现有会话和连接。
firewalld 配置说明 配置文件目录 配置文件位于两个目录中:
/usr/lib/firewalld/
下保存默认配置,如默认区域和公用服务。避免修改它们,因为每次 firewall
软件包更新时都会覆盖这些文件。
/etc/firewalld
下保存系统配置文件。 这些文件将覆盖默认配置。
配置集说明 firewalld
使用两个配置集: 运行时
和 持久
在系统重新启动或重新启动 firewalld
服务时,不会保留 运行时
的配置更改,而对 持久
配置集的更改不会应用于正在运行的系统。
默认情况下,firewall-cmd
命令适用于 运行时
配置,但使用 --permanent
选项将保存配置到 持久
配置中。
要添加和激活持久性规则,你可以使用以下两种方法之一:
将规则同时添加到持久规则集和运行时规则集中sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --zone=public --add-service=http
将规则添加到持久规则集中并重新加载 firewalld
sudo firewall-cmd --zone=public --add-service=http --permanent sudo firewall-cmd --reload
--reload
选项会删除所有 运行时
配置并应用 持久
配置。因为 firewalld
动态管理规则集,所以它不会破坏现有的连接和会话。
区域说明 区域
是针对给定位置或场景(例如家庭、公共、受信任等)可能具有的各种信任级别的预构建规则集。不同的区域允许不同的网络服务和入站流量类型,而拒绝其他任何流量。 首次启用 firewalld
后,public
将是默认区域。
区域也可以用于不同的网络接口。例如,要分离内部网络和互联网的接口,你可以在 internal
区域上允许 DHCP,但在 external
区域仅允许 HTTP 和 SSH。未明确设置为特定区域的任何接口将添加到默认区域。
查看默认区域 $ firewall-cmd --get-default-zone public
修改默认区域 firewall-cmd --set-default-zone=internal
查看激活的区域及网络接口使用的区域 $ firewall-cmd --get-active-zones public interfaces: eth0
查看指定区域的所有规则集(默认查看 运行时
) $ firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: 20/tcp 21/tcp 22/tcp 80/tcp 443/tcp 32210/tcp 39000-40000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
查看指定区域 持久
配置集的所有规则 $ firewall-cmd --zone=public --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: 20/tcp 21/tcp 22/tcp 80/tcp 443/tcp 32210/tcp 39000-40000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
查看所有区域的配置 $ firewall-cmd --list-all-zones block target: %%REJECT%% icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: dmz target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: drop target: DROP icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: external target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules: home target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: internal target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: 20/tcp 21/tcp 22/tcp 80/tcp 443/tcp 32210/tcp 39000-40000/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: trusted target: ACCEPT icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: work target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
服务 firewalld
可以根据特定网络服务的预定义规则来允许相关流量。你可以创建自己的自定义系统规则,并将它们添加到任何区域。 默认支持的服务的配置文件位于 /usr/lib/firewalld/services/
,用户创建的服务文件在 /etc/firewalld/services/
中
查看默认的可用服务 $ firewall-cmd --get-services RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client \ bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 \ dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger \ freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability \ http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd \ kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd \ mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole \ ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster \ quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission \ smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls \ telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans \ xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
启用或禁用 HTTP 服务 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
添加转发规则 例子中是将 IP 地址为 :123.456.78.9 的远程服务器上 80 端口的流量转发到 8080 上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
脚注