1.1支持网络区域所定义的网络链接及接口安全等级的动态防火墙管理工具
1.2支持IPv4、IPv6防火墙是指以及以太网桥
1.3支持服务或应用程序直接添加防火墙规则接口
1.4拥有两种配置模式
1.4.1运行时设置
1.4.2永久配置
1.位于Linux内核中的包过滤功能体系
2.称为Linux防火墙的“内核态”
1.CentOS7默认的管理防火墙规则的工具(Firewalld)
2.称为Linux防火墙的“用户态”
Firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld/、/etc/firewalld | /etc/sysconfig/iptables |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失连接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
区域 | |
---|---|
drop(丢弃) | 任何接受的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接 |
block(限制) | 任何接受的网络连接都被IPv4的icmp-host-prohibited信息和icmp-adm-prohibited信息所拒绝 |
public(公共) | 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接受经过选取的连接 |
external(外部) | 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接 |
dmz(非军事区) | 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接 |
work(工作) | 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接 |
home(家庭) | 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接 |
internal(内部) | 用于内部网络。您可以基本.上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接 |
trusted(信任) | 可接受所有的网络连接 |
1.区域如同进入主机的安全门,每个区域都具有不同限制程度的规则
2.可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口
3.默认情况下,public区域是默认区域,包含所有接口(网卡)
1.若源地址关联到特定的区域,则执行该区域所指定的规则
2.若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所指定的规则
3.若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则
1.实时生效,并持续至Firewalld重 新启动或重新加载配置
2.不中断现有连接
3.不能修改服务配置
1.不立即生效,除非Firewalld重新启动或重新加载配置
2.中断现有连接
3.可以修改服务配置
1.Firewall-config图形工具
2.Firewall-cmd命令行工具
3./etc/firewalld/中的配置文件
Firewalld会优先使用/etc/firewalld/中的配置,如果不存在配置文件,则使用/etc/firewalld/中的配置
/etc/firewalld/ :用户自定义配置文件,需要时可通过从/usr/lib/firewalld/中拷贝
/usr/ib/firewalld/:默认配置文件,不建议修改,若恢复至默认配置,可直接删除/etc/firewalld/中的配置
[root@localhost ~]# firewall-config
[root@python ~]# systemctl选项firewalld
start stop restart status
1.支持全部防火墙特性
2.对于状态和查询模式,命令只返回状态,没有其他输出
3.–permanent参数:携带该参数表示永久配置,否则表示运行时配置
4.–zone=]选项:不携带此选项表示针对默认区域操作,否则针对指定区域操作
[root@python ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2019-12-09 08:24:26 CST; 5h 10min ago
Docs: man:firewalld(1)
Main PID: 892 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─892 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
12月 09 08:24:22 python systemd[1]: Starting firewalld - dynamic firewall daemon...
12月 09 08:24:26 python systemd[1]: Started firewalld - dynamic firewall daemon.
[root@python ~]# firewall-cmd --state
running
firewall-cmd --reload
[root@python ~]# firewall-cmd --reload
success
firewall-cmd --complete-reload
状态信息将丢失,多用于防火墙出现问题时
[root@python ~]# firewall-cmd --complete-reload
success
systemctl restart firewalld
[root@python ~]# systemctl restart firewalld
firewall-cmd --get-zones
查看预定义的区域
[root@python ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
firewall-cmd --get-services
查看预定义服务
[root@python ~]# firewall-cmd --get-services
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 open 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
firewall-cmd --get-icmptypes
查看预定义ICMP类型
[root@python ~]# 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 --get-default-zone
显示网络连接或接口默认区域
[root@python ~]# firewall-cmd --get-default-zone
public
firewall-cmd --set-default-zone=internal
设置网络连接或接口的默认区域为internal
[root@python ~]# firewall-cmd --set-default-zone=internal
success
firewall-cmd --get-active-zones
显示已经激活的所有区域
激活条件:区域至少关联一个接口或一个源地址/网段
[root@python ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
firewall-cmd --get-zone-of-interface=ens33
显示ens33接口绑定的区域
[root@python ~]# firewall-cmd --get-zone-of-interface=ens33
internal
firewall-cmd --zone=work --add-interface=ens33
为ens33接口绑定work区域
[root@python ~]# firewall-cmd --zone=work --add-interface=ens33
firewall-cmd --zone=work --change-interface=ens33
为work区域更改绑定的网络接口ens33
[root@python ~]# firewall-cmd --zone=work --change-interface=ens33
success
firewall-cmd --zone=work --remove-interface=ens33
为work区域删除绑定的网络接口ens33
[root@python ~]# firewall-cmd --zone=work --remove-interface=ens33
success
firewall-cmd --zone=work --query-interface=ens33
查询work区域中是否包含接口ens33
[root@python ~]# firewall-cmd --zone=work --query-interface=ens33
no
firewall-cmd --list-all-zones
显示所有区域及其规则
[root@python ~]# 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
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
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:
firewall-cmd --zone=internal --list-all
显示internal区域的所有规则
[root@python ~]# firewall-cmd --zone=internal --list-all
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:
firewall-cmd --list-all
显示默认区域的所有规则
[root@python ~]# firewall-cmd --list-all
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:
选项 | 说明 |
---|---|
–get-default-zone | 显示网络连接或接口的默认区域 |
–set-default-zone= | 设置网络连接或接口的默认区域 |
–get-active-zones | 显示已激活的所有区域 |
–get-zone-of-interface= | 显示指定接口绑定的区域 |
–zone= --add-interface= | 为指定接口绑定区域 |
– zone= --change-interface= | 为指定的区域更改绑定的网络接口 |
–zone= --remove-interface= | 为指定的区域删除绑定的网络接口 |
–query-interface= | 查询区域中是否包含某接口 |
–list-all-zones | 显示所有区域及其规则 |
[–zone= ] --list-all | 显示所有指定区域的所有规则 |
firewall-cmd --zone=internal --list-services
显示internal区域内允许访问的所有服务
[root@python ~]# firewall-cmd --zone=internal --list-services
dhcpv6-client mdns samba-client ssh
firewall-cmd --zone=public --add-service=smtp
为public区域设置允许访问SMTP服务
[root@python ~]# firewall-cmd --zone=public --add-service=smtp
success
firewall-cmd --zone=internal --remove-service=ssh
删除internal区域中的SSH服务
[root@python ~]# firewall-cmd --zone=internal --remove-service=ssh
success
firewall-cmd --zone=internal --query-service=ssh
查询internal区域中是否启用了’SSH服务
[root@python ~]# firewall-cmd --zone=internal --query-service=ssh
no
选项 | 说明 |
---|---|
[–zone= ] --list-services | 显示指定区域内允许访问的所有服务 |
[–zone= ] --add-service= | 为指定区域设置允许访问的某项服务 |
[–zone= ] --remove-service= | 删除指定区域已设置的允许访问的某项服务 |
[–zone= ] --query-service= | 查询指定区域中是否启用了某项服务 |
firewall-cmd --zone=internal --list-ports
显示internal区域内允许访问的所有的端口号
[root@python ~]# firewall-cmd --zone=internal --list-ports
firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
启用internal区域22端口的TCP协议组合
[root@python ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
firewall-cmd --zone=internal --remove-port=22/tcp
禁用internal区域22端口的TCP协议组合
[root@python ~]# firewall-cmd --zone=internal --remove-port=22/tcp
success
firewall-cmd --zone=internal --query-port=22/tcp
查询internal区域中是否启用了22端口和TCP协议组合
[root@python ~]# firewall-cmd --zone=internal --query-port=22/tcp
no
选项 | 说明 |
---|---|
[–zone= ] --list-ports | 显示指定区域内允许访问的所有端口号 |
[–zone= ] --add-port= [-]/ [–timeout= ] | 启用区域端口和协议组合,可选配置超时时间 |
[–zone= ] --remove-port= [-]/ | 禁用区域端口和协议组合 |
[–zone= ] --query-port= [- ]/ | 查询区域中是否启用了端口和协议组合 |
firewall-cmd --zone=work --list-icmp-blocks
显示work区域内阻塞的所有ICMP类型
[root@python ~]# firewall-cmd --zone=work --list-icmp-blocks
firewall-cmd --zone=work --add-icmp-block=echo-reply
为work区域设置阻塞echo-reply类型的ICMP
[root@python ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success
firewall-cmd --zone=work --remove-icmp-block=echo-reply
删除work区域已阻塞的echo-reply类型的icmp
[root@python ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success
firewall-cmd --zone=work --query-icmp-block=echo-request
查看work区域的echo-request类型的icmp是否阻塞
[root@python ~]# firewall-cmd --zone=work --query-icmp-block=echo-request
no
选项 | 说明 |
---|---|
[–zone= ] --list-icmp-blocks | 显示指定区域内阻塞的所有ICMP类型 |
[–zone= ] --add-icmp-block= | 为指定区域设置阻塞的某项ICMP类型 |
[–zone= ] --remove-icmp-block= | 删除指定区域已阻塞的某项ICMP类型 |
[–zone= ] --query-icmp-block= | 查询指定区域的ICMP阻塞功能 |
work区域的echo-request类型的icmp是否阻塞
[root@python ~]# firewall-cmd --zone=work --query-icmp-block=echo-request
no
选项 | 说明 |
---|---|
[–zone= ] --list-icmp-blocks | 显示指定区域内阻塞的所有ICMP类型 |
[–zone= ] --add-icmp-block= | 为指定区域设置阻塞的某项ICMP类型 |
[–zone= ] --remove-icmp-block= | 删除指定区域已阻塞的某项ICMP类型 |
[–zone= ] --query-icmp-block= | 查询指定区域的ICMP阻塞功能 |