之前因為服務器裡沒有什麼重要的東西,也就一直沒有關注過登陸日志,剛才在配置ssh chroot出現錯誤是才去看的auth.log,記得這個文件就是個登陸日志,而且我之前偶爾查看時都很少內容,所以就直接
cat查看了,誰知道竟然是滿屏滿屏的,"Failed password for root XXX.XXX.XXX.XXX",等了將近一分鐘仍然不見底,最後只好Ctrl+c提前結束,然後寫條命令了下,看看究竟有多少個IP在暴利破解我的root:
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
命令很簡單,也就不過多做解釋了,直接看看結果:
4540 86.122.189.166
855 61.1.84.12
576 61.164.145.33
304 184.32.139.224
284 200.195.151.82
222 110.234.129.177
210 200.62.142.142
202 213.152.176.153
202 129.121.32.94
42 122.228.197.134
38 119.161.145.215
30 79.174.68.97
15 82.166.223.235
13 76.28.73.184
1 119.68.246.2
最多的4000多次,還行,估計離解出我的密碼還有段距離,可是為了防范未然,也讓我的auth.log文件能清淨一些,索性就加些防范措施。
至於預防措施到時多種多樣,我這裡說幾種我剛才嘗試過的,或者嘗試了放棄的
1、修改SSh端口,禁止root登陸
這個比較簡單,只需要修改/etc/ssh/sshd_config文件就好了
sudo vi /etc/ssh/sshd_config
Port 4484
#這裡就該為你認為別人猜不到的端口號
PermitRootLogin no
#這裡改為no即為禁止root登陸
最後保存,重啟
sudo /etc/init.d/ssh restart
2、禁用密碼登陸,僅用證書密鑰登陸
在客戶端生成密鑰
ssh-keygen -t rsa
把公鑰拷貝至服務器
ssh-copy-id -i .ssh/id_rsa.pub server
也可以手動將.shh/id_rsa.pub拷貝至服務器用戶目錄的.ssh中,記得修改訪問權限
scp .shh/id_rsa.pub server:~/.ssh
在服務器中
cd ./.ssh/
mv id_rsa.pub authorized_keys
chmod 400 authorized_keys
最後修改/etc/ssh/sshd_config
RSAAuthentication yes
#RSA認證
PubkeyAuthentication yes
#開啟公鑰驗證
AuthorizedKeysFile .ssh/authorized_keys
#驗證文件路徑
PasswordAuthentication no
#禁止密碼認證
PermitEmptyPasswords no
#禁止空密碼
UsePAM no
#禁用PAM
最後保存,重啟
sudo /etc/init.d/ssh restart
3、安裝denyhosts
暴露在網絡上的主機都是有風險的,其中一種風險就是ssh暴力破解攻擊(ssh brute force attack)。
請先看看你的
Linux主機的 /var/log/secure 文件的內容,如果你發現裡面記錄有無數條用各種甚至在你的系統中都不存在的用戶名來嘗試登錄你的系統的日志,那麼你就要當心了,這很有可能是別人在用工具不斷嘗試破解你的登錄帳號。
如果你的密碼不夠復雜,那麼很可能你會遭殃。防范的方法有很多種,這裡介紹一種用第三方軟件來實現防御的方法。
據網上的資源介紹,有下面幾個防御軟件:
sshfilter http://www.csc.liv.ac.uk/~greg/sshdfilter/
Fail2Ban http://fail2ban.sourceforge.net/
DenyHosts http://denyhosts.sourceforge.net/
這幾個軟件我沒有全部接觸過,僅用了DenyHosts。下面就說一下DenyHosts的安裝和使用。
到這裡去下載:http://sourceforge.net/projects/denyhosts/
files/
下載.tar.gz的安裝包就可以了,安裝很方便。
寫本文的時候,其版本為2.6(DenyHosts-2.6.tar.gz)。
(1)解壓安裝包:
tar zxf DenyHosts-2.6.tar.gz
(2)進入解壓出來的目錄下,然後再安裝:
cd DenyHosts-2.6/
python setup.py install
(會輸出一堆信息,不用理會它)
(3)為了能開機自動啟動,在系統中做一個名為“denyhosts”的符號鏈接,然後添加到啟動項中:
ln -s /usr/share/denyhosts/daemon-control-dist /etc/init.d/denyhosts
chkconfig --add denyhosts
(4)到 /usr/share/denyhosts/ 目錄下,將配置文件denyhosts.cfg-dist復制為一個新的配置文件——後面會說為什麼要這樣做:
cd /usr/share/denyhosts
cp denyhosts.cfg-dist denyhosts.cfg
(5)修改配置文件:
vi denyhosts.cfg
配置文件的內容很長,但是我們沒有必要修改所有的參數,很多都只要使用默認就夠了,但是有一些是必須要改的,部分說明如下:
# ssh日志文件,對RedHat來說,就是這個文件。對其他系統來說,可能不是該文件,請參考詳細的說明
SECURE_LOG = /var/log/secure
# 描述禁止登錄的文件
HOSTS_DENY = /etc/hosts.deny
# 當DenyHosts以--purge參數調用時,比這個參數設置的值久的時間的HOSTS_DENY記錄將被刪除(該參數留空的話,表示從不會清除任何HOSTS_DENY記錄)
PURGE_DENY =
# 發生block的情況時,需要block的服務名
BLOCK_SERVICE = sshd
# 最多允許系統中不存在的用戶登錄失敗多少次
DENY_THRESHOLD_INVALID = 2
# 最多允許有效用戶登錄失敗多少次
DENY_THRESHOLD_VALID = 3
# 最多允許root登錄失敗多少次
DENY_THRESHOLD_ROOT = 3
# 是否做域名反解析
HOSTNAME_LOOKUP=NO
# 用來接收報警信息的郵箱
ADMIN_EMAIL = [email protected]
# smtp服務器地址,當你需要DenyHosts發郵件給你報警的時候,要設置這個參數
SMTP_HOST = smtp.163.com
# smtp服務器端口
SMTP_PORT = 25
# 登錄郵箱帳戶的用戶名
SMTP_USERNAME=usr
# 登錄郵箱帳戶的密碼
SMTP_PASSWORD=pas
# 郵件中的發件人信息
SMTP_FROM = DenyHosts <[email protected]>
# 報警郵件的標題
SMTP_SUBJECT = DenyHosts Report
其他的基本上不用改了。
文章來源:http://www.codelast.com/
(6)啟動服務:
/etc/init.d/denyhosts start
(從輸出的信息來看,這種啟動方法實際上是調用了如下的命令:
/usr/bin/denyhosts.py --daemon --config=/usr/share/denyhosts/denyhosts.cfg
可見,它使用的配置文件是/usr/share/denyhosts/denyhosts.cfg ,這也是為什麼我們在上面的步驟中要把默認的配置文件復制為一個新的配置文件“denyhosts.cfg”的原因了。)
(7)測試:
從另一台服務器上,以一個不存在的用戶名和密碼來ssh登錄部署了的DenyHosts服務器,如果你在DenyHosts的配置文件中設置的是錯誤地嘗試一次就被block,那麼你就會發現你這台登錄的客戶端服務器被block了。並且,在部署了DenyHosts的服務器上,查看文件/etc/hosts.deny 的內容,會發現多了一條記錄,正是屏蔽了登錄者的那一條記錄,這就說明生效了。
文章來源:http://www.codelast.com/
備注:
如果一台服務器被誤block了,可以在部署DenyHosts的服務器上,將文件 /etc/hosts.deny 中相應的條目刪掉,再重啟DenyHosts服務(/etc/init.d/denyhosts restart),就可以解除block