云服务器安全相关配置
我所租用的云服务器操作系统为CentOS Linux,在使用云服务器的过程中为了保证服务器的安全,进行了一些简单的配置,这样能够增加服务器被破解的难度。
使用denyhosts防止暴力破解
登入服务器主要是使用用户名和密码,而且linux的root用户拥有最高权限。可以使用denyhosts,防止暴力破解用户名和密码。denyhosts的原理是在多次输入错误的用户名和密码时,屏蔽该登录ip,限制密码的尝试次数。
安装denyhosts
使用包管理器安装
可以使用自带的包管理器安装denyhost,这样是比较方便的,后续的配置工作也会简单一些。
yum install denyhosts
手动安装
update: 2020-6-5
在包管理器中没有找到denyhosts,于是按照官方文档进行手动安装,使用的denyhost版本为3.1.2beta。
目前CentOS7中自带的还是python2,所以下面的操作都仍然是基于python2的。但是需要注意的是python2已经从2020年开始就不再维护了,在以后的安装中使用python3可能更好。
安装依赖的python包(ipaddr)。我使用了pip进行安装,但是python2的pip需要安装 epel-release
之后才能通过包管理器安装。
yum install epel-release
yum install python-pip
pip install ipaddr
安装denyhosts,运行以下命令会将软件包安装到python2中的 site-package
目录中,,执行时需要root权限。
python setup.py install
修改守护进程脚本,在手动安装的时需要修改守护进程脚本,即 daemon-control-dist
文件,需要根据系统情况修改其中的配置项。以下是CentOS7对应的目录配置。
DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/etc/denyhosts.conf"
编辑配置文件
安装好denyhosts之后,它的默认配置文件为 /etc/denyhosts.conf
。该配置文件有很好的注释,对于每个配置项的作用都有很好的说明。可能需要修改的相关配置项有如下几个。
可以分别配置root用户、普通用户、无效用户用户名的尝试次数。
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 5
修改 SECURE_LOG
配置项,将其调整为如下配置。
SECURE_LOG = /var/log/secure
启动denyhosts
使用以下命令启动denyhosts,查看denyhosts的运行状态。
service denyhosts start
service denyhosts status
使用以下命令让denyhosts能够随系统自启动。
chkconfig denyhosts on
update: 2020-6-5
在手动安装时需要将守护进程脚本的软连接放在 /etc/init.d
目录中。
cd /etc/init.d
ln -s /usr/bin/daemon-control-dist denyhosts
如果系统中安装了 chkconfig
,可以用以下命令确保denyhosts会在开机时自动启动。
chkconfig --add denyhosts
使用fail2ban防止暴力破解
由于在默认的软件仓库中经常找不到denyhosts软件,所以我尝试切换到了fail2ban。fail2ban支持的功能更多,命令交互也更加友好。
安装fail2ban
使用自带的包管理器中安装fail2ban,命令行如下。
yum install fail2ban
编辑配置文件
安装包中自带的默认配置文件为 /etc/fail2ban/jail.conf
;为了防止由于软件更新导致配置文件被覆盖,推荐将用户配置保存在 /etc/fail2ban/jail.local
中;软件会先加载默认配置,再加载用户配置。
针对 ssh 登录服务的配置如下所示。需要注意的是如果修改了默认的ssh端口,则需要调整 port
对应的配置项;不同服务器的ssh登录记录的保存位置也可能不相同,需要根据实际情况修改 logpath
配置项。
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 10m
bantime = 1d
bantime.increment = true
bantime.factor = 1
ignoreip = 127.0.0.1
启动fail2ban
使用下面的命令启动fail2ban服务。
systemctl start fail2ban
service fail2ban start
使用下面的命令让fail2ban开机自动启动。
systemctl enable fail2ban
查看fail2ban的运行情况
查看系统服务的运行状态,命令如下:
systemctl status fail2ban
service fail2ban status
fail2ban提供了自带的命令工具,用于查看服务端的状态,命令如下:
fail2ban-client status
还可以插件具体某个规则的屏蔽情况,例如下面的命令就能够查看 sshd 的过滤情况。
fail2ban-client status sshd
加固sshd的配置
sshd的默认端口号为22,很多暴力破解程序会直接对该端口进行登录尝试,通过修改默认的sshd端口号,可以增加破解难度。
注意:在修改sshd端口号之后,自己使用shell工具登录服务器也需要对端口号进行修改。
由于所有Linux系统都必然有root用户,所以在暴力破解时最容易被攻击的就是root用户,可以通过禁用远程root用户登录的方式增加攻击难度。因为如果root用户可用,攻击者只需要对root用户的密码进行暴力破解;而禁用远程root登录后,攻击者需要同时猜测用户名和密码。
编辑配置文件
sshd的配置文件为 /etc/ssh/sshd_config
。
Port 22
这一行配置了端口号,将22改为需要的端口号。
PermitRootLogin yes
这一行配置了是否允许远程root用户登录,将配置由 yes
改为 no
即可。
重启sshd服务
更改配置文件后,需要重启服务使配置文件生效。
service sshd restart
注意:如果你正使用远程shell工具登录到服务器,重启sshd服务会使shell工具失去连接。
查看系统登录记录
last
指令能够查看登录成功的记录,记录保存位置为 /var/log/wtmp
。
lastb
指令能够查看登录失败的记录,记录保存位置为 /var/log/btmp
。
lastlog
指令能够查看用户的最近登录记录,记录保存位置为 /var/log/lastlog
。
通过查看登录失败的记录,能够判断出服务器是否有被暴力破解的记录。需要注意的是这两个命令均需要管理员权限才能够执行。
可以使用下列命令清除已经保存的登录记录。
- 清除登录成功的记录
echo > /var/log/wtmp
- 清除登录失败的记录
echo > /var/log/btmp
- 清除用户登录记录
echo > /var/log/lastlog