天天看點

linux防火牆iptables常用規則(屏蔽IP位址、禁用ping、協定設定、NAT與轉發、負載平衡、自定義鍊)

一、iptables:從這裡開始

删除現有規則

iptables -F

(OR)

iptables --flush

設定預設鍊政策

iptables的filter表中有三種鍊:INPUT, FORWARD和OUTPUT。預設的鍊政策是ACCEPT,你可以将它們設定成DROP。

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP #一般出站連接配接設定為ACEEPT,看需求

允許來自外部的ping測試

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

允許從本機ping外部主機

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

二、iptables:協定與端口設定

允許所有SSH連接配接請求

本規則允許所有來自外部的SSH連接配接請求,也就是說,隻允許進入eth0接口,并且目的端口為22的資料包

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

允許從本地發起的SSH連接配接

本規則和上述規則有所不同,本規則意在允許本機發起SSH連接配接,上面的規則與此正好相反。

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

僅允許來自指定網絡的SSH連接配接請求

以下規則僅允許來自192.168.100.0/24的網絡:

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

上例中,你也可以使用-s 192.168.100.0/255.255.255.0作為網絡位址。當然使用上面的CIDR位址更容易讓人明白。

僅允許從本地發起到指定網絡的SSH連接配接請求

以下規則僅允許從本地主機連接配接到192.168.100.0/24的網絡:

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

允許HTTP/HTTPS連接配接請求

# 1.允許HTTP連接配接:80端口

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# 2.允許HTTPS連接配接:443端口

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

允許從本地發起HTTPS連接配接

本規則可以允許使用者從本地主機發起HTTPS連接配接,進而通路Internet。

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

類似的,你可以設定允許HTTP協定(80端口)。

-m multiport:指定多個端口

通過指定-m multiport選項,可以在一條規則中同時允許SSH、HTTP、HTTPS連接配接:

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

允許出站DNS連接配接

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

防止DoS攻擊

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

-m limit: 啟用limit擴充

--limit 25/minute: 允許最多每分鐘25個連接配接

--limit-burst 100: 當達到100個連接配接後,才啟用上述25/minute限制

三、轉發與NAT

允許路由

如果本地主機有兩塊網卡,一塊連接配接内網(eth0),一塊連接配接外網(eth1),那麼可以使用下面的規則将eth0的資料路由到eht1:

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

MAC和位址的綁定

iptables -A FORWARD -s 192.18.30.10 -m mac --mac-source 00:13:21:25:E5:C8 -j ACCEPT

DNAT與端口轉發

以下規則将會把來自422端口的流量轉發到22端口。這意味着來自422端口的SSH連接配接請求與來自22端口的請求等效。

# 1.啟用DNAT轉發

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to-destination 192.168.102.37:22

允許連接配接到422端口的請求

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

假設現在外網網關是xxx.xxx.xxx.xxx,那麼如果我們希望把HTTP請求轉發到内部的某一台計算機,應該怎麼做呢?

iptables -t nat -A PREROUTING -p tcp -i eth0 -d xxx.xxx.xxx.xxx --dport 8888 -j DNAT --to 192.168.0.2:80

iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.2 --dport 80 -j ACCEPT

當該資料包到達xxx.xxx.xxx.xxx後,需要将該資料包轉發給192.168.0.2的80端口,事實上NAT所做的是修改該資料包的目的位址和目的端口号。然後再将該資料包路由給對應的主機。

但是iptables會接受這樣的需要路由的包麼?這就由FORWARD鍊決定。我們通過第二條指令告訴iptables可以轉發目的位址為192.168.0.2:80的資料包。再看一下上例中422端口轉22端口,這是同一IP,是以不需要設定FORWARD鍊。

# 2.SNAT與MASQUERADE

如下指令表示把所有10.8.0.0網段的資料包SNAT成192.168.5.3的ip然後發出去:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j snat --to-source 192.168.5.3

對于snat,不管是幾個位址,必須明确的指定要snat的IP。假如我們的計算機使用ADSL撥号方式上網,那麼外網IP是動态的,這時候我們可以考慮使用MASQUERADE

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

負載平衡

可以利用iptables的-m nth擴充,及其參數(--counter 0 --every 3 --packet x),進行DNAT路由設定(-A PREROUTING -j DNAT --to-destination),進而将負載平均配置設定給3台伺服器:

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

自定義的鍊

記錄丢棄的資料包

# 1.建立名為LOGGING的鍊

iptables -t nat -N BLUCK

iptables -t nat -F BLUCK

# 2.将所有來自POSTROUTING 鍊中的資料包跳轉到BLUCK鍊中

iptables -t nat -A POSTROUTING -j BLUCK

# 3.指定自定義規則

iptables -t nat -A BLUCK  -s 192.168.30.0/24 -o eth0 -j MASQUERADE 

本文轉自 Linux_woniu 51CTO部落格,原文連結:http://blog.51cto.com/linuxcgi/1965341

上一篇: VC注冊熱鍵

繼續閱讀