1模板:
iptables的模板:
Iptables -t {filter,nat} -{A,I,D} {INPUT,FORWORD,OUTPUT} {n} -p {tcp,udp,icmp} {!} -s {192.169.0.1, 192.168.0.0/24,不寫代表所有} -d {不寫代表防火牆自身} --sport m:n --dport x:y -j {ACCEPT, DROP, REJECT , POSTROUTING , PREROUTING, LOG}
2 規則表
2.1定義
表的作用:容納各種規則鏈
表的劃分依據:防火牆規則的作用相似
默認包括4個規則表
raw表:確定是否對該數據包進行狀態跟蹤
mangle表:爲數據包設置標記
nat表:修改數據包中的源、目標IP地址或端口
filter表:確定是否放行該數據包(過濾)
常用的就是其中filter表nat表多用於實現ip的轉化功能,這裏的表功能個人感覺相當於鏈下面的表功能,每種鏈都存在這四種表
2.2優先級
raw>mangle>nat>filter
規則鏈之間的默認優先級
入站:PREROUTING>INPUT
出站:OUTPUT>POSTROUTING
轉發:PREROUTING>FORWARD>POSTROUTING
規則鏈內的匹配順序
按順序依次檢查,匹配即停止(LOG策略例外)
若找不到相匹配的規則,則按該鏈的默認策略處理,這跟路由轉發還是有點區別的
3 常用命令說明
命令 |
說明 |
試圖 |
iptables -L -n |
查看本機iptables的設置情況(右邊圖是沒有啓動防火牆) |
|
Iptables -F |
清除預設表filter中的所有規則鏈的規則 |
|
Iptables -X |
清除預設表 filter中的使用者自定鏈中的規則 |
|
/etc/rc.d/init.d/iptables save |
保存(需要重啓才生效) |
|
service iptables restart |
重啓 |
|
iptables -D
|
將指定的鏈中刪除規則 |
|
iptables -P |
修改鏈的默認設置,如將iptables -P INPUT DROP (將INPUT鏈設置爲DROP) |
|
iptables -t nat -L |
列出所有NAT鏈中所有規則 |
|
4 參數說明
--dport |
指定目標TCP/IP端口 如 –dport 80 |
--sport |
指定源TCP/IP端口 如 –sport 80 |
-p tcp |
指定協議爲tcp |
-p icmp |
指定協議爲ICMP |
-p udp |
指定協議爲UDP |
-j DROP |
拒絕 |
-j ACCEPT |
允許 |
-j REJECT |
拒絕並向發出消息的計算機發一個消息 |
-j LOG |
在/var/log/messages中登記分組匹配的記錄 |
-m mac –mac |
綁定MAC地址 |
-m limit –limit 1/s 1/m |
設置時間策列 |
-s 10.10.0.0或10.10.0.0/16 |
指定源地址或地址段 |
-d 10.10.0.0或10.10.0.0/16 |
指定目標地址或地址段 |
-s ! 10.10.0.0 |
指定源地址以外的 |
5 設定預設規則
Iptables -P INPUT DROP |
預設input規則,超出則放棄 控制流入數據(但是執行此命令會導致SSH遠程斷開,需要配置規則,無需執行此命令) |
|
Iptables -P OUTPUT ACCEPT |
預設output規則,全部接受 |
|
Iptables -P FORWARD DROP |
同理 轉發 規則 |
|
6 添加FILter規則
首先添加input鏈,上述默認預設規則是drop,所以需要添加規則使SSH遠程可以登錄
iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
遠程SSH連接端口 開啓22端口(具體端口依據實際情況)
|
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT |
如果預設output規則設置drop 需要設置此規則(具體端口依據實際情況) |
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT |
如果web服務器,output設置drop,同樣需要添加一條鏈(具體端口依據實際情況) |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
同理需要web服務器,input設置drop,需要開啓端口 80鏈(具體端口依據實際情況) |
iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A INPUT -p tcp --dport 25 -j ACCEPT |
開啓郵件服務器,開啓 25、110 端口鏈(具體端口依據實際情況) |
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT
|
開啓FTP服務器,(具體端口依據實際情況) |
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
|
開啓DNS服務器 ,(具體端口依據實際情況) |
iptables -A OUTPUT -p icmp -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT
|
運行icmp包通過(ping) |
iptables -A OUTPUT -o lo -p all -j ACCEPT iptables -A INPUT -i lo -p all-j ACCEPT
|
允許loopback 不然會導致DNS無法正常關閉 |
iptables -A OUTPUT -p tcp --sport 9990-j DROP
|
如果output鏈規則是accept,則需要關閉對於的端口號,防止有些病毒利用此端口 |
iptables -A INPUT -p tcp --dport 9090-j DROP |
如果input鏈規則是accept,則需要關閉對於的端口號,防止有些病毒利用此端口 |
iptables -A INPUT -s 192.168.0.1 -p tcp --dport 22 -j ACCEPT |
允許固定ip機器進行SSH連接(!191.168.0.1 表示除此IP外) |
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT |
允許 192.168.0.1-255 端的所有ip(刪除/ect/sysconfig/iptables 裏的其中一行 -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT) |
Iptables -A FORWORD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT Iptables -A FORWORD -i eth1 -o eth0 -j ACCEPT |
在NAT時 FORWORD 規則是DROP我們需要開啓轉發功能 |
Iptables -A FORWORD -p TCP ! --syn -m state --state NEW -j DROP |
丟棄壞的TCP包 |
Iptables -A FORWORD -f -m limit 100/s --limit-burst 100 -j ACCEPT |
處理ip碎片數量,防止攻擊,允許每秒100個 |
Iptables -A FORWORD -p icmp -m limit 1/s --limit-burst 10 -j ACCEPT |
設置icmp包過濾,允許每秒1個包,限制觸發條件10個包 |
iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP
|
DROP非法連接 |
7 添加NAT規則(默認規則是ACCEPT,添加DROP鏈)
iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
|
防止外網內網IP欺騙 |
iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
|
禁止與211.101.46.253的所有連接
|
|
|
附件:
測試題1:查看ip
測試題2:查看防火牆狀態
測試題3:查看規則列表
測試題4:阻止特定ip(192.168.0.1)進行SSH連接
測試題5:刪除filter表的output鏈第3條規則
測試題6:阻止客戶端訪問服務器8080端口號的訪問
測試題7:允許web服務只能被固定端的ip訪問
測試題8:只允許192.168.0.3的機器進行SSH連接
測試題9:阻止8080端口被ip(192.168.0.1)客戶端訪問
測試題10:匹配的規則記錄到日誌中去
答案:
CODE:JAVA |
1、ifconfig 2、/etc/init.d/iptables status 3、iptables -L -n 4、iptables -t filter -A INPUT -p tcp -s 192.168.0.1 --dport 22 -j DROP 5、iptables -D OUTPUT 3 6、iptables -A INPUT -p tcp --dport 8080 -j DROP 7、 iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -s x.x.x.x -p tcp --dport 80 -j ACCEPT 9、iptables -A INPUT -p tcp -s 192.168.0.1 --dport 8080-j DROP 10、iptables -A INPUT -P tcp -m mac --mac=mac地址 --dport 22 -j LOG
|