Firewalld防火墙是CentOS 7版本系统默认的防火墙管理工具,取代了之前的iptables防火墙,与iptables防火墙一样也属于典型的包过滤防火墙或称之为网络层防火墙,firewalld和iptables都是用来管理防火墙的的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter这一强大的网络过滤子系统(属于内核态)以实现包过滤防火墙功能
防火墙为了简化管理,将所有网络流量分为多个区域(zone),然后根据数据包的源ip地址或传入的网络接口条件等将流量传入相应区域,每个区域都定义了自己打开或者关闭的端口和服务列表。其中默认区域为public
区域名称 | 默认配置说明 |
---|---|
Trusted | 允许所有的传入流量 |
Block | 拒绝所有传入流量 |
Drop | 丢弃所有传入流量 |
Public | 允许与ssh、dhcpv6-client预定义服务匹配的传入流量,其余都拒绝,也是新添加网络接口的默认区域 |
Home | 允许与ssh、mdns、ipp-client、samba-client、dhcpv6-client预定义服务匹配的传入流量,其余都拒绝 |
Work | 允许与ssh、ipp-client、dhcpv6-client预定义服务匹配的传入流量,其余都拒绝 |
Internal | 默认值时与home相同 |
External | 允许与ssh预定义服务匹配的传入流量,其余都拒绝;默认将进过此区域转发的ipv4地址传出流量进行地址伪装 |
Dmz | 允许与ssh预定义服务匹配的传入流量,其余都拒绝 |
Firewall-cmd是Firewalld防火墙自带的字符管理工具,可以用来设置Firewalld防火墙的各种规则,但Firewalld防火墙规则分为两种状态,runtime和permanent。
runtime:运行时配置,即时生效,但重启或重载后失效
permanent:永久配置,不及时生效,需要reload
在使用firewall-cmd命令管理防火墙时,需要添加为永久生效的规则需在配置规则时添加–permanent选项,如果要让这个规则立即生效,还要使用firewall-cmd --reload命令重新加载防火墙配置
firewall-cmd命令 | 说明 |
---|---|
–get-default-zone | 查看当前默认区域 |
–get-active-zones | 列出当前正在使用的区域及其所对应的网卡接口 |
–get-zones | 列出所有可用的区域 |
–set-default-zone= |
设置默认区域(会同时修改运行时配置和永久配置) |
–add-source= |
将来自ip地址或网段的所有流量路由到指定区域,没有指定为默认区域 |
–remove-source= |
从指定区域中删除来自ip地址或网段的所有路由流量规则,没有指定为默认区域 |
–add-interface= |
将来自该接口的所有流量都路由到指定区域,没有指定为默认区域 |
–change-interface= |
将接口与指定区域做关联,没有指定为默认区域 |
–list-all --zone= |
列出指定区域已配置接口、源、服务、端口等信息,没有指定为默认区域 |
–add-service |
允许到该服务的流量通过指定区域,没有指定为默认区域 |
–remove-service |
从指定区域的允许列表中删除该服务,没有指定为默认区域 |
–add-port |
允许到该端口的流量通过指定区域,没有指定为默认区域 |
–remove-port |
从指定区域的允许列表中删除该端口,没有指定为默认区域 |
查看默认区域
[root@server ~]# firewall-cmd --get-default-zone
public
查看当前活动区域和接口网卡
[root@server ~]# firewall-cmd --get-active-zones
public
interfaces: ens33
查看所有区域
[root@server ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
设置默认区域
[root@server ~]# firewall-cmd --set-default-zone=work
success
[root@server ~]# firewall-cmd --get-default-zone
work
查看预定义服务
[root@server ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch 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 jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp open ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
查看public区域的详细信息
[root@server ~]# firewall-cmd --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
把http服务加入到public区域中,永久生效
[root@server ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]# firewall-cmd --list-all --zone=public
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
把http服务从public区域中永久移除
[root@server ~]# firewall-cmd --remove-service=http --zone=public --permanent
success
[root@server ~]#
[root@server ~]# firewall-cmd --reload
success
在默认区域中添加http和https2个服务
[root@server ~]# firewall-cmd --add-service=http --add-service=https
success
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
在默认区域中添加tcp的3306端口
[root@server ~]# firewall-cmd --add-port=3306/tcp
success
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client http https
ports: 3306/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@server ~]# firewall-cmd --remove-port=3306/tcp
success
在默认区域中添加udp端口2048-2050
[root@server ~]# firewall-cmd --add-port=2048-2050/udp
success
[root@server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client http https
ports: 2048-2050/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
例1:将默认区域设置为dmz区域,来自192.168.100.0网段的流量全部分配给internal区域,并且打开internal区域的80端口供用户访问
[root@server ~]# firewall-cmd --set-default-zone=dmz
success
[root@server ~]# firewall-cmd --add-source=192.168.100.0/24 --zone=internal --permanent
success
[root@server ~]# firewall-cmd --add-service=http --zone=internal --permanent
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]# firewall-cmd --list-all
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@server ~]# firewall-cmd --list-all --zone=internal
internal (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.100.0/24
services: ssh mdns samba-client dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
除了字符管理工具以外,firewalld防火墙还提供了图形管理工具firewall-config,可用于查看和更改firewalld防火墙正在运行时的配置和永久的配置,可以使用firewall-config软件包
进行安装使用,安装好后,可以直接使用firewall-config命令启动图形管理工具,或者从菜单“应用程序”→“杂项”→“防火墙”启动,如图: