2007年7月22日 星期日

檢查PIX Firewall效能指令

show cpu usage
PIX只有一個CPU來完成所有的工作,從處理封包到向console寫debug資訊。最消耗CPU資源的程序是加密,因此如果PIX要完成資料封包的加密工作,最好使用加速卡或專用的VPN Concentrator. 日誌功能是另外一個消耗大量系統資源的程序。因此,建議在正常情況下關閉PIX向console, monitor, buffer寫日誌的功能。本命令的結果:
pixfirewall# show cpu usage
CPU utilization for 5 seconds = 1%; 1 minute: 2%; 5 minutes: 1%


show traffic
本命令可以看出在特定的時間內有多少流量流經PIX了。這個特定的時間是上次執行本命令到這次執行本命令的時間間隔。我們可以看到各個介面的資料流程量情況。
pixfirewall# show traffic
outside:
received (in 124.650 secs):
295468 packets 167218253 bytes
2370 pkts/sec 1341502 bytes/sec
transmitted (in 124.650 secs):
260901 packets 120467981 bytes
2093 pkts/sec 966449 bytes/sec
inside:
received (in 124.650 secs):
261478 packets 120145678 bytes
2097 pkts/sec 963864 bytes/sec
transmitted (in 124.650 secs):
294649 packets 167380042 bytes
2363 pkts/sec 1342800 bytes/sec


show perfmon
這條命令監測PIX檢查的資料的流量和類型。它可以判斷出PIX上每秒所做的變換(xlates)和連接數(conn)。
PERFMON STATS Current Average
Xlates 18/s 19/s
Connections 75/s 79/s
TCP Conns 44/s 49/s
UDP Conns 31/s 30/s
URL Access 27/s 30/s
URL Server Req 0/s 0/s
TCP Fixup 1323/s 1413/s
TCPIntercept 0/s 0/s
HTTP Fixup 923/s 935/s
FTP Fixup 4/s 2/s
AAA Authen 0/s 0/s
AAA Author 0/s 0/s
AAA Account 0/s 0/s
其中,較重要的有Xlates是每秒鐘產生變換的數位;Connections是建立的連接數;TCP Fixup是指PIX每秒鐘轉發了多少TCP包;TCPIntercept是指有每秒多少SYN包已經超出了開始的設定值;


show block
和show cpu usage在一起使用,可以判斷出PIX是否超載了。
當一個資料封包進入防火牆的介面,會先排在input介面的佇列中,根據資料幀的大小,又被分到不同的block中。如對於乙太網幀,使用1550位元組的block。如果資料是從千兆口進來的,會使用16384位元組的block。PIX然後會根據ASA演算法決定是否讓包通過。如果PIX超載了,那相應的block會降到或接近0(看CNT這一列)。當該值降到0時,PIX會嘗試申請更多的block, 最多可到8192。如果沒有block可用,包會被丟棄。
256位元組的block是stateful failover資訊。主PIX向從PIX發送這些包以更新xlates和connection資訊。如果某段時間有大量的連接建立和拆除,256位元組的block可能會降到0,就是說從PIX可能沒有和主PIX同步。這個時間如果不長,是可以接受的,但如果長時間維持在0,需要考慮升級到更高速的PIX了。
另外,日誌資訊也是通過256位元組的block向外部送出的,注意通常不需要將日誌的級別設置成debug.
pixfirewall# show blocks
SIZE MAX LOW CNT
4 1600 1597 1600
80 400 399 400
256 500 495 499
1550 1444 1170 1188
16384 2048 1532 1538



show memory
可以看出PIX的記憶體以及當前可用的記憶體。正常情況下,PIX的可用記憶體的變化幅度不應該太大。如果突然發現記憶體快用光了,要檢查是否用攻擊發生。可以用show conn count命令看當前PIX中有多少連接,如果PIX記憶體耗盡,最終會crash.
pixfirewall# show memory
1073741824 bytes total, 1022992384 bytes free


show xlate
顯示當前通過PIX的變換數和最多達到的變換數。一個變換是指一個內部位址變換成一個外部合法位址。一台機器可能會與外部的多個目標建立連接,但這時只有一個變換。如果顯示的變換數遠大於內部的機器數,可能是受到了網路攻擊。
pixfirewall# show xlate count
84 in use, 218 most used


show conn count
可以看當前的PIX的最大的連接數。一個connection是一個內部4層資訊到外部位址的映射。當PIX收到一個SYN包,就建立一個connection. 過高connection數意味著受到了攻擊,這時如果用show memory命令雖然連接數很高,但是並沒有消耗掉PIX過多的記憶體資源。
pixfirewall# show conn count
2289 in use, 44729 most used


show interface
這條命令用來判斷雙工的匹配問題和電纜故障,也可以看出介面是否超載了。如果PIX的CPU資源耗盡了,那麼1550位元組的block會接近0,如果是千兆口,16384位元組的block接近0。另外一個信號是”no buffers”的值不斷增加,它表明介面接收包的速率太快,PIX來不及處理,也沒有足夠的block去承載,已經有丟包產生了。如果”no buffer”伴隨著CPU的使用率升高,說明該考慮升級到性能更強的防火牆了。
當資料封包進入介面時,被放在input hardware queue中,如果該queue滿了,被放在input software queue中。包然後從input queue中被放到block中等待PIX OS的處理,PIX決定把包放到哪個出口,即哪個output hardware queue中,如果該queue滿了,就放到output software queue中;如果每個軟佇列中的max blocks都很大,就稱之為”overrun”。常見的情況是入口和出口的資料傳輸速率不匹配,就會出現overrun,這時應該考慮升級介面了。
pixfirewall# show interface
interface ethernet0 "inside" is up, line protocol is up
Hardware is i82559 ethernet, address is 0002.b31b.99ff
IP address 9.9.9.1, subnet mask 255.255.255.0
MTU 1500 bytes, BW 100000 Kbit full duplex
4630 packets input, 803174 bytes, 0 no buffer
Received 2 broadcasts, 0 runts, 0 giants
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
4535 packets output, 445424 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 babbles, 0 late collisions, 0 deferred
0 lost carrier, 0 no carrier
input queue (curr/max blocks): hardware (128/128) software (0/1)
output queue (curr/max blocks): hardware (0/2) software (0/1)
如果是runts, input errors, CRCs或frame errors在增加,可能是雙工方式不匹配造成的或電纜故障。


show process
顯示當前PIX中的活動的程序有什麼。這樣就可以看出什麼程序使用了過多的CPU資源,什麼程序沒能使用CPU資源。為了得到這個資訊,我們連續兩次執行show process命令,間隔1分鐘。對有所懷疑的程序,兩次的Runtime值相減,時間差(單位是毫秒)就是該程序一分鐘所佔用的CPU資源。557poll程序通常是佔用時間最多的程序,它負責詢問乙太介面看是否有包需要處理。


總結



我們用show cpu usage命令看PIX的負載情況。一般來說,CPU達到80%時,性能會受到影響;超過90%時,會有丟包的情況發生。這個時候,我們可以通過命令show process來看看什麼程序在消耗CPU資源,查出該程序後找相應的辦法處理。如果CPU的使用率並不高,但是還是覺得有丟包的情況發生,用show interface命令檢查是否有錯包出現,即是否有雙工匹配問題或電纜問題;如果是”no buffer”增加,同時CPU使用率並不高,說明介面的能力不能滿足流量的需求;如果buffer狀況很好,檢查block, 如果1550位元組或16384位元組的block接近0了,說明PIX由於太忙開始丟包了,這時CPU也會很高。



如果發現在PIX建立新的連接很困難,用命令show conn count檢查當前的連接數:如果很高了,用show memory命令看看記憶體的狀況,如果記憶體很少了,用show conn命令或show local-host命令查一下連接數如此多的原因,很可能是遭遇DoS攻擊了。



另外,show traffic命令顯示每個介面處理的包數和位元組數;show perfmon命令進一步將traffic分成不同的類型。


沒有留言:

張貼留言