SaltyFish's Bowl

废了九牛二虎之力将自己的小博客搭起来了,结果服务器天天被炸。。。。
既然这样,那就进行一些安全设置,确保不会被炸掉

前言

前段时间发现学生主机真的好便宜,忍不住入手了一个。既然入手了,那就搭一个博客吧。废了老半天将博客搭建了起来,本以为只需要经常并不是写一下文章就可以了。结果ssh连上去发现ssh 22端口被炸了几千回。。。。
没有办法,只能采取一些措施了,防止哪天被爆破掉。。。
当然,用一个比较强的密码也是可以的,主要是记性不好再进行一下安全设置岂不是双倍的快乐?

主要采用的措施

  1. 创建一个git账户
  2. 分别为git 和root 账户设置不同的秘钥登录
  3. 只赋予git账户git权限
  4. 禁用账户的密码登录方式,只保留key登录方式
  5. 修改ssh 22端口为其他端口
  6. 启用HTTPS

开搞

创建git账户,只赋予git权限

  1. ssh上远程服务器,并执行以下命令来创建账户
1
2
3
4
5
6
## 在root账户下进行操作
useradd git
passwd git # 此处创建一个git账户的密码
mkdir /home/git
chown git:git -R /home/git
su git #切换为git账户进行操作

1

  1. 在git账户下创建blog.git

执行以下命令

1
2
3
4
5
mkdir ~/blog
cd ~/blog
git init --bare blog.git
echo "git --work-tree=/home/blog/www --git-dir=/home/git/blog/blog.git checkout -f" > blog.git/hooks/post-receive
chmod a+x post-receive
  1. 修改nginx的配置文件指向/home/git/blog/www

按下Ctrl+D,切换当前git账户为root账户,并修改nginx.conf的文件配置

1
2
# 不同的nginx安装方式可能nginx.conf的所在位置有所不同
vi /etc/nginx/nginx.conf

找到http项,在里面添加以下内容

1
2
3
4
5
server {
server_name xxxx.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/git;
}

分别为git和root账户添加不同的密钥

  1. 创建git账户的密钥

创建git账户的话可以不在秘钥中添加密码,以实现免密码同步
在本地计算机上打开终端,依次执行以下命令

1
2
3
4
5
ssh-keygen -t rsa -C xx@xx.com  # 你的GitHub邮箱~~也可以任意内容~~
# 之后连续按3次回车,保存秘钥文件,文件默认在`~/.ssh/`下
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
scp ~/.ssh/id_rsa.pub git@xxxxx:~/.ssh # xxxxx 为你的服务器地址

使用root账户ssh连接到远程服务器,执行以下命令

1
2
3
4
5
su git 
cd ~/.ssh/
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
cd .. && chmod 700 .ssh/

4

  1. 创建root秘钥

处于保险起见,我们为root账户再次创建一个秘钥,这次再秘钥中添加上密码,以保证安全

将当前git账户切换为root账户,然后执行以下命令

1
2
3
4
5
6
7
8
9
cd ~
ssh-keygen
# 第一次回车,选定秘钥存放位置,保持默认即可
# 第二三次回车,设置&&确认创建的秘钥的密码
cd .ssh
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
cd .. && chmod 700 .ssh
cat .ssh/id_rsa

5

将id_rsa的文件内容复制到本地,保存为key并设置权限为600

  1. 禁用密码登录并开启密钥登录

在root账户下执行以下命令

1
vi /etc/ssh/sshd_config

修改 PasswordAuthentication 项为NO并去掉前方#号

22

保存并退出,重启ssh服务

1
/etc/init.d/ssh restart

此时断开连接,再次登录会发现只能使用密钥登录了

注意:强烈建议先启用密钥登录,断开连接并使用密钥登录成功后再关闭密码登录不要问我为什么强烈建议这么干

只赋予git账户git的权限

使用root连接上远程服务器,修改passwd文件

1
vi /etc/passwd

将git后面的shell更改为/usr/bin/git-shell

jkl

保存并退出,此时输入切换git账户会报错并无法切换

报错是正常现象,不用担心

sd

修改ssh默认22端口为其他端口

  1. 在远程服务器上修改sshd_config文件
1
vi /etc/ssh/sshd_config
  1. 修改port为其他端口,端口号大于10000都可以

jklkl

  1. 重新启动ssh服务
1
/etc/init.d/ssh restart
  1. 重新断开连接,会发现使用ssh无法使用22端口登录,需要改为当前设定端口我号要没了

如果修改失败并且无法登录了,可通过服务器管理网页上的vnc连接来重复上述步骤进行修改 再次不要问我为什么知道

hexo中的配置

修改 _config.yml,添加以下内容

1
2
3
4
5
6
#  aaaa为你的服务器地址,bbbb为你的设置的端口号
deploy:
type: git
repo:
server: ssh://git@aaaa:bbbb/home/git/blog/blog.git
branch: master

das

这样就可以执行hexo d 将本地文件推动到远程服务器上了

启用https登录

HTTPS证书的话免费的有很多,在这里以使用Let’sEncrypt为例

Let‘s Enycrypt 的https的证书可以在 这个网站这里按照提示快速安装,这里以nginx Ubuntu16.04 LTS为例

  1. 在上述网站选择合适的系统类型,这里选择nginx、Ubuntu 16.04 LTS 并确定

zcas

  1. 点击确定,稍后的页面会给出安装的命令,复制到远程的服务器上运行即可

  2. 然后执行以下命令进行自动安装

1
certbot --nginx

自动安装后再次访问主页面即可发现网页已经启用https了

  1. 启动https证书的自动续期

执行以下命令

1
certbot renew --dry-run

后记

折腾了一大堆,安全措施差不多就ok,当然,最保险的还是定期更换一下,以保证不会被黑掉

折腾的过程真的掉头发,想想下面该写点什么

我爱单片机,单片机使我快乐


扫码领红包

 评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题 , 总访问量为 字数统计:26.6k。 载入天数...载入时分秒...