尽管工作在Linux内核的网络过滤器代码上,总体上和旧有的配置防火墙的方法是不兼容的。
Red Hat Enterprise Linux 7 和其他的新版本则需要依靠新的配置方法。
本文的所有命令都基于RHEL 7.防火墙工作网络首先,检查防火墙是否在运行。
使用列表1中的systemctl status firewalld命令。
列表1.下面的序列表明防火墙是活动状态且在运行中。
这些斜线是有帮助的,当你试图将表1全面显示出来,使用-1命令。
[root@rhelserver ~]# systemctl status firewalld- firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/; enabled)Active: active (running)since Thu 2014-05-22 07:48:08 EDT; 14min agoMain PID: 867 (firewalld)CGroup: /└─867 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopidMay 22 07:48:08 systemd[1]: Started firewalld - dynami…防火墙中的一切都与一个或者多个区域相关联。
配置之后,RHEL 7服务器正常会在公共区域,但是你也许会想将它放置在另一个网络配置防火墙访问。
这时使用firewall-cmd --get-default-zone命令,该命令显示你的服务器在哪一个网络。
如果你想查看配置特定网络的详细信息,你可以使用列表2中的firewall-cmd --zone=zonename --list-all命令。
列表2.root@rhelserver ~]# firewall-cmd --get-default-zonepublic[root@rhelserver ~]# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work[root@rhelserver ~]# firewall-cmd --zone=public --list-allpublic (default, active)interfaces: ens33sources:services: dhcpv6-client sander sshports:masquerade: noforward-ports:icmp-blocks:rich rules:改变当前区域并不难:使用firewall-cmd --set-default-zone=home命令,该命令可用于从公共网络到家庭网络制定一个默认网络。
服务和其他构件在区域中有一些基本的构件块,其中服务是最重要的。
防火墙使用管理员创建在/usr/lib/firewalld/services(系统默认服务)和/etc/firewalld/services文件下的XML文件,配置的自身服务集。
XML文件时通过列表3中的例子创建的。
列表3.[root@rhelserver services]# cat<xml version=“”encoding=“utf-8”><service><short>FTP</short><description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need thevsftpd package installed for this option to be useful.</description><port protocol=“tcp”port=“21”/><module name=“nf_conntrack_ftp”/></service>每一个服务定义都需要一个简短的名字、描述和端口网络用于指定需要使用的协议、端口和模块名。
列表4.以下是创建防火墙服务的例子[root@rhelserver services]# cat<xml version=“”encoding=“utf-8”><service><short>Sander</short><description>Sander is a random service to show how service configurationworks.</description><port port=“666”protocol=“tcp”/></service>一旦你有了正确的服务文件,使用以下代码复制它。
firewall-cmd --list-services命令显示从你服务器上的所有可以找到的服务列表。
如果要增加服务则输入firewall-cmd --add-service yourservice将服务放到默认网络上,或者是使用--zone=zonename选择特定网络。
下面描述了它如何工作:1.使用firewall-cmd --zone=public --list-all命令,显示当前公共区域配置。
[root@rhelserver ~]# firewall-cmd --zone=public --list-allpublic (default, active)interfaces: ens33sources:services: dhcpv6-client sshports:masquerade: noforward-ports:icmp-blocks:rich rules:2. 命令firewall-cmd --zone=public --add-service=ftp,在Linux防火墙的公共区域上添加FTP 服务。
3.重复步骤1检查FTP服务是否成功添加,你将看到服务列表。
4.重启服务器,执行步骤1.你将看到FTP服务消失了,在防火墙中,没有永久的事物,除非你使用了permanent选项。
5.将FTP服务添加到公共网络上,并设为永久设置,该步骤使用firewall-cmd --permanent --zone=public --add-service=ftp命令。
重启之后该设置生效。
6.输入firewall-cmd –reload提交所有规则同时重载防火墙。
使用permanent设置永久防火墙选项是非常重要的。
打破规则配置防火墙配置服务是推荐的方式,它可以轻而易举地提供防火墙的全局概览。
但是如果你想在/etc/firewalld/service文件下自己定义服务,在不使用该文件的情况下也可添加端口。
使用firewall-cmd --permanent --zone=dmz --add-port=22/tcp命令为特定网络指定特定端口,然后使用firewall-cmd --zone=dmz --list-all确认端口已成功添加。
这种方式是非兼容方式,使用服务使对不同的主机分配相似的规则变得简单。
如果没有服务,文件就很难被分配,配置文件中的规则分配也变得困难。
对于更多的控制,你不能够使用直接规则。
原因如下:1.输入firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -j ACCEPT2.现在输入firewall-cdm --list-all显示你的默认网络的配置,端口80没有添加任何东西。
[root@rhelserver ~]# firewall-cmd --list-allpublic (default, active)Interfaces: ens33sources:services: dhcpv6-client ftp sshports:masquerade: noforward-ports:icmp-blocks:rich rules:输入完以上命令后,HTTP端口并没有发生改变,这是因为直接规则写给了IP信息包过滤器接口,而不是防火墙。
3. 输入firewall-cmd --direct --get-all-rules,或者使用firewall-cmd --direct --get-all-rules显示直接规则。
相比于直接规则,使用iptables(列表5)命令可以写到防火墙里。
列表5. Linux防火墙规则实例firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“source address=”service name=”tftp“log prefix=”tftp“level=”info“limit value=”1/m“accept”防火墙规则类似于IP信息包过滤防火墙,提供了大量灵活性。
使用列表5中的一条命令就可以完成和提交许多任务。
它指定了IP家族、源地址、服务名等。
但是需要注意规则是怎样处理登陆的:定义一个特定的登陆前缀、登陆等级信息,以及每分钟传递信息的极限值。
Linux管理员可以申请监测端口的过滤器,所以规则对于IP地址上的过滤器非常有用。
(列表6)列表6. 规则申请Linux防火墙IP地址端口的过滤器firewall-cmd --permanent --zone=public --add-rich-rule=“rule family=”ipv4“\source address=”service name=”http“accept”分析区域firewall-cmd命令是众多配置防火墙的方法之一。
二者择一的,你可以直接编写网络配置文件。
但是如果语法有误,将不会得到任何反馈。
但这是一个简洁简单的配置文件,容易修改和在多个服务器上分配。
列表7.你可以通过编写配置文件配置防火墙<xml version=“”encoding=“utf-8”><zone><short>Public</short><description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description><service name=“dhcpv6-client”/><service name=“ssh”/><rule family=“ipv4”><source address=“<service name=“tftp”/><log prefix=“tftp”level=“info”><limit value=“1/m”/></log><accept/></rule></zone>列表7中包含了添加到先前例子中的所有代码,可以直接写入区域配置文件,其中不包含直接规则,因为直接规则有自己的配置文件。