如何在RHEL/CentOS 7以及Fedora中配置FirewallD

/QQ54364732 (业余翻译,希望各位看客不吝指教)

  我们都清楚Net-filterLinux的一种防火墙机制。而Firewalld是一个在网络区域(networks zones)的支持下动态管理防火墙的守护进程。早期的RHEL版本和CentOS 6使用iptables这个守护进程进行数据包过滤。而在RHEL/CentOS 7Fedora 21中,iptables接口将被firewalld取代。

  由于iptables可能会在未来的版本中消失,所以建议从现在起就使用Firewalld来代替iptables。话虽如此,现行版本仍然支持iptables,而且还可以用YUM命令来安装。不过可以肯定的是,在同一个系统中不能同时运行Firewalldiptables,否则可能引发冲突。

  在iptables中需要配置INPUTOUTPUTFORWARD CHAINS。而在Firewalld中新引入了区域(Zones)这个概念。默认情况下,firewalld中就有一些有效的区域(zones),这也是本文将要讨论的内容。

  基础区域如同公共区域(public zone)和私有区域(private zone)。为了让作业在这些区域中运行,需要为网络接口添加特定区域(specified zone)支持,好让我们往firewalld中添加服务。

  默认情况下就有很多生效的服务。firewalld最好的特性之一就是,它本身就提供了一些预定义的服务,而我们可以以这些预定义的服务为模版,复制之以添加我们自己的服务。

  Firewalld还能很好地兼容IPv4IPv6和以太网桥接。在Firewalld中,我们可以有独立的运行时间和永久性的配置。接下来让我们看看如何在区域中作业、创建我们的服务以及更好的利用firewalld这个防火墙机制吧。

测试环境如下:

Operating System  : CentOS Linux release 7.0.1406 (Core)

IP Address        : 192.168.0.55

Host-name     : server1.tecmintlocal.com

  步骤1:安装Firewalld组件

  1.Firewalld组件在RHEL/CentOS 7Fedora 21默认已经安装了。如果没有可以使用如下YUM命令进行安装。

# yum install firewalld -y

  2.安装完毕,查看一下iptables是否正在运行。如果是,你需要用以下命令来stopmask(屏蔽)iptables

# systemctl status iptables

# systemctl stop iptables

# systemctl mask iptables

  步骤2Firewalld组件的讨论

  3.在进行firewalld配置之前,我想来讨论一下区域这个概念。默认情况就有一些有效的区域。我们需要网络接口分配区域。区域规定了区域是网络接口信任或者不信任网络连接的标准。区域包含服务和端口。接下来让我们讨论Firewalld中那些有用的区域

  ·丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用iptables -j drop。使用丢弃规则意味着将不存在响应,只有流出的网络连接有效。

  ·阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过。

  ·公共区域(Public Zone):只接受那些被选中的连接,而这些通过在公共区域中定义相关规则实现。服务器可以通过特定的端口数据,而其它的连接将被丢弃。

  ·外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,而其它的连接将被丢弃或者不被接受。

  ·隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性。

  ·工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许。

  ·家庭区域(Home Zone):这个区域专门用于家庭环境。我们可以利用这个区域来信任网络上其它主机不会侵害你的主机。它同样只允许被选中的连接。

  ·内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接。

  ·信任区域(Trusted Zone):信任区域允许所有网络通信通过。

 

  现在你对区域有个很好的认识了,让我们使用以下的命令来找出有用的区域、默认区域以及列出所有的区域吧。

# firewall-cmd --get-zones

# firewall-cmd --get-default-zone

# firewall-cmd --list-all-zones

  注意:以上命令的输出不仅仅只有单页,因为它将会列出每种区域如blockdmzdropexternalhomeinternalpublictrusted以及work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来。

  步骤3:设置默认区域

  4.如果你想设置默认区域像internalexternaldropwork或者其它区域,可以使用下面的命令来设置。这里以设置internal做默认区域为例。

