关闭iptables-services,开启firewalld防火墙

#systemctl stop iptables.service
#systemctl disable iptables.service
#systemctl start firewalld.service
#systemctl enable firewalld.service

zone

每个zone里面有不同的iptables规则,每个zone里面都使用了不同的service,默认一共九个zone

[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

系统默认的zone

[root@localhost ~]# firewall-cmd --get-default-zone 
public

设定默认的zone为work

[root@localhost ~]# firewall-cmd --set-default-zone=work 
success

查看指定网卡所在的zone

[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
work

给指定网卡设定zone

[root@localhost ~]# firewall-cmd --zone=public --add-interface=lo
success

给指定网卡更改zone

[root@localhost ~]# firewall-cmd --zone=internal --change-interface=lo
success

针对网卡删除zone

[root@localhost ~]# firewall-cmd --zone=internal --remove-interface=lo
success

查看系统所有网卡所在的zone

[root@localhost ~]# firewall-cmd --get-active-zones 
work
  interfaces: ens33

service就是对一个服务(端口)做的iptables规则,这些service都是由一个个配置文件定义的,配置文件的模板在/usr/lib/firewalld/services/目录下,真正生效的配置在/etc/firewalld/services/目录下

列出系统所有的service

[root@localhost ~]# firewall-cmd --get-services 
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp open*** ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync 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

查看当前zone下有哪些service

[root@localhost ~]# firewall-cmd --list-services 
ssh dhcpv6-client

查看指定zone下有哪些service

[root@localhost ~]# firewall-cmd --zone=public --list-services 
ssh dhcpv6-client

一个zone下面有某个service,意味着这个service是被信任的。比如,当前zone下面有ssh,那么ssh服务22端口是放行的。我们可以给一个zone添加一个service(临时生效),命令如下

[root@localhost ~]# firewall-cmd --zone=public --add-service=http
success
[root@localhost ~]# firewall-cmd --zone=public --list-services 
ssh dhcpv6-client http

每个zone对应的配置文件

[root@localhost ~]# ls /usr/lib/firewalld/zones/
block.xml  dmz.xml  drop.xml  external.xml  home.xml  internal.xml  public.xml  trusted.xml  work.xml

给public zone添加http service,在配置文件中修改,则可以这样

[root@localhost ~]# firewall-cmd --zone=public --add-service=http --permanent 
success

需求:假如服务器上配置了一个ftp服务,但端口并非默认21,而是1121,并且需要在work zone下面放行ftp

[root@localhost ~]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/
[root@localhost ~]# vim /etc/firewalld/services/ftp.xml  //把里面的21改为1121
[root@localhost ~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
[root@localhost ~]# vim /etc/firewalld/zones/work.xml    //在里面增加一行<service name="ftp"/>
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --zone=work --list-services 
ssh ftp dhcpv6-client