Linux 服务器防止SSH暴力破解

当你的linux服务器暴露在互联网之中,将会遭到互联网上的扫描软件进行扫描,并试图破解SSH登录口令,这将对你的服务器构成威胁。
DenyHosts可以阻止试图破解SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到 自动屏蔽 该IP的目的。
一、实验环境
3 台Centos 7.4 Server ,1台为被攻击Server,另2 台为 攻击Server
Centos 7.4 系统,自行安装。
软件:DenyHosts-2.6.tar.gz
下载地址:https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
二、IP 地址规划:
被攻击Server:192.168.189.236 hostname:zab02
攻击Server01:192.168.189.5 hostname:attack01
攻击Server02:192.168.189.253 hostname:attack02
三、安装DenyHosts-2.6.tar.gz
下载DenyHosts-2.6.tar.gz
cd /opt
wget https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz

tar zxvf DenyHosts-2.6.tar.gz
cd /opt/DenyHosts-2.6/
python setup.py install
cd /usr/share/denyhosts/
cp daemon-control-dist daemon-control
cp denyhosts.cfg-dist denyhosts.cfg
默认的denyhosts.cfg 是简化版,没有注释
denyhosts.cfg-dist 是详细版。
四、修改denyhosts 配置文件
vim /usr/share/denyhosts/denyhosts.cfg















配置文件其他地方,可以不用修改。
启动服务:
/usr/share/denyhosts/daemon-control start &
systemctl restart rsyslog.service
查看状态:



进程查看:

五、攻击测试:
在 attack01 attack02 上面操作:
attack01:用root 帐户测试






+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果觉得 ssh 连接,尝试密码次数太多,vim /etc/ssh/sshd_config


最后要记得重启sshd 服务。
systemctl restart sshd
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 次过后,再登录:被拒绝

被攻击Server zab02 查看hosts.deny

cat /var/log/secure 被攻击Server zab02 查看安全日志


+++++++++++++++++++++++++++++++++++++++
attack02:用无效用户测试




连接被拒绝:


被攻击Server zab02 查看hosts.deny


被攻击Server zab02 查看安全日志

六、解封IP
当一个IP 被denyhosts 拒绝后,不止会把这个IP添加到 /etc/hosts.deny这个文件中,还会把它写到 denyhosts的工作目录下面的相应文件里面:

直接从/etc/hosts.deny删除是不行的,还需要从其他文件里面清除。
手工删除太慢,使用脚本解封IP,更快。
脚本文件:
cd /opt && vim auto_jf.sh
#!/bin/bash
#2019-01-20 19:15
#DenyHosts 2.6 auto remove deny ip
#by xucong
################################
DENY_DIR="/usr/share/denyhosts/data"
DENY_IP=$1
if [ $# -eq 0 ];then
echo -e "\033[32m--------------------------\033[0m"
echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m"
exit 0
fi
if [ $1 == "help" ] ;then
echo -e "\033m[32m--------------------------\033[0m"
echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m"
exit 1
fi
for i in `ls $DENY_DIR/`
do
sed -i "/$DENY_IP/d" $DENY_DIR/$i
done
sed -i "/$DENY_IP/d" /etc/hosts.deny
echo "$DENY_IP" >>$DENY_DIR/allowed-hosts
echo -e "\033[32m----------------------\033[0m"
sleep 1
echo -e "\033[32m The Deny IP removed Success.\033[0m"
/usr/share/denyhosts/daemon-control restart
解封 IP (192.168.189.5) 测试:在 被攻击Server zab02 上执行
解封前:(在attack01 上面操作)



运行脚本:(在zab02上面执行)
cd /opt
./auto_jf.sh 192.168.189.5 ###(脚本后面,跟要解封的IP)


在attack01 上面,重新登录 服务器(zab02)


++++++++++++++++++++++++++ END ++++++++++++++++++++++++