Iptables

一、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.10080 端口映射到 192.168.0.1118080 端口
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
相關文章
相關標籤/搜索