顯示具有 firewall 標籤的文章。 顯示所有文章
顯示具有 firewall 標籤的文章。 顯示所有文章

2009年12月5日

防火牆 -- iptables幫IIS一把

IIS常常可以接受命令格式,然後就去執行系統程式,這些系統程式大多放在system32下
iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $IIS_IP --dport 80 -m string --algo bm --string "system32" -j DROP

2009年12月3日

防火牆-iptables與阻擋Port Scan

只允許在長時間內建立有限的連線
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p all -m state --state NEW -m recent --name posrtscan --update --second 600 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dports 22,25,80,110 -j ACCEPT
iptables -A INPUT -p all -m recent --name portscan --set
其實這方法有明顯缺點,並不是單一用戶不會在短時間內做出大量的連線的

2009年12月2日

防火牆 -- 阻擋砍站軟體

阻止類似HTTPTrk這類的軟體
iptables -I INPUT -p tcp --dport 80 -d SERVER_IP -m state --state NEW -m recent --name httpuser --set
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j LOG --log-prefix 'HTTP attack: '
iptables -A INPUT -m recent --update --name httpuser --seconds 60 --hitcount 9 -j DROP

2009年11月30日

防火牆-iptables與密碼攻擊(5)

因為總是有人安全防護做的不好,所以就變成了跳板,cracker就拿這些跳板吃飽沒事情就是進行網路的port scan或者密碼猜測(使用類似字典檔)的工作,反正對craker來說,這些資源不用錢,找到新的機器還可以打包一下賣錢orz
當然在進行密碼攻擊之前他們會先對機器做一些port scan,找出可以猜測密碼的服務,比方說pop3或者ssh。
對pop3可利用string的配合,當大量出現Authentication的錯誤字串的時候判定為密碼攻擊(比方猜錯十次)。
但是ssh因為加密了,如何辨識這樣的錯誤呢?只好繞路,以ssh retry的次數(在sshd_config加入MaxAuthTries,給定次數),接著追蹤syn封包進入的次數,最大iptables能在一段時間內容忍MaxAuthTries*the number of syns,兩者的乘積,比方說四次的syn連線,每次只能猜測密碼四次,如果在短時間內發生就是密碼攻擊
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --update --second 600 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --set
不過這樣的方式也有缺點,比方說如果你在十分鐘內建立了四個ssh連線就會達到連線的上限,這可能會為操作上帶來一些麻煩 ,除了程式設計師之外:P對一般的管理者比較沒關係Orz

2009年11月29日

防火牆-iptables對ICMP DoS(4)

DoS跟DDoS的一篇,大概描述了ICMP的DoS如何運作,知道他的原理就可嘗試利用防火牆來減低這樣攻擊的傷害
對ping broadcast的方式可以
iptables -A FORWARD -i eth0 -p icmp -m pkttype --pkt-type boradcast -j DROP
拒絕所有的ICMP broadcast要求

對於大型的ICMP封包可以用以下方式,只接受合法的92 bytes的ping封包
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 92 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

對於小型眾多的ICMP封包可以用,只允許每分鐘六個封包,最多10
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

其實DDoS或者DoS不能完全排除,只能求助於ISP業者,因為對外的頻寬一定會被佔據,上面的作法可以保持內部網路的順暢運作,卻無法防止外部資源的消耗

2009年11月28日

防火牆概念

之前在防火牆概論的時候提到幾種網路架構,其實還有幾點使用防火牆的觀念要注意的
別在防火牆上面架設server/service
愈是單純的主機,維護起來愈簡單,也就愈安全,開了一樣server/service就多了一分的風險,比方說本來防火牆除了放行的封包外,幾乎不接受任何其他封包,今天開了http server那就準備接受http的漏洞了
使用兩個防火牆的時候最好挑選不同的品牌跟設定
如果兩個防火牆設定一樣,那真的有裝跟沒裝差不多XD同一品牌的防火牆比較容易有相同的弱點,所以使用兩個以上的防火牆來做加倍的防護的時候,最好挑選不一樣的
對外拒絕非公開的網路的IP進入
由公開網路來的封包一般來說應該是公開的IP,不是類似192.168.x.x這樣的來源IP,看到這種封包一律阻擋,另外如localhost的127.0.0.1也應該拒絕
對內做好domain區隔
防火牆常常有一個以上的介面,除了對外的界面之外,對內的界面應該可以預測本來的網域,如果真的不幸被入侵,最好也是限制他們的來源IP,免得由內部捏造另外一個內部網域的IP進行攻擊
防火牆的本機的進出要限制特定IP、TCP、UDP
防火牆本身拒絕任何要求連到防火牆的連線,可是防火牆時常還是要線上檢查狀況,如ICMP封包,最好鎖定特定的IP才對ICMP封包有回應,且回應道特的IP。UDP可能用以查詢DNS,所以只允許到特定IP查詢,對特定server回應才接受。TCP可能用以更新程式,就跟前面說的一樣。

其他有關網路規劃跟規則訂定的原則就以後再說XD

2009年11月14日

防火牆-iptables的state(3)

這裡要先說明,因為一般許多人把iptables當作單機防火牆,這裡是一個網路防火牆,也就是server跟iptables並不在同一部機器上

iptables的state只有四種NEWESTABLISHEDINVALIDRELATED相較於TCP/IP illustrated作者richard steven提到的TCP狀態差異頗大,因為兩者之間真的不大一樣,可以想到UDP就理論上沒啥state,iptables為了判斷,當然在中間加上很多東西,我們可以看一下richard steven的TCP的state diagram

TCP
iptables使用ip_conntrack模組來追蹤連線狀態,並且配合xt_state/state模組來記錄狀態
  • 當iptables收到一個來自client端的syn封包的時候,他就會把狀態設定為NEW,並且等待server端的反應
  • 當server回應了syn/ack封包到達iptables的時候,他就會把該連線的狀態變成ESTABLISHED
當然,上面提到的state轉換是happy path,如果說client送出了syn封包,但是server在一段時間(目前為120 s)沒有回應syn/ack封包,則iptables會取消該連線狀態;相同的理由,client在一段時間內(60 s)沒有回應three way handshake的最後一個封包,iptables一樣會取消該連線狀態。

當iptables將該TCP連線標記為ESTABLISHED的話,表示已經完成了three way handshake,但是如果再432000 s內沒有封包流過這個連線,iptables一樣會取消這個連線狀態

UDP
同理,UDP對於iptables一樣
當iptables收到第一個UDP封包的時候,會建立一個紀錄source IP, destination IP, source port #, destination port #,然後把狀態設定為NEW
當server回應給client一個封包的時候,就會跟上面記錄的source跟destination相反,這時候將狀態改為ESTABLISHED
在狀態為NEW的時候,有一段時間(30 s)可以等待server反應,不然則清除該連線;在狀態為ESTABLISHED的時候,若是一段時間(180 s)沒有傳輸資料,同樣會清除連線

ICMP
ICMP跟UDP類似,但是由於ICMP封包大多為單一封包,在ESTABLISHED狀態之後很快的會被清除連線

前面看到的都是NEW跟ESTABLISHED,那麼何謂RELATED狀態呢?所謂RELATED狀態泛指NEW之後所產生出來的額外連線,比方說TCP的passive mode,或者ICMP的 time exceeded封包,他們通常是回應給某個特定的source IP,但是根本身建立NEW狀態的封包的destination IP不同(ICMP case),或者port #不同(TCP case)

除了以上三種狀態之外的就通通定義為INVALID狀態,通常防火牆對這類封包就直接丟棄

2009年11月6日

防火牆-iptables(2)

iptables目前共有四個tables,分別為Filter table, NAT table, mangle table以及raw table
都可以使用iptable -t table_name -L來觀察chain,預設不輸入table_name則顯示filter table
每個table都由一些chain組成,底下列出他們組成的chain
  • Filter table: INPUT, OUTPUT, FORWARD
  • NAT table: PREROUTING, POSTROUTING, INPUT
  • mangle table: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
  • raw table: PREROUTING, OUTPUT
Filter的流程判斷如下圖

提到NAT (Network Address Translation)就要提到SNAT跟DNAT,SNAT改寫source IP,相對的DNAT改寫destination IP
NAT流程如下圖

Managle Table的作用目前還不明顯,因為可用的模組不多,主要可以用來操作QoS的應用
Raw Table則是隨心所欲,但是也相當的原始

2009年11月5日

防火牆概論

防火牆在控制不同網路資料流動,一般將網路區分為可信任區域跟不可信任區域,所以一般防火牆都具有封包過濾的功能

分類方式很多種,比方說以軟硬體的方來分
  • 軟體防火牆:例如iptables或者zone alarm之類的軟體,屬於軟體防火牆
  • 硬體防火牆:同時是網路設備又具備有防火牆功能,比方說router加上防火牆功能
或者以技術分類,有
  • 封包防火牆:主要針對封包格式作過濾
  • 應用程式防火牆:針對應用層作過濾,比方說email
以架構來說有常見的幾種
  • 單機:只作用在單一機器上
  • 閘道防火牆:處於網路設備上,通常有routing的功能
  • 通透式防火牆:一樣是在網路設備上,但是只有過濾功能,通常作成類似bridge形式,無IP,難攻擊

如果閘道防火牆只有兩個網路介面,只能把server與一般企業網路內電腦放在同一邊,如下圖

這架構的問題是,企業內部網路與server暴露在同樣的風險下,如果可以有三個介面以上,將對內/外提供服務的server分開,則可進一步的提供保護,server所處得區域稱為DMZ(Demilitarized Zone)架構改變如下

最後是如果將一般防火牆改變為bridge模式,僅僅提供防火牆功能,因為沒有IP,也不會被routing功能影響,所以難以攻擊,如下圖

2009年10月27日

防火牆-iptables(1)

iptables相當複雜,所以這個文章我會慢慢寫
=============================
iptables不只能夠filter(過濾)packet的資料,甚至修改資料,也就是能夠做packet改寫達到NAT的功能
對於過濾的部分可以由一群群有次序的規則做判斷

Linux底下防火牆這功能幾乎由iptables一手包辦,其他儲存規則跟回覆規則的指令則是iptables-save跟iptables-restore
一開始如果系統沒有預設的規則,應該是等同全開、沒有限制,可借由
iptables -L -n

來觀察規則表,其中參數n的意思表示不要使用DNS反查,速度會快許多,結果如下圖表
iptables的語法大致上如同鳥哥網站提到的
iptables [-AI 鏈] [-io 網路介面] [-p 協定] \
> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP]
參數:
-AI 鏈:針對某的鏈進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。
例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範
-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;
-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式
主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
IP  :192.168.0.100
網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若規範為『不許』時,則加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受 (ACCEPT)、丟棄 (DROP) 及記錄 (LOG)
一般而言建議練習時先把INPUT的Policy設定為DROP,先全部擋住,在慢慢開啟允許進入的部分
iptables -P INPUT DROP

比方說允許SSH Server的port則開啟port # 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

不過我也很懷疑為何iptables不能進化一點,只有A跟I,只能把rule放在最前跟最後,何不妨讓人可以插入到某一條規則之後
使用如
iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT
就可以在規則2後加入一條規則

最後補上一條方便的規則,讓已經建立連線或者是由我們主機發出的封包引起對方回覆的封包進入,不然一些類似更新(apt/yum)可能無法正常運作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

當然還可以擋掉一些討厭的網域區段或者mac address,這樣就完成了基本的INPUT Chain的部分
初學者可能常會想問,我知道service的名字或者套件的名字,但我怎麼知道他用的是tcp或者udp,還有走的port number呢?要用google去查嗎?其實大多知名的服務都不假外求,只要察看/etc/services這個檔案裡面就有了

以Fedora而言,完成之後記得把檔案寫到/etc/sysconfig/iptables這個檔案內,這樣下次開機他就會自動啟動了

2008年5月9日

看看UFW(Uncomplicated Firewall)

話說在Linux有名的防火牆就是iptable,不過對我來說,他某種程度是nightmare,真的是一個不小心,整個chain就不能動了

當然有人也跟我有一樣的痛:P所以衍生出了這個UFW,這個東西主要針對的是簡單的應用,針對一般使用者設定,管理由外至內的連線,server可能有複雜的網路環境,還是乖乖回到iptable(泣)

ufw使用上很簡單
開:ufw enable
關:ufw disable

在開始使用前先要關閉他,然後建立你要的規則,在建立規則之前,先規定一下policy
ufw default deny
也就是一開始全部不接受,然後開始開啟"例外"

例如ssh連線,可以用ufw allow 22或者ufw allow ssh,顯然後者比較容易理解,但是如果你打ufw allow samba,可能沒反應,因為當你打入服務名稱的時候ufw是去搜尋/etc/services裡面的記載

在設定完畢之後記得要打ufw enable從新開啟防火牆,接著可以使用ufw status來觀看的你設定

P.S.當然,如果你打錯了某個port #或者services可以用ufw deny來刪除