Linux管理员防火墙设置


firewalld 是CentOS上默认的iptables前端控制器。该 firewalld 前端拥有原的iptables两大优点-

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

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

请记住, 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

drop

低信任级别。所有传入的连接和数据包都被丢弃,只有通过状态完成的传出连接才有可能

2

block

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

3

public

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

4

external

配置NAT的防火墙。内部网络保持私密状态但可以到达

5

dmz

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

6

work

默认情况下,假定系统处于受保护的工作环境中,请信任网络上的更多计算机

7

hone

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

8

trusted

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

最常用的区域是:公共,放下,工作和家庭。

一些使用每个公共区域的情况是 -

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

  • drop - 何时使用丢弃的一个很好的例子是在安全会议,公共WiFi或直接连接到互联网的接口上。 丢弃假设所有未经请求的请求都是恶意的,包括ICMP探测。因此,任何脱离状态的请求都不会收到回复。丢弃的不利之处在于它可能会在某些需要严格遵守RFC的情况下破坏应用程序的功能。

  • work - 你在一个半安全的公司LAN上。 所有交通都可以假设为中等安全。这意味着它不是WiFi,我们可能有IDS,IPS和物理安全或802.1x。我们也应该熟悉使用局域网的人。

  • home - 你在家里的局域网。 您有责任为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中添加一些自定义规则?

首先,让我们看看我们的箱子是什么样子的,从外面来看一个portscanner。

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。

让我们把默认区域 drop ,看看端口扫描会发生什么。

[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#

现在,一切都从外面过滤掉了。

如下所示,主机将不会甚至当响应ICMP ping请求 drop 。

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

让我们再次将默认区域设置为 public 。

[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命令。

命令 动作
firewall-cmd --get-zones 列出可以应用于接口的所有区域
firewall-cmd —status 返回firewalld服务的当前状态
firewall-cmd --get-default-zone 获取当前的默认区域
firewall-cmd --set-default-zone=<zone> 将默认区域设置为当前上下文
firewall-cmd --get-active-zone 获取应用于接口的上下文中的当前区域
firewall-cmd --zone=<zone> --list-all 列出提供区域的配置
firewall-cmd --zone=<zone> --addport=<port/transport protocol> 将端口规则应用于区域过滤器
--permanent 对区域进行更改持久化。标记与修改命令一起使用

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

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