iptables
-
簡述
-
基礎知識
-
命令使用
簡述
iptables是什么?netfilter又是什么?
iptables是位于用戶控件的一個防火墻規則控制管理工具。netfilter是位于內核中的真正的防火墻,由五個鉤子函數(hooks)而組成。
iptables的作用是什么?
用來添加,刪除,管理netfilter規則。
netfilter的作用是什么?
起到過濾封包,轉換與映射IP地址和端口,拆分和修改封包內容,追蹤封包等功能,這些構成了四個功能表。
基礎知識
組成部分
iptables:規則控制管理工具。 netfilter:位于內核空間的過濾器,實際上生效的部分。 四表:大致根據功能可以分為四個,也就是在內部維護了四個表。 五鏈:netfilter一共會在五個地方設置hooks,鉤子函數,也就是說在五個地方會有關卡來過濾,依據不同的表,需要用到的鏈也是不同的。
五鏈(five hooks)
PREROUTING:進入路由前。 POSTROUTING:出路由前。 INPUT:進度內存空間前。 OUTPUT:出內存空間前。 FORWARD:轉發鏈。 根據進入到出去的順序為: PREROUTING -> INPUT -> OUTOUT -> POSTROUTING 進入本機用戶空間處理。 PREROUTING -> FORWARD -> POSTROUTING 進入本機后直接轉發處理。
四表
根據優先級從低到高為: filter:過濾。 INPUT OUTPUT FORWARD nat:網絡地址轉換。 PREROUTING POSTROUTING OUTPUT mangle:報文拆分已經重裝,修改報文內容。 INPUT OUTPUT PREROUTING POSTROUTING FOEWARD raw:關閉NAT上啟動的連接追蹤機制。 PREROUTING OUTPUT
協議類型
tcp:傳輸控制協議,可建立的是可靠的連接。 udp:用戶數據包協議,建立的為不可靠的連接。 icmp:網絡控制報文協議,iptables中主要用來控制ping報文。
常用的端口
ftp: tcp/20,21 ssh: tcp/22 telnet: tcp/23 smtp:tcp/25 http: tcp/80,8080 dns: tcp,udp/53 portmapper: tcp,udp/111 samba: udp/137,138 tcp/139,445,901 https: tcp/443 nfs: tcp,udp/2049 mysql: tcp/3306 php-fpm: tcp/9000
命令使用
格式:
iptables [-t tables] -A|I|R [chain [num]] -[par] [value] -p [protocol [value]] -m [option [value]] -j [active [value]]
保存與重載:
Cnetos6: iptables-save > /PATH/TO/FILE iptables-restore < /PATH/TP/FILE Centos7:引入了新的iptables管理工具,firewall。 firewalld-cmd firewalld-config *具體的使用方法可自行查閱官方文檔。
常用參數:
iptables [-t table] {-A|-D} chain rule-specification -A:添加 iptables [-t table] -I chain [rulenum] rule-specification -I:插入 iptables [-t table] -R chain rulenum rule-specification -R:替換 iptables [-t table] -D chain rulenum -D:刪除 iptables [-t table] -S [chain [rulenum]] -S:保存 iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] -F:清空規則 -L:列出規則 -Z:清零所有計數器 iptables [-t table] -N chain -N:創建一個新的用戶自定義鏈 iptables [-t table] -X [chain] -X:刪除用戶自定義鏈 iptables [-t table] -P chain target -P:為一個鏈設定默認的策略,ACCEPT DROP REJECT iptables [-t table] -E old-chain-name new-chain-name -E:重命名一個自定義鏈
通用匹配(-par [value])
-i [intface] :指定作用的網卡。 -s [source-ip]:指定源地址。 -d [destination-ip]:指定目標地址。 -f:匹配包分片后的除了第一個包外的其他包。
隱式擴展參數(-p protocol parm):
-tcp --dport|sport port --tcp-flags LIST1 LIST2 表示在list1的標記列表中,list所指定的值為1即被標識的包。 例: -p tcp --tcp-flags ACK,SYN,FIN ACK :匹配ACK被設置,但是SYN和FIN沒有被標識的包。 udp --dport|sport port 例: -p udp --dport 80 :標識匹配目標地址的80端口,所對應的如果為sport就為源地址的80端口。 icmp --icmp-type 0|8 0:響應報文 8:請求報文 例: -p icmp --icmp-type 0 :匹配icmp響應報文,詳細的icmp code對照表會在最后附加。
顯示擴展參數(-m parm):
mutilport --dports|sports|ports port1,port2... 例: -m mutilport --dports 22,80 :匹配目標地址端口22和80,可以指定一起指定多個端口,對應的sports源地址端口。 iprange [!] --src-range|--dst-range ipsfrom-toip 例: -m iprange --dst-range 192.168.1.1-192.168.1.10 :匹配目標地址為192.168.1.1-192.168.1.10范圍內的主機。 -m iptange ! --src-range 192.168.1.100 :匹配源地址不是192.168.1.100的所有主機。 string --algo bm|kmp [!] --string 'parrern' --algo bm|kmp 指定字符串查找算法。 例: -m string --algo bm --string 'chrome' :匹配所有報文中出現了chrome字符的報文。 -m string --algo kmp --sring 'ie8' :匹配所有報文中除了ie8字符外的所有報文。 limit --limit rate[/second|/minute|/hour|/day] --limit-burst num 例: -m limit --limite 30/minute :報文傳輸速率為每分鐘最多30封報文,即2秒一封最大速率 -m limit --limit-burst 100 :令牌桶允許存放100個令牌,如果存放的令牌超過100則開始丟棄令牌。 connlimit --connlimit-above num --conlimit-upto num 例: -m connlimit --connlimit-above 30 :允許并發連接數量要小于30. -m connlimit --connlimit-upto 10 : 允許并發連接數量大于10. recent --name #設定列表名稱,默認DEFAULT。 --rsource:源地址,此為默認。 --rdest:目的地址 --seconds:指定時間內 --hitcount:命中次數 --set:將地址添加進列表,并更新信息,包含地址加入的時間戳。 --rcheck:檢查地址是否在列表,以第一個匹配開始計算時間。 --update:和rcheck類似,以最后一個匹配計算時間。 --remove:在列表里刪除相應地址,后跟列表名稱及地址。 例: -m recent --name web --set -m recent --name web --update --seconds 300 -hitconut 10 -j DROP mac [!] --mac-source address 例: -m mac --mac-source 00:00:00:00:00:00 :匹配mac地址為00:00:00:00:00:00的報文。 time --datastart yyyy-mm-dd --datastop yyyy-mm-dd --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --monthdays day1,day2... [!] --weekdays day1,day2... 例: -m time --datastart 2016-05-30 --datastop 2016-06-01 :匹配兩個日期段內的報文。 -m time --timestart 10:00:00 --tiomestop 18:30:00 :匹配兩個時間段內的報文。 -m time ! --monthdays 1-20 :匹配月除了1-20號外的所有天數。 -m time --monthdays 25- :匹配25號之后的所有天數。 -m time --weekdays 1-3 :匹配周的周一周二周三。 -m time ! --weekdays 3,5 :匹配除了周三與周五的所有天。 state [!] --state INVALID|ESTABLISHED|NEW|RELATED INVALID:無法識別的連接。 ESTABLISHED:建立新連接后,在此連接失效前的所有連接。 NEW:新連接。 RELATED:相關的連接,建立連接后產生的新連接等,如ftp協議第一次連接21命令通道后產生的20端口的數據通道連接。 例: -m state --state NEW,WSTABLISHED :新連接與ESTABLISHED連接。 -m state ! --state RELATED :除了無法識別的連接外的所有連接。
動作(-j active):
DROP:丟棄。 REJECT:允許。 ACCEPT:拒絕。 RETURN::結束在目前規則鏈中的過濾程序,返回主規則鏈繼續過濾。 LOG:記錄日志 --log-level NUM :日志等級。 --log-prefix STRING :日志前綴。 MASQUEARDE:不設置地址轉換,而采用地址隱藏的策略來使的iptables自動取得轉換地址。 MARK:防火墻標記,用來批量標識地址和端口。 --mark VALUE[/mask] SNAT:源地址轉換。 --to-source IPADDR[:PORT] DNAT:目標地址轉換。 --to-destination IPADDR[:PORT]
保存和導入
iptables-save [file] :保存規則到文件。 iptables-restore [file] :從文件導入規則。
常用命令組合示例:
iptables [-t filter] -L -n :顯示指定的表規則狀況,默認為filter表。 iptables -A INTPUT -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT 放開80端口的請求。 iptables -A OUTPUT -s 192.168.1.1 -p tcp --sport 80 -j ACCEPT 放開80端口的響應。 iptables -t mangle -A PREROUTING -d 192.168.1.1 -p tcp -m mutilport --dports 22,80 -j MARK --mark 100 將22和80端口設置為一個防火墻標記100。 iptables -t NAT -A POSTROUTING -s 192.168.1.0 -p tcp -j SNAT --to-source 172.16.0.1 所有內網網段192.168.1.0的ip都將被映射為172.16.0.1這個ip iptables -t NAT -A PREROUTING -d 172.16.0.1 -p tcp -m mutilport --dports 22,80 -j DNAT --to-destination 192.168.1.1 所有目標ip 172.16.0.1的22,80請求都被轉到192.168.1.1的相應端口上。 iptables -A INPUT -d 192.168.1.1 -p icmp --icmp-type 0 -j ACCEPT 允許icmp的響應報文。 iptables -A OUTPUT -s 192.168.1.1 -p icmp --icmp-type 8 -j ACCEPT 允許icmp的請求報文。 iptables -A FORWARD -d 192.168.1.3 -p tcp --dport 80 -j ACCEPT 允許目標地址為192.168.1.3的請求轉發。
原創文章,作者:Net18_肖肖,如若轉載,請注明出處:http://www.www58058.com/17185