在CentOS 8系统上配置和管理防火墙(Firewall)的方法

在本文中,我们将介绍如何在CentOS 8操作系统上配置和管理防火墙(Firewall),我们还将说明基本的FirewallD概念。防火墙是一种用于监视和过滤传入和传出网络流量的方法,它通过定义一组安全规则来工作,这些安全规则确定是允许还是阻止特定流量,正确配置的防火墙是整个系统安全的最重要方面之一,CentOS 8搭载了一个名为firewalld的防火墙守护程序,它是具有D-Bus界面的完整解决方案,可让你动态管理系统的防火墙,参考在Ubuntu 18.04/16.04系统上安装和使用Firewalld的方法

基本防火墙概念

Firewalld使用区域和服务的概念,根据你要配置的区域和服务,你可以控制允许或禁止与系统进行的流量。

可以使用firewall-cmd命令行实用程序配置和管理Firewalld。

在CentOS 8操作系统中,iptables被nftables替代,作为firewalld守护程序的默认防火墙后端。

1、防火墙区域

区域是预定义的规则集,用于指定计算机连接到的网络的信任级别,你可以将网络接口和源分配给区域。

以下是FirewallD提供的区域,根据区域的信任级别从不信任到信任:

drop:删除所有传入连接,而无任何通知,仅允许传出连接。

block:所有传入连接均被拒绝,其中icmp-host禁止消息用于IPv4,icmp6-adm禁止用于IPv6n,仅允许传出连接。

public:用于不受信任的公共区域,你不信任网络上的其他计算机,但是可以允许选择的传入连接。

external:用于在系统充当网关或路由器时启用了NAT伪装的外部网络,仅允许选择的传入连接。

internal:当系统充当网关或路由器时,用于内部网络,网络上的其他系统通常是受信任的,仅允许选择的传入连接。

dmz:用于非军事区中访问网络其余部分的计算机,仅允许选择的传入连接。

work:用于工作机,网络上的其他计算机通常是受信任的,仅允许选择的传入连接。

home:用于家用机器,网络上的其他计算机通常是受信任的,仅允许选择的传入连接。

trusted:接受所有网络连接,信任网络中的所有计算机。

2、防火墙服务

防火墙服务是预定义的规则,适用于区域,并定义必要的设置以允许特定服务的传入流量,该服务使你可以轻松地在一个步骤中执行多个任务。

例如,服务可以包含有关打开端口,转发流量等的定义。

3、防火墙运行时和永久设置

Firewalld使用两个单独的配置集,即运行时配置和永久配置。

运行时配置是实际的运行配置,并且不会在重新启动后持续存在,当firewalld守护程序启动时,它将加载永久配置,该配置将成为运行时配置。

默认情况下,使用firewall-cmd实用程序对Firewalld配置进行更改时,更改将应用​​于运行时配置,要使更改永久生效,请在命令后附加–permanent选项。

要在两个配置集中应用更改,可以使用以下两种方法之一:

1]、更改运行时配置并将其永久化:

$ sudo firewall-cmd <options>

$ sudo firewall-cmd –runtime-to-permanent

2]、更改永久配置并重新加载firewald守护程序:

$ sudo firewall-cmd –permanent <options>

$ sudo firewall-cmd –reload

启用FirewallD

在CentOS 8操作系统上,默认情况下已安装并启用firewalld,如果由于某种原因未在系统上安装它,则可以通过键入以下命令来安装并启动守护程序:

$ sudo dnf install firewalld

$ sudo systemctl enable firewalld –now

可以使用以下方法检查防火墙服务的状态:

$ sudo firewall-cmd –state

如果启用了防火墙,该命令应显示正在运行,否则,你将看到未运行。

参考:CentOS 7下使用FirewallD构建动态防火墙

防火墙区域

如果尚未更改,则默认区域设置为public,所有网络接口都分配给该区域。

默认区域是用于所有未明确分配给另一个区域的区域。

可以通过键入以下命令查看默认区域:

$ sudo firewall-cmd –get-default-zone

返回:

public

要获取所有可用区域的列表,请输入:

$ sudo firewall-cmd –get-zones

返回:

block dmz drop external home internal public trusted work(阻止dmz放下外部家庭内部公共信任的工作)

要查看活动区域和分配给它们的网络接口,请执行以下操作:

$ sudo firewall-cmd –get-active-zones

下面的输出显示接口eth0和eth1已分配给公共区域:

public

interfaces: eth0 eth1

可以使用以下命令打印区域配置设置:

