以前也写过一篇文章叫做购买 VPS 之后需要做的事情 其中也提到了一些安全设置来确保 VPS 的安全性,但是那篇文章更多的集中于设置和配置。那这篇文章就集中总结归纳一下需要特别注意的安全问题。

保持系统更新

经常检查系统更新,尤其是出现重大安全问题时一定更新到最新的系统,以 Debian/Ubuntu/LinuxMint 为例

apt-get update
apt-get upgrade

SSH 端口和登录

SSH 默认使用 22 端口,我们和 VPS 打交道用的最多的就是这一个端口,修改 /etc/ssh/sshd_configPort 的设置,修改为其他端口,然后使用

ssh -p <the port you set> name@server.ip

来指定端口访问,虽然修改为非默认端口也避免不了被扫描出来,但概率要稍微低一点。

推荐使用公钥、私钥来登录 VPS,在本机 ssh-copy-id name@server.ip 将本地公钥拷贝 到远程 ~/.ssh/authorized_keys 文件中

禁止 root 账户 SSH 登录

限制 root 账户登录 SSH 同理,修改 /etc/ssh/sshd_configPermitRootLogin 值改为 no。注意之前先新建可用账户,然后再禁用 root 登录。

adduser [nickname_you_want]
adduser [nickname_you_want] sudo        # 或者 visudo

禁止密码登录

通过上面的命令生成公私钥之后,可以取消密码登录,编辑 /etc/ssh/sshd_config 然后修改:

PasswordAuthentication no

然后重启 ssh 服务:

sudo /etc/init.d/ssh restart

开启登录失败次数

/etc/ssh/sshd_config 中增加:

MaxAuthTries 6

然后重启 ssh。

禁用 ping

不响应 ping,修改 /proc/sys/net/ipv4/icmp_echo_ignore_all 文件,0 为允许,1 为禁止

# 禁止 ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# 允许 ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

限制账号多重登录

编辑 /etc/security/limits.conf 添加配置:

*               hard    maxlogins       2

安装 fail2ban

Fail2ban 是一个能够保护 SSH 等常用端口暴力破解的工具

sudo apt install fail2ban

项目的配置地址在 /etc/fail2ban/ 目录下。

  • fail2ban.conf 文件是 fail2ban 软件配置,包括日志级别,日志位置,PID 等等
  • jail.conf 则是关于功能配置,包括默认禁止登录时间,允许重复登录次数,白名单,邮件等等

其中可以找到一个 jail.conf 的配置文件,该文件可能在升级时被覆盖,所以可以拷贝一份 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 来编辑 local 文件,fail2ban 配置文件优先级:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf,按字母顺序排列
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local,按字母顺序排列

编辑 /etc/fail2ban/jail.local

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 123.45.67.89

# "bantime" is the number of seconds that a host is banned.
bantime  = 31536000            ; 1 year

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
maxretry = 3

更多的配置可以参考这篇文章

fail2ban 的日志可以在 /var/log/fail2ban.log 查看。

如何查看日志

当你发现服务器有异常请求时,如何查看服务器用户登录日志。首先查看当前服务器登录的用户

w

使用该命令可以查看当前连接在线的用户,然后使用

last

来查看过去一段时间的登录用户,包括登录用户名,登录 IP,登录时间,时长等等。如果发现异常等级即使处理。

然后检查 sudo less /var/log/auth.log 文件查看登录日志。

reference