在Rhel7和Centos 7上开始使用防火墙

时间:2020-02-23 14:30:24  来源:igfitidea点击:

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