iptables 學習筆記web
1. ipatales表:
filter: 用於過濾的時候。
nat : 用於作NAT的時候。
mangle: 用於修改封包內容。
鏈:
INPUT: 位於filter表,匹配目的ip是本機的數據包
FORWARD: 位於filter表,匹配穿過本機的數據包。
PREROUTING:位於nat表,用於修改目的地址(DNAT)
POSTROUTING:位於nat表,用於修改源地址(SNAT)
2.iptables語法格式:
iptables [-t 要操做的表]<操做命令>[要操做的鏈][規則號碼][匹配條件][-j匹配到之後的動做]
【操做命令】:( -A -I -D -R -P -F)
查看命令(-[vnx]L)
(1)-A <鏈名>
APPEND,追加一條規則(放到最後)
例:iptables -t filter -A INPUT -j DROP
(2)-I<鏈名>[規則號碼]
INSERT,插入一條規則
例:iptables -I INPUT -j DROP #在filter表的INPUT 鏈裏插入一條規則(插入成第一條)
iptables -I INPUT 3 -j DROP #在filter鏈裏插入一條規則(插入成第三條)
(3)-D<鏈名><規則號碼|具體規則內容>
DELETE,刪除一條規則
例:iptables -D INUT 3 #刪除filter表INPUT鏈中的第三條規則(無論它的內容是什麼)
iptables -D INPUT -s 192.168.0.2 -j DROP (按內容匹配)#刪除filter表INPUT鏈中的內容"-s 192.168.0.2 -j DROP"的規則
(4)-R <鏈名><規則號碼><具體規則內容>
REPLACE,替換一條規則
例; iptables -R INPUT 3 -j ACCEPT
(5)-P <鏈名><動做> POLICY ,設置某個鏈的默認規則
例:iptables -P INPUT DROP #設置filter表INPUT 鏈的默認規則DROP
(6)-F[鏈名]FLUSH,清空規則
例; iptables -F INPUT #清空filter 表INPUT鏈中的全部規則
iptables -t nat -F PREROUTING #清空nat表PREROUTING鏈中的全部規則
(6)-L[鏈名]LIST,列出規則
v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數。
x:在v的基礎上,禁止自動單位換算(k,M)
n:只顯示ip地址和端口號碼,不顯示域名和服務名稱。
例:iptables -L #粗略出filter表全部鏈全部規則。
iptables -t nat -vnL #用詳細方式列出nat表全部鏈的全部規則,只顯示ip地址和端口號
iptables -t nat -vxnL PREROUTING #用詳細方式列出nat表PREROUTING鏈的全部規則以及詳細數字
【匹配條件】
匹配條件:
流入,流出接口 (-i ,-o)
來源,目的地址 (-s,-d)
協議類型 (-p)
來源,目的端口(--sport,--dport)
(1),按網絡接口匹配
-i <匹配數據進入網絡接口>
例: iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.100.1 -j ACCEPT #容許這個網段數據從eth0 進入
(2),按源地址目的地址匹配
-s<匹配來源地址>
能夠是IP ,NET,DOMAIN,也能夠(任何地址)
例:iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT #容許來自這個網段的數據進入
-d<匹配目的地址>
可使IP ,NET,DOMAIN,也能夠空
例:iptables -A INPUT -d 192.168.10.1 -j DROP #拒絕去往這個網段的數據包
(3)按協議類型匹配
-p <匹配協議類型>
可使TCP,UDP,ICMP等,能夠是空
-p tcp
-p udp
-p icmp --icmp-type 類型
例:iptables -A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT #容許來源這個網段的數據用tcp傳輸數據
(4)按來源目的的端口匹配
--sport<匹配源端口> 能夠是個別端口,能夠是端口範圍
--sport 1000 匹配源端口是1000的數據包
--sport 1000:2000 匹配端口1000-2000的數據包(含1000,3000)
--sport :3000 匹配源端口3000如下的數據包(含3000)
--sport 1000: 匹配源端口是1000如下的數據包(1000)
例: iptables -A INPUT -s 192.168.11.0/24 -p tcp --sport 1000 -j ACCEPT #容許來源這個網段的數據使用tcp的1000端口上傳輸數據
iptables -A INPUT -s 192.168.33.0/24 -p tcp --sport 1000:2000 -j ACCEPT
--dport<匹配目的的端口>能夠是個別端口,也能夠是端口範圍
--dport 80 匹配目的端口是80的數據包
--dport 1000:2000 匹配目的端口是1000-2000的數據包(含1000,2000)
--dport :3000 匹配目的端口是3000如下的數據包(含3000)
--dport 1000: 匹配目的的端口是1000如下的數據包(含1000)
例: iptables -A INPUT -s 192.168.6.0/24 -p tcp --dport 80 -j ACCEPT #容許去往這個網段的數據使用tcp的80端口上傳輸數據
注意: --sport 和 --dport 必須配合-p參數使用
【動做(處理方式)】
動做:ACCEPT,DROP,SNAT,DNAT,MASQUERADE
(1)-j ACCEPT 經過,容許數據包經過本鏈
例: iptabes -A INPUT -j ACCEPT #容許全部訪問本機ip的數據包經過
(2)-j DROP 丟棄,阻止數據包經過本鏈而丟棄
例: iptables -A FORWARD -s 192.168.69.34 -j DROP
(3)-j DNAT
-j DNAT --to IP[-IP][:端口-端口](nat表的PREROUTING鏈)
#目的地址轉換,DNAT 支持轉換單ip,也支持轉換到IP地址池(一組連續的IP地址)
例: iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1 #把從ppp0進來要訪問TCP/80的數據包目的改成192.168.0.1
(4)-j SNAT
-j SNAT --to IP[-IP][:端口-端口](nat表的POSTROUTING鏈)
源地址轉換,SNAT支持轉換單ip,也支持轉換到ip地址池(一組連續的IP地址)
例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 192.168.8.1 #將內網192.168.0./24 的源地址改成192.168.8.1 ,用於NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
(5)-j MASQUERADE #動態源地址轉換(動態ip的狀況下使用)
例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #將源地址192.168.0.0/24的數據包進行地址假裝
【附加模塊】
1.按包狀態匹配(state)
2.按來源MAC匹配(mac)
3.按包速率匹配(limit)
4.多端口匹配(multiport)
(1)state
-m state --state 狀態
狀態: NEW ,RELATED,ESTABLISHED,INVALID
NEW:有別於tcp的syn
ESTABLISHED:鏈接態
RELATED:衍生態,與conntrack關聯(FTP)
INVALID:不能被識別屬於哪一個鏈接或沒有任何狀態
例: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
(2)mac
-m mac --mac-source MAC #匹配某個MAC地址
例:iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #阻斷來自某個MAC地址的數據包,經過本機。
注意:報文通過路由後,數據包中原有的mac信息會被替換,因此在路由後iptables中使用mac模塊式沒有意義的。
(3)limit
-m limit --limit 匹配速率[--burst緩衝數量]用必定速率去匹配數據包
例: iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
注意: limit 英語上看是限制的意思,但實際上只是按必定速率去匹配而已,要想限制的話後面再跟一條DROP
(4)multiport
-m mutiport <--sports|--dports|--ports>端口1[端口2,..端口n] #一次性匹配多個端口,能夠區分源端口,目的端口或不指定端口
例: iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
注意: 必須與-p參數一塊兒使用
【實例分析】
1.單服務器的防禦
2.如何作網關
3.如何限制內網用戶
4.內網如何作對外服務器
5.鏈接追蹤模塊
(1)單服務器的防禦
弄清對外服務對象
書寫規則
網絡接口lo的處理
狀態監測的處理
協議+端口的處理
實例:一個普通的web服務器
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
注意:確保規則順序正確,弄清邏輯關係,學會使用-vnL
(2)如何作網關
弄清網絡拓撲
本機上網
設置nat
啓用路由轉發
地址假裝SNAT/MASQUERADE
實例:ADSL 撥號上網的拓撲
echo "1" >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
(3)如何限制內網用戶
過濾位置filer 表FORWARD鏈
匹配條件 -s -d -p --s/dport
處理動做 ACCEPT DROP
實例:
iptables -A FORWARD -s 192.168.0.8 -j DROP
iptables -A FORWARD -m mac --mac-source 34:12:44:42:56:23 -j DROP
iptables -A FORWARD -d bbs.chinaunix.net -j DROP
(4)內網如何作對外服務器
服務器協議(TCP/UDP)
對外服務端口
內部服務器私網IP
內部真正服務端口
實例:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.2
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.3:80
(5)鏈接追蹤模塊
modprode ip_nat_ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
必添加項:
echo "1" >/proc/sys/net/ipv4/ip_forward
echo "1">/proc/sys/net/ipv4/tcp_syncookies
echo "1" >proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprode ip_nat_ftp