# cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
修改SSH服務器配置文件vim
# vim /etc/ssh/sshd_config安全
ssh鏈接時需指定鏈接端口,如:bash
ssh -p 2212 root@xxx.xxx.xxx.xxx服務器
若是修改客戶端配置文件 /etc/ssh/config_ssh網絡
把Port改爲2212,則鏈接ssh服務器時默認鏈接的端口爲2212 併發
1.修改服務器端配置文件app
# vim /etc/ssh/sshd_configssh
安裝:略curl
配置:測試
進入denyhosts的主配置目錄 #cd /usr/share/denyhosts 複製默認配置文件和程序執行文件 #cp denyhosts.cfg-dist denyhosts.cfg #cp daemon-control-dist daemon-control 修改程序執行文件的操做權限 #chmod 770 daemon-control # ./daemon-control start
設置開機自啓動
# ln -sf /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts # chkconfig --add denyhosts # chkconfig --level 2345 denyhosts on
或者寫入自啓動文件/etc/rc.local
# echo "/usr/share/denyhosts/daemon-control start" >> /etc/rc.local
經常使用配置說明
# vi denyhosts.cfg SECURE_LOG = /var/log/secure #sshd日誌文件,它是根據這個文件來判斷的,不一樣的操做系統,文件名稍有不一樣。 HOSTS_DENY = /etc/hosts.deny #阻止用戶登錄的文件 PURGE_DENY = 5m DAEMON_PURGE = 5m #過多久後清除已經禁止的IP 如5m(5分鐘)、5h(5小時)、5d(5天)、5w(5周)、1y(一年) BLOCK_SERVICE = sshd #禁止的服務名,能夠只限制不容許訪問ssh服務,也能夠選擇ALL DENY_THRESHOLD_INVALID = 5 #容許無效用戶失敗的次數 DENY_THRESHOLD_VALID = 10 #容許普通用戶登錄失敗的次數 DENY_THRESHOLD_ROOT = 5 #容許root登錄失敗的次數 HOSTNAME_LOOKUP=NO #是否作域名反解 ADMIN_EMAIL = #設置管理員郵件地址 DAEMON_PURGE = 10m #該項與PURGE_DENY 設置成同樣,也是清除hosts.deniedssh 用戶的時間。
之後就能夠經過/etc/hosts.deny文件查看阻止ip
#!/bin/bash #Program: # Use to monitor the user who try to login. # 防止SSH用戶暴力破解腳本 # #Usage: # 賦予可執行權限並添加到crontab # 請先修改19行NUM對應的登陸失敗次數(默認100),超過此值則會添加到/etc/hosts.deny而且發送郵件 # 建議使用sendEmail發送郵件(不會被看成垃圾郵件而屏蔽) http://caspian.dotconf.net/menu/Software/SendEmail/ # sendmail使用qq、163郵箱測試經過,默認的mail客戶端發送qq郵箱會拒收須要添加白名單、163經過 #History: #2013/10/13 Ver:1.02 By Jack # # PATH=/sbin:/usr/sbin:/bin:/usr/bin:~ export PATH #定義閥值,超出此值則添加到黑名單併發送郵件 NUM=100 #檢查是否有root權限 [ $UID != 0 ] && echo -e "\e[0;31mSorry,Please run as root!\e[0m" && exit 2 #檢查安全日誌文件是否存在且可讀 log=/var/log/secure [ ! -e $log ] || [ ! -r $log ] && echo -e "\e[0;31mMake sure the file $log exist or can be readable!\e[0m" && exit 3 #登錄失敗的IP地址列表 ssh_list=/root/logs/ssh_list [ ! -e ${ssh_list} ] && mkdir -p `dirname ${ssh_list}` #判斷日誌中是否存在ssh登陸失敗ip,若是沒有則退出,不然添加至${ssh_list} cat $log |grep 'Failed' &>/dev/null [ $? != 0 ] && exit 4 cat $log|awk '/Failed/{print $(NF-3)}'|uniq -c|sort -nr|awk '{print $2"=>"$1}' > ${ssh_list} #定義黑名單文件(Tcpwrappers) deny_file=/etc/hosts.deny #定義發送的黑名單郵件列表地址 mail_file=/root/logs/mail_file [ ! -d `dirname ${mail_file}` ] && mkdir -p `dirname ${mail_file}` #選擇郵件發送端,若是使用sendEmail,請下載後將sendEmail.pl拷貝到/usr/bin並賦予x權限 if [ -e /usr/bin/sendEmail.pl ] && [ -x /usr/bin/sendEmail.pl ] then sendmail="mailA" elif [ -e /bin/mail ] && [ -x /bin/mail ] then sendmail="mailB" else sendmail="None" fi #關於sendEmail設置 send_user='xxxx@qq.com\' #發送者地址 smtp_user='xxxx' #登錄smyp服務器的用戶名 smtp_pass='xxxx' #登錄smtp服務器用戶的密碼 smtp_addr='smtp.qq.com:25' #smtp地址和端口 recv_user='115466xxxx@qq.com jack_blues@163.com\' #接收者郵件地址 send_mailA(){ /usr/bin/sendEmail.pl -f ${send_user} -t ${recv_user} -s ${smtp_addr} -u "SSHD WARNINGS" -m "`cat ${mail_file}`" -xu ${smtp_user} -xp ${smtp_pass} > /dev/null 2>&1 } send_mailB(){ /bin/mail -s "Failed sshd Login Users" ${recv_user} < ${mail_file} } #測試網絡 test_network(){ #ping 8.8.8.8 -c2 &>/dev/null RETVAL=$(curl -I -o /dev/null -s -w %{http_code} http://www.baidu.com/) } for i in `cat ${ssh_list}` do COUNT=`echo $i|awk -F"=>" '{print $2}'` IPADDR=`echo $i|awk -F"=>" '{print $1}'` if [ ${COUNT} -ge ${NUM} ];then grep $IPADDR ${deny_file} 2>/dev/null while [ $? -ne 0 ] do echo "sshd:${IPADDR}" >> ${deny_file} echo "<警告>:IP爲${IPADDR}的用戶嘗試使用SSH登錄的次數大於限定值$NUM,其嘗試次數爲$COUNT">>${mail_file} done fi done #sleep 1 while [ -e ${mail_file} ] do test_network [ $RETVAL -ne 200 ] && exit 5 case $sendmail in mailA)send_mailA;; mailB)send_mailB;; None)exit 6 esac rm -f ${mail_file} done