CentOS 7上的firewalld
2017-01-08
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