對(duì) 于Linux來說,使用SSH連接可以實(shí)現(xiàn)遠(yuǎn)程訪問。不過,這也成了黑客重點(diǎn)攻擊的目標(biāo)。如果黑客破譯了連接密碼,就可以輕松的對(duì)SSH服務(wù)器進(jìn)行滲透和破壞。因此,如何保護(hù)SSH服務(wù)的安全,是管理員必須重視的問題。除了使用各種安全軟件外,利用Linux中內(nèi)置的NetFilter防火墻模塊,通過編寫簡(jiǎn)單的規(guī)則,就可以有力的保護(hù)SSH連接的安全。
對(duì)于SSH來說,最好的使用方法是隨用隨開。當(dāng)使用完畢后,自動(dòng)將其關(guān)閉。這樣,不僅利于管理,還可以有效防范黑客偷襲。其實(shí),只有合理配置規(guī)則,就可以實(shí)現(xiàn)上述功能。例如管理員可以自定義ping數(shù)據(jù)包的大小,當(dāng)發(fā)送特定大小的ping數(shù)據(jù)包時(shí),可以開啟或者關(guān)閉TCP 22端口。執(zhí)行“iptables-A INPUT -p icmp -icmptype echo-request -m length -length 1028 LOG-log-prefix "autossh"”命令,可以在“Filter”表中的“INPUT”鏈中追加一條規(guī)則,其作用是對(duì)于發(fā)送長(zhǎng)度為1028字節(jié)的ping數(shù)據(jù)包的網(wǎng)絡(luò)連接進(jìn)行記錄,將其添加“autossh”的前綴信息,存放到系統(tǒng)日志中。
其中的“-p icmp”參數(shù)表示處理ICMP協(xié)議,“-icmp-type echo-request”參數(shù)表示匹配ICMP連接類型,這里為請(qǐng)求連接的ping數(shù)據(jù)包?!?m”參數(shù)表示使用擴(kuò)展匹配選項(xiàng),“l(fā)ength-length 1028”參數(shù)表示匹配特定長(zhǎng)度的ICMP數(shù)據(jù)包,這里長(zhǎng)度為1028字節(jié)?!?log-prefix”參數(shù)表示執(zhí)行記錄操作,并添加指定的前綴。執(zhí)行“iptables -A INPUT -p icmp-icmp-type echo-request-mlength-length 968-m recent -set -name opendoor -rsource -j ACCEPT”命令,可以追加一條規(guī)則,對(duì)于符合上述長(zhǎng)度要求的ICMP連接進(jìn)行記錄,記 錄 文 件 為“opendoor”?!?-rsource”參數(shù)表示同步記錄源地址。
執(zhí)行“iptables -A INPUT -p tcp -dport 22-syn -m recent -rcheck-s econds 60 -name opendoor -rsource -j ACCEPT”命令,來追加一條規(guī)則。其作用是檢測(cè)在60秒時(shí)間內(nèi),在名為“opendoor”的記錄文件內(nèi)是否存在地址記錄信息,如果有的話,就允許其連接本機(jī)TCP 22端口。執(zhí)行“iptables -A INPUT-p icmp -icmp-type echorequest -m length -length 1098 -m recent -set-name opendoor -rmove -j ACCEPT”命令,可以追加一條規(guī)則,其作用是當(dāng)接收到客戶端發(fā)來長(zhǎng)度為1098字節(jié)的ICMP數(shù)據(jù)包時(shí),將其地址從名為“opendoor”的記錄文件中刪除,其中的“-rmove”參數(shù)表示刪除記錄文件內(nèi)容。當(dāng)然,對(duì)于已經(jīng)存在的連接是允許的。
執(zhí)行“iptables -A INPUT -m state -state ESTABLISHED -j ACCEPT”命令,添加所需規(guī)則即可。這樣,在客戶端執(zhí)行“ping xxx.xxx.xxx.xxx -l 1008”,向 Linux服務(wù)器(假設(shè)其地址為“xxx.xxx.xxx.xxx”)發(fā)送長(zhǎng)度為 1008的ICMP包,其中的“-l”參數(shù)可以指定數(shù)據(jù)包大小,注意因?yàn)镮CMP和IP頭長(zhǎng)度之和為20字節(jié),所以實(shí)際發(fā)送的指定的長(zhǎng)度應(yīng)該為1008,當(dāng)Linux服務(wù)器接收到該長(zhǎng)度的ICMP數(shù)據(jù)包后,依據(jù)上述規(guī)則,Linux服務(wù)器就允許其使用SSH連接訪問了。對(duì)應(yīng)的,執(zhí)行“ping xxx.xxx.xxx.xxx -l 1078”名命令,向服務(wù)器發(fā)送長(zhǎng)度為1078的ICMP數(shù)據(jù)包,服務(wù)器就會(huì)按照預(yù)設(shè)規(guī)則禁止其建立新的SSH連接。對(duì)于已經(jīng)建立的SSH連接,則不予攔截。
SYN攻擊屬于DoS攻擊的一種,它利用TCP協(xié)議缺陷,通過發(fā)送大量的半連接請(qǐng)求,耗費(fèi)服務(wù)器CPU和內(nèi)存資源。SYN攻擊除了能影響主機(jī)外,還可以危害路由器、防火墻等網(wǎng)絡(luò)系統(tǒng),事實(shí)上SYN攻擊并不管目標(biāo)是什么系統(tǒng),只要這些系統(tǒng)打開TCP服務(wù)就可以實(shí)施。對(duì)于非偽造IP發(fā)起的SYN洪水攻擊,可以使用對(duì)應(yīng)的IPTables規(guī)則進(jìn)行防御,這對(duì)于防御CC攻擊同樣有效。
執(zhí)行“iptables -A INPUT -p tcp -dport 80-syn recent -name antidos-rcheck -seconds 30-hitcount 10 -j LOG -log-prefix ‘fyhs:’ -logip-options”命令,可以追加一條規(guī)則,其作用是當(dāng)客戶端針對(duì)Linux服務(wù)器的TCP 80端口發(fā)起連接時(shí),如果在30秒內(nèi)連接的次數(shù)超過10個(gè),就記錄客戶端的IP等信息,其中的“-log-ipoptions”參數(shù)表示記錄連接著的IP。執(zhí)行“iptables-A INPUT -p tcp -dport 80 -syn recent -name antidos -rcheck -seconds 30 -hitcount 10 -j DROP”命令,來添加一條規(guī)則,當(dāng)滿足以上連接條件后,禁止其繼續(xù)連接。執(zhí)行“iptables-A INPUT -p tcp -dport 80 -syn -m recent -name antodos -ser -j ACCEPT”命令,添加一條規(guī)則,其作用是創(chuàng)建名為“antidos”的記錄文件,記錄符合要求的連接信息,例如10條以內(nèi)的連接信息等。
為便于遠(yuǎn)程管理Linux服務(wù)器,一般會(huì)開啟SSH連接通道,讓管理員可以遠(yuǎn)程登錄到Linux服務(wù)器執(zhí)行各種操作。黑客為非法控制目標(biāo)Linux服務(wù)器,也會(huì)想方設(shè)法破解SSH連接密碼。黑客往往會(huì)借助專用的破解工具,配合密碼字典來加快密碼破解速度。為防范這種入侵,可以執(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)檢測(cè)到針對(duì)TCP 22端口的首次連接的數(shù)量超過4次,就對(duì)其進(jìn)行攔截。
其中的“-p tcp”參數(shù)表示針對(duì)TCP協(xié)議生效,因?yàn)镾SH使用的是TCP 22端口?!?dport”參數(shù)表示目標(biāo)端口為 22,“-name caice”參 數(shù)表示記錄文件名為“caice”。執(zhí)行“iptables -A Input-p -syn -dport 22 -m recent -name caice --set-j ACCEPT”命令,追加一條防火墻規(guī)則,其作用是創(chuàng)建名為“caice”的記錄文件,將首個(gè)SSH連接信息寫入到該記錄文件中,作為上一條規(guī)則的檢測(cè)條件。
即如果黑客在2分鐘內(nèi)連續(xù)建立的連接超過預(yù)設(shè)值,就被視為非法破解密碼行為,防火墻即可對(duì)其進(jìn)行攔截。使用VI命令打開“/etc/ssh/sshd_config”文件,在其中的“MaxAuthTries”參數(shù)中存儲(chǔ)的是最大允許連接次數(shù),默認(rèn)為6。為安全起見,建議為其設(shè)置一個(gè)更小的數(shù)值,例如只允許嘗試3次連接等。若黑客使用專用破解工具的話,會(huì)在終止連接后,自動(dòng)向Linux服務(wù)器發(fā)送帶有SYN標(biāo)記的數(shù)據(jù)包來欺騙服務(wù)器實(shí)現(xiàn)連續(xù)猜測(cè)密碼。利用上述防火墻規(guī)則,就可對(duì)其進(jìn)行有效防御了。
對(duì)于非加密連接是可以針對(duì)其發(fā)送的數(shù)據(jù)包中的特征字符串進(jìn)行過濾攔截的。如對(duì)郵件服務(wù)器,其提供的POP3服務(wù)提供收信功能。若黑客破解用戶郵箱密碼,使用WireShark等嗅探工具,針對(duì)POP3的連接過程進(jìn)行分析,可發(fā)現(xiàn)當(dāng)使用錯(cuò)誤密碼連接時(shí),在返回的數(shù)據(jù)包中出現(xiàn)“-ERR Authentication failed”字樣。
當(dāng)黑客對(duì)POP3服務(wù)器進(jìn)行密碼破解時(shí),也必然在返回的數(shù)據(jù)包中出現(xiàn)以上內(nèi)容,因?yàn)楹诳捅仨毥?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ī)則,其作用是檢測(cè)針對(duì)源TCP 110端口發(fā)出的數(shù)據(jù)包的內(nèi)容進(jìn)行過濾,如果發(fā)現(xiàn)其中包含“-ERR Authentication failed”內(nèi)容,并且在名為“mailcc”的記錄文件中記錄的連接數(shù)量在600秒內(nèi)超過6次時(shí),就對(duì)其攔截。
其中的“OUTPUT”參數(shù)表示針對(duì)的是“OUTPUT”鏈,因?yàn)镻OP3服務(wù)器會(huì)將應(yīng)答信息通過該“OUTPUT”鏈返回給客戶端?!?sport 110”參數(shù)表示源端口為110,“--algo bm”參數(shù)表示使用的匹配的算法為Boyer-Mppre,參數(shù)“-string”表示匹配指定的字符串,“-j REJECT”參數(shù)表示執(zhí)行攔截操作,但是會(huì)給客戶端發(fā)送一個(gè)ICMP包給客戶端。表示網(wǎng)絡(luò)連接出現(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”的記錄文件,記錄下針對(duì)滿足以上條件的網(wǎng)絡(luò)連接,為上一條規(guī)則提供檢測(cè)基礎(chǔ)。