firewalld 與 iptables
firewalld 與 iptables
https://www.jianshu.com/p/70f7efe3a227
不同Linux核心版本的防火牆軟體
在設定 Linux 防火牆規則時,可以先用 uname -r 檢視一下 Linux 核心版本。
Firewalld
從Cent7以後,iptables服務的啟動指令碼已被忽略。請使用firewalld來取代iptables服務。
在RHEL7裡,預設是使用firewalld來管理netfilter子系統,不過底層呼叫的命令仍然是iptables。
firewalld是iptables的前端控制器,用於實現持久的網路流量規則。它提供命令列和圖形介面。
firewalld 與 iptables的比較:
1,firewalld可以動態修改單條規則,動態管理規則集,允許更新規則而不破壞現有會話和連線。而iptables,在修改了規則後必須得全部重新整理才可以生效;
2,firewalld使用區域和服務而不是鏈式規則;
3,firewalld預設是拒絕的,需要設定以後才能放行。而iptables預設是允許的,需要拒絕的才去限制;
4,firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過核心的netfilter來實現。也就是說,firewalld和iptables一樣,它們的作用都用於維護規則,而真正使用規則幹活的是核心的netfilter。只不過firewalld和iptables的結果以及使用方法不一樣!
firewalld是iptables的一個封裝,可以讓你更容易地管理iptables規則。它並不是iptables的替代品,雖然iptables命令仍可用於firewalld,但建議firewalld時僅使用firewalld命令。
一個重要規則:區域管理
通過將網路劃分成不同的區域,制定出不同區域之間的訪問控制策略來控制不同程式區域間傳送資料流。
例如,網際網路是不可信任的區域,而內部網路是高度信任的區域。
網路安全模型可以在安裝,初次啟動和首次建立網路連線時選擇初始化。改模型描述了主機所連線的整個網路環境的可信級別,並定義了新連線的處理方式。
初始化區域:
阻塞區域(block):任何傳入的網路資料包都將被阻止;
工作區域(work):相信網路上的其他計算機,不會損害你的計算機;
家庭區域(home):相信網路上的其他計算機,不會損害你的計算機;
公共區域(public):不相信網路上的任何計算機,只有選擇接受傳入的網路連線;
隔離區域(DMZ):也稱為非軍事區域,內外網路之間增加的一層網路,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網路連線;
信任區域(trueted):所有網路連線都可以接受;
丟棄區域(drop):任何傳入的網路連線都被拒絕;
內部區域(internal):信任網路上的其他計算機,不會損害你的計算機。只選擇接受傳入的網路連線;
外部區域(external):不相信網路上的其他計算機,不會損害你的計算機。只選擇接受傳入的網路連線;
firewalld的預設區域是public。
firewalld使用XML進行配置。除非非常特殊的配置,你不必處理他們,而應該使用firewalld-cmd。
配置檔案:
/usr/lib/firewalld #儲存預設配置,避免修改他們;
/etc/firewalld #儲存系統配置檔案,這些文佳你將覆蓋預設配置;
firewalld預設提供了九個zone配置檔案:block.xml,dmz.xml,drop.xml,external.xml,home.xml,internal.xml,public.xml,trusted.xml,work.xml
/usr/lib/firewalld/zone/
firewalld配置方法
firewalld的配置方法主要有三種:firewall-config(圖形化工具)、firewall-cmd(命令列工具) 和 直接編輯XML檔案。
yum install firewalld firewall-config
systemctl start|stop|status|restart firewalld
systemctl enable|disable firewalld
firewalld-cmd --state #檢查防火牆狀態;
systemctl status firewalls #檢視firewalld守護程序狀態;
firewall-cmd --help
firewall-cmd --version
firewall-cmd --state
firewall-cmd --get-active-zones #檢視網路介面使用的區域
firewall-cmd --zone=public --list-all #檢視指定區域的所有配置
firewall-cmd --list-all-zones #檢視所有區域配置
firewall-cmd --get-default-zone #檢視預設區域
firewall-cmd --set-default-zone=internal #設定預設區域
firewall-cmd --get-zone-of-interface=eth0 #檢視指定介面所屬區域
firewall-cmd --zone=public --add-interface=eth0 #將介面新增到區域,預設介面都在public,永久生效加上 --permanent,然後reload
#需要永久生效需加上 --permannent
firewall-cmd --panic-on|off #拒絕|開啟 所有包
firewall-cmd --query-panic #檢視是否拒絕
firewall-cmd --reload #無需斷開連線更新防火牆規則
firewall-cmd --complete-reload #類似於重啟更新規則
firewall-cmd --zone=dmz --list-ports #檢視所有開啟的埠
firewall-cmd --zone=dmz --add-port=8080/tcp #加入一個埠的區域
與服務一起使用
firewalld可以根據特定網路服務的預定義規則來允許相關流量。你可以建立自己的自定義系統規則,並將它們新增到任何區域。預設支援的服務的配置檔案位於 /usr/lib/firewalld/services,用於建立的服務檔案位於 /etc/firewalld/services 中。
/usr/lib/firewalld/services/
firewall-cmd --get-services #檢視預設可用服務
firewall-cmd --zone=區域 --(add|remove)-service=http --permanent #永久啟用或禁用HTTP服務
firewall-cmd --zone=public --add-port=123456/tcp --permanent #新增123456埠的tcp流量;
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=123456 #將80埠的流量轉發到123456埠
將埠轉發到另外一臺伺服器上:
firewall-cmd --zone=區域 --add-masquerade #在需要的區域中啟用masquerade
firewall-cmd --zone=區域 --remove-masquerade #刪除
firewall-cmd --zone=區域 --add-forward--port=port=80:proto=tcp:toport=8080:toaddr=123.123.123.123 #將本地80埠的流量轉發到指定IP的8080埠;
iptables
資料包進入流程:規則順序的重要性
根據資料包的分析資料“比對”預先定義的規則內容,若資料包與規則內容相同則進行動作,否則就繼續下一條規則的比對,重點在比對與分析順序。
規則是有順序的,規則的順序很重要。
當規則順序排列錯誤時,會產生很嚴重的錯誤。
iptables 的表格(table)和鏈(chain)
為什麼稱為 iptables 呢?因為這個防火牆軟體裡面由多個表格(table),每個表格定義出自己的預設策略和規則,且每個表格的用途都不相同。
預設情況下,Linux 的 iptables 至少有3個表格,包括管理本機進出的Filter、管理後端主機(防火牆內部的其他計算機)的NAT、管理特殊標誌使用的Mangle(較少使用)。我們還可以自定義額外的鏈。
iptables 的表格與相關鏈示意圖
Filter(過濾)
:主要跟進入Linux本機的資料包有關,是預設的table。
INPUT : 主要與想要進入 Linux 本機的資料包有關
OUTPUT : 主要與 Linux 本機所要送出的資料包有關
FORWARD(傳送): 與 Linux 本機沒有關係,它可以傳遞資料包到後端的計算機中,與 NAT table 相關性較高
NAT(地址轉換):這個 table 主要用來進行 源和目的IP或Port的轉換,與Linux本機無關,主要與區域網內計算機相關。
PREROUTING : 在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
POSTROUTING : 在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)
OUTPUT: 與傳送出去的資料包有關
Mangle(破壞者):這個 table 主要是與特殊的資料包的路由標誌有關。
iptables 內建表格與鏈的相關性
本機的 iptables 語法
切記謹慎使用 iptables 命令,特別是在遠端連線的時候。
防火牆的設定主要是使用的 iptables 這個命令,而防火牆是系統管理員的主要任務之一,且對於系統的影響相當大,因此只能讓 root 使用 iptables,不論是設定還是檢視防火牆規則。
規則的檢視與清除
# iptables -L -n
target : 代表進行的操作,ACCEPT是放行,而 REJECT 則是拒絕,此外,尚有 DROP(丟棄)的專案;
prot : 代表使用的資料包協議;
opt : 額外的選項說明;
source : 針對來源 IP;
destination : 針對目的 IP
建議使用 iptables-save 這個命令來檢視防火牆規則
iptables-save
清除防火牆規則
iptables [ -t tables ] [ -FXZ ]
iptables -F #清除所有已制定的規則
iptables -X #清除使用者 "自定義"
iptables -Z #將所有的 chain 的計數與流量統計都歸零
# 這三個命令會將本機防火牆的所有規則都清除,但卻不會改變 "預設策略(policy )"
定義預設策略(policy)
當資料包不在我們設定的規則之內時,則該資料包的通過與否,是以Policy的設定為準。
如果對於區域網內的使用者有信心,那麼Filter內的INPUT就可以定義嚴格一點,而OUTPUT和FORWARD則可以制定的鬆一些。
iptables [ -t nat ] -P [ INPUT, OUTPUT, FORWARD ] [ ACCEPT, DROP ]
舉例,修改預設策略,信任內部網路,嚴格對待 INPUT
iptables -P INPUT DROP; #丟棄
iptables -P OUTPUT ACCEPT;
iptables -P FORWARD ACCEPT;
最後使用 iptables-save 檢視
資料包的基礎比對 : IP、網路及介面裝置
舉例,沒有指定的專案則表示該專案完全接受
還要說一遍,規則順序是很重要的,一定要重視和注意這個問題。
iptables -A INPUT -i lo -j ACCEPT #只要是loopback這個介面,不管 Source 和 Destination,予以接受
iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -s 111.111.111.111 -j DROP # 從 Source"111.111.111.111" 進來的資料包就丟棄
iptables -A OUTPUT -i eth1 -d 8.8.8.8 -j LOG #到Destination為"8.8.8.8"則進行日誌記錄
TCP、UDP的規則比對:針對埠設定
其實相較於IP,這個只不過增加了 tcp/udp 和 sport/dport,包括 tcp 連線資料包狀態,最常見的 SYN等
幾個小測試:
iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP
iptables -A INPUT -i eth1 -p udp --dport 555:666 -j ACCEPT
iptables -A INPUT -i eht0 -s 192.168.2.0/24 -p tcp --sport 1024:65534 --dport ssh -j DROP
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --syn -j DROP
# 切記要選擇是 TCP 還是 UDP
iptables外掛模組:mac 與 state
通過一個狀態模組來分析這個想要進入的資料包是否為剛剛發出去的響應。如果是,則予以放行。
舉例:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m mac --mac--source aa:bb:cc:11:22:33 -j DROP #針對網絡卡執行的放行和防禦
其實MAC也是可以偽裝,此外,MAC是不能跨過Router的,因此針對網絡卡的方案只存在與區域網內
關閉主機的ICMP ping
iptables -A INPUT -p icmp --icmp-type 8 -j REJECT
作者:Zhang21
連結:https://www.jianshu.com/p/70f7efe3a227
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。