在Rhel7和Centos 7上开始使用防火墙
Rhel7上的防火墙:我是一个关于安全的人。
看到网络上规避多层的安全性只是反对我保证为中心的原因。
一些系统管理员不能花费几分钟的时间来关闭前门,这总是对网络系统产生负面影响。
在本教程中,我们将在深度覆盖端口安全性和使用防火墙中来保护防御,以保护Linux服务器。
由于我们无法涵盖本教程中的所有内容,我们将专注于防火墙基础知识和演示各种配置。
什么是防火墙?
防火墙是一种动态防火墙服务,使用低级IPTABLE,IP6Tables和EBTABLES命令管理Linux内核NetFilter子系统。
防火墙是Red Hat Enterprise Linux 7(Rhel)系列的Linux发行版中使用的默认防火墙服务。
它有支持IPv4和IPv6防火墙设置。
防火墙提供的防火墙服务是动态而不是静态,因为立即实现对配置所做的更改,无需应用或者保存更改。
这是一个优势,因为不会发生现有网络连接的意外中断。
防火墙将所有传入流量分开到区域内,每个区域都有自己的一组规则。
用于传入连接的防火墙逻辑
防火墙必须确定要用于传入连接的区域。
为此,遵循以下顺序,匹配胜负的第一个规则:如果传入数据包的源地址与区域的源规则设置匹配,则该数据包通过该区域路由。
如果数据包匹配的传入接口,则该数据包路由。
将使用该区域的区域的过滤器设置。
将使用默认区域。
注意:任何新网络接口的默认区域将设置为公共区域。
配置文件其中?
FirewAlld的配置文件存储在/usr/lib/firewalld /和/etc/firewalld /目录中的各种XML文件中。
可以编辑这些文件,写入,备份并用作其他安装的模板。
如果在两个位置存储具有相同名称的配置文件,则使用/etc/firewalld /将使用版本,这意味着管理员可以覆盖默认区域和设置。
如何管理防火墙?
作为对防火墙服务进行更改的方式,可用三种方式:使用命令行客户端,防火墙-CMD。
它用于使两个永久性和运行时间变化。
root用户或者滚轮组的任何成员都可以运行防火墙-cmd命令,polkit机制用于授权命令。
使用图形工具防火墙 - 配置/etc/firewalld /的配置文件/
说明:
FireWAllD.Service和Iptables.Service,IP6Tables.Service和EBTABLES.Service服务相互冲突。
在运行防火墙服务之前,它是一个很好的做法掩盖其他服务。
这可以通过以下命令完成:
for SERVICE in iptables ip6tables ebtables; do systemctl mask ${SERVICE}.service done }
防火墙如何与iptables不同?
FireWAlld将其配置文件存储在/usr/lib/firewalld /和/etc/firewalld/wher iptables service中的各种xml文件中/etc/sysconfig/iptables中的。
RHEL 7上的文件/etc/sysconfig/iptables由于默认情况下,它与防火墙一起携带。
如果对iptables服务,每次单个更改都必须刷新旧规则,因此必须从/中重新读取规则/etc/sysconfig/iptables。
使用防火墙仅使用差异,可以在运行时更改设置而不会丢失现有连接。
防火墙VS iptables工作图
使用防火墙-CMD配置防火墙设置
防火墙-CMD作为主防火墙包的一部分安装。
几乎所有命令都将在运行时配置,除非 --permanent
选项已指定。
应用规则的区域使用该选项指定 --zone=<ZONE>
。
如果如果是,则使用默认区域 --zone
被省略了。
更改已激活 firewall-cmd --reload
如果它们适用于 --permanent
永久配置。
下表显示了许多常用的防火墙-CMD命令以及说明:
--get-zones | 列出所有可用区域 |
--get-default-zone | 获取当前的默认区域 |
--get-active-zones | 列出所有绑定了接口或者源且当前正在使用的区域。 |
--set-default-zone = < ZONE> | 设置默认区域。这将同时更改运行时和永久配置。 |
--list-all-zones | 列出所有区域检索所有区域的所有信息-接口,端口,服务,源等 |
--list-all [--zone = <@ ZONE>] | 列出“ < ZONE>”的所有已配置的服务,端口,源和接口。如果未使用--zone = 选项,则使用默认区域。 |
--add-interface = < INTERFACE> [--zone = <@ ZONE>] | 将所有通过< INTERFACE >来的流量路由到指定区域。如果未提供--zone = 选项,则使用默认区域。 |
--change-interface = < INTERFACE> [--zone = <@ ZONE>] | 将接口与“ < ZONE>”(而不是其当前区域)相关联。如果未提供--zone = 选项,则使用默认区域。 |
--add-source = < CIDR> [--zone = <@ ZONE>] | 将来自IP地址/网络< CIDR> 的所有流量路由到指定区域。如果未提供区域,则使用默认区域。 |
--remove-source = < CIDR> [--zone = <@ ZONE> | 删除一条规则,该规则路由来自指定区域的来自指定IP地址或者网络“ < CIDR>”的所有流量。如果未指定区域选项,则使用默认区域。 |
--get-services | 获取服务列出所有预定义的服务 |
--add-service = < SERVICE> | 允许访问“ < SERVICE>”。如果未提供--zone = 选项,则使用默认区域。 |
--remove-service = < SERVICE> | 从区域的允许列表中删除< SERVICE> 。如果未提供--zone = 选项,则使用默认区域。 |
--add-port = < PORT/PROTOCOL> | 允许流量进入 < PORT/PROTOCOL>端口。如果未提供--zone = 选项,则使用默认区域。 |
--remove-port = < PORT/PROTOCOL> | 从区域的允许列表中删除“ < PORT/PROTOCOL>”端口。如果未提供--zone = 选项,则使用默认区域。 |
--reload | 删除运行时配置并应用持久配置。 |
了解网络区域
防火墙可以将网络分离为基于用户决定放置的信任程度的不同区域。
防火墙数据提供了许多预定义区域,每个预定区域都有其预期用途。
下表介绍了更多:
trusted | 默认情况下,它允许所有传入流量。 |
home | 默认情况下,除非传入流量与ssh,ipp-client,mdns,samba-client,dhcpv6-client预定义服务匹配或者与传出流量相关,否则请拒绝传入流量。 |
public | 默认情况下,除非传入流量与ssh,dhcpv6-client预定义服务匹配或者与传出流量相关,否则请拒绝传入流量。这是新添加的网络接口的默认区域。 |
internal | 默认情况下,除非传入流量与ssh,ipp-client,mdns,samba-client,dhcpv6-client预定义服务匹配或者与传出流量相关(与本地区域相同),否则拒绝传入流量。 |
work | 默认情况下,除非传入流量与ssh,ipp-client,dhcpv6-client预定义服务匹配或者与传出流量相关,否则拒绝传入流量。 |
dmz | 默认情况下,除非传入流量与ssh预定义服务匹配或者与传出流量相关,否则拒绝传入流量。通常在非军事区用于公开访问且内部网络访问受限的计算机 |
external | 默认情况下,除非传入流量与ssh预定义服务匹配或者与传出流量相关,否则拒绝传入流量。通过该区域转发的IPv4传出流量被伪装成类似于源自传出网络接口的IPv4地址的流量。 |
block | 默认情况下,拒绝所有传入流量,除非与传出流量无关。 |
drop | 默认情况下,将丢弃所有传入流量,除非它与传出流量无关–不要以ICMP错误作为响应。 |
使用防火墙-CMD示例
考虑下面的示例,加强我们对如何使用防火墙-CMD的知识。
首先验证防火墙是否已启用并在系统上运行。
systemctl status firewalld.service
如果没有运行,则可以使用:
systemctl start firewalld systemctl enable firewalld
--get-zones
将默认区域设置为DMZ。
firewall-cmd --set-default-zone=dmz firewall-cmd --get-default-zone
--get-default-zone
将来自192.168.100.0/24网络的所有流量分配给可信区域并验证。
firewall-cmd --permanent --zone=trusted --add-source=192.168.100.0/24 firewall-cmd --reload firewall-cmd --list-all --zone=trusted firewall-cmd --get-active-zones
--get-active-zones
打开内部区域的HTTP和HTTPS流量。
firewall-cmd --permanent --add-service={http,https} --zone=internal firewall-cmd --reload firewall-cmd --list-services --zone=internal
要从区域删除永久服务:
firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
--set-default-zone=<ZONE>
转换eth0接口到当前会话的"内部"区域:
firewall-cmd --zone=internal --change-interface=eth0
--list-all-zones
将eth1接口添加到家庭区域:
firewall-cmd --zone=home --add-interface=eth1
接口管理的其他选项:
查询接口是否在区域中:
firewall-cmd [--zone=<zone>] --query-interface=<interface>
从区域中删除接口:
firewall-cmd [--zone=<zone>] --remove-interface=<interface>
--list-all [--zone=<ZONE>]
在家庭区域启用伪装
firewall-cmd --zone=home --add-masquerade
在区域中禁用伪装
firewall-cmd [--zone=<zone>] --remove-masquerade
查询伪装在一个区域
firewall-cmd [--zone=<zone>] --query-masquerade
禁用在区域中永久伪装
firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
<ZONE>
在家庭区域永久启用MySQL的端口3306/TCP
firewall-cmd --permanent --zone=home --add-port=3306/tcp
永久禁用一个端口和协议组合在区域中
firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
--zone=
块回复公共区域中的回复消息
firewall-cmd --zone=public --add-icmp-block=echo-reply
--add-interface=<INTERFACE> [--zone=<ZONE>]
将SSH转发到内部区域的主机192.168.10.5
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=192.168.10.5
参考
man 页面:
man firewall-cmd man firewalld man firewalld.zones man firewall.zone man firewall-config