1、 指定表
filter為包過濾防火牆默認表,nat表,mangle表
2、 指定操作命令
添加、刪除、更新
3、 指定鏈
操作包過濾防火牆的input,output,forward。也可能操作自己定義的。
4、 指定規則匹配器
各種規則匹配。如IP、端口、包類型
5、 指定目標動作
ACCEPT表示通過 DROP表示被丟棄 REJECT表示拒絕包
LOG表示包的有關信息被記錄日志 TOS改寫包的TOS值
用法:<嚴格區分大小寫>
iptables [-t table] cmd [chain][rule-matcher][-j target]
cmd:
-A 在所選鏈的尾添加一條或多條規則
-D 刪除
-R 替換
-I 插入
-L 列出所有規則
-F 清除
-N 創建
-X 刪除指定的用戶定義鏈
-P 為永久鏈指定默認規則
-C 檢查給定的包是否與指定鏈的規則相匹配
-Z 將指定鏈中所有規則的包字節記數器清零
-h 顯示幫助信息
//例子
# touch /etc/rc.d/filter-firewall
//
IPT=/sbin/iptables
WWWSERVER=192.168.168.119
FTPSERVER=192.168.168.119
IPRANGE=192.168.168.0/24
$IPT -F
$IPT -P FORWARD DROP
$IPT -A FORWARD -p tcp -d $WWWSERVER --dport www -i eth0 -j ACCEPT
$IPT -A FORWARD -p tcp -d $FTPSERVER --dport ftp -i eth0 -j ACCEPT
$IPT -A INPUT -s 192.168.168.81 -i eth0 -j DROP
------------------------
案例:
前幾天遇到一個小問題:
一個小的網絡,擁有一個電信公網IP。用LINUX做NAT後所有用戶都走這個IP出去。內部有一些服務器要向外公布,如:80,在NAT上做SNAT(讓大家都走這裡上外網):
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 222.111.33.88
然後給要公布的服務做DNAT(外面的客戶可以通過公網IP訪問服務器):
iptables -t nat -A PREROUTING -d 222.111.33.88 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.250:80
這樣兩步之後,應該內部用戶能上外網了,外面的用戶也能訪問到我們內部的服務器。
**注:要打開轉發,和清空以前的規則。******
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
********************************
但是現在出現一個問題,就是NAT後面(LAN)的用戶不通直接通過WAN IP:222.111.33.88 來訪問內部服務器。客戶覺得只記一個IP(222.111.33.88 )方便點,而且他們也不想買域名,覺得沒撒意思。他只想讓大家記得這個IP。隨時隨地(在內網和外網)都可以訪問。
現在我們來看看為什麼在內網無法通過WAN IP來訪問服務器,我們看看數據包是怎麼走的:
假設內網訪問的用戶IP是:192.168.1.123 服務器IP是:192.168.1.250,那整個過程是這樣的:
192.168.1.123通過XXX端口訪問222.111.33.88的80端口,源IP端口:192.168.1.123:XXX 目標IP端口:222.111.33.88:80
NAT在接到數據包後,發現這個請求是向內部的(DNAT),直接將數據包直接發給192.168.1.250。
192.168.1.250收到來自192.168.1.123的包後。再回應給192.168.1.123,192.168.1.123會收到一個類似:192.168.1.250:80 --->192.168.1.123XXX的回應。
但192.168.1.123請求的是:222.111.33.88:80,所以不接收192.168.1.250:80 的回應。數據傳輸失敗。所以內部用戶無法直接通過WAN IP來訪問。
通過上面的過程我們發現問題主要出在內網請求到網關後,進入第一個鏈PREROUTING就是DNAT(端口映射)不會經過SNAT做源地址轉換,因為不是從外網網卡出去的。所以要想讓數據包正確回來,就得在PREROUTING後做一次SNAT。
iptables -t nat -I POSTROUTING -s 192.168.1.0/255.255.255.0 -p tcp -d 192.168.1.250 --dport 80 -j SNAT --to 192.168.1.1
OK,問題解決了。
***如果是FORWARD DROP了的話,記得打開192.168.1.250:80
iptables -A FORWARD -p tcp -d 192.168.1.250 --dport 80 -j ACCEPT
如果要用FTP服務,記得要加載相應的FTP模塊:
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
還得注意主、被動模式
--------------------------
另一篇:
1、iptables介紹
iptables是復雜的,它集成到linux內核中。用戶通過iptables,可以對進出你的計算機的數據包進行過濾。通過iptables命令設置你的規則,來把守你的計算機網絡──哪些數據允許通過,哪些不能通過,哪些通過的數據進行記錄(log)。接下來,我將告訴你如何設置自己的規則,從現在就開始吧。
2、初始化工作
在shell提示符 # 下打入
iptables -F