废了九牛二虎之力将自己的小博客搭起来了,结果服务器天天被炸。。。。
既然这样,那就进行一些安全设置,确保不会被炸掉
前言
前段时间发现学生主机真的好便宜,忍不住入手了一个。既然入手了,那就搭一个博客吧。废了老半天将博客搭建了起来,本以为只需要经常并不是写一下文章就可以了。结果ssh连上去发现ssh 22端口被炸了几千回。。。。
没有办法,只能采取一些措施了,防止哪天被爆破掉。。。
当然,用一个比较强的密码也是可以的,主要是记性不好再进行一下安全设置岂不是双倍的快乐?
主要采用的措施
- 创建一个git账户
- 分别为git 和root 账户设置不同的秘钥登录
- 只赋予git账户git权限
- 禁用账户的密码登录方式,只保留key登录方式
- 修改ssh 22端口为其他端口
- 启用HTTPS
开搞
创建git账户,只赋予git权限
- ssh上远程服务器,并执行以下命令来创建账户
1 | ## 在root账户下进行操作 |
- 在git账户下创建blog.git
执行以下命令
1 | mkdir ~/blog |
- 修改nginx的配置文件指向/home/git/blog/www
按下Ctrl+D
,切换当前git账户为root账户,并修改nginx.conf
的文件配置
1 | # 不同的nginx安装方式可能nginx.conf的所在位置有所不同 |
找到http项,在里面添加以下内容
1 | server { |
分别为git和root账户添加不同的密钥
- 创建git账户的密钥
创建git账户的话可以不在秘钥中添加密码,以实现免密码同步
在本地计算机上打开终端,依次执行以下命令
1 | ssh-keygen -t rsa -C xx@xx.com # 你的GitHub邮箱~~也可以任意内容~~ |
使用root账户ssh连接到远程服务器,执行以下命令
1 | su git |
- 创建root秘钥
处于保险起见,我们为root账户再次创建一个秘钥,这次再秘钥中添加上密码,以保证安全
将当前git账户切换为root账户,然后执行以下命令
1 | cd ~ |
将id_rsa的文件内容复制到本地,保存为key并设置权限为600
- 禁用密码登录并开启密钥登录
在root账户下执行以下命令
1 | vi /etc/ssh/sshd_config |
修改 PasswordAuthentication 项为NO并去掉前方#号
保存并退出,重启ssh服务
1 | /etc/init.d/ssh restart |
此时断开连接,再次登录会发现只能使用密钥登录了
注意:强烈建议先启用密钥登录,断开连接并使用密钥登录成功后再关闭密码登录
不要问我为什么强烈建议这么干
只赋予git账户git的权限
使用root连接上远程服务器,修改passwd文件
1 | vi /etc/passwd |
将git后面的shell更改为/usr/bin/git-shell
保存并退出,此时输入切换git账户会报错并无法切换
报错是正常现象,不用担心
修改ssh默认22端口为其他端口
- 在远程服务器上修改sshd_config文件
1 | vi /etc/ssh/sshd_config |
- 修改port为其他端口,端口号大于10000都可以
- 重新启动ssh服务
1 | /etc/init.d/ssh restart |
- 重新断开连接,会发现使用ssh无法使用22端口登录,需要改为当前设定端口
我号要没了
如果修改失败并且无法登录了,可通过服务器管理网页上的vnc连接来重复上述步骤进行修改
再次不要问我为什么知道
hexo中的配置
修改 _config.yml,添加以下内容
1 | # aaaa为你的服务器地址,bbbb为你的设置的端口号 |
这样就可以执行hexo d 将本地文件推动到远程服务器上了
启用https登录
HTTPS证书的话免费的有很多,在这里以使用Let’sEncrypt为例
Let‘s Enycrypt 的https的证书可以在 这个网站这里按照提示快速安装,这里以nginx Ubuntu16.04 LTS为例
- 在上述网站选择合适的系统类型,这里选择nginx、Ubuntu 16.04 LTS 并确定
点击确定,稍后的页面会给出安装的命令,复制到远程的服务器上运行即可
然后执行以下命令进行自动安装
1 | certbot --nginx |
自动安装后再次访问主页面即可发现网页已经启用https了
- 启动https证书的自动续期
执行以下命令
1 | certbot renew --dry-run |
后记
折腾了一大堆,安全措施差不多就ok,当然,最保险的还是定期更换一下,以保证不会被黑掉
折腾的过程真的掉头发,想想下面该写点什么
我爱单片机,单片机使我快乐