最近租用了一台Vultr东京机房的VPS,每天都会生成许多异常登录失败的日志,疑似受到扫描软件的暴力破解,遂Google了一下服务器安全防护方面的知识。
废话不多说,下面将操作过程记录下来:
注意:以下操作基于CentOS 7,不同系统下的具体操作可能会有区别
一、修改SSH服务默认端口
SSH服务的默认端口是22,扫描软件首先会通过此端口尝试登录,因此把它改成一个不易猜到的端口(推荐使用10000~65535之间的,复杂度最高也不易和其他进程发生冲突)
1 vim /etc/ssh/sshd_config
新增XXXXX端口并保留22端口(防止一会新端口启用失败,原先的22端口也连不上)
1 # If you want to change the port on a SELinux system, you have to tell 2 # SELinux about this change. 3 # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER 4 # 5 Port 22 6 Port XXXXX 7 #AddressFamily any 8 #ListenAddress 0.0.0.0 9 #ListenAddress ::
添加新端口到防火墙
1 firewall-cmd --permanent --add-port=XXXXX/tcp # 添加到防火墙 2 firewall-cmd --reload # 重新加载防火墙配置 3 firewall-cmd --permanent --query-port=XXXXX/tcp # 查看是否添加成功
重启SSH服务和防火墙,最好也重启下服务器
1 systemctl restart sshd.service 2 systemctl restart firewalld.service 3 reboot
使用新端口连接VPS,如果连接成功,将22端口重新注释掉
二、新建普通用户,禁用root用户远程登录
root用户拥有服务器的最高权限,如果被破解后果将不堪设想,可以通过禁用root用户远程登录来防止
1 vim /etc/sudoers
查看以下位置%wheel前面是否有#,如有将其删掉,授予wheel用户组超级管理员权限
1 ## Allows people in group wheel to run all commands 2 %wheel ALL=(ALL) ALL
新增普通用户并授权,即可在该用户下通过sudo执行需要管理员权限的命令
1 useradd test # 添加用户 2 passwd test # 设置密码 3 usermod -G wheel test # 将新用户添加到wheel组(添加到附加组,主组不变) 4 id test # 查看是否添加成功
修改/etc/ssh/sshd_config文件
1 vim /etc/ssh/sshd_config
找到以下行,将PermitRootLogin后的yes改为no,即可禁止root用户远程登录
1 PermitRootLogin no
重启SSH服务,以后通过新建的普通用户登录VPS即可
三、安装Denyhosts防暴力攻击
DenyHosts是针对SSH服务器的一个基于日志的入侵预防安全工具,是用Python编写的。其通过监测身份验证登录日志中失败的登录尝试,屏蔽这些登录者的IP地址,从而预防对SSH服务器的暴力破解。—— 维基百科
首先下载Denyhosts,官网地址:https://sourceforge.net/projects/denyhosts/
也可以用wget直接下载源码
1 wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
然后解压缩
1 tar -zxvf DenyHosts-2.6.tar.gz
进入解压目录
1 cd DenyHosts-2.6
执行安装
1 python setup.py install
进入安装目录
1 cd /usr/share/denyhosts/
创建配置文件和启动文件副本
1 cp denyhosts.cfg-dist denyhosts.cfg 2 cp daemon-control-dist daemon-control
建立符号链接
1 ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
设置Denyhosts为开机启动
1 chkconfig --add denyhosts # 增加denyhosts服务 2 chkconfig denyhosts on # 设置denyhosts在各等级(2、3、4、5)为on(开启)状态 3 chkconfig --list denyhosts # 查询是否设置成功
启动服务
1 systemctl start denyhosts.service
对于多次登录失败的IP,会被记录到/etc/hosts.deny文件中加以屏蔽,从而限制其继续登录
结束语
至此,VPS的安全配置告一段落了。当然还有例如改用SSH密钥登录服务器等方法,不过笔者觉得万一需要在其他电脑上临时登录,用密钥反而不太方便。其实对于普通的个人服务器来说,通过以上的配置,已经能够抵御大部分暴力攻击了。
附:Denyhosts配置文件说明(denyhosts.cfg)
1 SECURE_LOG = /var/log/secure #指定ssh日志文件 2 HOSTS_DENY = /etc/hosts.deny #记录阻止登陆系统IP的文件 3 PURGE_DENY = #清理HOSTS_DENY文件的时间 4 BLOCK_SERVICE = sshd #在HOSTS_DENY中定义要阻止的服务 5 DENY_THRESHOLD_INVALID = 5 #系统不存在用户失败次数 6 DENY_THRESHOLD_VALID = 10 #除root外,系统存在用户失败次数 7 DENY_THRESHOLD_ROOT = 1 #root用户失败次数 8 DENY_THRESHOLD_RESTRICTED = 1 #针对WORK_DIR下定义的限制用户名的失败次数 9 WORK_DIR = /usr/share/denyhosts/data #将deny的host或ip记录到WORK_DIR中 10 SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES #来自于allowed-hosts中的可以尝试,是否报告 11 HOSTNAME_LOOKUP=YES #是否做域名反向解析 12 LOCK_FILE = /var/lock/subsys/denyhosts #保证同时只有一个denyhosts程序运行的锁文件 13 14 ADMIN_EMAIL = 123@456.789 #设置管理员邮箱,系统开启了sendmail就会发邮件 15 SMTP_HOST = localhost #SMTP服务器 16 SMTP_PORT = 25 #SMTP端口 17 SMTP_FROM = DenyHosts <[email protected]> #通知邮件的发信人地址 18 SMTP_SUBJECT = DenyHosts Report #发信的主题 19 AGE_RESET_VALID=5d #指定时间没有失败登陆记录,将此主机的失败计数重置为0,(不适用于root) 20 AGE_RESET_ROOT=25d #root用户的重置时间 21 AGE_RESET_RESTRICTED=25d #针对有限制用户的 22 AGE_RESET_INVALID=10d #针对无效用户的 23 24 DAEMON_LOG = /var/log/denyhosts #程序后台运行的日志记录 25 26 DAEMON_SLEEP = 30s #每次读取日志的时间间隔 27 DAEMON_PURGE = 1h #清除机制在 HOSTS_DENY 中终止旧条目的时间间隔