Iptables學習筆記
*規則順序從上到下執行,上面查詢到有符合條件的規則下面不再執行
1,iptables –t 表命令鏈規則 –j 動作
表:filter,nat ,mangle 默認是filter
Iptables –L 查看filter表
-P 等於 --policy 定義默認測量
例如:更改默認策略
Iptables –t filter --policyFORWARD DROP
Iptables –t filter -P FORWARD ACCEPT
-A 等於 --append 在規則列表的最後添加一條規則
-I 等於 --insert 在指定的位置插入一條規則
例如:
Iptalbes –t filter –I INPUT –p icmp –jDROP
Iptalbes –t filter –I INPUT 3 –p icmp –j DROP
-D 等於 --delete 刪除一條規則
例如:刪除第一天規則
Iptables –t filter –D INPUT 1
-R 等於 --replace 替換規則列表中的某條規則
例如:
Iptables –t filter -R INPUT 2 –p icmp–j DROP
-F 等於 --flush 刪除表中所以規則
例如:可以指定鏈,也可以不指定鏈,不指定鏈,清除表
Iptables –t filter –F INPUT
-L 查看iptables 信息
例如:iptables –t filter -L
iptables –t filter -L –v(-v:查看更多信息)
-n 以數字的形式顯示
Iptables 匹配選項
-i 或 --in-interface 指定數據包從那個網絡接口進入,如 ppp0 ,eth0和eth1等;
-o 或 –out-interface 指定數據包從哪塊網絡接口輸出,如:ppp0,eth0和eth1等;
-p 或 –protocol 協議類型指定數據包匹配的協議,如 tcp,udp 和icmp等;
-s 或 –source 指定數據包匹配的源地址;
-d 或 –destination 指定數據包匹配的目標地址;
--sport 指定數據包匹配的源端口號,可以使用“起始端口:結束端口”的格式指定一個範圍的端口;
--dport 目標端口號,指定數據包匹配的目標端口號,可以使用“起始端口:結束端口”的格式指定一個範圍的端口。
例:
Iptables -t filter -I INPUT –p icmp -i eth0 –jDROP
Iptables–t filter –I FORWARD –p tcp –s 172.17.31.233/32 –d 172.16.31.8/32 –dport 3389–j DROP
Iptables 擴展參數
1, -m state --state <狀態>
狀態有:
1,NEW:想要新建立的封裝包;
2,ESTABLISHED:已經連接成功的封裝包;
3,INVALID:無效的封裝包,例如數據損壞的封裝包;
4,RELATED:這個最常用!表示這個封裝包是與我們主機發送出去的封裝包有關,可能是響應封裝包或者是連接成功後的傳輸數據包。
2, icmp協議 –m icmp --icmp-type <狀態> 實現單方向ping
icmp 狀態類型:
echo-request 或 8
echo-reply 或 0
實例:拒絕172.16.31.2 ping通 172.16.31.7
例如:iptables –t filter –I INPUT –s 172.16.31.2/32 –d172.16.31.7/32 –p icmp –m icmp --icmp-type echo-request –j DORP
3, 參數 –m multiport 指定多端口號
-m multiport
--sports
--dports
--ports
實例:拒絕192.168.80.0/24 訪問 192.168.10.0/24 1-1024和 3389
例如:iptables –t filter –I FORWARD –p tcp –d192.168.10.0/24 –s 192.168.80.0/24 –m multiport --dports 1:1024,3389 –j DROP
4, 指定IP段
-m iprange
--src-range ip-ip
--dst-range ip-ip
實例:禁止192.168.80.1-100 地址段訪問 192.168.10.0/24
例如:iptables –t filter –I FORWARD –m iparnge --src-range192.168.80.1-192.168.80100 –j DROP
5, 最大連接數限制
-m connlimit
--connlimit-above <限制的最大連接數>
示例:只允許192.168.80.0/24 使用遠程桌面連接192.168.10.123/32最多兩個會話
例如:iptables –t filter –I FORWARD –s 192.168.80.0/24 –d192.168.10.123/32 –p tcp –dport 3389 –m connlimit --connlimit-above 2 –j DROP
6, 使用擴至選項限速
-m limit --limit
可以每秒鐘、每分鐘、每小時或每天平均一次,默認值爲每小時平均一次,參數如:/second, /minute, /hour, /day
示例:192.168.10.0/24 發送數據包不能超過300個,(一個包最大1500字節)1500*300=450 000=450k
例如(需要兩條命令,這是對網段進行限制):#:iptables –t filter –I FORWARD –s192.168.10.0/24 –d 192.168.80.0/24 –m limit --limit 300/second –j ACCEPT
#:Iptables –t filter –A FORWARD –s 192.168.10.0/24 –d192.168.80.0/24 –j DROP
對每個ip進行限制
公司使用Linux服務器來當網關,配置iptables NAT上網,使用iptables對每一個用戶進行帶寬限制:
vi /etc/sysconfig/limit.sh
#!/bin/bash
for((i=2; i<254; i++))
do
iptables –I FORWARD –s 192.168.10.$i –j DROP
iptables –I FORWARD –s 192.168.10.$I –m limit --limit 300/sec --limit-burst400 –j ACCEPT
done
注:--limit-burst (瞬間流量)上面的腳步是對192.168.10.1-254 限制每秒只運行最多300個數據包通過的限制。
7, 瞬間流量控制
參數--limit-burst 用來比對瞬間最大封裝包數量,超過數量的封裝包將直接丟棄。
示例:允許192.168.10.123/32 ping 192.168.80.123/32 4個包
例如:iptables –t filter –I FORWARD –s 192.168.10.123/32 –d192.168.80.123/32 –p icmp –m limit --limit-burst 4 –j ACCEPT
iptables –t filter –IFORWARD –s 192.168.10.123/32 –d 192.168.80.123/32 –p icmp –j DROP
# iptables –t filter –Z #清除filter表的計數器
8, 基於mac地址的過濾流量
參數–m mac --mac-source
說明:用來對比封裝包來源網絡接口地址的硬件地址,這個參數不能用在OUTPUT和PSOTROUTING鏈上,這是因爲封裝包要送出到網卡後,才能由網卡驅動程序通過ARP通訊協議查出目的地的MAC地址,所以iptables在進行封裝包對比時,並不知道封裝包會送到哪個網絡接口去。
示例:拒絕xp計算機的mac能夠訪問192.168.80.0/24 網段
例如:iptables –t filter –I FORWARD –d 192.168.80.0/24 –mmac --mac-source 00-50-56-C0-00-08 –jDROP
Filter表處理動作介紹
-j 參數用來指定要進行的處理動作,常用的處理動作有:ACCEPT, DROP, REJECT, LOG , REDIRECT , MASQUERADE , DNAT , SNAT,MIRROR , QUEUE ,RETURN ,MARK .
Filter 表使用的主要動作
ACCEPT : 封裝包放行,進行完此處理後,將不再匹配其他規則,直接跳往下一個規則鏈。
DROP : 丟棄封裝包不予處理,進行完此處理後,將不在匹配其他規則,直接中斷過濾程序。
REJECT : 攔截封裝包,並傳送封裝包通知對方,可以傳送的封裝包有下列選擇:ICMP port-unreachable 、 ICMP echo-reply 或 tcp-reset(這個封裝包要求對方關閉連接),進行完此處理後,將不再匹配其它規則,直接中斷過濾程序。
示例:攔截192.168.10.0/24 ping 和 192.168.10.0/24 3389端口
例如:iptables –t filter –I FORWARD –s 192.168.10.0/24 –picmp –j REJECT
Iptables –t filter –I FORWARD–s 192.168.10.0/24 –p tcp --dport 3389 –j REJECT
LOG : 將封裝包相應通訊記錄在/var/log中,詳細位置請查閱/etc/syslog.conf 配置文件,進行完此處理動作後,將會繼續匹配其它規則。
示例:記錄192.168.10.0/24網段連接遠程桌面和ping過服務器
例如:iptables –t filter –I FORWARD –s 192.168.10.0/24 –ptcp –dport 3389 –j LOG --log-prefix “iptables-rdp”
iptables –t filter –IFORWARD –p icmp –j LOG --log-prefix “iptables-icmp”
注:--log-prefix 是給日誌添加一個標記,方便以後查詢
保存還原iptable設置
顯示防火牆狀態
Service iptables status
防火牆配置文件位置
/etc/sysconfig/iptables
防火牆服務配置文件
/etc/sysconfig/iptables-config
IPTABLES_MODULES=”ip_connrack_ftp ip_nat_ftp” #是否需要支持其它模塊例如在地址轉換的情況下支持FTP;
IPTABLES_MODULES_UNLOAD=”yes” #當iptables服務停止的時候自定義的模塊是否被卸載,yes是卸載;
IPTABLES_SAVE_ON_STOP=”no” #當服務停止的時候定義的規則是否保存,默認是不保存;
IPTABLES_SAVE_ON_RESTART =”no” #當服務重啓的時候默認規則是否保存,默認是不保存;
IPTABLES_SAVE_COUNTER=”no” #當配置保存的時候,防火牆計數器是否保存,默認是不保存;
IPTABLES_STATUS_NUMERIC=”yes”#當顯示防火牆狀態時,是否以數字的形式顯示端口號和ip地址;
IPTABLES_STATUS_VERBOSE=”no” #當顯示防火牆狀態時,顯示網卡接口;
IPTABLES_STATUS_LINENUMBERS=”yes”#查看時,是否顯示行號;
清空防火牆配置
iptables –F
保存配置文件
/etc/rc.d/init.d/iptables save
把配置文件保存到另爲一個文件
iptables-save > iptables.conf.bak
導入配置文件
Iptables-restored < iptables.conf.bak
Recent模塊實現服務器網絡安全
常用參數:
--name #設定列表名稱,默認DEFAULT
--rsource #源地址,此爲默認
--rdest #目的地址
--seconds #指定時間內
--hitcount #命中次數
--set #將地址添加進列表,並更新信息,包含地址加入的時間戳
--rcheck #檢測地址是否在列表,以第一匹配開始計算時間
--update #和rcheck類似,以最後一個匹配計算時間
--remove #在列表裏刪除相應地址,後跟列表名稱及地址
示例1:
SSH連接一個客戶端60秒內只允許連接2次
1,用來設置多長時間,幾次拒絕
#iptables –t filter –A INPUT –p tcp --dport 22 –m state --state NEW –m
recent --name SSHPOOL --rcheck--seconds 60 --hitcount 2 –j DROP
2,連接計算
#iptables –t filter –A INPUT –p tcp --dport 22 –m state --state NEW –mrecent --name SSHPOOL --set –j ACCEPT
3,建立的會話就允許進入
#iptables –t filter –A INPUT –m state --state ESTABLISHED –j ACCEPT
示例2:
限制TCP 80 端口 60 秒內每個IP只能發10個新建連接,超過記錄日誌及丟棄數據包,可防CC及非僞造IP的syn flood
#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--rcheck --seconds 60 --hitcount 10 –j LOG --log-frefix “DDOS” --log-ip-options
#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--rcheck ---seconds 60 --hitcount 10 –j DROP
#iptables –A INPUT –p tcp --dport 80 --syn –m recent --name webpool--set –j ACCEPT
設置打開端口的鑰匙
#記錄日誌,前綴是SSHOPEN(可選)
iptables –A INPUT –p icmp –icmp-type echo-request –m length –length 1078–j LOG –log-prefix “SSHOPEN:”
#指定數據包1078字節,包含IP頭部20字節,icmp頭部8字節。(1078=1050+20+8:ping 172.16.31.7 –l 1050)
iptables –A INPUT –p icmp --icmp-type echo-request –m length --length 1078–m recent --set --name sshoopen --rsource –j ACCEPT
#檢查sshopen表中60秒內的記錄如果有有源地址則允許訪問tcp的22端口;
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds60 --name sshopen --rsource -j ACCEPT
#發送ping包指定數據包1178個字節,將客戶端地址從sshopen表中移除,客戶端將不能使用tcp的22端口建立連接;
iptables -A INPUT -p icmp --icmp-type echo-request -m length --length1178 -m recent --set --name sshopen -rmove -j ACCEPT
#已經連接的保持連接
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
NAT地址轉換
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth3 -j SNAT--to-source 192.168.20.10-192.168.20.11
NAT端口映射
端口映射選做地址轉換
iptables -t nat -A PREROUTING -i eth3 -d 192.168.20.10/32 -p tcp--dport 3389 -j DNAT --to 192.168.10.110:3389
iptables -t nat -A PREROUTING -i eth3 -d 192.168.20.10/32 -p tcp--dport 4000 -j DNAT --to 192.168.10.222:3389