Linux管理員 - 防火牆設定



firewalld是CentOS上iptables的預設前端控制器。firewalld前端相對於原始iptables有兩個主要優點:

  • 使用易於配置和實施的區域來抽象鏈和規則。

  • 規則集是動態的,這意味著當設定更改和/或修改時,有狀態連線不會中斷。

請記住,firewalld是iptables的包裝器,而不是替代品。雖然可以使用firewalld使用自定義iptables命令,但建議使用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的firewalld。內部網路保持私有但可訪問

5

dmz

僅允許某些傳入連線。用於DMZ隔離中的系統

6

work

預設情況下,信任網路上的更多計算機,假設系統處於安全的工作環境中

7

home

預設情況下,更多服務未過濾。假設系統位於家庭網路上,其中將使用NFS、SAMBA和SSDP等服務

8

trusted

網路上的所有機器都受信任。大多數傳入連線都允許不受限制。這並不適用於暴露於網際網路的介面

最常用的區域是:public、drop、work和home。

每個常用區域的一些使用場景:

  • public - 這是管理員最常用的區域。它將允許您應用自定義設定並遵守LAN上操作的RFC規範。

  • drop - 使用drop的一個很好的例子是在安全會議、公共WiFi或直接連線到網際網路的介面上。drop假設所有未經請求的請求都是惡意的,包括ICMP探測。因此,任何超出狀態的請求都不會收到回覆。drop的缺點是,在某些情況下,它可能會破壞應用程式的功能,這些應用程式需要嚴格遵守RFC。

  • work - 您位於半安全的公司LAN上。可以假設所有流量都相對安全。這意味著它不是WiFi,我們可能已部署了IDS、IPS和物理安全或802.1x。我們還應該熟悉使用LAN的人員。

  • 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進行未經請求的流量。

讓我們將預設區域設定為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#

現在,所有內容都從外部過濾。

如下所示,當處於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

讓我們再次將預設區域設定為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]#

現在,我們public區域中的埠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的高階用法和配置可能需要整個教程。但是,我們已經介紹了基礎知識,這些知識應該足以完成大多數日常任務。

廣告

© . All rights reserved.