iptables

在 Linux 系統內建多數使用 iptables 作為防火牆,用來過設定允許的封包清單,進行安全防護。

iptable 可以用來設定安全 IP 白名單,封鎖 IP 黑名單,以及可以進一步設計程防止 DDos 攻擊用途。

[ iptable 主要結構說明 ]

ipotable 結構主要可以分成 Table, Chains, Rules

Table - 就是一份防火牆的規則表,可包含多組 Chain

Chains - 是Rules規則的鏈群組,可包含多個 Rule

Rule - 則是每一個單獨設立的規則

[ iptable 預設的 Table ]

iptable預設包括了5張表: Filter Table, NAT Table, Mangle Table, Raw Table, Security Table

1. Filter Table

Filter Table顧名思義,就是用來過濾封包的表,其中預設有三個 Chains: INPUT, OUTPUT, FORWARD

INPUT - 外部傳入的封包

OUTPUT - 內部傳出的封包

FORWARD - Router or Proxy 類型封包,由外部透過內部轉發的封包類型

2. NAT Table

NAT Table (Network Address Translation) 主要處理 Routing 轉換前/後的封包,預設有兩個 Chains: PREROUTING, POSTROUTING

PREROUTING - 於Routing 前的封包來源 IP,例如於本機會顯示 127.0.0.1

POSTROUTING - 於 Routing 後的封包資訊,例如轉發往外之後會顯示 8.8.8.8

[ iptable 的 Target ]

iptables 會透過 Target 主要負責執行一些行為,包括 ACCEPT, REJECT, LOG

ACCEPT - 接收封包

REJECT - 拒絕封包

LOG - 紀錄封包日誌(/var/log/message)

[ 安裝 iptables 及使用方式]

安裝 iptables 及相關套件

yum install iptables-services iptables

接下來,在實際使用時,我通常會透過建立的 Chain 來與預設設定做區隔

這裡先說明一些指令

-N : 建立新 chain
-A : 新增規則
-j : 將 A 指定到 B
-I : 新增 rule

例如,建立新的 chain - REJECT_LOG 來紀錄一些拒絕封包的 Log ,並且會拒絕處理 chain 所指定的所有封包:

iptables -N REJECT_LOG
iptables -A REJECT_LOG -j LOG --log-prefix "Reject Log message:" --log-level 6
iptables -A REJECT_LOG -j REJECT

設定完畢之後,再指定哪些 IP 會被納入此 REJECT_LOG chain,就可以進行阻擋。

例如,下方設定阻擋一個固定IP

iptalbes -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 11.22.33.44/16 -p tcp --dport 80 -j REJECT_LOG

[ 其它用法說明 ]

-F 可以用來清除所有 rule

iptables -F