Linux中的iptables防火墻
一、iptables概述
iptables防火墻是Linux系統(tǒng)防火墻的一種,實際上由兩個組件netfilter和iptables組成。
netfilters與iptables的關(guān)系:
- netfilter:屬于“內(nèi)核態(tài)”的防火墻功能體系。是內(nèi)核的一部分,由一些數(shù)據(jù)包過濾表組成,這些表包含內(nèi)核用來控制數(shù)據(jù)包過濾處理的規(guī)則集。
- iptables:屬于“用戶態(tài)”的防火墻管理體系。是一種用來管理Linux防火墻的命令程序,它使插入、修改和刪除數(shù)據(jù)包過濾表中的規(guī)則變得容易,通常位于/sbin/iptables文件下。
netfilter/iptables后期簡稱為iptables。iptables是基于內(nèi)核的防護(hù)墻,其中內(nèi)置了raw、mangle、nat、filter四個規(guī)則表。表中所有規(guī)則配置后,立即生效,不需要重啟服務(wù)。
二、規(guī)則表與規(guī)則鏈結(jié)構(gòu)(四表五鏈)
1.簡述
- 規(guī)則表(四表)的作用:容納各種規(guī)則鏈。
- 規(guī)則鏈(五鏈)的作用:容納各種防火墻規(guī)則。
總結(jié):表中有鏈,鏈中有規(guī)則。
2.四表(規(guī)則表)
- raw表:確定是否對該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤。包含兩個規(guī)則鏈 - OUTPUT、PREROUTING。
- mangle表:修改數(shù)據(jù)包內(nèi)容,用于流量整形,給數(shù)據(jù)包設(shè)置標(biāo)記。包含五個規(guī)則鏈 - INPUT、OUTPUT、FORWARD、PREROUING、POSTROUTING。
- nat表:負(fù)責(zé)網(wǎng)絡(luò)地址轉(zhuǎn)換,用來的修改數(shù)據(jù)包中的源、目標(biāo)IP地址或端口。包含三個規(guī)則鏈 - OUTPUT、PREROUTING、POSTROUTING。
- filter表:負(fù)責(zé)過濾數(shù)據(jù)包,確定是否放行該數(shù)據(jù)包(過濾)。包含三個規(guī)則鏈,INPUT、FORWARD、OUTPUT。
數(shù)據(jù)包到達(dá)防火墻時,數(shù)據(jù)表之間的優(yōu)先順序:
raw -> mangle -> nat -> filter
3.五鏈(規(guī)則鏈)
- INPUT:處理入站數(shù)據(jù)包,匹配目標(biāo)IP為本機(jī)的數(shù)據(jù)包。
- OUTPUT:處理出戰(zhàn)數(shù)據(jù)包,匹配從本機(jī)發(fā)出的數(shù)據(jù)包。
- FORWARD:處理轉(zhuǎn)發(fā)數(shù)據(jù)包,匹配流經(jīng)本機(jī)的數(shù)據(jù)包。
- PREROUTING:在進(jìn)行路由選擇前處理數(shù)據(jù)包,用來修改目的地址,用來做DNET。相當(dāng)于把內(nèi)網(wǎng)服務(wù)器的IP和端口映射到路由器的外網(wǎng)IP和端口上。
- POSTROUTIING:在進(jìn)行路由選擇后處理數(shù)據(jù)包,用來修改源地址,用來做SNAT。相當(dāng)于內(nèi)網(wǎng)通過路由器NAT轉(zhuǎn)換功能實現(xiàn)內(nèi)網(wǎng)主機(jī)通過一個公網(wǎng)IP地址上網(wǎng)。
三、數(shù)據(jù)鏈過濾的匹配流程
- 入站數(shù)據(jù):PREROUTING -> INPUT -> 本機(jī)的應(yīng)用程序
- 出站數(shù)據(jù):本機(jī)的應(yīng)用程序 -> OUTPUT -> POSTROUTING
- 轉(zhuǎn)發(fā)數(shù)據(jù):PREROUTING -> FORWARD -> POSTROUTING
四、iptables命令行配置方法
1.命令格式
iptables -t "表名" "管理選項" "鏈名" "匹配條件" -j "控制類型"
- 不指定表名時,默認(rèn)指filter表
- 不指定鏈名時,默認(rèn)值表內(nèi)所有鏈
常用選項 | 解釋 |
---|---|
-A | --apend 在指定表的末尾追加新規(guī)則 |
-I | --insert 在指定鏈的開頭插入一條新規(guī)則,不指定序號時默認(rèn)在開頭插入新規(guī)則 |
-R | --replace 修改、替換指定鏈中某一條的規(guī)則,可指定序號或具體內(nèi)容 |
-P | --policy 設(shè)置指定鏈的默認(rèn)策略 |
-D | --delete 刪除指定鏈中的某一條規(guī)則 |
-F | --flush 清空指定鏈中的所有規(guī)則,若為指定鏈名,則清空表中所有鏈 |
-L | --list 列出指定鏈中的所有規(guī)則,若為指定鏈名,則列出表中所有鏈 |
-n | --numeric 使用數(shù)字形式輸出結(jié)果,如顯示IP地址而不是主機(jī)名 |
-v | 顯示詳細(xì)信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù) |
--line-numbers | 查看規(guī)則時,顯示序號 |
常用控制類型 | 解釋 |
---|---|
ACCEPT | 允許數(shù)據(jù)包通過 |
DROP | 直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息 |
REJECT | 拒絕數(shù)據(jù)包通過,會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息 |
SNAT | 修改數(shù)據(jù)包的源地址 |
DNAT | 修改數(shù)據(jù)包的目的地址 |
REDIRECT | 重定向改變目的端口,將接受的包轉(zhuǎn)發(fā)至本機(jī)的不同端口 |
MASQUERADE | 偽裝成一個非固定公網(wǎng)IP地址 |
LOG | 在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則 |
2.基本匹配條件
基本匹配條件 | 解釋 |
---|---|
-p | 指定協(xié)議 |
-s | 指定源地址 |
-d | 指定目的地址 |
-i | 指定入站網(wǎng)卡 |
-o | 指定出站網(wǎng)卡 |
3.隱含匹配
需以特定的協(xié)議匹配作為前提。
3.1.端口匹配
匹配條件 | 解釋 |
---|---|
--sport | 源端口 |
--dport | 目的端口 |
例:
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
ps:--sport 和 --dport 必須配合-p "協(xié)議類型"使用
3.2 TCP標(biāo)志位匹配
標(biāo)志位 | 解釋 |
---|---|
SYN | 同步位 |
ACK | 確認(rèn)位 |
FIN | 結(jié)束位 |
RST | 重置位 |
URG | 緊急位 |
PSH | 推送位 |
例:
iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
拒絕來自22端口的SYN之外的tcp包(只接收SYN包)
3.2 ICMP類型匹配
類型 | 代碼 | 解釋 |
---|---|---|
Echo-Reques | 8 | 請求 |
Echo-Reply | 0 | 回顯 |
Destination-Unreachable | 3 | 目標(biāo)不可達(dá) |
例:
iptables -A INPUT -p icmp --icmp-type 8 -j -DROP #禁止其他主機(jī)ping本機(jī)
3.3 顯示匹配
要求以“-m 擴(kuò)展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件。
3.3.1 多端口匹配:
-m multiport --sport 源端口列表 -m multiport --dport 目的端口列表
例:
iptables -A INPUT -p tcp -m multiport --dport 80,22,21 -j ACCEPT
3.3.2 IP范圍匹配:
-m iprange --src-range 源ip范圍 -m iprange --dst-range 目的ip范圍
例:
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-19.2169.80.200
3.3.3 mac地址匹配
-m mace --mace-source "mac地址"
3.3.4 狀態(tài)匹配
-m state --state "連接狀態(tài)"
常見的狀態(tài)連接 | 解釋 |
---|---|
NEW | 與任何連接無關(guān)的,還沒開始連接 |
ESTABLISHED | 響應(yīng)請求或者已建立連接的,連接態(tài) |
RELATED | 與已有連接有相關(guān)性的,衍生態(tài),一般與ESTABLISHED 配合使用 |
INVALID | 無效的封包,例如數(shù)據(jù)破損的封包狀態(tài) |
例:
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
五、SNAT與DNAT
均需網(wǎng)關(guān)開啟IP路由轉(zhuǎn)發(fā):
臨時打開 echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1
永久打開:
vim /etc/sysctl.conf .... net.ipv4.ip_forward=1 #將此行寫入配置文件 sysctl -p #載入配置
1.SNAT
SNAT用于在網(wǎng)絡(luò)中修改數(shù)據(jù)包的源地址。
SNAT轉(zhuǎn)換前提條件:
- 局域網(wǎng)各主機(jī)已正確設(shè)置IP地址、子網(wǎng)掩碼、默認(rèn)網(wǎng)關(guān)地址
- Linux網(wǎng)關(guān)開啟IP路由轉(zhuǎn)發(fā)
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1-12.0.0.10
2.DNAT
DNAT用于在網(wǎng)絡(luò)中修改數(shù)據(jù)包的目的地址,通常是為了保護(hù)內(nèi)網(wǎng)服務(wù)器的安全。
DNAT轉(zhuǎn)換前提條件:
- 局域網(wǎng)的服務(wù)器能夠訪問Internet
- 網(wǎng)關(guān)的外網(wǎng)地址有正確的DNS解析記錄
- Linux網(wǎng)關(guān)開啟IP路由轉(zhuǎn)發(fā)
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux加入windows ad域步驟詳解(winbindsamba方案)
本文主要實驗centos加入windows AD的方法,大家參考使用2013-12-12Linux服務(wù)器安全需要注意到幾點事項小結(jié)
Linux服務(wù)器安全是個很重要的問題,這里簡單的總結(jié)下linux服務(wù)器的設(shè)置技巧。2010-08-08在VM虛擬機(jī)中CentOS7安裝VMware Tools全過程
這篇文章主要介紹了在VM虛擬機(jī)中CentOS7安裝VMware Tools全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03Centos 6和Centos 7下服務(wù)啟動方法及添加到開機(jī)啟動項的方法
這篇文章主要介紹了Centos 6和Centos 7下服務(wù)啟動方法及添加到開機(jī)啟動項的方法的相關(guān)資料,需要的朋友可以參考下2016-10-10linux系統(tǒng)中通過rsync+inotify實現(xiàn)網(wǎng)頁自動同步
這篇文章主要介紹了linux系統(tǒng)中通過rsync+inotify實現(xiàn)網(wǎng)頁自動同步,需要的朋友可以參考下2014-11-11Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核的時間管理筆記整理
今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核的時間管理筆記整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12linux服務(wù)器安裝SonarQube代碼檢測工具的詳細(xì)步驟
這篇文章主要介紹了linux服務(wù)器安裝SonarQube代碼檢測工具,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07