[程式]擋掉 ssh 嘗試連線動作

這個版面主要討論 debian 在 server 端的應用問題, server 種類繁多..舉凡 Web Server 、 File Server、 DHCP Server..等等。

版主: 阿信

[程式]擋掉 ssh 嘗試連線動作

文章訪客 » 週二 8月 01, 2006 12:57 pm

最近我的Debian一直被某些IP嘗試登入(應該是想要暴力破解密碼帳號吧),所以就寫了這個Script去擋掉他們的行為。

這個 Script 需要 iptables 配合,為了方便,我使用 iptables-save 把設定後的檔案留在/etc/iptables.conf

目前的問題在於:寫的太沒效率了。還有就是他會更動原本的auth.log檔(...Failed password XXX 改成 IP Deny from iptables ...XXX),所以如果有需要用,又想要保留原本auth.log檔的人請自行備份修改。

代碼: 選擇全部
#Usage: Deny ssh attacks by iptables
#Auth: snowmantw(at)gmail.com
#Version: 0.0
#License: You think this such poor shell script need a license?
#     Anyway, if license is import for someone, this script is under GPL.
#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

cat /var/log/auth.log|grep -n "Failed password"|sed 's/^.*from//g'|sed 's/port.*$//g' > /tmp/badips.txt
#Get ips.

sort /tmp/badips.txt|uniq -dc > /etc/badips.txt
length=`wc /etc/badips.txt|awk '{print $1}'`
num=0
while [ "$num" != "$length" ]
do
        num=$(($num+1))
        is_bad=`nl /etc/badips.txt|sed 's/^\ \{5\}//g'|grep ^"$num"|awk '{print $2}'`
        result=$(($is_bad>5))
        if [ "$result" == 1 ]; then
                badip=`nl /etc/badips.txt|sed 's/^\ \{5\}//g'|grep ^"$num"|awk '{print $3}'`
                echo "Detected bad ip : $badip , times : $is_bad"
                iptables -I INPUT -i all -s $badip -j DROP
                echo "Iptables rejected it."
                cat /var/log/auth.log |sed "s/^.*Failed\ password.*$/IP denied by iptables (use shell script) $badip /g" > /var/log/auth.log
        fi
        #Ignore tries < 5
done
iptables-save > /etc/iptables.conf
exit 0


寫完後想想,我的壞習慣就是在「應該」有別的工具好用情況下,還自己動手。
另外請問各位,有辦法查到對方連線時的MAC Address嗎?或者是我一定要從封包下手...(C++拿出來用的時候了?)
訪客
 

文章訪客 » 週二 8月 01, 2006 3:24 pm

用 port knocking 吧!就是平常 port 22 是關著的, 只有當另外的某個 port 被
request 時, 再打開 port 22 接受 connection.
參考一下 http://www.answers.com/topic/port-knocking
訪客
 

文章訪客 » 週二 8月 01, 2006 10:34 pm

這裡 http://www.la-samhna.de/library/brutessh.html 介紹5個方法,我個人採用第3個方法。
* Strong passwords
* RSA authentication
* Using 'iptables' to block the attack
* Using the sshd log to block attacks
* Using tcp_wrappers to block attacks

第3個方法範例(特定 IP,60秒內,企圖連線第3次時,封包就會被丟棄)
/sbin/iptables -A INPUT -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 22 -i ppp0 -m recent --name sshattack --set

/sbin/iptables -A INPUT -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 22 ppp0 -m recent --name sshattack --set

/sbin/iptables -A INPUT -p tcp --syn --dport 22 -i ppp0 -m recent --name sshattack --set

/sbin/iptables -A INPUT -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -m limit --limit 4/minute -j LOG --log-prefix 'SSH attack: '

/sbin/iptables -A INPUT -m recent --name sshattack --rcheck --seconds 60 --hitcount 3 -j DROP

larry
訪客
 

文章訪客 » 週三 8月 02, 2006 9:53 am

MAC Address 在 routing 時會被更換 應改沒辦法取得吧
當然在同一個網域裡應該是可以的
訪客
 

文章訪客 » 週三 9月 20, 2006 2:09 am

fail2ban就是個不錯的工具呢。
訪客
 

文章kahn » 週三 9月 20, 2006 12:57 pm

portsentry 動態阻檔,可滿足你的須求
shorewall 配合portsentry 是個滿不錯的組合
頭像
kahn
活潑的高中生
活潑的高中生
 
文章: 350
註冊時間: 週三 9月 04, 2002 10:52 pm
來自: 彰化


回到 debian server

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客