# firewall-cmd --set-default-zone=internal

  5.设置完毕,使用下面命令核实默认区域。

# firewall-cmd --get-default-zone

  6.我们这里使用的接口是enp0s3,如果需要查看哪个区域和这个接口绑定可以使用下面的命令。

# firewall-cmd --get-zone-of-interface=enp0s3

  7.firewalld另外一个有趣的特性是“icmptype”是一个firewalld支持的icmp类型。可以使用下面的命令来列出firewalld所支持的icmp类型。

# firewall-cmd --get-icmptypes

  步骤4:firewalld中创建自己的服务

  8.服务是firewalld所使用的有关端口和选项的规则集合。被启动的服务会在firewalld服务开启或者运行时自动加载。默认情况下,很多服务是有效的。使用下面命令可列出有效的服务。

# firewall-cmd --get-services

  9.想要列出默认有效的服务,也可以进入下面的目录也能够取得。

# cd /usr/lib/firewalld/services/

  10.想要创建自己的服务,需要在下面的目录下定义它。比如,现在我想添加一个RTMP服务,端口号1935。首先,任选一个服务复制过来。

# cd /etc/firewalld/services/# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

  然后,进入我们刚刚所说那个目录。接下来把复制过来的文件重命名为“rtmp.xml”,如图所示。

# cd /etc/firewalld/services/

  11.接下来打开并编辑文件的头部、描述、协议和端口号,以供RTMP服务使用,如下图所示。

  12.重启firewalld服务或者重新加载设置,以激活这些设置。

# firewall-cmd --reload

  13.为确认服务是否已经启动,运行下面的命令获取有效的服务列表。

# firewall-cmd --get-services

  步骤5:为区域分配服务

  14.接下来看看如何通过“firewall-cmd”命令来管理firewalld。输入以下命令了解当前的状态,和所有激活的区域。

# firewall-cmd --state# firewall-cmd --get-active-zones

  15.为enp0s3接口取得公共区域(public zone)。这是默认的接口,在文件/etc/firewalld/firewalld.conf中定义成DefaultZone=public。以下命令列出这个默认接口区域中有效服务。

# firewall-cmd --get-service

  步骤6:添加服务进区域中

  16.在以上的例程中,我们通过创建rtmp服务知道了如何创建自己的服务。现在我们讲学习怎样把rtmp服务添加进入区域中。

# firewall-cmd --add-service=rtmp

  17.删除已经添加入的区域、类型。

# firewall-cmd --zone=public --remove-service=rtmp

  上面的设置只是暂时性的。想要永久有效需要执行下面的命令,加带选项--permanent

# firewall-cmd --add-service=rtmp --permanent# firewall-cmd --reload

  18.添加或者删除任何服务或者端口之后,要确保重载firewalld服务。

# firewall-cmd --reload # firewall-cmd --list-all

  步骤7:为网段(network range)添加详细规则

  19.如果想要允许像httphttpsvnc-serverPostgreSQL之类的服务,可以使用下面的规则。首先添加规则,并使之永久生效,然后重载规则并检查状态。

  现在,网段192.168.0.0/24可以在我的服务器中使用以上的服务。选项--permanent可以在所有规则中使用,我们需要定义规则并在设置永久生效之后检查客户端通道。

  添加以上的规则,不要忘记使用下面的命令来重载firewalld规则以及列出规则列表:

# firewall-cmd --reload# firewall-cmd --list-all

  想要了解更多关于firewalld的内容使用man吧。

# man firewalld

  以上,我们已经学习了在RHEL/CentOS 7以及Fedora中如何使用firewalld机制建立net-filter

  总结

  Net-filter是每个Linux distributions的防火墙框架。在过去每个RHELCentOS版本中我们使用iptables,而在CentOS 7中我们引入了Firewalld。而理解和使用firewalld相对来说更加简单。希望本文对你有所帮助。

  原文:http://www.tecmint.com/configure-firewalld-in-centos-7/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值