關於sshd一直被暴力攻擊的解決方法 - Linux

Thomas avatar
By Thomas
at 2011-06-13T12:10

Table of Contents

其實只要一架好ssh之類的服務, 就會被一直try帳號密碼, 很煩。
網路上有不少人家寫好的script, 其實照著用也行, 但是我想推薦的是sshguard這支
程式。

在linux上, 它可以搭配iptables來防堵。並且有時間到自動解鎖功能, 除了iptables
以外, 也可以搭配hosts.deny之類的。並且在非linux平台上也能好好的支援, 算是蠻
方便的程式...

它主要是常駐在系統裡, 藉由分析(r)syslogd所產生的報表, 來動態更新iptables裡的
清單。廢話不多說, 我來分享一下我的作法...

1. Install:
apt-get install sshguard

2. Add the following lines to your /etc/init.d/rcS:
...
#Create named pipe for rsyslog and sshguard.
mkfifo /var/log/sshguard.fifo
...

3. Insert the following lines on the top of rules in /etc/rsyslog.conf:
...
auth.info;authpriv.info |/var/log/sshguard.fifo
...

4. Modify your iptables initialization script to include a custom chain called
'sshguard':

#Reset iptables.
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -Z

#Add custom chain for SSHGuard
iptables -N sshguard

#Route all connections between internet and lan.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS
--clamp-mss-to-pmtu

#Default rules:
#1. Drop all incoming connections.
#2. Accept all connections from loopback device.
#3. Accept all connections from ethernet devices.
#4. Accept all connections from wireless lan devices.
#5. Accept all connections from tunnel pseudo devices.
#6. Accept all consequent packets of accepted connections.
#7. Block suckers who tried to brute attack my services.
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth+ -j ACCEPT
iptables -A INPUT -i wlan+ -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j sshguard

#Open port 6881 for DHT of BT.
iptables -A INPUT -p tcp -m tcp --dport 6881 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 6881 -j ACCEPT

#Open port 6890:6899 for BT and 7000:7004 for FTP.
iptables -A INPUT -p tcp -m tcp --dport 6890:7004 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 6890:7004 -j ACCEPT

#Open port 443 for OpenVPN.
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 443 -j ACCEPT

#Open port 21 for FTP.
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

#Open port 22 for SSH.
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

#Start pppoe-relay.
pr_pid=$(ps aux |grep "[0-9] pppoe-relay" |sed {s/\\s\\s*/' '/g} |cut -d' '
-f2)
if [ ! -z $pr_pid ]; then
echo "Stop pppoe-relay."
kill -9 $pr_pid
fi
echo "Start pppoe-relay."
pppoe-relay -C eth1 -S eth0

#Start sshguard
FIFONAME="/var/log/sshguard.fifo"

if [ ! -p $FIFONAME ]; then
echo "Use mkfifo to create $FIFONAME first!"
exit 0
fi

cat_pid=$(ps aux |grep "[0-9] cat.*fifo" |sed {s/\\s\\s*/' '/g} |cut -d' '
-f2)
sg_pid=$(ps aux |grep "[0-9] sshguard" |sed {s/\\s\\s*/' '/g} |cut -d' ' -f2)

if [ ! -z $cat_pid ] || [ ! -z $sg_pid ]; then
echo "Stop sshguard."
[ ! -z $cat_pid ] && kill -9 $cat_pid
[ ! -z $sg_pid ] && kill -9 $sg_pid
fi

echo "Start sshguard."
cat $FIFONAME | sshguard &

exit 0

5. Restart your computer.

反正我的想法很簡單, 先在rcS裡面把rsyslogd跟sshguard要共享的pipe建好, 接下來
把iptables裡要由sshguard來管理的chain給建出來, 最後再執行sshguard就好了。
如果是用更新版的syslogd的話, 好像不用管線也沒問題, 可以直接把log餵給sshguard
的樣子, 但我在rsyslogd裡試過, 辦不到, 一定要用pipe。

最後再試了一下...還蠻正常的的樣子...

--

              裸になって       
                          
                何が悪い?     

--
Tags: Linux

All Comments

