iptables限制某個IP(網段/某段IP)連接指定端口
iptables只允許某個IP(段)訪問服務器指定端口(或全部端口)
20130407 Chenxin
禁止訪問設置(禁止某個IP或某段IP訪問服務器固定端口)
iptables -A INPUT -s 192.168.80.121 -p tcp -d 192.168.11.4 --dport 80 -j DROP
iptables -A INPUT -s 192.168.80.0/24 -p tcp -d 192.168.11.4 --dport 80 -j DROP
iptables -A INPUT -m iprange --src-range 192.168.80.109-192.168.80.121 -p tcp -d 192.168.11.4 --dport 80 -j DROP
也可以不指定目標地址,只給出源地址:
iptables -A INPUT -s 192.168.80.121 -p tcp --dport 80 -j DROP
只允許固定ip(段)訪問服務器固定端口(注意規則順序,具體查看擴展閱讀二,-I與-A)
iptables -A INPUT -s 192.168.80.121 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.10.205 --dport 80 -j DROP(-I是插入的意思,-A添加)
(-A會將新加的規則追加到之前規則的最后面,-I則是插入到最前面)
或者是允許多個地址段,如下:
iptables -I INPUT -s 192.168.80.0/24 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -I INPUT -s 192.168.10.0/24 -p tcp -d 192.168.10.205 --dport 80 -j ACCEPT
iptables -nL -v --line-numbers (規則默認順序采取的是壓入iptables的方式)
Chain INPUT (policy ACCEPT 1102 packets, 153K bytes)
num pkts bytes target prot opt in out source destination
1 12 522 ACCEPT tcp -- * * 192.168.80.121 192.168.10.205 tcp dpt:80
2 3 152 DROP tcp -- * * 0.0.0.0/0 192.168.10.205 tcp dpt:80
查看規則鏈
查看當前規則對應的規則號:
iptables -nL --line-numbers #--numeric -n numeric output of addresses and ports
#--list -L [chain [rulenum]] List the rules in a chain or all chains
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 192.168.80.0/24 192.168.11.4 tcp dpt:80
查看當前規則中各規則具體接收和發送數據情況:
iptables -nL -v #--verbose -v verbose mode
Chain INPUT (policy ACCEPT 9870 packets, 1348K bytes)
pkts bytes target prot opt in out source destination
3 152 DROP tcp -- * * 192.168.80.0/24 192.168.11.4 tcp dpt:80
放在一起也可以:
iptables -nL --line-numbers -v
清除規則鏈
清除原先的規則
iptables -F; --flush -F [chain] Delete all rules in chain or all chains
iptables -F -t nat;
iptables -X; --delete-chain -X [chain] Delete a user-defined chain
根據規則號清理:
iptables -D INPUT 1 # --delete -D chain rulenum. Delete rule rulenum (1 = first) from chain
設置默認規則
iptables -P INPUT ACCEPT; --policy -P chain target. Change policy on chain to target
iptables -P OUTPUT ACCEPT;
iptables -P FORWARD ACCEPT;
如果發現設置出錯,可以讓機房重啟服務器即恢復初始狀態.
擴展閱讀一:
iptables執行規則順序
iptables執行規則時,是從從規則表中從上至下順序執行的,如果沒遇到匹配的規則,就一條一條往下執行,如果遇到匹配的規則后,那么就執行本規則, 執行后根據本規則的動作(accept, reject, log等),決定下一步執行的情況,后續執行一般有三種情況。
1.一種是繼續執行當前規則隊列內的下一條規則。比如執行過Filter隊列內的LOG后,還會執行Filter隊列內的下一條規則.
2.一種是中止當前規則隊列的執行,轉到下一條規則隊列。比如從執行過accept后就中斷Filter隊列內其它規則,跳到nat隊列規則去執行.
3。一種是中止所有規則隊列的執行.
iptables 是采用規則堆棧的方式來進行過濾,當一個封包進入網卡,會先檢查 Prerouting,然后檢查目的 IP 判斷是否需要轉送出去,接着就會跳到 INPUT 或 Forward 進行過濾,如果封包需轉送處理則檢查 Postrouting,如果是來自本機封包,則檢查 OUTPUT 以及 Postrouting。過程中如果符合某條規則將會進行處理,處理動作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,還多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些處理動作不會中斷過濾程序,某些處理動作則會中斷同一規則煉的過濾,並依照前述流程繼續進行下一個規則煉的過濾(注意:這一點與 ipchains 不同),一直到堆棧中的規則檢查完畢為止。透過這種機制所帶來的好處是,我們可以進行復雜、多重的封包過濾,簡單的說,iptables 可以進行縱橫交錯式的過濾(tables)而非煉狀過濾(chains)。
ACCEPT 將封包放行,進行完此處理動作后,將不再比對其它規則,直接跳往下一個規則煉(nat:postrouting)
REJECT 攔阻該封包,並傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(這個封包會要求對方關閉聯機),進行完此處理動作后,將不再比對其它規則,直接 中斷過濾程序。 范例如下:
iptables -A FORWARD -p TCP ——dport 22 -j REJECT ——reject-with tcp-reset
DROP 丟棄封包不予處理,進行完此處理動作后,將不再比對其它規則,直接中斷過濾程序。
REDIRECT 將封包重新導向到另一個端口(PNAT),進行完此處理動作后,將會繼續比對其它規則。 這個功能可以用來實作通透式 porxy 或用來保護 web 服務器。例如:iptables -t nat -A PREROUTING -p tcp ——dport 80 -j REDIRECT ——to-ports 8080
MASQUERADE 改寫封包來源IP為防火牆 NIC IP,可以指定 port 對應的范圍,進行完此處理動作后,直接跳往下一個規則煉(mangle:postrouting)。這個功能與 SNAT 略有不同,當進行 IP 偽裝時,不需指定要偽裝成哪個IP,IP 會從網卡直接讀取,當使用撥接連線時,IP 通常是由 ISP 公司的 DHCP 服務器指派的,這個時候 MASQUERADE 特別有用。范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE ——to-ports 1024-31000
LOG 將封包相關訊息紀錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 組態檔,進行完此處理動作后,將會繼續比對其它規則。例如:
iptables -A INPUT -p tcp -j LOG ——log-prefix "INPUT packets"
SNAT 改寫封包來源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將直接跳往下一個規則煉(mangle:postrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT ——to-source 194.236.50.155-194.236.50.160:1024-32000
DNAT 改寫封包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對應的范圍,進行完此處理動作后,將會直接跳往下一個規則煉(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 ——dport 80 -j DNAT ——to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR 鏡射封包,也就是將來源 IP 與目的地 IP 對調后,將封包送回,進行完此處理動作后,將會中斷過濾程序。
QUEUE 中斷過濾程序,將封包放入隊列,交給其它程序處理。透過自行開發的處理程序,可以進行其它應用,例如:計算聯機費用……等。
RETURN 結束在目前規則煉中的過濾程序,返回主規則煉繼續過濾,如果把自訂規則煉看成是一個子程序,那么這個動作,就相當於提早結束子程序並返回到主程序中。
MARK 將封包標上某個代號,以便提供作為后續過濾的條件判斷依據,進行完此處理動作后,將會繼續比對其它規則。范例如下:
iptables -t mangle -A PREROUTING -p tcp ——dport 22 -j MARK ——set-mark 2
擴展閱讀二:
iptables 添加/刪除/查看/修改
當我們用iptables添加規則,保存后(services iptables save),這些規則以文件的形勢存在磁盤上的,以centos為例,文件地址是/etc/sysconfig/iptables,我們可以通過命令的方式去添加,修改,刪除規則,也可以直接修改/etc/sysconfig/iptables這個文件就行了。
二,添加防火牆規則
1,添加filter表
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT //開放21端口
2,添加nat表
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
將源地址是 192.168.10.0/24 的數據包進行地址偽裝
3,-A默認是插入到尾部的,可以-I來插入到指定位置(默認-I是插入到最前面)
iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT
iptables -L -n --line-number
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 //-I指定位置插的
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
7 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID,NEW
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 //-A默認插到最后
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
三,查下iptable規則
1,查看filter表
iptables -L -n --line-number |grep 21 //--line-number可以顯示規則序號,在刪除的時候比較方便
5 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:21
如果不加-t的話,默認就是filter表,查看,添加,刪除都是的
2,查看nat表
iptables -t nat -vnL POSTROUTING --line-number
Chain POSTROUTING (policy ACCEPT 38 packets, 2297 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 MASQUERADE all -- * * 192.168.10.0/24 0.0.0.0/0
四,修改規則
iptables -R INPUT 3 -j DROP //將規則3改成DROP
五,刪除iptables規則
iptables -D INPUT 3 //刪除input的第3條規則
iptables -t nat -D POSTROUTING 1 //刪除nat表中postrouting的第一條規則
iptables -F INPUT //清空 filter表INPUT所有規則
iptables -F //清空所有規則
iptables -t nat -F POSTROUTING //清空nat表POSTROUTING所有規則
六,設置默認規則
iptables -P INPUT DROP //設置filter表INPUT默認規則是 DROP
所有添加,刪除,修改后都要保存起來,/etc/init.d/iptables save.上面只是一些最基本的操作,要想靈活運用,還要一定時間的實際操作。