alex-wong

服务器在公网上难免会遇到端口暴力破解,通过 SSH 连接服务器时,可能会显示有几万个登陆失败。这篇文章简单介绍一下服务器 SSH 暴力破解的基本防护,让大家的服务器更加安全一些。

演示环境:基于 Centos 7 系统

主要从下面三个方向入手:

  1. SSH 密钥登陆,禁止密码登陆;
  2. 修改 SSH 默认端口,禁止 root 登陆;
  3. 使用 Fail2ban 等防护软件,自动封禁入侵 IP

SSH 密钥登陆,禁止密码登陆

SSH 密钥登录,就是 rsa 公钥放到服务器上,私钥放在客户端上,每次登录的时候,用密钥登录,这样更方便也更安全。

  1. 生成rsa密钥对
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:aa:bb:cc:dd:ee:ff username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|             ..                   |
|ooO+.o                     |
|             ..                   |
|          .  o.o               |
|        So  *..Eo          |
|       .. .o.o  =            |
|        ...+o ...             |
|        .o+ .+ .             |
|        .+  .                   |
+---------------------+

中间步骤直接回车即可,默认生成的密钥文件在root/.ssh目录下。
如果你想要使用密钥+密码双重验证登陆,在Enter passphrase这一步,输入你设置的密码。

  1. 检查下.ssh目录下authorized_keys文件是否存在,没有的话,创建一个,然后将id_rsa.pub的内容追加到authorized_keys文件尾
cd .ssh
touch authorized_keys
cat id_rsa.pub >> authorized_keys
  1. 修改.ssh的权限为700, authorized_keys的权限为600或者更严格的400,否则登录的时候会提示server refuse you key,
cd ..
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

修改下ssh的配置

vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

注意:保持远程服务器登录,先不要退出,避免后续发生配置错误时,无法登录远程服务器。
在密钥登录设置成功之后,方可将PasswordAuthentication 设置为no,禁用密码登录了。

最后将私钥文件id_rsa拷贝到你的客户端,在终端登陆是加上-i 私钥文件id_rsa路径,例如ssh root@192.168.1.1 -i /Users/User/Documents/key/id_rsa.key

在 Transmit 客户端登陆是,点击小钥匙导入密钥。

屏幕快照 2018-10-18 下午9.17.39

修改 SSH 默认端口,禁止 root 登陆;

修改 SSH 默认端口
vim /etc/ssh/sshd_config
Port 22中的22改为65534以下任意数字,同时开启端口防火墙。
重启ssh服务:/etc/init.d/sshd restart

禁止 root 登陆
新建一个用户并设置密码,例如yalv

useradd yalv
passwd yalv 
vim /etc/ssh/sshd_config 

PermitRootLogin yes 改成no,并重启SSH服务。

使用 Fail2ban 等防护软件,自动封禁入侵 IP

如果你使用的是lnmp一键包,自带有 Fail2ban 等防护软件。

cd /root/lnmp1.5/tools
./fail2ban.sh 
#或者使用denyhosts
./denyhosts.sh 

十分方便,如果手动安装的话,参考GitHub的文档