在简单的话, 防火墙是一种安全系统,其控制基于一组预定义的规则(如分组目的地/源或类型的业务,例如)网络中的传入和传出通信。
RHCSA:控制网络流量与FirewallD和Iptables - 第11部分
在这篇文章中,我们将回顾firewalld的基本知识,在红帽企业默认的动态防火墙后台程序的Linux 7,和iptables服务,为Linux的传统防火墙服务,与大多数系统和网络管理员都非常熟悉,并且它也可在RHEL 7。
FirewallD和Iptables之间的比较
引擎盖下,既firewalld并通过同一个界面iptables服务谈话的netfilter框架内核,这并不奇怪,iptables命令。 但是,与iptables服务相反,firewalld可以在正常系统操作期间更改设置,而不会丢失现有连接。
Firewalld应该是默认在你的RHEL系统安装,虽然它可能没有运行。 你可以用下面的命令( 防火墙配置是用户界面的配置工具)验证:
# yum info firewalld firewall-config
检查防火墙信息
和,
# systemctl status -l firewalld.service
检查FirewallD状态
在另一方面,iptables服务默认情况下不包括在内,但可以通过安装。
# yum update && yum install iptables-services
两个守护进程都可以启动并启用,开始与通常的systemd命令启动:
# systemctl start firewalld.service | iptables-service.service # systemctl enable firewalld.service | iptables-service.service
另请参阅: 有用的命令来管理Systemd服务
至于配置文件,iptables服务使用/etc/sysconfig/iptables
(如果包没有安装在您的系统,这将不存在)。 在用作群集节点的RHEL 7框上,此文件如下所示:
Iptables防火墙配置
而firewalld存储其横跨两个目录的配置, /usr/lib/firewalld
和/etc/firewalld
:
# ls /usr/lib/firewalld /etc/firewalld
防火墙配置
我们将在本文后面进一步检查这些配置文件,之后我们在这里和那里添加一些规则。 现在,它足以提醒您,您可以随时找到有关这两种工具的更多信息。
# man firewalld.conf # man firewall-cmd # man iptables
除此之外,记得看看审查的基本命令和系统文档-第1部分当前系列,在这里我描述几个来源,你可以得到关于安装在RHEL 7系统上的软件包的信息。
使用Iptables控制网络流量
您可能希望参考配置iptables防火墙- 8部分 Linux基金会认证工程师 ( 联邦经济竞争法 )系列,然后再继续刷新你对iptables的内部存储。 因此,我们将能够直接进入例子。
示例1:允许传入和传出Web流量
TCP端口80和443所使用的Apache Web服务器来处理正常(HTTP)和安全(HTTPS)的网络流量的默认端口。 您可以允许传入和传出的网络流量通过enp0s3接口上的两个端口,如下所示:
# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
示例2:阻止来自特定网络的所有(或某些)入局连接
有时可能当你需要阻止所有(或部分)类型的流量从一个特定的网络发起的,说192.168.1.0/24例如:
# iptables -I INPUT -s 192.168.1.0/24 -j DROP
将丢弃所有的包从192.168.1.0/24网络来了,而,
# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
将只允许传入流量通过端口22。
示例3:将传入流量重定向到另一个目标
如果您使用RHEL 7 BOX不仅是软件防火墙,也可作为实际的基于硬件之一,因此它位于两个不同的网络之间,IP转发必须是已经在你的系统中启用。 如果没有,你需要编辑/etc/sysctl.conf
, 把net.ipv4.ip_forward的值设置为1,如下所示:
net.ipv4.ip_forward = 1
然后保存更改,关闭文本编辑器,最后运行以下命令应用更改:
# sysctl -p /etc/sysctl.conf
例如,您还可以安装在与IP 192.168.0.10内部盒的打印机,在端口631(包括打印服务器和防火墙)监听的CUPS服务。 为了从防火墙另一端的客户端转发打印请求,您应该添加以下iptables规则:
# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
请记住,iptables的顺序读取其规则,所以一定要确保默认策略或更高版本的规则不会覆盖在上面的例子中列出。
FirewallD入门
一个与firewalld带来的变化是区域 。 这个概念允许将网络分成不同的区域信任级别,用户已经决定将信任级别放置在该网络中的设备和流量上。
要列出活动区域:
# firewall-cmd --get-active-zones
在下面的例子中, 公共区有效,并且enp0s3接口已自动分配给它。 要查看有关特定区域的所有信息:
# firewall-cmd --zone=public --list-all
列出所有FirewallD区域
既然你可以阅读更多有关在区域中RHEL 7安全指南中,我们将只列出这里一些具体的例子。
示例4:通过防火墙允许服务
要获取支持的服务的列表,请使用。
# firewall-cmd --get-services
列出所有支持的服务
要允许HTTP和HTTPS网络流量通过防火墙,立即生效,并在后续的靴子:
# firewall-cmd --zone=MyZone --add-service=http # firewall-cmd --zone=MyZone --permanent --add-service=http # firewall-cmd --zone=MyZone --add-service=https # firewall-cmd --zone=MyZone --permanent --add-service=https # firewall-cmd --reload
如果省略代码> -防区,默认区域(可以用防火墙CMD -get默认区域检查)被使用。
要删除规则,请在上述命令中替换add和remove。
示例5:IP /端口转发
首先,你需要找出是否为所需区域启用了伪装:
# firewall-cmd --zone=MyZone --query-masquerade
在下图中,我们可以看到, 伪装是外部区域启用,但不公开 :
检查伪装状态
您可以为public启用伪装:
# firewall-cmd --zone=public --add-masquerade
或使用外部的伪装。 下面是我们会做复制示例3 firewalld:
# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
并且不要忘记重新加载防火墙。
你可以找到更多的例子9部分的RHCSA系列中,我们介绍了如何允许或禁用通常使用一个Web服务器和FTP服务器,端口如何改变相应的规则,当这些服务的默认端口被改变。 此外,您可能需要参考firewalld wiki以获取更多示例。
另请参阅: 有用FirewallD例子在RHEL 7配置防火墙
结论
在这篇文章中,我们已经解释了防火墙是什么,是实现一个在RHEL 7可用的服务,并提供了几个例子,可以帮助您开始使用这项任务。 如果您有任何意见,建议或问题,请随时使用下面的表单通知我们。 先谢谢你!