參考鏈接:iptables 圖文詳解
【服務器防護】iptables 配置詳解(非常棒的案例)
iptables 為什么一定要有 --state ESTABLISHED,RELATED -j ACCEPT ?
Linux中iptables設置詳細
iptables工具命令詳細
one、四種表
filter 表:負責過濾功能,防火墻
nat 表:網絡地址轉換
mangle 表:拆解報文,做出修改,并重新封裝
raw 表:關閉 nat 表上啟用的連接追蹤機制
two、五種鏈
prerouting : 路由前
input : 輸入
forward : 轉發
output : 輸出
postrouting : 路由后
Three、三種規則
accept : 放行
reject : 主動拒絕
drop : 丟棄
Four、實際操作
**|> iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT # 放在 iptables 文件第一位
1、iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT # 注意 d 是 目的
2、iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT # 注意 s 指源
3、iptables -t filter -P INPUT DROP
4、iptables -t filter -P OUTPUT DROP
5、iptables -A INPUT -i lo -j ACCEPT # 用于php-fpm 成功運行
6、 iptables -A OUTPUT -o lo -j ACCEPT # 和上一個配套
7、iptables -t filter -A INPUT -p tcp --dport 9000 -j ACCEPT # php-pfm
8、iptables -t filter -A OUTPUT -p tcp --sport 9000 -j ACCEPT # php-pfm
# 在網卡上打開ping功能
9、iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j ACCEPT
10、iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -j ACCEPT
# 將這條指令插到第一位 (filter 表)
11、iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 開啟 dns 服務
-A INPUT -i eth+ -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -i eth+ -p tcp -m tcp --sport 53 -j ACCEPT
-A OUTPUT -o eth+ -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -o eth+ -p tcp -m tcp --dport 53 -j ACCEPT
# 執行 wget 命令
-A INPUT -i eth0 -p tcp -m tcp --sport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT
# DHCP
-A INPUT -p udp -m multiport --dports 67,68 -j ACCEPT
-A INPUT -p udp -m multiport --sports 67,68 -j ACCEPT
PS:注意:寫命令時,關鍵字要大寫;
1、當未指定規則表時,則一律視為是 filter 表。
2、如果沒有 :-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
就要這樣寫:-A INPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --dport 22 -j ACCEPT
3、nat 表不能 drop
4、在某一個鏈中,如:output,表的優先級是:raw > mangle > nat > filter
5、如果遠程服務器 mangle 表 input 鏈和 output 鏈是 drop 策略,表中 input 和 output 均無允許 22 端口的記錄,
filter 表 input 鏈和 output 鏈也是 drop 策略,并且表中 input 和 output 均有允許 22 端口的記錄,則我們 ssh 連不上遠程服務器,
因為,mangle 表優先級高且無允許 22 端口的記錄,服務器拒絕了 ssh 連接;
但如果這個 mangle 表和 filter 表中 22 端口記錄互換,有變無,無變有,則也不可以 ssh 連接遠程服務器,
因為 22 端口經過 mangle 表的允許后,到 filter 表,被拒絕了,所以,也不能 ssh 連服務器,
因此,這 4 個表是如果 input 和 output 兩個鏈(假如有)均是 drop 策略,則 22 端口能否連通是串聯的,有一個表不通,整個 ssh 通道就不通。
6、設置策略時,只需 drop filter 表 input 、output、(forward) 鏈即可,然后允許必要端口,無需 drop 所有表(假如這個表能 drop)。