iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 21
1
自我挑戰組

網管實務系列 第 21

DAY21-linux netfilter II

DAY21
今天要補充netfilter的其它操作。
昨天有說到netfilter它非常的強大,可以做到很多事情,我就先從(filter)連線這邊開始說起。

下面是為了簡單阻擋DDoS攻擊所修改出來的規則,這樣子限制無非是降低了伺服器的存取量,
但也是為了保護伺服器不輕易被擊潰所做出的取捨調整,修改完後大家仍然是可以連接到TCP-80 以及 TCP -443,但會因為限制的關係,速度會相對的較為緩慢。
#80_Port可以有新連線,但有封包限制,當連線數超過100時,啟動每分鐘僅允許25個不連續的封包通過。
iptables -t filter -A INPUT -p tcp -m limit --limit 25/m --limit-burst 100 -m state --state NEW -m tcp --dport 80 -j ACCEPT
#443_Port可以有新連線,但有封包限制,當連線數超過100時,啟動每分鐘僅允許25個不連續的封包通過。
iptables -t filter -A INPUT -p tcp -m limit --limit 25/m --limit-burst 100 -m state --state NEW -m tcp --dport 443 -j ACCEPT

再來就簡單說明一下NAT的功能,以及proxy的方法(proxy可以與明天介紹的proxy相互使用)
在做這件事情之前我們要記得去將forward功能打開
#vim /etc/sysctl.conf
修改這個設定檔當中的這個設定,將其0改成1
net.ipv4.ip_forward = 1
然後再馬上套用
#sysctl -p

NAT模式與我們進行防火牆連線限制的是在不同的type當中,從-t後面帶的nat可以看的出來
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

那NAT最一般的用法就是下列這個方法,只要是172.16.100.0/24網段的請幫我進行NAT的動作。
這邊是用MASQUERADE,它會將172.16.100.0/24偽裝成eth0上的IP位置,然後連線出去。
這個是最簡單的方法。
iptables -t nat -A POSTROUTING -s 172.16.100.0/24 -o eth0 -j MASQUERADE

或者 (這邊我捫把 10.10.10.10 假設為可以連結外網的IP位址)
而這個設定就是將我內部網段(172.16.100.0)包裝程10.10.10.10然後連線出去。
iptables -t nat -A POSTROUTING -s 172.16.100.0/24 -o eth0 -j SNAT --to-source 10.10.10.10

當然NAT又會區分SNAT與DNAT兩種

SNAT是讓內部NAT到外部去能夠存取網際網物。
DNAT就是反過來,讓外面的人可以連接進來我們內部的伺服器。

初期的時候有說過內部IP以及外部IP的不同。
接著我們也有討論到LAN、WAN以及DMZ區

我們假設一個情境,一家公司僅使用Netfilter的這台伺服器做為外部的防火牆設備,
平常僅供內部使用是沒有問題的,
但今天突然要開放外部能夠連接到我們放置於DMZ區的伺服器(該伺服器也是使用私有IP)。
那該怎麼處理?
那這種時候就是使用DNAT了。它的指令跟SNAT使用方法幾乎類似。
在 netfilter的判別下,下面指令是說,凡是要連接我eth0 TCP-80的人,
我將幫它導向到172.16.100.10這台主機的TCP-80過去。
就這樣簡單一行就可以處理好了,當然也不一定要80導向80,也可以導向不同的PORT號
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.10:80

Netfilter的NAT其實可以幫我們很多忙,除了內部連網際網路,或者外部連接DMZ區的伺服器之外,
它更可以結合squid套件幫助我們進行proxy的功能。
當今天把squid套件安裝並設定啟用後,TCP-3128 port也啟用了。

因為我們想用 proxy這個套件的帶來的功能(明天會談到),
所以想把內部要連接網際網路的需求全部導向proxy伺服器去。
這時候也只要使用DNAT就可以簡單幫你辦到。

下面的指令是說,只要是透過我eth1連接進來要存取TCP-80的人啊,
全部幫我重新導向到TCP-3128去吧,就這樣你就完成了proxy的導向工作。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128

netfiter說難不難,說簡單也沒簡單到哪去,只要你邏輯能夠清楚,只細想一下總是會有辦法的。

明天就離開netfiter套件,來簡單的介紹一下其他網管的好朋友,proxy的套件squid。


上一篇
DAY20-linux netfilter
下一篇
DAY22-proxy
系列文
網管實務30

尚未有邦友留言

立即登入留言