Irma avatar
By Irma
at 2011-06-15T12:01
用fail2ban會不會比較簡單一點@@?
Puput avatar
By Puput
at 2011-06-19T06:38
我之前寫過一個呼叫iptables的腳本,當同一個來源IP
Hazel avatar
By Hazel
at 2011-06-20T05:10
在一分鐘內用同一個帳號try三次或是不同帳號10次失敗
就直接把該IP整個擋掉。
Regina avatar
By Regina
at 2011-06-20T06:49
fail2ban已經把大部分的規則寫好了
Annie avatar
By Annie
at 2011-06-23T07:37
呵呵呵 改port 別人就不知道哪個是ssh服務了
Emily avatar
By Emily
at 2011-06-26T01:22
掃log檔總是沒那麼好,所以sshguard會比fail2ban安全一些
William avatar
By William
at 2011-06-28T17:15
不過其實現在 botnet 太普及了,改 port 或 port knockin
Ula avatar
By Ula
at 2011-06-29T19:25
g 反而是可考慮的做法。
Mason avatar
By Mason
at 2011-07-03T07:01
其實換一個PORT就好了....簡單有效
Poppy avatar
By Poppy
at 2011-07-05T19:31
直接限定ip不是更快
Sierra Rose avatar
By Sierra Rose
at 2011-07-08T02:10
fail2ban 不用改 iptables
David avatar
By David
at 2011-07-10T04:23
為啥要重開機?
Isla avatar
By Isla
at 2011-07-14T13:36
使用 knock 的方法比較簡單和效率。
Heather avatar
By Heather
at 2011-07-15T16:43
推樓上,確實用 knock+knockd 是好方法,幾乎等效於匿蹤
Joe avatar
By Joe
at 2011-07-19T10:36
port knocking 己經到了瘋狂的地步了吧....
Elma avatar
By Elma
at 2011-07-21T17:41
DenyHosts
Michael avatar
By Michael
at 2011-07-24T07:12
換port有效+1
Ida avatar
By Ida
at 2011-07-27T22:55
改port +1
Megan avatar
By Megan
at 2011-07-30T11:30
用cron去改knock的序列,就相當於美軍以前最先進的跳頻通訊
Xanthe avatar
By Xanthe
at 2011-07-31T07:35
再怎麼會掃port也幾乎不可能被試到sshd的.更何況合法序列
Dinah avatar
By Dinah
at 2011-08-03T05:07
一次要好幾秒.除非被全球疆屍網集中攻擊,不然應該是很安全
Lucy avatar
By Lucy
at 2011-08-04T11:52
用 knockd 太弱了,用 iptables 做 port knocking 才潮
Delia avatar
By Delia
at 2011-08-04T22:06
樓上,linux server不見得怕駭客,但絕對怕潮 XD
Robert avatar
By Robert
at 2011-08-06T19:55
就用ssh的免密碼的登入方式不就好了,在把密碼認證拿掉
Caroline avatar
By Caroline
at 2011-08-07T10:01
密碼打對也進不來...
Agnes avatar
By Agnes
at 2011-08-11T16:52
http://www.linux.com/learn/tutorials/305769-advanced
-ssh-security-tips-and-tricks
Hedwig avatar
By Hedwig
at 2011-08-12T18:37
denyhosts +1
Tristan Cohan avatar
By Tristan Cohan
at 2011-08-16T14:42
Zora avatar
By Zora
at 2011-08-19T17:08
換port有效+1
Elizabeth avatar
By Elizabeth
at 2011-08-21T12:02
我是允許VPN IP封包進入,但是DROP來自internet port 22封包
使用前就先VPN連線
Delia avatar
By Delia
at 2011-08-25T06:17
apt-get install fail2ban
Connor avatar
By Connor
at 2011-08-28T09:30
換port 用umap之類的硬掃還是可以掃的到吧~ :P
Lily avatar
By Lily
at 2011-09-02T08:38
nmap 當然掃的出來,但問題是多半先快速掃過 port22比較快
Sarah avatar
By Sarah
at 2011-09-02T13:46
弄個假帳號 讓他登吧 然後寫隻惡意程式 讓他抓回去執行

apt-build CPU最佳化參數?

Hazel avatar
By Hazel
at 2011-06-13T00:13
說真的,我很怕我根本就不知道我到底在問什麼...囧 我試著用apt-build編譯FireFox,並根據Core2Duo作最佳化。 因為我...不會寫程式,在這之前也對gcc之類的東西毫無概念。但還是很勉強的查了一些 資料出來: march和mtune的区别 http://bit.ly/l9lSsK S ...

LXDE ppa更新後垃圾桶看不到任何檔案

Mia avatar
By Mia
at 2011-06-12T16:12
我現在使用linux mint lxde,更新了ppa( sudo add-apt-repository ppa:lxde/ppa ) 上的lxde以後垃圾桶就看不到東西了,請問有辦法解決嗎? 謝謝回答 - ...

在linux底下影音編輯(WandererM大大推薦的OPENSHOT很好用!)

Regina avatar
By Regina
at 2011-06-12T13:45
各位大大好!在下又來PO文了! 抱著對LINUX的熱愛,我一直試著不論幹啥都不切回VISTA的想法, 可是今天終於遭遇了打擊..... 我用的是UBUNTU10.10,官方提供的2.6.38核心,軟體是PIVITI。 打從編輯開始,就出現軟體死當,影片載入不順,預覽時進度軸和預覽區域不同步... - ...

請教該如何安裝行列輸入法

Mason avatar
By Mason
at 2011-06-12T10:41
小弟使用的OS是ubuntu 11.04 並且小弟在ibus選單內沒有發現行列輸入法的選項 請教各位大大是否有辦法在11.04內使用行列輸入法 又該如何安裝,感謝 - ...

顯示卡驅動問題

Necoo avatar
By Necoo
at 2011-06-12T02:34
我現在用的是ati 5750 我安裝了11.5這一個官方驅動 現在風扇全速轉不停 然後特效也開不了 該怎麼移除還是修改它? os:opensuse 11.4 x64 - ...