$ sudo firewall-cmd –zone=public –list-all

返回:

public (active)

target: default

icmp-block-inversion: no

interfaces: eth0 eth1

sources:

services: ssh dhcpv6-client

ports:

protocols:

masquerade: no

forward-ports:

source-ports:

icmp-blocks:

rich rules:

从上面的输出中,我们可以看到公共区域处于活动状态,并使用默认目标REJECT,输出还显示该区域由eth0和eth1接口使用,并允许DHCP客户端和SSH通信。

如果要检查所有可用区域的配置,请输入:

$ sudo firewall-cmd –list-all-zones

该命令将显示包含所有可用区域设置的巨大列表。

1、更改区域目标

目标为未指定的传入流量定义区域的默认行为,可以将其设置为以下选项之一:默认,接受,拒绝和删除。

要设置区域的目标,请使用–zone选项指定区域,并使用–set-target选项指定目标。

例如,要将公共区域的目标更改为DROP,可以运行:

$ sudo firewall-cmd –zone=public –set-target=DROP

2、将接口分配给其他区域

你可以为不同区域创建特定的规则集,并为其分配不同的接口,当你在计算机上有多个接口时,这特别有用。

要将接口分配给其他区域,请使用–zone选项指定区域,并使用–change-interface选项指定接口。

例如,以下命令将eth1接口分配给工作区:

$ sudo firewall-cmd –zone=work –change-interface=eth1

通过键入以下命令来验证更改:

$ sudo firewall-cmd –get-active-zones

返回:

work

interfaces: eth1

public

interfaces: eth0

3、更改默认区域

要更改默认区域,请使用–set-default-zone选项,后跟要设为默认区域的名称。

例如,要将默认区域更改为home,可以运行以下命令:

$ sudo firewall-cmd –set-default-zone=home

使用以下命令验证更改:

$ sudo firewall-cmd –get-default-zone

返回:

home

防火墙服务

使用防火墙,可以基于称为服务的预定义规则允许特定端口或源的流量。

要获取所有默认可用服务的列表,请输入:

$ sudo firewall-cmd –get-services

通过打开/usr/lib/firewalld/services目录中的关联.xml文件,可以找到有关每个服务的更多信息,例如,HTTP服务的定义如下(/usr/lib/firewalld/services/http.xml文件):

<?xml version=”1.0″ encoding=”utf-8″?>

<service>

<short>WWW (HTTP)</short>

<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>

<port protocol=”tcp” port=”80″/>

</service>

要仅对当前会话(运行时配置)允许公共区域中的接口允许传入的HTTP通信(80端口),请输入:

$ sudo firewall-cmd –zone=public –add-service=http

如果要修改默认区域,则可以省略–zone选项。

要验证是否已成功添加服务,请使用–list-services选项:

$ sudo firewall-cmd –zone=public –list-services

返回:

ssh dhcpv6-client http

如果你想在重启后将80端口保持打开状态,则需要再次输入相同的命令,但这一次带有–permanent选项:

$ sudo firewall-cmd –permanent –zone=public –add-service=http

使用–list-services和–permanent选项来验证你的更改:

$ sudo firewall-cmd –permanent –zone=public –list-services

返回:

ssh dhcpv6-client http

删除服务的语法与添加服务时的语法相同,只需使用–remove-service而不是–add-service选项即可:

$ sudo firewall-cmd –zone=public –remove-service=http –permanent

上面的命令从公共区域永久配置中删除http服务。

下面讲解:创建一个新的FirewallD服务。

正如我们已经提到的,默认服务存储在/usr/lib/firewalld/services目录中,创建新服务的最简单方法是将现有服务文件复制到/etc/firewalld/services目录(该目录是用户创建的服务的位置)并修改文件设置。

例如,要为Plex Media Server创建服务定义,可以使用SSH服务文件:

$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

打开新创建的plexmediaserver.xml文件,并在<short>和<description>标记内更改服务的简称和描述,你需要更改的最重要的标签是端口标签,它定义了你要打开的端口号和协议。

在下面的示例中,我们打开端口1900 UDP和32400 TCP(/etc/firewalld/services/plexmediaserver.xml文件):

/etc/firewalld/services/plexmediaserver.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<service version=”1.0″>

<short>plexmediaserver</short>

<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>

<port protocol=”udp” port=”1900″/>

<port protocol=”tcp” port=”32400″/>

</service>

保存文件并重新加载FirewallD服务:

$ sudo firewall-cmd –reload

现在,可以像其他任何服务一样在你的区域中使用plexmediaserver服务。

