Linux下iptables和firewalld詳解
- Linux下iptables和firewalld
- 簡述
- Iptables
- 四表五鏈
- 策略與規則鏈
- 命令參數
- Firewalld
- 終端管理工具
- 圖形管理工具
- 服務的訪問控制列表
Linux下iptables和firewalld
簡述
? 保障數據的安全性是繼保障數據的可用性之后最為重要的一項工作。防火墻作為公網與內網之間的保護屏障,在保障數據的安全性方面起著至關重要的作用。考慮到大家還不了解RHEL 7中新增的firewalld防火墻與先前版本中iptables防火墻之間的區別。
? 本章將分別使用iptables、firewall-cmd、firewall-config和TCP Wrappers等防火墻策略配置服務來完成數十個根據真實工作需求而設計的防火墻策略配置實驗。在學習完這些實驗之后,各位讀者不僅可以熟練地過濾請求的流量,還可以基于服務程序的名稱對流量進行允許和拒絕操作,確保Linux系統的安全性萬無一失。
? 在RHEL 7系統中,firewalld防火墻取代了iptables防火墻。對于接觸Linux系統比較早或學習過RHEL 6系統的讀者來說,當他們發現曾經掌握的知識在RHEL 7中不再適用,需要全新學習firewalld時,難免會有抵觸心理。其實,iptables與firewalld都不是真正的防火墻,它們都只是用來定義防火墻策略的防火墻管理工具而已,或者說,它們只是一種服務。iptables服務會把配置好的防火墻策略交由內核層面的netfilter網絡過濾器來處理,而firewalld服務則是把配置好的防火墻策略交由內核層面的nftables包過濾框架來處理。換句話說,當前在Linux系統中其實存在多個防火墻管理工具,旨在方便運維人員管理Linux系統中的防火墻策略,我們只需要配置妥當其中的一個就足夠了。雖然這些工具各有優劣,但它們在防火墻策略的配置思路上是保持一致的。大家甚至可以不用完全掌握本章介紹的內容,只要在這多個防火墻管理工具中任選一款并將其學透,就足以滿足日常的工作需求了。
Iptables
? 在早期的Linux系統中,默認使用的是iptables防火墻管理服務來配置防火墻。盡管新型的firewalld防火墻管理服務已經被投入使用多年,但是大量的企業在生產環境中依然出于各種原因而繼續使用iptables。考慮到iptables在當前生產環境中還具有頑強的生命力。
四表五鏈
策略與規則鏈
防火墻會從上至下的順序來讀取配置的策略規則,在找到匹配項后就立即結束匹配工作并去執行匹配項中定義的行為(即放行或阻止)。如果在讀取完所有的策略規則之后沒有匹配項,就去執行默認的策略。一般而言,防火墻策略規則的設置有兩種:一種是“通”(即放行),一種是“堵”(即阻止)。當防火墻的默認策略為拒絕時(堵),就要設置允許規則(通),否則誰都進不來;如果防火墻的默認策略為允許時,就要設置拒絕規則,否則誰都能進來,防火墻也就失去了防范的作用。
iptables服務把用于處理或過濾流量的策略條目稱之為規則,多條規則可以組成一個規則鏈,而規則鏈則依據數據包處理位置的不同進行分類,具體如下:
在進行路由選擇前處理數據包(PREROUTING);
處理流入的數據包(INPUT);
處理流出的數據包(OUTPUT);
處理轉發的數據包(FORWARD);
在進行路由選擇后處理數據包(POSTROUTING)。
一般來說,從內網向外網發送的流量一般都是可控且良性的,因此我們使用最多的就是INPUT規則鏈,該規則鏈可以增大黑客人員從外網入侵內網的難度。
比如在您居住的社區內,物業管理公司有兩條規定:禁止小商小販進入社區;各種車輛在進入社區時都要登記。顯而易見,這兩條規定應該是用于社區的正門的(流量必須經過的地方),而不是每家每戶的防盜門上。根據前面提到的防火墻策略的匹配順序,可能會存在多種情況。比如,來訪人員是小商小販,則直接會被物業公司的保安拒之門外,也就無需再對車輛進行登記。如果來訪人員乘坐一輛汽車進入社區正門,則“禁止小商小販進入社區”的第一條規則就沒有被匹配到,因此按照順序匹配第二條策略,即需要對車輛進行登記。如果是社區居民要進入正門,則這兩條規定都不會匹配到,因此會執行默認的放行策略。
但是,僅有策略規則還不能保證社區的安全,保安還應該知道采用什么樣的動作來處理這些匹配的流量,比如“允許”、“拒絕”、“登記”、“不理它”。這些動作對應到iptables服務的術語中分別是ACCEPT(允許流量通過)、REJECT(拒絕流量通過)、LOG(記錄日志信息)、DROP(拒絕流量通過)。“允許流量通過”和“記錄日志信息”都比較好理解,這里需要著重講解的是REJECT和DROP的不同點。就DROP來說,它是直接將流量丟棄而且不響應;REJECT則會在拒絕流量后再回復一條“您的信息已經收到,但是被扔掉了”信息,從而讓流量發送方清晰地看到數據被拒絕的響應信息。
我們來舉一個例子,讓各位讀者更直觀地理解這兩個拒絕動作的不同之處。比如有一天您正在家里看電視,突然聽到有人敲門,您透過防盜門的貓眼一看是推銷商品的,便會在不需要的情況下開門并拒絕他們(REJECT)。但如果您看到的是債主帶了十幾個小弟來討債,此時不僅要拒絕開門,還要默不作聲,偽裝成自己不在家的樣子(DROP)。
當把Linux系統中的防火墻策略設置為REJECT拒絕動作后,流量發送方會看到端口不可達的響應:
[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
From 192.168.10.10 icmp_seq=2 Destination Port Unreachable
From 192.168.10.10 icmp_seq=3 Destination Port Unreachable
From 192.168.10.10 icmp_seq=4 Destination Port Unreachable
--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms
而把Linux系統中的防火墻策略修改成DROP拒絕動作后,流量發送方會看到響應超時的提醒。但是流量發送方無法判斷流量是被拒絕,還是接收方主機當前不在線:
[root@linuxprobe ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.--- 192.168.10.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3000ms
命令參數
iptables是一款基于命令行的防火墻策略管理工具,具有大量參數,學習難度較大。好在對于日常的防火墻策略配置來講,大家無需深入了解諸如“四表五鏈”的理論概念,只需要掌握常用的參數并做到靈活搭配即可,這就足以應對日常工作了。
iptables命令可以根據流量的源地址、目的地址、傳輸協議、服務類型等信息進行匹配,一旦匹配成功,iptables就會根據策略規則所預設的動作來處理這些流量。另外,再次提醒一下,防火墻策略規則的匹配順序是從上至下的,因此要把較為嚴格、優先級較高的策略規則放到前面,以免發生錯誤。表8-1總結歸納了常用的iptables命令參數。再次強調,我們無需死記硬背這些參數,只需借助下面的實驗來理解掌握即可。
表8-1 iptables中常用的參數以及作用
參數 | 作用 |
---|---|
-P | 設置默認策略 |
-F | 清空規則鏈 |
-L | 查看規則鏈 |
-A | 在規則鏈的末尾加入新規則 |
-I num | 在規則鏈的頭部加入新規則 |
-D num | 刪除某一條規則 |
-s | 匹配來源地址IP/MASK,加嘆號“!”表示除這個IP外 |
-d | 匹配目標地址 |
-i 網卡名稱 | 匹配從這塊網卡流入的數據 |
-o 網卡名稱 | 匹配從這塊網卡流出的數據 |
-p | 匹配協議,如TCP、UDP、ICMP |
–dport num | 匹配目標端口號 |
–sport num | 匹配來源端口號 |
在iptables命令后添加-L參數查看已有的防火墻規則鏈:
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere