簡介
1.能夠檢測到的端口掃描
2.監視模式和處理方式
A.安裝
1.編輯portsentry_config.h文件
CONFIG_FILE
WRAPPER_HOST_DENY
SYSLOG_FACIL99vY
SYSLOG_LEVEL
2.編輯PortSentry的配置文件portsentry.conf
TCP_PORTS
UDP_PORTS
ADVANCED_PORT_TCP
ADVANCED_PORT_UDP
ADVANCED_EXCLUDE_TCP
ADVANCED_EXCLUDE_UDP
IGNORE_FILEB
BLOCKED_FILE
HISTORY_FILE
BLOCK_UDP
BLOCK_TCP
KILL_ROUTE
KILL_HOST_DENY
KILL_RUN_CMD
SCAN_TRIGGER
PORT_BANNER
3.編輯portsentry.ignore文件
4.編譯
B.使用
C.測試
D.輸出信息以及記錄文件
E.總結
簡介
PortSentry是Abacus工程的一個組成部分。Abacus工程的目標是建立一個基於主機的網絡入侵檢測系統,可以從http://www.psonic.com的到關於Abacus工程更為詳細的信息。
1.能夠檢測的端口掃描
PortSentry主要用來檢測外部對主機的端口掃描,它能夠對多種掃描方法進行檢測,包括:
完全連接掃描
這是最基本的一種掃描方式,使用connect()系統調用,建立完整的TCP連接,如果連接能夠建立,就表明目標主機的目標端口打開。
SYN/半公開掃描
因為不用建立完整的TCP連接,所以這種方法通常稱為半公開掃描。這種掃描方法不進行三次握手建立TCP連接,只是向目標主機發出一個SYN數據包。然後等待來自目標主機的相應。如果收到SYNACK數據包,表示目標端口打開;如果收到RST數據包就表示端口沒開。
FIN掃描
向目標主機發出FIN數據包進行掃描,由Uriel Maimon在Rhrack第49期文15提出。如果收到RST數據包,就表示目標端口關閉;如果沒有收到數據包,就表示目標端口可能打開。
NULL掃描
使用這種方法發出的探測包中,所有TCP包頭標志都被關閉和聖誕樹(xmas)掃描相反
聖誕樹掃描
探測包TCP包頭的所有標志都被打開,象燈都被打開的聖誕樹,夠形象吧:)
UDP掃描
使用recvfrom()和write()系統調用掃描
以上無法包括的其它類型的掃描
為了便於對PortSentry的使用,本文對一些端口掃描技術做了一些簡單的解釋,如果想了解更加詳細的技術細節請參考http://www.insecure.org/nmap關於nmap的技術文檔。
2.監視模式和處理方式
PortSentry可以對一般的TCP、UDP掃描進行監視,使用-tcp、-udp選項;對於隱秘掃描,PortSentry有四種檢測模式:-stcp、-atcp、-sudp、-audp。有兩種方法設置PortSentry需要監視的端口:
使用預定義端口列表。在配置文件中,指定需要監視的端口列表,一旦發生對這些端口的刺探行為,PortSentry就被激活。
反向端口綁定。你可以指定PortSentry監視某個范圍內,除了被系統網絡精靈進程綁定端口之外的所有端口,用戶也可以指定不需要監視的端口。使用這種配置方法,會使PortSentry對端口掃描行為很敏感,從另一方面看,也會產生大量的誤報警,凡事有利則必有弊嘛:)。
如果檢測到端口掃描,PortSentry有多種方式應付掃描行為:
使用syslog()系統調用將掃描行為記錄到日志中
將發起掃描的主機名加入到/etc/hosts.deny文件中,這種方式需要TCP_Wrappers的配合
自動修改路由表,刪除到發起掃描主機的路由,使回應數據包無法返回
自動修改本地包過濾程序的配置,丟棄來自惡意主機的數據包
A.安裝
如果你經常使用源代碼安裝軟件,可能會習慣於./configure、make、make install的方式。但是,PortSentry到目前為止還沒有configure腳本,只能手工對一些選項進行配置,然後再進行編譯安裝。使用這種安裝方式很容易造成編譯錯誤,或者即使編譯通過,安裝後因為無法找到配置文件等原因,而使PortSentry程序無法執行。下面將詳細介紹起安裝過程。
1.編輯portsentry_config.h文件
portsentry_config.h文件中定義了一些很重要的信息,對於portsentry能否正常運行至關重要。
CONFIG_FILE
PortSentry配置文件的路徑
WRAPPER_HOST_DENY
tcp_wrappers的hosts.deny文件所在的路徑,PortSentry能夠使用tcp_wrappers應付掃描行為,它將發起掃描的主機放到hosts.deny文件中,tcp_wrappers就會拒絕從這個主機發起的連接。
SYSLOG_FACIL99vY
PortSentry使用的syslog facility。它使用的默認syslog facility是LOCAL_DAEMON,使用這個syslog facility,syslogd一般會把PortSentry的警告信息記錄在/var/log/messages文件中,這取決於/etc/syslog.conf文件。
系統中,如果某個精靈程序不使用自己的日志文件,那麼它的日志信息將被syslogd記錄到/var/log/messages文件,造成這個文件的信息非常龐大、雜亂,不容易閱讀。因此用戶希望指定PortSentry自己的日志文件,專門保存PortSentry發出的警告信息。
可以按照以下步驟設置PortSentry自己使用的日志文件:
修改portsentry_config.h文件
修改PortSenry_config.h文件的SYSLOG_FACIL99vY一行,就可以改變PortSentry使用的日志FACIL99vY:
SYSLOG_FACIL99vY LOG_LOCAL0 /*LOG_LOCAL0-7都可以*/
修改/etc/syslog.conf文件
在/etc/syslog.conf文件中加入下面一行,設置PortSentry使用的日志文件。你也可以選擇自己喜歡的日志文件名。^_^
local0.* /usr/local/psionic/portsentry/portsentry.log
做了以上的修改後,syslogd將把PortSentry產生的報警信息同時記錄到/usr/local/psinic/portsentry/portsentry.log和/var/log/messages兩個文件。如果想避免這種情況,還要繼續修改/etc/syslog.conf文件。在這個文件有一行:
*.info;mail.none;news.none;authpriv.none; /var/log/messages
把它改為:
*.info;mail.none;news.none;authpriv.none;local0.none /var/log/messages
重新啟動syslogd程序
# /etc/init.d/syslog restart
SYSLOG_LEVEL
警告信息的sylog級別。一般不必修改。
2.編輯PortSentry的配置文件portsentry.conf
PortSentry使用portsentry.conf文件作為自己的配置文件。用戶可以編輯這個配置文件設置PortSentry的各項功能,用戶也可以在編譯安裝完成後的使用過程中,根據自己的實際情況進行調整。
TCP_PORTS
在TCP監視模式(-tcp)下使用,指定需要PortSentry監聽的端口號。端口號使用逗號分開,中間不能有空格。PortSentry會對端口進行綁定,綁定的數量默認是64,在源代碼的portsentry.h文件中定義#define MAXSOCKS 64。目前還沒有配置選項對其進行設置置,如果想使用其它值,需要修改源代碼。
如果使用隱秘掃描檢測模式,PortSentry不會對端口進行綁定,而是使用RAW套接字,在套接字層對連接進行監視。
UDP_PORTS
在UDP監視模式(-udp)下使用,指定要監視的UDP端口。你應該慎重使用UDP模式,稍有不慎就會給攻擊者以可乘之機,對系統進行拒絕服務攻擊。攻擊者可以在數據包中偽造一個端口范圍,誘使PortSentry阻塞主機的這些端口,達到拒絕服務攻擊的目的。如果你的站點是一個比較出名的站點,訪問量很大,最好不要使用UDP監視模式。
ADVANCED_PORT_TCP
設置要監視的最大TCP端口號。PortSentry會對小於這個值的端口號進行監視。默認值為1024,最大可以是65535。建議不要超過1024,因為如果超過這個值,PortSentry就會產生大量的誤報警。使用-atcp參數啟動PortSentry時,會用到這個值。
ADVANCED_PORT_UDP
設置PortSentry監視的最大UDP端口號。使用-audp參數啟動PortSentry時用到。
ADVANCED_EXCLUDE_TCP
和ADVANCED_PORT_TCP配合使用。設置在TCP高級監視模式(-atcp)下,不需要PortSentry監視的端口。在一些普通的端口上,一些遠程客戶程序的錯誤會造成PortSentry發出誤報警信息,可以使用這個配置選項去掉這些端口,例如:ident、SSL。
ADVANCED_EXCLUDE_UDP
和ADVANCED_PORT_UDP配合使用。設置不用
ADVANCED_PORT_TCP
設置要監視的最大TCP端口號。PortSentry會對小於這個值的端口號進行監視。默認值為1024,最大可以是65535。建議不要超過1024,因為如果超過這個值,PortSentry就會產生大量的誤報警。使用-atcp參數啟動PortSentry時,會用到這個值。
ADVANCED_PORT_UDP
設置PortSentry監視的最大UDP端口號。使用-audp參數啟動PortSentry時用到。
ADVANCED_EXCLUDE_TCP
和ADVANCED_PORT_TCP配合使用。設置在TCP高級監視模式(-atcp)下,不需要PortSentry監視的端口。在一些普通的端口上,一些遠程客戶程序的錯誤會造成PortSentry發出誤報警信息,可以使用這個配置選項去掉這些端口,例如:ident、SSL。
ADVANCED_EXCLUDE_UDP
和ADVANCED_PORT_UDP配合使用。設置不用