當在Linux服務器上開啟了不同的服務后,就會開啟不同的端口。當黑客進行入侵時,一般都會使用掃描工具對目標主機進行掃描檢測,來判斷其開啟了哪些端口,進而確定其安裝了哪些服務。使用IPTables編寫相應的規(guī)則,可以有效防止端口掃描。
例 如, 執(zhí) 行 命 令“iptables -A INPUT -p all -m state -state ESTABLISHED,RELATED -j ACCEPT”,可 以 在“Filter”表中的“INPUT”鏈中追加一條規(guī)則,其作用是允許已經(jīng)建立或者由其產(chǎn)生的網(wǎng)絡連接通過防火墻。在默認狀態(tài)下,其針對的是“Filter”表。
當然,也可以使用“-t filter”參數(shù)來指明。因為黑客發(fā)起掃描,對于服務器來說是接收掃描數(shù)據(jù)包的行為,所以應該將防御規(guī)則添加到“INPUT”鏈中。其中的“A”參數(shù)表示追加規(guī)則,“-p all”參數(shù)表示對于所有的協(xié)議有效,“-m state”參數(shù)表示使用狀 態(tài) 匹 配 模 塊,“--state ESTABLISHED,RELATED”參數(shù)表示針對已經(jīng)建立和由其產(chǎn)生的連接狀態(tài)進行處理,“-j ACCEPT”參數(shù)表示對符合條件的數(shù)據(jù)包放行。
繼續(xù)執(zhí)行“iptables -A INPUT -p all -m -state NEW -m recent -name saomiao -update -seconds 600 -hitcount 10 -j DROP”命令,來追加一條規(guī)則,其作用是對于新建立的網(wǎng)絡連接來說,當防火墻檢測到在10分鐘內(nèi)連續(xù)新建10個以上連接時,就進行攔截。
當然,可以根據(jù)具體情況進行調(diào)整。其中的“NEW”表示針對的是新建立的連接進行處理,“-m recent”參數(shù)是啟用“recent”模式,該模塊的作用是匹配特定數(shù)據(jù)包的重復率?!?-name saomiao”參數(shù)的作用是使用名為“saomiao”的記錄文件,其中存儲所有連接的信息(包括IP、連接時間等參數(shù))?!?update”參數(shù)檢測該網(wǎng)絡連接的地址是否出現(xiàn)在記錄文件中,并且以最后一個匹配來計算時間。
如果使用“--rcheck”參數(shù)的話,同樣可以檢查地址是否存在在記錄文件中,但是以第一個匹配開始記錄時間。因為對于某個連接地址來說,可能在記錄文件中多次出現(xiàn)?!?seconds 600-hitcount 10 -j DROP”參數(shù)表示在600秒內(nèi)在上述記錄文件存在10條以上記錄的話,就將其丟棄。
繼 續(xù) 執(zhí) 行“iptables-A INPUT -p tcp -syn-m state -state NEW-m multiport -dports 21,22,80,3306 -j ACCEPT”,來追加一條規(guī)則,其作用是對 于 針 對 TCP 21、22、80、3306端口的連接放行。其中的“--syn”參數(shù)表示使用“syn”標記來檢測針對TCP 21、22、80、3306 端口的連接是否為新建立的連接,因為在建立TCP連接的過程中,TCP的首個數(shù)據(jù)包中會只包含該標記。
“-m multiport” 參 數(shù)表示啟用多端口匹配模塊,“-dports”參數(shù)指定所有相關的端口。繼續(xù)執(zhí)行“iptables -A INPUT -p all-m recent -name saomiao-set -j ACCEPT”命令,來追加一條規(guī)則,其作用是創(chuàng)建名為“saomiao”的記錄文件,記錄所有的連接信息,其中的“--set”表示將符合條件的來源數(shù)據(jù)包添加到記錄文件中,如果已經(jīng)存在,則更新記錄文件相關的記錄信息。
因此,該規(guī)則的主要作用就是計算連接次數(shù)。在“Filter”過 濾 表 中 的“INPUT”鏈中追加了以上規(guī)則后,當黑客掃描本機時,因為其通常會掃描某個端口范圍(例如從TCP 1000到5000等),只要在本小時內(nèi)其掃描的端口數(shù)量超過10個(其中不 包 含 TCP 21、22、80、3306端口),就會被防火墻攔截,讓黑客的掃描器無法發(fā)揮作用,其“踩點”行為必然失敗。
對于SSH來說,最好的使用方法是隨用隨開。當使用完畢后,自動將其關閉。這樣,不僅利于管理,還可以有效防范黑客偷襲。
其實,只有合理配置規(guī)則,就可以實現(xiàn)上述功能。例如管理員可以自定義PING數(shù)據(jù)包的大小,當發(fā)送特定大小的PING數(shù)據(jù)包時,可以開啟或者關閉TCP 22端口。執(zhí)行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 1028 LOG -logprefix "autossh"”命 令,可 以 在“Filter”表 中 的“INPUT”鏈中追加一條規(guī)則,其作用是對于發(fā)送長度為1028字節(jié)的PING數(shù)據(jù)包的網(wǎng)絡連接進行記錄,將其添加“autossh”的前綴信息,存放到系統(tǒng)日志中。
其 中 的“-p icmp” 參數(shù)表示處理ICMP協(xié)議,“-icmp-type echo-request”參數(shù)表示匹配ICMP連接類型,這里為請求連接的PING數(shù)據(jù)包?!?m”參數(shù)表示使用擴展匹配選項,“l(fā)ength-length 1028”參數(shù)表示匹配特定長度的ICMP數(shù)據(jù)包,這里長度為1028字節(jié)?!?log-prefix”參數(shù)表示執(zhí)行記錄操作,并添加指定的前綴。執(zhí)行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 968-m recent -set-name opendoor -rsource-j ACCEPT”命令,可以追加一條規(guī)則,對于符合上述長度要求的ICMP連接進行記錄,記錄文件為“opendoor”。“--rsource”參數(shù)表示同步記錄源地址。
執(zhí) 行“iptables -A INPUT -p tcp -dport 22-syn -m recent -rcheck-seconds 60 -name opendoor -rsource -j ACCEPT”命令,來追加一條規(guī)則。其作用是檢測在60秒時間內(nèi),在名為“opendoor”的記錄文件內(nèi)是否存在地址記錄信息,如果有的話,就允許其連接本機TCP 22端口。執(zhí)行“iptables -A INPUT -p icmp -icmp-type echo-request -m length-length 1098 -m recent-set -name opendoor-rmove -j ACCEPT”命令,可以追加一條規(guī)則,其作用是當接收到客戶端發(fā)來長度為1098字節(jié)的ICMP數(shù)據(jù)包時,將其地址從名為“opendoor”的記錄文件中刪除,其中的“-rmove”參數(shù)表示刪除記錄文件內(nèi)容。當然,對于已經(jīng)存在的連接是允許的。
執(zhí) 行“iptables -A INPUT -m state -state ESTABLISHED -j ACCEPT”命令,添加所需規(guī)則即可。這樣,在客戶端執(zhí)行“ping xxx.xxx.xxx.xxx -l 1008”,向Linux服務器(假設其地址 為“xxx.xxx.xxx.xxx”)發(fā)送長度為1008的ICMP包,其中的“-l”參數(shù)可以指定數(shù)據(jù)包大小,注意因為ICMP和IP頭長度之和為20字節(jié),所以實際發(fā)送的指定的長度應該為1008,當Linux服務器接收到該長度的ICMP數(shù)據(jù)包后,依據(jù)上述規(guī)則,Linux服務器就允許其使用SSH連接訪問了。對應的,執(zhí)行“ping xxx.xxx.xxx.xxx-l 1078”名命令,向服務器發(fā)送長度為1078的ICMP數(shù)據(jù)包,服務器就會按照預設規(guī)則禁止其建立新的SSH連接。對于已經(jīng)建立的SSH連接,則不予攔截。
SYN攻擊利用TCP協(xié)議缺陷,通過發(fā)送大量的半連接請求,耗費服務器CPU和內(nèi)存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網(wǎng)絡系統(tǒng)。
對于非偽造IP發(fā)起的SYN洪水攻擊,可以使用對應的IPTables規(guī)則進行防御,這對于防御CC攻擊同樣有效。執(zhí)行“iptables -A INPUT -p tcp -dport 80-syn recent -name antidos-rcheck -seconds 30-hitcount 10 -j LOG -log-prefix ‘fyhs:’ -log-ipoptions”命令可以追加一條規(guī)則,作用是當客戶端針對Linux服務器的TCP 80端口發(fā)起連接時,如果在30秒內(nèi)連接次數(shù)超過10個,就記錄客戶端的IP等信息,其中的“-log-ip-options”參數(shù)表示記錄連接著的IP。
執(zhí) 行“iptables -A INPUT -p tcp -dport 80-syn recent -name antidos-rcheck -seconds 30-hitcount 10 -j DROP”命令添加一條規(guī)則,當滿足以上連接條件后,禁止繼續(xù)連接。執(zhí) 行“iptables -A INPUT-p tcp -dport 80 -syn -m recent -name antodos -ser-j ACCEPT”命令添加一條規(guī)則,創(chuàng)建名為“antidos”的記錄文件,記錄符合要求的連接信息,例如10條以內(nèi)的連接信息等。
在一些Web服務器(如IIS服務器等)上往往存在各種漏洞,給黑客入侵帶來了很大的便利。例如,黑客可以在瀏覽器工具欄中針對不同的Web服務器漏洞,非法提交各種帶有危險指令的URL鏈接,或使用專用的黑客工具來向目標服務器提交精心“設計”的訪問語句。對此,可以在Linux網(wǎng)關設置對應的規(guī)則進行攔截。
例如,在黑客提交的不法URL地址中可能包含“/c/windows/system32/cmd.exe”之類的語句,作用是調(diào)用系統(tǒng)目錄中的“cmd.exe”程序來執(zhí)行各種命令。例如黑客會調(diào)用Web服務器上的FTP客戶端程序“ftp.exe”,從指定的網(wǎng)址下載并激活病毒木馬進行滲透攻擊。
在Linux網(wǎng)關上執(zhí)行“iptable -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.1.10 -dport 80 -m string -algo bm -string"system32" -j DROP”命令,在“Filter”表中的“FORWARD”鏈上添加一條規(guī)則,作用是當檢測到經(jīng)過防火墻的數(shù)據(jù)包中包含“system32”內(nèi)容,并且發(fā)送給IP為“192.168.0.10”,目標端口為TCP 80的主機時,就進行攔截。其中的“-i eth0”參數(shù)表示進入的網(wǎng)卡接口,“-o eth1”參數(shù)表示發(fā)送出的網(wǎng)絡接口,“-d 192.168.1.10”參數(shù)指定目標IP。
此外,當病毒侵入服務器后,往往會瘋狂的和外界建立各種連接,防火墻上大量的跟蹤記錄會不堪重負,為此可以執(zhí)行“iptable -A FORWARD -i eth1 -o eth0 -p all -m state -state NEW-m recent -name warning-update -seconds 120-hitcount 120 -j REJECT” 和“iptable -A FORWARD-i eth1 -o eth0 -p all -m state -state NEW -m recent-name warning --set”指令,在“Filter” 表 中 的“FORWARD”鏈中追加兩條規(guī)則,作用是針對從“eth0”網(wǎng)絡接口進入從“eth1”網(wǎng)絡接口發(fā)出的數(shù)據(jù)連接,如果在2分鐘之內(nèi)連續(xù)出現(xiàn)120個新建立的連接,將其視為病毒發(fā)起的惡意連接,并進行攔截。因為網(wǎng)關處理的是客戶端和內(nèi)網(wǎng)服務器互傳的數(shù)據(jù),所以需要在“FORWARD”鏈上配置過濾規(guī)則。
SSH連接通道可以讓管理員遠程管理Linux服務器。黑客為非法控制目標Linux服務器,也會想方設法破解SSH連接密碼。黑客往往會借助專用的破解工具,配合密碼字典來加快破解的速度。對此,可以執(zhí)行“iptables -A INPUT -p tcp -syn -dport 22 -m recent -name caice-update -seconfs 120-hitcount 4 -j DROP”命令,在“Filter”表中的“INPUT”鏈中追加一條規(guī)則,作用是如果在120秒內(nèi)檢測到針對TCP 22端口的首次連接數(shù)量超過4次,就對其進行攔截。
其中的“-p tcp”參數(shù)表示針對TCP協(xié)議生效,因為SSH使用的是TCP 22端口?!?dport”參數(shù)表示目標端口為 22,“-name caice”參 數(shù)表示記錄文件名為“caice”。執(zhí) 行“iptables -A Input-p -syn -dport 22 - m recent -name caice --set-j ACCEPT”命令,追加一條防火墻規(guī)則,其作用是創(chuàng)建名為“caice”的記錄文件,將首個SSH連接信息寫入到該記錄文件中,作為上一條規(guī)則的檢測條件。因為建立TCP連接需要進行三次握手操作,所以以上針對4個首次連接的處理操作,實際上會對12次SSH連接進行過濾。
即如果黑客在2分鐘內(nèi)連續(xù)建立針對TCP 22端口的連接超過預設值,就被會視為非法破解密碼。使用VI命令打開“/etc/ssh/sshd_config”文 件,在 其 中 的“MaxAuthTries”參數(shù)中存儲的是最大允許連接次數(shù),默認為6。即如果連接者在手工連接時,如果連續(xù)6次輸錯密碼,Linux服務器就會終止該連接過程。為安全起見,建議為其設置一個更小的數(shù)值,例如只允許嘗試3次連接等。
當然,SSH屬于加密連接方式,使用IRIS等抓包工具,是無法讀取其中的真實數(shù)據(jù)的。對于非加密連接,是可以針對其發(fā)送的數(shù)據(jù)包中的特征字符串進行過濾攔截的。例如對于郵件服務器來說,如果黑客破解了用戶郵箱的密碼,就可以非法連接POP3服務。使用WireShark等嗅探工具,針對POP3的連接過程進行分析,可以發(fā)現(xiàn)當使用錯誤的密碼連接時,在返回的數(shù)據(jù)包中會出現(xiàn)“-ERR Authentication failed”。
當黑客對POP3服務器進行密碼破解時,也必然在返回的數(shù)據(jù)包中出現(xiàn)以上內(nèi)容,因為黑客要經(jīng)過多次嘗試破解。因此執(zhí)行“iptables-A OUTPUT -p tcp --algo bm -sport 110 -m string-algo bm -string "-ERR Authentication failed "-m recent -name mailcc-update -seconds 600-hitcount 6 -j REJECT”命令,可以在“Filter”表中的“OUTPUT”鏈中追加一條規(guī)則,其作用是檢測針對源TCP 110端口發(fā)出的數(shù)據(jù)包的內(nèi)容進行過濾,如果發(fā)現(xiàn)其中包含“-ERR Authentication failed”內(nèi)容,并且在名為“mailcc”的記錄文件中記錄的連接數(shù)量在600秒內(nèi)超過6次時,就對其攔截。
其中的“OUTPUT”參數(shù)表示針對的是“OUTPUT”鏈,因為POP3服務器會將應答信息通過該“OUTPUT”鏈返回給客戶端?!?sport 110”參數(shù)表示源端口為110,“--algo bm”參數(shù)表示使用的匹配的算法為Boyer-Mppre,參數(shù)“-string”表示匹配指定的字符串,“-j REJECT”參數(shù)表示執(zhí)行攔截操作,但是會給客戶端發(fā)送一個ICMP包給客戶端。表示網(wǎng)絡連接出現(xiàn)了問題。繼續(xù)執(zhí)行“iptables-A OUTPUT -p tcp --algo bm -sport 110 -m string-algo bm -string "-ERR Authentication failed "-m recent -name mailcc-set”命令,來追加一條規(guī)則,其作用是創(chuàng)建名為“mailcc”的記錄文件,記錄針對滿足以上條件網(wǎng)絡連接,為上一條規(guī)則提供檢測基礎。