(2)使用firewall-cmd命令进行配置
(1)启动、停止、查看firewalld服务 启动防火墙 [root@Firewalld ~]# systemctl start firewalld 设置防火墙为开机自启 [root@Firewalld ~]# systemctl enable firewalld Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service. Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service. 查看防火墙运行状态 [root@Firewalld ~]# systemctl status firewalld (active(running)即正在运行) ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 二 2021-01-05 00:55:57 CST; 9h ago Docs: man:firewalld(1) Main PID: 2989 (firewalld) CGroup: /system.slice/firewalld.service └─2989 /usr/bin/python2 -Es /usr/sbin/firewalld --... 1月 05 00:55:57 CentOS7-1 systemd[1]: Starting firewalld - d... 1月 05 00:55:57 CentOS7-1 systemd[1]: Started firewalld - dy... Hint: Some lines were ellipsized, use -l to show in full. [root@Firewalld ~]# firewall-cmd --state (两种查看命令都可以) running (2)查看预定义信息 查看防火墙可用区域 [root@Firewalld ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work 查看防火墙默认区域 [root@Firewalld ~]# firewall-cmd --get-default-zone public 查看防火墙可用服务 [root@Firewalld ~]# firewall-cmd --get-service RH-Satellite-6 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 查看防火墙可用的icmp阻塞类型 [root@Firewalld ~]# firewall-cmd --get-icmptypes address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option 防火墙命令都是能补齐的 -----------------------华丽分割线----------------------- 拒绝所有包:firewall-cmd --panic-on 取消拒绝状态: firewall-cmd --panic-off 查看是否拒绝: firewall-cmd --query-panic 注意!!!:如果是远程的机器执行上面的规则会立刻断开网络连接,必须紧记不能随便执行。如果你只是虚拟机或者物理机器登陆就可以执行来调试。 -------------------------------------------------------
- 如何清空防火墙规则:
当防火墙配置了很多规则想一次性清空怎么办,firewalld默认没有命令来清空规则,但是我们可以通过编辑配置文件来清除规则。
/etc/firewalld/zones/ 此处为配置生效后保存的配置文件,建议修改前先备份
******此目录会显示已经配置的规则 [root@Firewalld ~]# ll /etc/firewalld/zones/ 总用量 8 -rw-r--r--. 1 root root 315 7月 2 2020 public.xml -rw-r--r--. 1 root root 315 7月 2 2020 public.xml.old vim编辑配置文件 [root@Firewalld zones]# vim /tmp/firewalld.bak/public.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> (这两条service开头的就是允许的服务) <service name="dhcpv6-client"/> </zone> ******在修改之前先创建备份目录 [root@Firewalld ~]# mkdir /tmp/firewalld.bak (备份目录为firewalld.bak) [root@Firewalld ~]# mv /etc/firewalld/zones/* /tmp/firewalld.bak/ [root@Firewalld ~]# firewall-cmd --set-default-zone=public (设置默认区域为public) Warning: ZONE_ALREADY_SET: public success ******重启服务 [root@Firewalld ~]# systemctl restart firewalld
- 区域管理选项说明:
(前面都是firewall-cmd)
(1)--get-default-zone 显示网络连接或接口的默认区域 (2)--set-default-zone=区域名称 设置网络连接或接口的默认区域 (3)--get-active-zones 显示已激活的所有区域 (4)--get-zone-of-interface=网卡名称 显示指定接口绑定的区域 (5)--zone=区域名称 --add-interface=网卡名称 为指定接口绑定区域 (6)--zone=区域名称 --change-interface=网卡名称 为指定的区域更改绑定的网络接口 (7)--zone=区域名称 --remove-interface=网卡名称 为指定的区域删除绑定的网络接口 (8)--list-all-zones 显示所有区域及其规则 (9)--zone=区域名称 --list-all 显示指定区域的所有规则 (10)--list-all 显示默认区域的所有规则
- 示例:
******显示当前系统的默认区域 [root@Firewalld ~]# firewall-cmd --get-default-zone public ******显示默认区域的所有规则 [root@Firewalld ~]# firewall-cmd --list-all public (active) (表示public这个区域是活动区域即可用区域,如果是默认区域会多一个defaults) target: default icmp-block-inversion: no interfaces: ens33 (表示public这个区域的网卡接口是ens33) sources: (列出了public这个区域的源,现在这里没有,但是如果有的话,格式是xxx.xxx.xxx.xxx/xx) services: dhcpv6-client ssh (表示public区域允许通过的服务类型) ports: (表示public区域允许通过的端口) protocols: (允许的通过的协议) masquerade: no (表示这个区域不允许ip伪装,如果允许的话也同时会允许IP转发,即开启路由功能) forward-ports: (列出转发的端口) source-ports: icmp-blocks: (列出阻塞icmp流量的黑名单) rich rules: (在public区域中优先处理的高级配置) -------------------------华丽丽的分割线------------------------- target的作用: 当一个区域处理它的源或接口上的一个包时,但是没有处理该包的显式规则时,这个时候区域的目标target决定了该行为 (1)ACCEPT : 通过这个包 (2)%%REJECT%% : 拒绝这个包,并且返回一个拒绝的回复 (3)DROP : 丢弃这个包,不回复任何信息 (4)default : 不做任何事情,该区域不再管他,把它提到“楼上” -------------------------------------------------------------- ******显示网络接口ens33的对应区域 [root@Firewalld ~]# firewall-cmd --get-zone-of-interface=ens33 public (说明ens33的区域是public) ******更改ens33的区域为internal [root@Firewalld ~]# firewall-cmd --zone=internal --change-interface=ens33 success (更改成功) [root@Firewalld ~]# firewall-cmd --get-zone-of-interface=ens33 internal (再次查看发现已经更改为internal区域) ******查看全部活动区域 [root@Firewalld ~]# firewall-cmd --get-active-zones internal interfaces: ens33
- 服务管理选项说明:
***服务存放在/usr/lib/firewalld/services目录中,通过单个的xml配置文件来指定 ***xml文件:service-name。xml (1)--zone=区域名称 --list-services 显示指定区域内允许访问的所有服务 (2)--zone=区域名称 --add-service=服务名称 为指定区域设置允许访问的某项服务 (3)--zone=区域名称 --remove-service=服务名称 删除指定区域已设置的允许访问的某项服务 (4)--zone=区域名称 --list-ports 显示指定区域内允许访问的所有端口号 (5)--zone=区域名称 --add-port=端口号-端口号/协议名 为指定区域设置允许访问的某个或某段端口号并指定协议名(中间的-表示从多少到多少端口号, / 和后面跟端口的协议) (6)--zone=区域名称 --remove-port=端口号-端口号/协议名 删除指定区域已设置的允许访问的某个端口号或某段端口号并且指定协议名(中间的-表示从多少到多少端口号, / 和后面跟端口的协议) (7)--zone=区域名称 --list-icmp-blocks 显示指定区域内拒绝访问的所有ICMP类型 (8)--zone=区域名称 --add-icmp-block=icmp类型 为指定区域设置拒绝访问的某项ICMP类型 (9)--zone=区域名称 --remove-icmp-block=icmp类型 删除指定区域已设置的拒绝访问的某项ICMP类型,省略 --zone=区域名称 时表示对默认区域操作
- 示例:
******显示默认区域允许访问的所有服务 [root@Firewalld ~]# firewall-cmd --list-services You're performing an operation over default zone ('public'), but your connections/interfaces are in zone 'internal' (see --get-active-zones) You most likely need to use --zone=internal option. dhcpv6-client ssh (说明允许dhcp和ssh) ******设置默认区域允许访问http和https服务 (不加--zone指定的话就是配置默认区域) [root@Firewalld ~]# firewall-cmd --add-service=http You're performing an operation over default zone ('public'), but your connections/interfaces are in zone 'internal' (see --get-active-zones) You most likely need to use --zone=internal option. success [root@Firewalld ~]# firewall-cmd --add-service=https You're performing an operation over default zone ('public'), but your connections/interfaces are in zone 'internal' (see --get-active-zones) You most likely need to use --zone=internal option. success [root@Firewalld ~]# firewall-cmd --list-services (再次查看) You're performing an operation over default zone ('public'), but your connections/interfaces are in zone 'internal' (see --get-active-zones) You most likely need to use --zone=internal option. dhcpv6-client http https ssh (多了http和https)
预定义的服务可以使用服务名配置,同时其对应端口会自动打开,非预定义的服务只能手动指定端口 ******给指定区域添加tcp443端口 [root@Firewalld ~]# firewall-cmd --zone=internal --add-port=443/tcp success [root@Firewalld ~]# firewall-cmd --zone=internal --list-all internal (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client mdns samba-client ssh ports: 443/tcp (发现添加成功) protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: ******删除指定区域的443/tcp端口 [root@Firewalld ~]# firewall-cmd --zone=internal --remove-port=443/tcp success [root@Firewalld ~]# firewall-cmd --zone=internal --list-all internal (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
- 两种配置方式
- 运行时模式(runtime mode): 当前内存中运行,系统或防火墙服务重启或停止,配置失效
- 永久模式(permanent mode): 永久存储在配置文件中,但是配置完成要重启系统或防火墙
******相关选项:(配置时添加此选项即可) --reload 将永久配置应用为运行时配置 --permanent 设置永久性规则。服务重启或重新加载时生效 --runtime-to-permanent 将当前的运行时配置写入规则,成为永久性配置