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