firewalld

firewalld是CentOS上的第四代防火墙(ipfwadm-ipchains-iptables-firewalld),CentOS 7将其作为系统默认的防火墙。 firewalld替换了原来的iptables并提供防火墙规则动态更新,即在更改规则时不需要重启服务,同时又增加了一个“区域”的概念。

实际上firewalld是iptables的一个封装,可以让我们更方便的管理iptables的规则,因此它并不是能算是iptables的替代品。

在使用firewalld之前需要确认其守护进程的状态:systemctl status firewalld,如果没有启动,使用systemctl start firewalld来启动。

firewalld提供了命令行管理工具firewall-cmd

  • 使用firewall-cmd --state检查防火墙状态。
  • 使用firewall-cmd --reload重新加载firewalld的配置

firewalld的区域(zone)

区域(zone)是指特定的位置或场景(如家庭、工作、公共等)。借助区域的概念可以把网络分成不同的区域,根据不同区域制定访问控制策略,可以把不可信任的区域和可信任的区域分开。 默认的域是public,可在配置文件/etc/firewalld/firewalld.conf中查看。

获取当前支持的区域列表:

1[root@localhost ~]# firewall-cmd --get-zones
2work drop internal external trusted home dmz public block
  • work: 允许指定的外网连接,用于工作区网络
  • drop: 不应答任何来自网络的数据包,但主机可以向外发送数据
  • internal: 对来自内部网络区域内的请求都进行应答,用于内部网络
  • external: 拒绝来自经过路由器伪装后的外网连接
  • trusted: 接受所有的网络连接
  • home: 应答经过筛选的连接,用于家庭网络
  • dmz: 对来自公共区域的连接请求进行有限制的应答
  • public: 允许在公共区域内使用,即只应答经过筛选的连接
  • block: 任何来自外部网络的连接请求都会被拒绝

查看当前默认使用的域:

1[root@localhost ~]# firewall-cmd --get-active-zones
2public
3  interfaces: enp0s3 enp0s8

查看区域的具体信息:

 1[root@localhost ~]# firewall-cmd --zone=public --list-all
 2public (active)
 3  target: default
 4  icmp-block-inversion: no
 5  interfaces: enp0s3 enp0s8
 6  sources:
 7  services: dhcpv6-client ssh
 8  ports:
 9  protocols:
10  masquerade: no
11  forward-ports:
12  sourceports:
13  icmp-blocks:
14  rich rules:

设置默认域:

1[root@localhost ~]# firewall-cmd --set-default-zone=home
2success

实际上为了维护便利,一般会新建一个域并创建其中的规则。

firewalld规则维护

管理端口

在防火墙中临时开放80的TCP端口,添加的端口会立即生效,在系统重启后就会失效。

 1[root@localhost ~]# firewall-cmd --add-port=80/tcp
 2success
 3[root@localhost ~]# firewall-cmd --list-all
 4public (active)
 5  target: default
 6  icmp-block-inversion: no
 7  interfaces: enp0s3 enp0s8
 8  sources:
 9  services: dhcpv6-client ssh
10  ports: 80/tcp
11  protocols:
12  masquerade: no
13  forward-ports:
14  sourceports:
15  icmp-blocks:
16  rich rules:

在防火墙中永久开放80的TCP端口:

1[root@localhost ~]# firewall-cmd --permanent --add-port=80/tcp
2success
3[root@localhost ~]# firewall-cmd --reload
4success

移除防火墙上开放的TCP端口

1[root@localhost ~]# firewall-cmd --remove-port=80/tcp
2success

针对特定的ip开放3306的TCP端口

1[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.2.4/24" port protocol="tcp" port="3306" accept"
2success

管理网络服务

firewalld可以根据特定网络服务的预定义规则来允许相关流量。

查看默认的网络服务:

1[root@localhost ~]# firewall-cmd --get-services
2RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

启用或禁用ftp服务

1[root@localhost ~]# firewall-cmd --zone=public --add-service=ftp --permanent
2success
3[root@localhost ~]# firewall-cmd --zone=public --remove-service=ftp --permanent
4success
5[root@localhost ~]# firewall-cmd --zone=public --add-service=ftp --permanent
6success

更多内容可查看CentOS 7 USING FIREWALLS