一、设置hosts.allow hosts.deny权限
1、将需要ssh访问该服务器的主机ip统统添加到hosts.allow中。
修改/etc/hosts.allow文件
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
sshd:210.13.218.*:allow
sshd:222.77.15.34:allow
sshd:192.178.23.12,21.32.31.43,172.20.20.45:allow
2、然后修改/etc/hosts.deny
[[email protected]_node ~]# cat /etc/hosts.deny # # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a ‘deny‘ option instead. # # See ‘man 5 hosts_options‘ and ‘man 5 hosts_access‘ # for information on rule syntax. # See ‘man tcpd‘ for information on tcp_wrappers # sshd:All
当然hosts.allow hosts.deny这两个文件不只是用于sshd服务,还可以用来设置其他服务访问权限。这些就靠各位大神自行查阅资料了。
二、使用脚本工具,防暴力破解,直接封IP
1、系统centos7
2、说明:在目录/var/log/下面有许多关于系统的日志文件,其中secure记录登入系统存取数据的文件,例如 pop3, ssh, telnet, ftp 等都会被记录,我们可以利用此文件找出不安全的登陆IP。
[[email protected]_node log]# cat secure | grep Failed Nov 10 15:07:35 localhost sshd[29424]: Failed password for root from 172.20.22.23 port 58810 ssh2 Nov 10 15:07:42 localhost sshd[29424]: Failed password for root from 172.20.22.23 port 58810 ssh2 Nov 10 15:07:46 localhost sshd[29424]: Failed password for root from 172.20.22.23 port 58810 ssh2 Nov 10 15:07:51 localhost sshd[29424]: Failed password for root from 172.20.22.23 port 58810 ssh2 Nov 10 15:08:15 localhost sshd[29447]: Failed password for root from 172.20.22.23 port 58811 ssh2 Nov 10 15:08:19 localhost sshd[29447]: Failed password for root from 172.20.22.23 port 58811 ssh2
可以统计登录失败的IP地址,然后加入访问黑名单。
3、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow
保证这些ip始终可以ssh到服务器。
4、编写脚本/root/secure_ssh.sh
[[email protected]_node scripts]# cat secure_ssh.sh #!/bin/bash cat /var/log/secure|awk ‘/Failed/{print $(NF-3)}‘|sort|uniq -c|awk ‘{print $2"="$1;}‘ > /home/scripts/secure_ssh.txt DEFINE="5" for i in `cat /home/scripts/secure_ssh.txt` do IP=`echo $i | awk -F= ‘{print $1}‘` NUM=`echo $i | awk -F= ‘{print $2}‘` if [ $NUM -gt $DEFINE ];then grep $IP /etc/hosts.deny > /dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" >> /etc/hosts.deny fi fi done
5、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。
# crontab -e
*/1 * * * * sh /root/secure_ssh.sh
6、测试
开两个终端窗口,一个ssh连上服务器,另一个用错误的密码连接服务器几次。
很快,服务器上黑名单文件里已经有记录了:
[[email protected] ~]# $ cat /root/black.txt
13.26.21.27=3
再看看服务器上的hosts.deny
[[email protected] ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
7、从另一个终端窗口继续“暴力”连接服务器。
看看服务器上的黑名单文件:
[[email protected] ~]# cat black.txt
13.26.21.27=6
再看看服务器上的hosts.deny
[[email protected] ~]# cat /etc/hosts.deny
sshd:13.7.3.6:deny
sshd:92.4.0.4:deny
sshd:94.10.4.2:deny
sshd:94.4.1.6:deny
sshd:11.64.11.5:deny
sshd:13.26.21.27:deny
IP 已经被加入到服务器的hosts.deny,再用正确的密码连接服务器,被拒绝:
$ ssh [email protected] -p 2333
ssh_exchange_identification: Connection closed by remote host
三、修改ssh默认端口
大多数攻击者在ssh服务器时都只是用默认端口22,如果我们把ssh端口改了。
首先修改配置文件 vi /etc/ssh/sshd_config
找到#Port 22,取消注释,这里是标识默认使用22端口,修改为如下:
Port 22
Port 50000 然后保存退出
执行/etc/init.d/sshd restart 这样SSH端口将同时工作与22和50000上。
现在编辑防火墙配置:vi /etc/sysconfig/iptables
启用50000端口。 执行/etc/init.d/iptables restart
现在请使用ssh工具连接50000端口,来测试是否成功。如果连接成功了,则再次编辑sshd_config的设置,将里边的Port22删除,即可。
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改conf的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房,导致问题更加复杂麻烦