新购VPS SSH安全措施备忘

年前买了个VPS,一个月不到就被d了,换IP,没到两天又挂,遂放弃,换了家毛子的。无论美国还是俄罗斯的VPS,都发现暴力破解root密码的信息,如果不是黑客猖獗想找肉鸡,就是可能我用的某些脚本有后门。总之,服务器的ssh安全配置必须得做。

MOTD上的非法尝试登录提示:

There were 120 failed login attempts since the last successful login

tips:配置SSH一定要谨慎,最好VPS买完就改,这样万一出错,重置服务器也不心疼。另外运营商或许会提供网页版的控制台(VNC),如果出错,可以试试在那边恢复。

1. 修改SSH默认端口

改ssh默认的22端口本来是很简单的,但由于ssh登录涉及系统安全,所以要把SELinux(Centos7内置的安全子系统)和Firewalld(Centos7的防火墙)的ssh端口都改一下。其实你也可以选择关闭SElinuxFirewalld来改端口,不过既然本文是为了加强VPS安全性,这种本末倒置的操作就不提了。

下面以22端口改为2200端口为例,讲下操作。

=== 查看SELinux是否运行 ===
[root@localhost ~]# getenforce

=== 如未启用(返回Disable),启用SELinux ===
[root@localhost ~]# nano /etc/selinux/config
# 配置SELINUX项为enforcing,然后重启
SELINUX = enforcing
[root@localhost ~]# reboot

=== 安装SElinux管理器 ===
[root@localhost ~]# yum -y install policycoreutils-python

=== 为SELinux添加ssh的2200端口 ===
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 2200

=== 查查看SElinux修改好没  ===
[root@localhost ~]# semanage port -l | grep ssh

=== 测试是否开启了防火墙(running/not runing)===
[root@localhost ~]# firewall-cmd --state

=== 如未开启,开启firewalld ===
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl enable firewalld

=== 查看firewalld运行状态 ===
[root@localhost ~]# systemctl status firewalld

=== 开启防火墙的2200端口 ===
[root@localhost ~]# firewall-cmd --zone=public --add-port=2200/tcp --permanent

=== 更新防火墙 ===
[root@localhost ~]# firewall-cmd --reload

=== 列出防火墙端口,看是否有ports: 2200/tcp ===
[root@localhost ~]# firewall-cmd --list-all

=== 修改ssh配置文件,===
[root@localhost ~]# nano /etc/ssh/sshd_config
# 找到Port 22,取消注释并改成Port 2200
Port 2200

=== 尝试重启SSH服务 ===
[root@localhost ~]# systemctl restart sshd

=== 查看SSH运行状态 ===
[root@localhost ~]# systemctl status sshd

返回 active (running)表示成功,不成功的话检查配置然后重试。

PS:还有优雅一点的开防火墙方法(修改ssh服务)

===开放ssh服务,添加2200端口===
[root@localhost ~]# firewall-cmd --add-service=ssh --permanent 
[root@localhost ~]# firewall-cmd --service=ssh --add-port=2200/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

2. 禁止root登录

  • 关闭普通用户的su功能
=== 添加新用户foo,并设定密码 ===
[root@localhost ~]# adduser foo
[root@localhost ~]# passwd foo

=== 禁止非wheel组用户使用su命令 ===
[root@localhost ~]# nano /etc/pam.d/su
# 去下面这行的注释(#),注意不是有trust那行 
auth required pam_wheel.so use_uid

=== 切换到foo用户 ===
[root@localhost ~]# su foo

=== 测试foo用户权限 ===
[foo@localhost ~]$ su
su: Permission denied
[foo@localhost ~]$ sudo nano XXX
foo is not in the sudoers file.  This incident will be reported.
  • 开启foo用户su到root的功能
=== 退出foo用户,回到root用户 ===
[foo@localhost ~]$ exit 
[root@localhost ~]# 

=== 将foo用户加入wheel组 ===
[root@localhost ~]# usermod -G wheel foo

=== 再次测试foo用户权限 ===
[root@localhost ~]# su foo
[foo@localhost ~]$ su 
[foo@localhost ~]$ sudo nano XXX 
[foo@localhost ~]$ exit
  • 确定foo用户可以密码登录以后,禁止root用户登录
=== 禁止root用户登录 ===
[root@localhost ~]# nano /etc/ssh/sshd_config

=== 去掉PermitRootLogin注释,并将yes改成no ===
PermitRootLogin no

=== 重启ssh ===
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# systemctl status sshd

3. 设置免密登录

  • Mac/linux(以下操作,除非说明均指本地机)
== 生成一对密钥(假设名字为key.vps) ===
ssh-keygen -t rsa -f key.vps

=== 将公钥发送到服务器 ===
ssh-copy-id -i ./key.vps.pub -p 2200 foo@host_ip

=== 设置快捷登录 ===
nano ~/.ssh/config
# 指定服务器登录方式和使用的私钥
host VPS_NAME
Hostname host_ip
Port 2200
User foo
IdentityFile ~/.ssh/key.vps

=== 无密码登录服务器 ===
ssh VPS_NAME
  • Windows

Windows没有内置ssh,都是用putty之类的ssh终端软件,下面以我常用的Bitvise SSH Client为例子讲讲Windows的SSH免密登录。

  1. 打开Bitvise SSH Client,点击打开Client key manager
新购VPS SSH安全措施备忘_第1张图片
Bitvise SSH Clien
  1. 点击Generate New(生成Key)然后Export(导出)
新购VPS SSH安全措施备忘_第2张图片
Client key manager
  1. 选择OpenSSH格式,公钥私钥都导出一次
新购VPS SSH安全措施备忘_第3张图片
Expor
  1. 打开导出的公钥文件(后缀名为*.pub),复制所有文本
  2. 登录服务器,把文本粘贴到~/.ssh/authorized_keys文件中,如果服务器没有这个文件/文件夹,那就新建出来再粘贴。
=== 创建 ~/.ssh/文件夹和下面的authorized_keys文件 ===
[foo@localhost ~]$ mkdir .ssh
[foo@localhost ~]$ cd .ssh
[foo@localhost .ssh]$ nano authorized_keys

=== 设置正确权限 ===
[foo@localhost ~]$ sudo chmod 700 ~/.ssh
[foo@localhost ~]$ sudo chmod 600 ~/.ssh/authorized_keys
  1. 退出服务器,把登录的Initial method改成publickey,Client Key 下拉菜单选择刚才生产的那个Key(默认叫Profile 1),然后就可以实现免密登录了。
新购VPS SSH安全措施备忘_第4张图片
vps4.png

PS:如果拷贝了公钥仍然不能免密登录,请检查SSH配置

[foo@localhost ~]$ sudo nano /etc/ssh/sshd_config
# 下面两项均要为YES
RSAAuthentication yes
PubkeyAuthentication yes

4. 禁止密码登录

当可以成功使用foo用户免密登录以后,设置禁止密码登录

=== 禁止密码登录 ===
[foo@localhost ~]$ sudo nano /etc/ssh/sshd_config

=== 取消PasswordAuthentication注释,并将yes改成no === 
PasswordAuthentication no

=== 重启ssh并查看状态 ===
[foo@localhost ~]$ sudo systemctl restart sshd
[foo@localhost ~]$ sudo systemctl status sshd

-FIN-

你可能感兴趣的:(新购VPS SSH安全措施备忘)