iptables基礎詳細說明

在linux中,iptables並不是一個真正的防火牆,可以把它理解爲一個客服端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的安全框架中,而這個安全框架纔是真正的防火牆,這個防火牆稱爲netfilter,位於內核空間,主要用於網絡地址轉換、數據包內容修改、數據包過濾的防火牆功能。

數據報文過濾

在iptables中,內置了5個鉤子函數(hook functions),分別是prerounting,input,output,forward,postrounting,在過濾時,在對應的函數上通過外部應用添加規則,在對應的函數上(關卡)添加的規則,可以看成是一條規則鏈;在這些不同的鏈上,具有相同功能的規則的集合叫表。在iptables中,定義了4種表:

  • filter表:負責過濾功能,防火牆;內核模塊:iptables_filter
  • nat表:network address translation,網絡地址轉換功能;內核模塊:iptables_nat
  • mangle表:拆解報文,做出修改,並重新封門的功能;iptables_mangle
  • raw表:關閉nat表上啓用的連接追蹤機制;iptables_raw

表與鏈的關係,或者說每個鏈中的規則都存放於什麼表中

prerouting  的規則可以存在於raw,mangle,nat表

input   的規則可以存在於mangle,filter表(centons7中還有nat表)

forward   的規則可以存在於mangle,filter表

output   的規則可以存在於raw,mangle,nat,filter表

postrouting   的規則可以存在於mangle,nat表

在各關卡進行規則匹配時,是有優先匹配級別的,如下圖

prerouting  上的優先依次是raw,mangle,nat

input    上的優先依次是mangle,nat(centos7),filter

forward   上的優先依次是mangle,filter

output   上的優先依次是raw,mangle,nat,filter

開放規則用於堵,關閉則表示通過;匹配標準(基本匹配和擴展匹配):

  • IP:SIP,DIP(基本匹配)
  • 擴展匹配需要依賴其它對應的擴展模塊
  1. TCP:SPORT,DPORT
  2. UDP:SPORT,DPORT
  3. ICMP:icmp-type

處理動作-----在iptables中被稱爲target(非準確的說法),這些動作也分基本動作和擴展動作

  • ACCEPT:允許數據包通過
  • DORP:直接丟棄數據包,不給任何迴應信息,這時候客戶端會感覺自己的請求泥入大海,只有超時纔有反應
  • REJECT:拒絕數據包通過,必要時會靈氣發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息
  • SNAT:源地址轉換,解決內網用戶用同一個公網地址上網的問題
  • MASQUERADE:是SNAT的一種特殊形式,適用於動態的,臨時會變的ip上
  • DNAT:目標地址轉換
  • REDIRECT:在本機做端口映射
  • LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則

能否使用自定義鏈----可以使用自定義鏈,但只能在被調用時才能發揮作用,如果沒有自定義鏈中的任何規則匹配,還應該有返回機制;只能刪除空的自定義鏈

用法

  • iptables [-t 表名] 命令選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
  1. 表名、鏈名:用於指定iptables命令所操作的表和鏈
  2. 命令選項:用於指定管理iptables規則的方式 (如:插入、刪除、增加、查看等)
  3. 條件匹配:用於指定對符合什麼樣條件的數據包進行處理
  4.  

 Linux 管理員最常會用到的 IPTables 規則。

1、啓動、停止和重啓IPTables

雖然 IPTables 並不是一項服務,但在 Linux 中還是可以像服務一樣對其狀態進行管理。

基於SystemD的系統

systemctl start iptables
systemctl stop iptables
systemctl restart iptables

基於SysVinit的系統

 /etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2、查看IPtables防火牆策略

你可以使用如下命令來查看 IPtables 防火牆策略:

 iptables -L -n -v

以上命令應該返回數據下圖的輸出:

iptables-20-02

以上命令是查看默認的 FILTER 表,如果你只希望查看特定的表,可以在 -t 參數後跟上要單獨查看的表名。例如只查看 NAT 表中的規則,可以使用如下命令:

 iptables -t nat -L -v –n

3、屏蔽某個IP地址

如果你發佈有某個 IP 向服務器導入攻擊或非正常流量,可以使用如下規則屏蔽其 IP 地址:

 iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

注意需要將上述的 XXX 改成要屏蔽的實際 IP 地址,其中的 -A 參數表示在 INPUT 鏈的最後追加本條規則。(IPTables 中的規則是從上到下匹配的,一旦匹配成功就不再繼續往下匹配)

如果你只想屏蔽 TCP 流量,可以使用 -p 參數的指定協議,例如:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4、解封某個IP地址

要解封對 IP 地址的屏蔽,可以使用如下命令進行刪除:

 iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

其中 -D 參數表示從鏈中刪除一條或多條規則。

5、使用IPtables關閉特定端口

很多時候,我們需要阻止某個特定端口的網絡連接,可以使用 IPtables 關閉特定端口。

阻止特定的傳出連接:

 iptables -A OUTPUT -p tcp --dport xxx -j DROP

阻止特定的傳入連接:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

6、使用Multiport控制多端口

使用 multiport 我們可以一次性在單條規則中寫入多個端口,例如:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7、在規則中使用 IP 地址範圍

在 IPtables 中 IP 地址範圍是可以直接使用 CIDR 進行表示的,例如:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8、配置端口轉發

有時我們需要將 Linux 服務器的某個服務流量轉發到另一端口,此時可以使用如下命令:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上述命令會將所有到達 eth0 網卡 25 端口的流量重定向轉發到 2525 端口。

9、屏蔽HTTP服務Flood攻擊

有時會有用戶在某個服務,例如 HTTP 80 上發起大量連接請求,此時我們可以啓用如下規則:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上述命令會將連接限制到每分鐘 100 個,上限設定爲 200。

10、禁止PING

對 Linux 禁 PING 可以使用如下規則屏蔽 ICMP 傳入連接:

iptables -A INPUT -p icmp -i eth0 -j DROP

11、允許訪問迴環網卡

環回訪問(127.0.0.1)是比較重要的,建議大家都開放:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

12、屏蔽指定MAC地址

使用如下規則可以屏蔽指定的 MAC 地址:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

13、限制併發連接數

如果你不希望來自特定端口的過多併發連接,可以使用如下規則:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

以上規則限制每客戶端不超過 3 個連接。

14、清空IPtables規則

要清空 IPtables 鏈可以使用如下命令:

iptables -F

要清空特定的表可以使用 -t 參數進行指定,例如:

iptables -t nat –F

15、保存IPtables規則

默認情況下,管理員對 IPtables 規則的操作會立即生效。但由於規則都是保存在內存當中的,所以重啓系統會造成配置丟失,要永久保存 IPtables 規則可以使用 iptables-save 命令:

iptables-save > ~/iptables.rules

保存的名稱大家可以自己改。

16、還原IPtables規則

有保存自然就對應有還原,大家可以使用 iptables-restore 命令還原已保存的規則:

iptables-restore < ~/iptables.rules

17、允許建立相關連接

隨着網絡流量的進出分離,要允許建立傳入相關連接,可以使用如下規則:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

允許建立傳出相關連接的規則:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

18、丟棄無效數據包

很多網絡攻擊都會嘗試用黑客自定義的非法數據包進行嘗試,我們可以使用如下命令來丟棄無效數據包:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

19、IPtables屏蔽郵件發送規則

如果你的系統不會用於郵件發送,我們可以在規則中屏蔽 SMTP 傳出端口:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

20、阻止連接到某塊網卡

如果你的系統有多塊網卡,我們可以限制 IP 範圍訪問某塊網卡:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

源地址可以是 IP 或 CIDR。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章