打开端口和源IP

Firewalld还允许你快速启用来自受信任IP地址或特定端口上的所有流量,而无需创建服务定义。

1、打开源IP

要允许来自特定IP地址(或范围)的所有传入流量,请使用–zone选项指定区域,并使用–add-source选项指定源IP。

例如,要在公共区域中允许来自192.168.1.10的所有传入流量,请运行:

$ sudo firewall-cmd –zone=public –add-source=192.168.1.10

使新规则持久化:

$ sudo firewall-cmd –runtime-to-permanent

使用以下命令验证更改:

$ sudo firewall-cmd –zone=public –list-sources

返回:

192.168.1.10

删除源IP的语法与添加源IP的语法相同,只需使用–remove-source,而不是–add-source选项:

$ sudo firewall-cmd –zone=public –remove-source=192.168.1.10

2、打开源端口

要允许给定端口上的所有传入流量,请使用–zone选项指定区域,并使用–add-port选项指定端口和协议。

例如,要为当前会话打开公共区域中的8080端口,请运行:

$ sudo firewall-cmd –zone=public –add-port=8080/tcp

该协议可以是tcp、udp、sctp或dccp。

验证更改:

$ sudo firewall-cmd –zone=public –list-ports

返回:

8080

要在重新启动后使端口保持打开状态,请使用–permanent选项运行同一命令,或执行以下命令,将规则添加到永久设置中:

$ sudo firewall-cmd –runtime-to-permanent

删除端口的语法与添加端口时的语法相同,只需使用–remove-port,而不是–add-port选项即可:

$ sudo firewall-cmd –zone=public –remove-port=8080/tcp

转发端口

要将流量从一个端口转发到另一个端口,请首先使用–add-masquerade选项启用对所需区域的伪装,例如,要对外部区域启用伪装,请键入:

$ sudo firewall-cmd –zone=external –add-masquerade

1、将流量从一个端口转发到IP地址上的另一个端口

在以下示例中,我们将流量从80端口转发到同一服务器上的8080端口:

$ sudo firewall-cmd –zone=external –add-forward-port=port=80:proto=tcp:toport=8080

2、将流量转发到另一个IP地址

在以下示例中,我们将流量从80端口转发到IP 10.10.10.2的服务器上的80端口:

$ sudo firewall-cmd –zone=external –add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

3、将流量转发到其他端口上的另一台服务器

在下面的示例中,我们将流量从80端口转发到IP 10.10.10.2的服务器上的8080端口:

$ sudo firewall-cmd –zone=external –add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

要使转发规则持久化,请使用:

$ sudo firewall-cmd –runtime-to-permanent

结论

通过上面的操作步骤,你已经了解了如何在CentOS 8系统上配置和管理防火墙服务。

确保允许系统正常运行所必需的所有传入连接,同时限制所有不必要的连接。

CentOS7 – 配置Dovecot以实现安全的POP3和IMAP访问-pop3设置

配置Dovecot以实现安全的POP3和IMAP访问

检查电子邮件时,电子邮件程序将连接到您的邮件服务器,以查看邮件目录中是否有新邮件。 如果将其配置为使用邮局协议(POP3),则会在本地下载邮件并从服务器中删除它们。 如果将其配置为使用Internet邮件访问协议(IMAP),则邮件将保留在服务器上,您可以远程管理它.

Dovecot开箱即用处理这两种协议。 由于我们已经为其SASL功能安装了Dovecot,我们可以在系统的防火墙中打开POP3和IMAP流量的标准端口并完成。 但是,连接将是未加密的,并且信息将以纯文本形式通过网络传输。 此配方教您如何使用SSL保护这些连接.

准备

此配方需要一个CentOS系统,Postfix和Dovecot配置如前面的配方中所述。 通过使用root帐户登录或使用sudo,还需要管理权限。

怎么做

请按照以下步骤配置对Dovecot的访问权限:

  • 使用文本编辑器打开/etc/dovecot/dovecot.conf:
vi /etc/dovecot/dovecot.conf
  • 找到协议参数。 删除前导#字符并将其值设置为imaps pop3s:
protocols = imaps pop3s
  • 保存更改并关闭文件。
  • 使用文本编辑器打开/etc/dovecot/conf.d/10-ssl.conf:
vi /etc/dovecot/conf.d/10-ssl.conf
  • 找到ssl参数并将其值设置为yes:
 ssl = yes
  • 找到ssl_cert和ssl_key参数。 使用证书和密钥文件的路径更新其值(请注意,两个路径都以<开头):
