iptables默認三張表:
•filter:防火牆,包含INPUT、OUTPUT、FORWARD
•nat:網絡地轉轉換,包含PREROUTING、POSTROUTING、OUTPUT
•mangle:流量整形,包含所有的五條鏈
iptables的五條鏈 ->寫規則的地方
•INPUT:數據包的目地的是LINUX主機本身
•OUTPUT:數據包由LINUX主機本身發送
•FORWARD:數據包從一個接口進入,另一個接口發出(如果做路由轉發的話必須開啟/etc/sysctl.conf 修改net.ipv4.ip_forward=1)
•PREROUTING:做路由之前
•POSTROUTING:做路由之後
命令
清空防火牆
iptables -F
把INPUT默認規則改成DROP
iptables -P INPUT DROP
添加一條規則允許SSH通過INPUT
一般插入很多人都寫iptables -A (是追加規則,添加的規則在最下方,防火牆的規則是誰在最上邊誰生效,所以我一般用-I,添加的規則先生效並且I能指定具體位置)
iptables -I INPUT -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT(將這條規則插入到上面第二行)
只允許允許192.168.0.0、24從eth0網卡訪問本機的22端口
iptables -I INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 22 -j ACCEPT
列出防火牆規則
iptables -L
刪除INPUT裡面的第二條規則(從最上面開始)
iptables -D INPUT 2
保存防火牆規則(防火牆如果沒有保存,重啟服務後規則失效)
service iptables save
備份防火牆規則
iptables-resotre < /etc/sysconfig/iptables.20130301
路由
阻止某個IP到達本機
iptables -I FORWARD -s 202.106.0.20 -j DROP
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SANT --to 1.1.1.1
將192.168.0.0網段的地址轉換成1.1.1.1去做nat訪問
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SANT --to 1.1.1.1-1.1.1.20
將192.168.0.0網段的地址轉換成1.1.1.1-20網段的地址去做nat訪問
iptables -t nat -I PREROUTING -i eth0 -p tcp 80 -j DNAT --to 192.168.0.1
將通過網卡eth0的訪問80端口的數據包目的地址改為192.168.0.1
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
將源地址是192.168.0.0/24網段的數據包地址進行偽裝
STATE
-m state --state 狀態分為
NEW: 有別於tcp的syn
ESTABLISHED:連接態
RELATED:衍生態,與conntrack(連接跟蹤模塊)關聯(FTP)
INVALID:不能識別的連接或者狀態
iptables -I INPUT -m state --state RELATED,ESTABLISHED \ -就ACCEPT
允許連接出去後對方主機回應的數據包
MAC
-m mac --mac-source MAC
iptables -I FORWARD -m mac --mac0source xx:xx:xx:xx:xx:xx \ -j DROP
阻斷來自某MAC地址的數據包,經過本機的路由
iptables -P FORWARD DROP
iptables -I FORWARD -s 192.168.0.2 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
ip與mac地址綁定,只有這個ip能從本機路由
LIMIT限速
-m limit --limit
iptables -I FORWARD -d 192.168.0.2 -m limit --limit 50/s -j ACCEPT
iptables -I FORWARD -d 192.168.0.2 -j DROP
限速50/s要想實現限制上傳和下載的速度,得結合TC去分網段
簡單web服務器上的防火牆配置
iptables -I INPUT -i eth0(網絡端口端口)-j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
網關
實例:ADSL 撥號上網的拓撲
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -o eth0 \
-j MASQUERADE
對外服務器
服務協議(TCP/UDP)
對外服務端口
內部服務器私網 IP
內部真正服務端口
實例:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 \
-j DNAT --to 192.168.1.1
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 \
-j DNAT --to 192.168.1.2:80