- Linux管理員教程
- 首頁
- CentOS概述
- 基本的CentOS Linux命令
- 檔案/資料夾管理
- 使用者管理
- 配額管理
- Systemd服務啟動和停止
- 使用systemctl進行資源管理
- 使用cgroups進行資源管理
- 程序管理
- 防火牆設定
- 在CentOS Linux中配置PHP
- 使用CentOS Linux設定Python
- 在CentOS Linux上配置Ruby
- 為CentOS Linux設定Perl
- 安裝和配置Open LDAP
- 建立SSL證書
- 安裝Apache Web伺服器CentOS 7
- 在CentOS 7上設定MySQL
- 設定Postfix MTA和IMAP/POP3
- 安裝匿名FTP
- 遠端管理
- CentOS中的流量監控
- 日誌管理
- 備份和恢復
- 系統更新
- Shell指令碼
- 包管理
- 卷管理
- Linux管理員有用資源
- Linux管理員 - 快速指南
- Linux管理員 - 有用資源
- Linux管理員 - 討論
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的高階用法和配置可能需要整個教程。但是,我們已經介紹了基礎知識,這些知識應該足以完成大多數日常任務。