Linux 防SSH暴力攻击
在下这几天发现我的vps 总是莫名遭受到 江苏镇江那边的ip 登录请求攻击 ,跟踪了下路由,发现ip是从蒙古那边出去的,然后意识到可能是有扫描端口的。。
方法一:
现在的互联网非常不安全,很多人没事就拿一些扫描机扫描ssh端口,然后试图连接ssh端口进行暴力破解(穷举扫描),所以建议vps主机的空间,尽量设置复杂的ssh登录密码,那么有什么更好的办法来解决这个问题?,就可以使用denyhosts这款软件了,它会分析/var/log/secure(redhat,fedora core)等日志文件,当发现同一ip在进行多次ssh密码尝试时就会记录ip到/etc/hosts.deny文件,从而达到自动屏蔽该ip的目的。
denyhosts是一个脚本,旨在由linux系统管理员运行以帮助阻止ssh服务器攻击(也称为基于字典的攻击和蛮力攻击)。
如果你曾经查看过ssh日志(在redhat上是/ var / log / secure,在mandrake上是/var/log/auth.log,等等...),可能会警觉看到有多少黑客试图访问您的服务器。希望他们都没有成功(但是,话又说回来,你怎么知道?)。自动阻止攻击者继续进入您的系统不是会更好吗?
安装脚本
denyhosts官方网站为:
如果使用了 lnmp一件安装包 布置的环境,该包自带该软件可以一键安装,命令:wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5/tools/ && ./denyhosts.sh 回车确认即可开始安装配置,不需要下面的步骤进行安装配置。(该tools目录下也有denyhosts相似的工具fail2ban的一键安装工具 ./fail2ban.sh 安装即可)
1、下载denyhosts 并解压
# wget http://soft.vpser.net/security/denyhosts/denyhosts-2.6.tar.gz
# tar zxvf denyhosts-2.6.tar.gz
# cd denyhosts-2.6
2、安装、配置和启动
安装前建议执行:echo "" > /var/log/secure && service rsyslog restart 清空以前的日志并重启一下rsyslog
# python setup.py install
因为denyhosts是基于python的,所以要已安装python,大部分linux发行版一般都有。默认是安装到/usr/share/denyhosts/目录的,进入相应的目录修改配置文件
# cd /usr/share/denyhosts/
# cp denyhosts.cfg-dist denyhosts.cfg
# cp daemon-control-dist daemon-control
默认的设置已经可以适合centos系统环境,你们可以使用vi命令查看一下denyhosts.cfg和daemon-control,里面有详细的解释
接着使用下面命令启动denyhosts程序
# chown root daemon-control
# chmod 700 daemon-control
# ./daemon-control start
如果要使denyhosts每次重起后自动启动还需做如下设置:
# 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
denyhosts配置文件/usr/share/denyhosts/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
#是否做域名反解
daemon_log = /var/log/denyhosts
为防止自己的ip被屏蔽,可以:echo "你的ip" >> /usr/share/denyhosts/allowed-hosts 将你的ip加入白名单,再重启denyhosts:/etc/init.d/denyhosts ,如果已经被封,需要先按下面的命令删除被封ip后再加白名单。
如有ip被误封,可以执行下面的命令解封:wget http://soft.vpser.net/security/denyhosts/denyhosts_removeip.sh && bash denyhosts_removeip.sh 要解封的ip
更多的说明请查看自带的readme文本文件,好了以后维护vps就会省一些心了,但是各位vpser们注意了安全都是相对的哦,没有绝对安全,将密码设置的更strong,并请定期或不定期的检查你的vps主机,而且要定时备份你的数据哦。
与denyhosts类似的软件还有fail2ban功能上更多,还可以对ftp进行保护,自己可以搜索看一下。
采用lnmp的 tools 工具包提供的fail2ban 的话, 可以进入到 /etc/init.d/fail2ban 打印 该脚本信息 ,查看脚本配置信息。
方法二:
ssh服务器(sshd)作为linux上非常重要的服务,安全性是很重要的,首先网上有很多专门的服务器用来扫描ssh默认的22端口并使用弱口令之类的密码字典进行暴力破解,虽然可以使用上面所说的 lnmp自带的denyhosts、fail2ban之类的安装脚本,但是将默认ssh端口改掉能过滤掉大部分ssh暴力破解的访问。该教程适合常见的centos/fedora/redhat、debian/ubuntu等常见的linux发行版。
ssh服务器的配置文件为:/etc/ssh/sshd_config
具体修改步骤如下:
1、备份原sshd配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
2、修改sshd配置文件
可以使用winscp、nano、vim之类的软件编辑 /etc/ssh/sshd_config
查找port 22,有可能 port 22 是注释的(即前面有#号,有的话删掉 # 号)。
在 port 22 下面添加一行 port 3322 其中3322为你更改ssh后的端口。
这里建议先保留原来的22端口,待新的ssh端口测试正常工作后再删掉原port 22 端口行。
修改完成后保存。
3、重启ssh服务器
重启ssh服务器命令:systemctl restart sshd
如果没有systemctl的话可以执行:/etc/init.d/sshd restart 或 /etc/init.d/ssh restart
如果没有报错的话就生效了,可以 ss -ntl 或 netstat -ntl 查看一下端口。
4、防火墙、安全组规则设置
iptables添加ssh新端口规则:
iptables -a input -p tcp --dport 3322 -j accept #3322替换为新的端口#
然后保存iptables规则
firewalld添加ssh新端口规则:
firewall-cmd --permanent --zone=public --add-port=3322/tcp #3322替换为新的端口#
firewall-cmd --reload #重载firewalld#
阿里云之类的安全组规则添加ssh新端口规则:
阿里云之类的有安全组之类设置的云服务器一定要在安全组规则里将新端口添加到“入方向”的允许规则。
5、putty、xshell之类的ssh软件连接测试
添加上新的ssh端口后一定要通过putty、xshell之类的ssh软件连接测试一下,测试可以正常连接然后再编辑 /etc/ssh/sshd_config 将port 22 这一行直接删除或这一行前面加 # 注释掉,然后再按前面的命令重启sshd服务。