# 搞懂 Linux Iptables
# 基礎知識
# 封包處理規則
- INPUT 從網卡 進入 的封包
- OUTPUT 從網卡 出去 的封包
- FORWARD 從網卡 進去再轉送 的封包
- PREROUTING 改變網卡 進入 的封包 (DNAT/REDIRECT)
- POSTROUTING 改變網卡 出去 的封包 (SNAT/MASQUERADE)
# 過濾規則鍊
- filter 是預設的規則鍊,可處理 INPUT/OUPTUT/FORWARD
- nat 可以處理 OUTPUT/PREROUTING/POSTROUTING
- mangle 可以處理 INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
# 封包狀態
- NEW 一個新的連線封包
- ESTABLISHED 成功建立的連線
- RELATED 新建連線,透過 ESTALBLISHED session 所建立的獨立連線
- INVALID 非法連線狀態封包 (DROP 封包)
- UNKNOWN 未知連線狀態封包
# 封包處理政策與目標
- ACCEPT 允許
- DROP 丟棄 不回應要求 不傳送失敗訊息
- REJECT 拒絕 會回應要求 傳送失敗訊息
- SNAT 修改來源 Socket
- DNAT 修改目標 Socket
- MASQUERADE 動態修改來源 Socket 無法指定 IP 取網卡當下的 IP
- REDIRECT 將連線導向本機 Process
- RETURN 結束自定義鍊返回至原本的鍊
- QUEUE 封包排隊等待處理
- LOG 技術特定的規則封包
# 指令總表
# iptables 規則指令
- -h 幫助手冊
- -V 顯示 iptables 當前版本
- -I 將該規則插入至最前面,也可以後面加入編號到指定位置
- -A 將規則加入到最後面
- -R 取代指定規則 要給予原先規則編號
- -D 刪除指定規則 要給予原先規則編號
- -F 刪除所有規則
# iptables 規則鍊參數
- -N 建立新規則鍊
- -X 刪除指定規則鍊
- -E 更改指定規則鍊名稱
- -P 更改指定規則鍊的政策
- -Z 將 iptables counter 歸零
# 其餘參數
- -L 列出 iptables 規則 使用 DNS 解析
- -n 不使用 DNS 解析
- -v 顯示目前 iptables 規則處理封包數量
- -x 顯示完整封包數量
# 操作規則用參數
- -i 輸入網路介面 像是 eth0
- -o 輸出網路介面 像是 eth0
- -m 模組
- -p 通訊協定
- -s 來源 IP 網段 網域
- –sport 封包來源 port,port range
- -d 目的 IP 網段 網域
- –dport 封包目的 port,port range
- -j 政策 / 目標 ACCEPT/DROP/REJECT 等
# 查看
# 轉發
# 本地 port 轉發
假設要把本地端的 7777 轉發到 6666
1 2
| iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666
|
# 遠端 port 轉發
假設要從本機 6666 port 轉發到 192.168.1.8 的 7777 port
1 2 3
| sysctl -w net.ipv4.ip_forward=1 # 如果 /etc/sysctl.conf 已經設定過就不需要再輸入了 iptables -t nat -A PREROUTING -p tcp --dport 6666 -j DNAT --to-destination 192.168.1.8:7777 iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.8 --dport 7777 -j SNAT --to-source 192.168.1.168
|
# SSH 轉發
將本機的 2210 port 轉發到 192.168.100.218 的 ssh port
這樣外部就可以透過 本機固定 IP 的 2210 port 連線到 LAN 裡面的電腦了
1
| iptables -t nat -A PREROUTING -p tcp --dport 2210 -j DNAT --to 192.168.100.218:22
|
# 刪除 port 轉發
1 2 3
| iptables -t nat -nL --line # 刪除所有規則 iptables -t nat -D PREROUTING 1 # 刪除編號 1 的規則 iptables -t nat -D PREROUTING -p tcp --dport 2210 -j DNAT --to 192.168.100.218:22 # 刪除指定規則
|
# 刷新
# 刷新 Iptables
# 刷新 Iptables 附加鍊
就會刷新 [鍊名稱] 內的所有規則
# 刷新 Iptables 特定資源
刷新 NAT 表
# 直接操作 iptables 服務
1 2 3 4 5
| iptables start # 啟動 iptables stop # 停止 iptables restart # 重新啟動 iptables status # 查看規則 iptables save # 儲存規則
|
# 參考資料
- 如何刷新 iptables 并清除防火墙规则
- SSH 转发和 iptables 端口转发
- IPTables - Linux 的防火牆