美文网首页
新购VPS SSH安全措施备忘

新购VPS SSH安全措施备忘

作者: 乜明 | 来源:发表于2018-03-05 16:21 被阅读0次

    年前买了个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
    Bitvise SSH Clien
    1. 点击Generate New(生成Key)然后Export(导出)
    Client key manager
    1. 选择OpenSSH格式,公钥私钥都导出一次
    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),然后就可以实现免密登录了。
    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安全措施备忘

          本文链接:https://www.haomeiwen.com/subject/xwphfftx.html