ssl_cert = </etc/pki/tls/certs/mail.example.pem
ssl_key = </etc/pki/tls/private/mail.example.key
  • 保存更改并关闭文件。
  • 重新启动Dovecot以使更改生效:
systemctl restart dovecot.service
  • 在防火墙中打开用于IMAP over SSL的端口993和用于POP3 over SSL的端口995:
firewall-cmd --permanent --add-service=imaps \
--add-service=pop3s
firewall-cmd --reload

工作原理

Dovecot可以轻松保护POP3和IMAP连接的流量; 事实上,配置它只需要几秒钟。 我们首先编辑了协议参数/etc/dovecot/dovecot.conf,让Dovecot知道我们希望这些协议得到保护:

protocols = imaps pop3s

然后我们更新了/etc/dovecot/conf.d/10-ssl.conf以启用SSL以使用sslparameter并使用ssl_cert和ssl_key识别证书和加密密码。由于Postfix和Dovecot在同一系统上运行,并且我们已经为 Postfix生成了密钥和证书,因此我们可以在Dovecot的配置中引用相同的文件.Dovecot使用前面的<在路径前面指定它应该使用文件的内容作为参数的值而不是文字字符串本身:

ssl = yes
ssl_cert = </etc/pki/tls/certs/mail.example.pem
ssl_key = </etc/pki/tls/private/mail.example.key

Dovecot仍然允许来自localhost的连接对POP和IMAP(分别在端口110和143上)进行非SSL访问,但是一旦我们重新启动它以使配置更改生效,所有其他用户将需要使用SSL来 访问他们的消息.

我们可以使用mailx来测试配置。 首先,我们将检查POP3:

mailx -f pop3s://tboronczyk@mail.example.com

-f参数指定mailx将读取的目录以检索我们的消息。 作为URI,该值指示mailx使用POP3 over SSL(pop3s)在mail.example.com系统上读取我们用户的默认目录。

除了更改URI的协议之外,该命令与检查IMAP相同:

mailx -f imaps://tboronczyk@mail.example.com

因为我们使用的是自签名证书,所以mailx会抱怨证书尚未被用户标记为信任,并提示我们是否要继续。 回答y,然后系统会提示您输入用户密码。 mailx然后显示用户的收件箱。 在提示符处输入quit退出程序:CentOS7 - 配置Dovecot以实现安全的POP3和IMAP访问

mailx可用于测试我们通过SSL测试POP3和IMAP的配置

注意

如果mailx抱怨它缺少nss-config-dir变量,则可以使用-S在命令行上定义它。 该值应该是mailx可用于验证证书信任的证书数据库的路径:

mailx -S nss-config-dir=/etc/pki/nssdb \
-f pop3s://tboronczyk@mail.example.com

当我们第一次配置Postfix时,我们调整了它的home_mailbox参数以将消息存储在不同的目录中。 我承认当时这是可选的,但是当我们设置检索访问时它会使事情变得更容易和更清晰。 如果您当时未设置home_mailbox,则传入的消息将附加到/ var / spool / mail下的用户邮件假脱机文件中,并且Dovecot需要一些其他配置才能访问它们。 这些更改可以在/etc/dovecot/conf.d/10-mail.conf中进行.

或者,您可以将假脱机文件转换为Maildir目录中的单独消息。 首先,安装mb2md软件包:

yum install ftp://ftp.pbone.net/mirror/atrpms.net/el7- 
x86_64/atrpms/stable/mb2md-3.20-2.at.noarch.rpm

打开/etc/postfix/main.cf文件并找到home_mailbox参数。 从值为Maildir /的条目中删除前导#字符:

home_mailbox = Maildir/

保存更改,然后重新启动Postfix以使更新生效。 然后,对于每个帐户,调用mb2md来转换假脱机文件。 该实用程序需要作为目标用户运行,因此请使用su临时切换到该用户的上下文:

su -l -c "mb2md -m" tboronczyk

See also

Refer to the following resources for more information on the different topics discussed in this recipe, including Dovecot, POP3, and IMAP.

  • The mailx manual page (man 1 mailx)
  • The Dovecot Homepage (http://www.dovecot.org/)
  • RFC 3501: Internet Message Access Protocol (https://tools.ietf.org/html/rfc3501)
  • RFC 1939: Post Office Protocol (https://tools.ietf.org/html/rfc1939)
  • Converting Mbox Mailboxes to Maildir format (http://batleth.sapienti-sat.org/projects/mb2md/)