Linux 管理员 - 防火墙设置


firewalld是 CentOS 上 iptables 的默认前端控制器。与原始 iptables 相比,firewalld前端有两个主要优点 -

  • 使用易于配置和实施的区域抽象链和规则。

  • 规则集是动态的,这意味着当设置更改和/或修改时,有状态连接不会中断。

请记住,firewalld是 iptables 的包装器——而不是替代品。虽然自定义 iptables 命令可以与firewalld一起使用,但建议使用firewalld,以免破坏防火墙功能。

首先,让我们确保firewalld已启动并启用。

[root@CentOS rdc]# systemctl status firewalld 
● firewalld.service - firewalld - dynamic firewall daemon 
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) 
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago 
 Docs: man:firewalld(1) 
Main PID: 712 (firewalld) 
  Memory: 34.7M 
 CGroup: /system.slice/firewalld.service 
       └─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

我们可以看到,firewalld 既处于活动状态(在启动时启动)并且当前正在运行。如果不活动或未启动,我们可以使用 -

systemctl start firewalld && systemctl enable firewalld

现在我们已经配置了firewalld服务,让我们确保它可以运行。

[root@CentOS]# firewall-cmd --state 
running 
[root@CentOS]#

我们可以看到,firewalld服务功能齐全。

Firewalld 基于区域的概念。区域通过网络管理器应用于网络接口。我们将在配置网络时讨论这一点。但目前,默认情况下,更改默认区域将更改处于“默认区域”默认状态的所有网络适配器。

让我们快速浏览一下firewalld开箱即用的每个区域。

先生。 区域及描述
1

降低

信任度低。所有传入连接和数据包都会被丢弃,并且只有传出连接可以通过状态完整实现

2

堵塞

传入连接将通过 icmp 消息进行回复,让发起者知道该请求被禁止

3

民众

所有网络均受到限制。但是,可以明确允许选定的传入连接

4

外部的

为 NAT 配置firewalld。内部网络保持私有但可访问

5

DMZ

仅允许某些传入连接。用于DMZ隔离的系统

6

工作

默认情况下,假设系统处于安全的工作环境中,则信任网络上的更多计算机

7

磨练

默认情况下,更多服务是未过滤的。假设系统位于家庭网络上,将使用 NFS、SAMBA 和 SSDP 等服务

8

值得信赖的

网络上的所有机器都是可信的。大多数传入连接都是不受限制的。这不适用于暴露于互联网的接口

最常见的使用区域是:公共区域、下降区域、工作区域和家庭区域。

使用每个公共区域的一些场景是 -

  • public - 这是管理员最常用的区域。它将允许您应用自定义设置并遵守 LAN 上操作的 RFC 规范。

  • drop - 何时使用drop的一个很好的例子是在安全会议上、公共 WiFi 上或直接连接到互联网的接口上。drop假定所有未经请求的请求都是恶意的,包括 ICMP 探测。因此任何州外的请求都不会收到回复。Drop的缺点是,在某些需要严格 RFC 合规性的情况下,它可能会破坏应用程序的功能。

  • 工作- 您位于半安全的公司 LAN 上。可以假设所有交通都是适度安全的。这意味着它不是 WiFi,我们可能有 IDS、IPS 和物理安全或 802.1x。我们还应该熟悉使用局域网的人。

  • home - 您位于家庭 LAN 上。您个人对 LAN 上的每个系统和用户负责。您了解 LAN 上的每台计算机,并且没有任何一台计算机受到损害。通常,新服务是为了在受信任的个人之间共享媒体而提出的,您不需要为了安全而花费额外的时间。

区域和网络接口在一对多级别上工作。一个网络接口一次只能应用一个区域。同时,一个区域可以同时应用于多个接口。

让我们看看有哪些区域可用以及当前应用的区域是什么。

[root@CentOS]# firewall-cmd --get-zones 
 work drop internal external trusted home dmz public block

[root@CentOS]# firewall-cmd --get-default-zone 
public
[root@CentOS]#

准备好在firewalld中添加一些自定义规则了吗?

首先,让我们从外部的端口扫描仪看来,我们的盒子是什么样子的。

