一、IPtables簡介linux
Netfilter/Iptables是(linux/unix)自帶的一款優秀開源代碼的徹底自由的基於包過濾的防火牆工具。能夠對流入和輸出服務器的數據包進行很精細的控制。IPtables主要工做在OSI七層的2、3、四層。服務器
IPtables是linux內核集成的IP信息過濾系統。對於接入網絡或者服務器,則該系統有利於在linux系統上控制IP信息包過濾和防火牆配置。網絡
兩大組件:netfilter iptables 。 tcp
netfilter 組件稱爲內核空間(kernelspace),是內核一部分,由信息包過濾表組成。這些表包含內核用來控制信息包過濾處理的規則集。工具
IPtables 組件是一種工具,稱爲用戶空間(userspace),使插入、修改、除去信息包過濾表中的規則變得容易。網站
2 IPtables表與鏈功能spa
IPtables的規則鏈分爲三種:輸入、轉發和輸出。unix
1)輸入——用於過濾目的地址是本機的鏈接。日誌
2)轉發——用來過濾目的地址和原地址都不是本機的鏈接。如路由器收到大多數數據均須要轉發給其餘主機。code
3)輸出——用來過濾地址是本機的鏈接。如ping baidu.com,iptables會檢查輸出鏈中與ping和baidu.com相關的規則,而後決定容許仍是拒絕你的鏈接請求。
3 IPtables數據包流程
數據包先通過PREOUTING,由該鏈肯定數據包走向:
1) 目的地址是本地,則發送到INPUT,讓INPUT決定是否接收下來送到用戶空間,流程爲①--->②;
2) 若知足PREROUTING的nat表上的轉發規則,則發送給FORWARD,而後再通過POSTROUTING發送出去,流程爲: ①--->③--->④--->⑥;
3) 主機發送數據包時,流程則是⑤--->⑥;
4) 其中PREROUTING和POSTROUTING指的是數據包的流向,如上圖所示POSTROUTING指的是發往公網的數據包,而PREROUTING指的是來自公網的數據包。
四、IPtables四張表、五條鏈。
IPtables具備Filter,、NAT、Mangle、Raw四個內建表。
五、linux下的IPtables下filter表
filter表示iptables的默認表,默認有三種內建表:
INPUT鏈:處理來自外部的數據
OUTPUT鏈:處理向外發送的數據
FORWARD鏈:將數據轉發到本機或其餘網卡設備上。
六、linux下IPtables下的NAT表
NAT表有三種內建鏈:
PREROUTING鏈:處理到達本機並在路由轉發前的數據包,它會轉發數據包中的目標IP地址(destination ip address),一般用於DNAT(destination NAT)
POSTROUTING鏈 – 處理即將離開本機的數據包。它會轉換數據包中的源IP地址(source ip address),一般用於SNAT(source NAT)
OUTPUT鏈:處理本機產生的數據包
七、linux下IPtables命令
1.命令: -A 順序添加,添加一條新規則 -I 插入,插入一條新規則 -I 後面加一數字表示插入到哪行 -R 修改, 刪除一條新規則 -D 後面加一數字表示刪除哪行 -D 刪除,刪除一條新規則 -D 後面加一數字表示刪除哪行 -N 新建一個鏈 -X 刪除一個自定義鏈,刪除以前要保證次鏈是空的,並且沒有被引用 -L 查看 @1.iptables -L -n 以數字的方式顯示 @2. iptables -L -v顯示詳細信息 @3. iptables -L -x 顯示精確信息 -E 重命名鏈 -F 清空鏈中的全部規則 -Z 清除鏈中使用的規則 -P 設置默認規則 2.匹配條件: 隱含匹配: -p tcp udp icmp --sport指定源端口 --dport指定目標端 -s 源地址 -d 目的地址 -i 數據包進入的網卡 -o 數據包出口的網卡 擴展匹配: -m state --state 匹配狀態的 -m mutiport --source-port 端口匹配 ,指定一組端口 -m limit --limit 3/minute 每三分種一次 -m limit --limit-burst 5 只匹配5個數據包 -m string --string --algo bm|kmp --string"xxxx" 匹配字符串 -mtime--timestart 8:00 --timestop 12:00 表示從哪一個時間到哪一個時間段 -mtime--days 表示那天 -m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址 -m layer7 --l7proto qq 表示匹配騰訊qq的 固然也支持不少協議,這個默認是沒有的,須要咱們給內核打補丁並從新編譯內核及iptables纔可使用 -m layer7 這個顯示擴展匹配 3.動做: -j DROP 直接丟掉 ACCEPT 容許經過 REJECT 丟掉,可是回覆信息 LOG --log-prefix"說明信息,本身隨便定義" ,記錄日誌 SNAT 源地址轉換 DNAT 目標地址轉換 REDIRECT 重定向 MASQUERAED 地址假裝 保存iptables規則 service iptables save # 重啓iptables服務 service iptables stop service iptables start
WEB服務器,開啓80端口: iptables -A INPUT -p tcp --dport 80 -j ACCEPT 郵件服務器,開啓25,110端口 iptables -A INPUT -P tcp --dport 110 -j ACCEPT iptables -A INPUT -P tcp --dport 25 -j ACCEPT FTP服務器,開啓21端口 iptables -A INPUT -P tcp --dport 20 -j ACCEPT iptables -A INPUT -P tcp --dport 21 -j ACCEPT DNS服務器開啓53號端口 iptables -A INPUT -p tcp --dport 53 -j ACCEPT 容許icmp包經過,也就是容許ping iptables -A OUTPUT -p icmp -j ACCEPT(DROP) iptables -A INPUT -p icmp -j ACCEPT(DROP) 將本機的8080端口轉發至其餘主機,主機IP:192.168.0.111 ,目標主機和端口:192.168.0.112:80 iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.111 --dport 8080 -j DNAT --to-destination 192.168.0.112:80 iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.111:8080 echo 1>/proc/sys/net/ipv4/ip_forward 同時開啓iptables forward
用 iptables 將 192.168.0.100 的 80 端口映射到 192.168.0.111 的 8080 端口 iptables -t nat -A PREROUTING -p tcp -d 192.168.0.100 --dport 80 -j DNAT -to-destination 192.168.0.111:8080 本機的80端口轉到8080端口 iptables -t nat -A PREROUTING -p tcp --dport -j REDIRECT --to-ports 8080
門戶網站iptables規則策略以下
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [602:39593] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -s 192.168.0.111 -j DROP -A INPUT -s 192.168.0.112 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -P tcp -m state --state NEW -M tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -s 116.243.139.7 -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 8801 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT #### -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT