公司有台服务器被坏人盯上了,通过日志可以看到一直在做暴力破解ssh。
防止服务器被暴力破解使用DenyHosts
参考链接:
如何检查服务器的工具集是否被替换
浅谈Linux被入侵后,如何检查后门
防止ssh破解,Ubuntu安装denyhosts的一些问题 (2013-04-11 10:26:46)转载▼
DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
使用root的安装,普通用户添加sudo,要不权限不够
(1)下载软件安装包
wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
(2)解压
tar -zxvf DenyHosts-2.6.tar.gz
(3)安装
cd DenyHosts-2.6
python setup.py install
(会输出一堆信息,留意一下denyhosts.py的路径,后面启动的时候或许会用上)
(4)为了能开机自动启动,在系统中做一个名为“denyhosts”的符号链接,然后添加到启动项中:
ln -s /usr/share/denyhosts/daemon-control-dist /etc/init.d/denyhosts
chkconfig –add denyhosts
(5)
到 /usr/share/denyhosts/ 目录下,将配置文件denyhosts.cfg-dist复制为一个新的配置文件
cd /usr/share/denyhosts
cp denyhosts.cfg-dist denyhosts.cfg
修改配置文件:
vim /usr/share/denyhosts/denyhosts.cfg
sshd 登录日志文件。不同系统的不一样
SECURE_LOG = /var/log/auth.log
限制主机访问的文件
HOSTS_DENY = /etc/hosts.deny
移除 HOSTS_DENY 中超过以下时间的旧条目
PURGE_DENY = 1w
ps:过多久后清除已经禁止的,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
阻止的服务。默认是 sshd ,可以设置为其他或全部。
BLOCK_SERVICE = sshd
当该主机利用无效用户进行登录尝试失败超过以下的次数时,阻止该主机
DENY_THRESHOLD_INVALID = 3
针对有效用户的
DENY_THRESHOLD_VALID = 4
最多允许root登录失败多少次
DENY_THRESHOLD_ROOT = 3
DenyHosts 用于写数据用的。在里面可以看到 hosts,hosts-root,offset,users-hosts,users-valid,hosts-restricted,hosts-valid,suspicious-logins,users-invalid 这些记录。
WORK_DIR = /var/lib/denyhosts
邮箱设置
是否做域名反解析
HOSTNAME_LOOKUP=NO
用来接收报警信息的邮箱
ADMIN_EMAIL = xxx@163.com
smtp服务器地址,当你需要DenyHosts发邮件给你报警的时候,要设置这个参数
SMTP_HOST = smtp.163.com
smtp服务器端口
SMTP_PORT = 25
登录邮箱帐户的用户名
SMTP_USERNAME=usr
登录邮箱帐户的密码
SMTP_PASSWORD=pas
邮件中的发件人信息
SMTP_FROM = DenyHosts
报警邮件的标题
SMTP_SUBJECT = DenyHosts Report
其他的基本上不用改了
(6)启动服务
/etc/init.d/denyhosts start
(从输出的信息来看,这种启动方法实际上是调用了如下的命令:
/usr/bin/denyhosts.py –daemon –config=/usr/share/denyhosts/denyhosts.cfg
可见,它使用的配置文件是/usr/share/denyhosts/denyhosts.cfg ,这也是为什么我们在上面的步骤中要把默认的配置文件复制为一个新的配置文件“denyhosts.cfg”的原因了。)
启动时若显示:python: can't open file '/usr/bin/denyhosts.py': [Errno 2] No such file or directory
解决方法:拷贝/usr/local/bin/denyhosts.py 到/usr/bin下
cp /usr/local/bin/denyhosts.py /usr/bin
或许修改启动文件 /usr/share/denyhosts/daemon-control-dist 的DENYHOSTS_BIN值
DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
(7)测试:
从另一台服务器上,以一个不存在的用户名和密码来ssh登录部署了的DenyHosts服务器,如果你在DenyHosts的配置文件中设置的是错误地尝试一次就被block,那么你就会发现你这台登录的客户端服务器被block了。并且,在部署了DenyHosts的服务器上,查看文件/etc/hosts.deny 的内容,会发现多了一条记录,正是屏蔽了登录者的那一条记录,这就说明生效了
(8)备注:
如果一台服务器被误block了,可以在部署DenyHosts的服务器上,将文件 /etc/hosts.deny 中相应的条目删掉,再重启DenyHosts服务(/etc/init.d/denyhosts restart),就可以解除block了