云服务器改SSH端口,使用密钥对登录

一、问题

最近趁着有活动优惠购买了一台腾讯云服务器(CentOS 7 系统),在使用过程中发现总是有一些人在尝试登录我的服务器,几天时间没打理就有几万个尝试登录(如图),虽然我的服务器没有什么有价值的东西,但是天天被人搞,这怎么能忍,必须得做些防范措施。

我们做以下几个操作来防范:

  1. 第一、取消密码登录,使用密钥对登录
  2. 第二、修改ssh远程登录的端口
  3. 第三、定时扫描登录失败的IP,失败了一定的次数就把这个IP屏蔽拉黑

在这里插入图片描述

二、使用密钥对登录

2.1、生成密钥对

注意:此操作是在本地机器操作,并非云服务器

Windows生成SSH证书可以使用Git BashCygwin等工具来生成SSH密钥对。

Git Bash下载地址: https://gitforwindows.org/

以下是使用Git Bash生成 SSH证书 的步骤:

  • 打开 Git Bash(可以在Git for Windows安装目录下的“Git Bash Here”菜单中找到)
  • 在Git Bash中输入以下命令:git bash -c 'ssh-keygen -t rsa' ,生成SSH密钥对

这将生成一对公钥和私钥,默认情况下保存在 C:\Users\你的用户名\.ssh\id_rsaC:\Users\你的用户名\.ssh\id_rsa.pub文件中(注意:要改为你的windows用户名)。
私钥文件(id_rsa)需要妥善保管,不要泄露给他人。公钥文件(id_rsa.pub)可以用于配置免密码登录。

2.2、将公钥复制到远程服务器

这里要注意一个点,如果要用A用户登录云服务器,那么就要把公钥复制到云服务器A用户的家目录中,如果要用B用户登录云服务器,那么就要把公钥复制到云服务器B用户的家目录中,依此类推。
举个例子:
要以root用户登录,那么就要把公钥文件(id_rsa.pub)复制到/root/.ssh目录下
要以jack用户登录,那么就要把公钥文件(id_rsa.pub)复制到/home/jack/.ssh目录下

方式一:手动复制

第一步:以root用户为例,使用sftpscp等工具把公钥文件(id_rsa.pub)上传到云服务器的/root/.ssh目录下
第二步:在/root/.ssh目录中创建一个文件authorized_keys

$ touch authorized_keys

第三步:把公钥文件(id_rsa.pub)的内容写入到 文件authorized_keys

$ cat id_rsa.pub >> authorized_keys

第四步:修改文件authorized_keys的权限

$ chmod 600 authorized_keys
方式二:命令复制

可以借助GitBash 使用 ssh-copy-id 命令来完成此操作:

$ ssh-copy-id user@remote_host

命令说明:

  • user:云服务器上的用户名。
  • remote_host:云服务器的IP地址或域名。

此命令会提示您输入远程服务器用户的密码,并将公钥自动复制到远程服务器的~/.ssh/authorized_keys文件中。

2.3、修改SSH配置,禁用密码登录,使用密钥对登录

修改SSH配置文件

$ sudo vim /etc/ssh/sshd_config

设置使用密钥对登录,设置PubkeyAuthentication yes
在这里插入图片描述
禁用密码登录,设置PasswordAuthentication no
在这里插入图片描述
重启SSH服务

$ sudo systemctl restart sshd

使用ssh工具(xshell,final shell,putty等等)进行测试成功与否

到此,云服务器只能使用密钥对进行登录

三、改SSH端口

3.1、修改SSH服务的配置文件

修改SSH配置文件

$ sudo vim /etc/ssh/sshd_config

#Port 22 下新增一行 Port 新端口号。例如 Port 23456,如下图所示:
在这里插入图片描述
保存内容并退出

3.2 配置防火墙端口放行

CentOS 7 以前版本的 Linux 云服务器默认使用 iptables 服务作为防火墙。
CentOS 7 及以后版本的 Linux 云服务器默认使用 Firewalld 服务作为防火墙。

CentOS 6 配置 iptables 防火墙
放行新端口号为23456,则执行如下命令

$ sudo iptables -A INPUT -p tcp --dport 23456 -j ACCEPT

重启防火墙

$ sudo service iptables restart

CentOS 7 配置 Firewalld 防火墙
如果防火墙没有启动,则先启动

$ sudo systemctl start firewalld

放行新端口号为23456,则执行如下命令

$ sudo firewall-cmd --add-port=23456/tcp --permanent

设置防火墙服务开机自启

$ sudo systemctl enable firewalld

重启防火墙服务

$ sudo systemctl restart firewalld

3.3 腾讯云控制台配置防火墙端口

进入腾讯云控制台,选择你要操作的服务器
在这里插入图片描述
选择防火墙,删除默认配置的22端口规则
在这里插入图片描述
点击添加规则,增加一条新的规则,配置放行的端口
在这里插入图片描述
最后重启云服务器。以后ssh登录云服务器只能用新的端口了,22端口已经不能用了。

备注:虽然上面的操作是基于腾讯云进行操作,但是理论上所有的云服务器的操作都 是大同小异的,无论是阿里云,百度云,金山云等等,如果有不懂操作,查一下相应平台的文档。

四、屏蔽IP

4.1、屏蔽IP的基本原理

centos7用的是 firewall 添加单个黑名单只需要把ip添加到 /etc/hosts.deny,格式: sshd:$IP:deny
打开配置文件

vim /etc/hosts.deny

添加你要禁止的ip就可以了

sshd:192.168.1.123:deny

如果要以白名单的方式,那么设置配置文件 /etc/hosts.allow,格式如下:

sshd:1.1.1.1:allow
sshd:2.2.2.2:allow

4.2、编写脚本,定时屏蔽IP

多次失败登录即封掉IP,防止暴力破解的脚本,超过20次的就加到黑名单

1、编辑脚本

$ vim /usr/local/bin/secure_ssh.sh

脚本内容:

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
for i in `cat  /usr/local/bin/black.txt`
do
  IP=`echo $i |awk -F= '{print $1}'`
  NUM=`echo $i|awk -F= '{print $2}'`
   if [ $NUM -gt 20 ];then
      grep $IP /etc/hosts.deny > /dev/null
    if [ $? -gt 0 ];then
      echo "sshd:$IP:deny" >> /etc/hosts.deny
    fi
  fi
done

2、创建记录登录失败次数的文件

$ touch /usr/local/bin/black.txt

3、添加定时 10分钟执行一次
输入命令

$ crontab -e

在最后添加一行,然后保存退出(和vim的操作一样)

 */10 * * * * root  sh /usr/local/bin/secure_ssh.sh

重新启动crond服务

$ systemctl restart crond

设置开机自启动crond服务

$ systemctl enable crond

以上的操作完毕后,系统会每10分钟进行一次扫描,并将登录失败超过指定次数的IP给屏蔽。

五、总结

我们进行了三步操作,
第一步,关闭密码远程登录,使用密钥对登录,防止通过撞库的方式攻击
第二步,修改了默认的ssh登录端口,减少一些默认的攻击
第三步,通过IP拉黑,屏蔽某些IP的访问
经过以上三步操作,基本上可以将一些尝试登录你服务器的骚扰处理掉,经过我几天的测试,确实是没有了,整个世界都清静了。这些操作对于服务器来说,也只是一些初级入门的操作,对于商用的服务器要加强防护,还得找专业的运维人员,专业的人干专业的事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值