bash-3.2# nmap -sS -p 1-1024 -T 5  10.211.55.1
 
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST 
Nmap scan report for centos.shared (10.211.55.1) 
Host is up (0.00046s latency). 
Not shown: 1023 filtered ports 
PORT   STATE SERVICE 
22/tcp open  ssh


Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds 
bash-3.2#

让我们允许传入请求发送到端口 80。

首先,检查默认应用的区域。

[root@CentOs]# firewall-cmd --get-default-zone 
public
[root@CentOS]#

然后,设置允许端口 80 进入当前默认区域的规则。

[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp 
success
[root@CentOS]#

现在,让我们在允许端口 80 连接后选中我们的框。

bash-3.2# nmap -sS -p 1-1024 -T 5  10.211.55.1

Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST 
Nmap scan report for centos.shared (10.211.55.1) 
Host is up (0.00053s latency). 
Not shown: 1022 filtered ports 
PORT   STATE  SERVICE 
22/tcp open   ssh 
80/tcp closed http

Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds 
bash-3.2#

现在允许未经请求的流量达到 80。

让我们删除默认区域,看看端口扫描会发生什么情况。

[root@CentOS]# firewall-cmd --set-default-zone=drop 
success

[root@CentOS]# firewall-cmd --get-default-zone 
drop

[root@CentOs]#

现在让我们在更安全的区域中扫描具有网络接口的主机。

bash-3.2# nmap -sS -p 1-1024 -T 5  10.211.55.1 
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST 
Nmap scan report for centos.shared (10.211.55.1) 
Host is up (0.00094s latency). 
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered

Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds 
bash-3.2#

现在,一切都被外部过滤了。

如下所示,主机在drop状态下甚至不会响应 ICMP ping 请求。

bash-3.2# ping 10.211.55.1 
PING 10.211.55.1 (10.211.55.1): 56 data bytes 
Request timeout for icmp_seq 0 
Request timeout for icmp_seq 1 
Request timeout for icmp_seq 2

让我们再次将默认区域设置为公共

[root@CentOs]# firewall-cmd --set-default-zone=public 
success

[root@CentOS]# firewall-cmd --get-default-zone 
public

[root@CentOS]#

现在让我们在public中检查当前的过滤规则集。

[root@CentOS]# firewall-cmd --zone=public --list-all 
public (active) 
target: default 
icmp-block-inversion: no 
interfaces: enp0s5 
sources:  
services: dhcpv6-client ssh 
ports: 80/tcp 
protocols:  
masquerade: no 
forward-ports:  
sourceports:  
icmp-blocks:  
rich rules:

[root@CentOS rdc]#

根据配置,我们的端口 80 过滤规则仅在运行配置的上下文中。这意味着一旦系统重新启动或firewalld服务重新启动,我们的规则将被丢弃。

我们很快就会配置一个httpd守护进程,所以让我们的更改持久化 -

[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent 
success

[root@CentOS]# systemctl restart firewalld

[root@CentOS]#

现在,公共区域中的端口 80 规则在重新启动和服务重新启动后仍然有效。

以下是与firewall-cmd一起应用的常见firewalld命令。

命令 行动
防火墙-cmd --get-zones 列出可应用于接口的所有区域
防火墙-cmd —状态 返回firewalld服务的当前状态
防火墙cmd --get-default-zone 获取当前默认区域
防火墙cmd --set-default-zone=<区域> 将默认区域设置到当前上下文中
防火墙 cmd --get-active-zone 获取应用于接口的上下文中的当前区域
防火墙-cmd --zone=<区域> --list-all 列出所提供区域的配置
firewall-cmd --zone=<区域> --addport=<端口/传输协议> 将端口规则应用于区域过滤器
- 永恒的 使区域更改持久化。标志与修改命令内联使用

这些是管理和配置firewalld的基本概念。

在更复杂的网络场景中,在 CentOS 中配置基于主机的防火墙服务可能是一项复杂的任务。CentOS 中的firewalld和 iptables的高级使用和配置需要一整篇教程。然而,我们已经介绍了足以完成大部分日常任务的基础知识。