Preface
在上个月月底的时候,阿里云通知我服务器在美国被异地登陆了,今天有时间整理了一些关于服务器安全的设置。
Locate the Matter
当时我正好在用服务器,感觉异常的卡,用
htop
监控程序查看发现cpu正在被两个一样的进程100%占用,Command是/usr/sbin/ApacheX
,去目录下找了下,没有该脚本,网上搜了也没该进程的信息。现在看来应该是黑客伪造的查看日志,
vi /var/log/auth.log
,发现下面几行很奇怪,我平时都是用ssh连接服务器的,正常应该是这样的
居然被人用密码登录了,一查IP,果然是美国的。当初测试切换用户时嫌麻烦修改了密码,直接用的root,被人试出来了。
Solve
执行
passwd
修改密码,不加参数默认当前用户,加参数指定用户修改ssh配置文件sshd_config,友情提示修改配置时开启多个窗口,以免登不上去还能用别的窗口修改回来
1
vi /etc/ssh/sshd_config
修改ssh端口,为防止黑客暴力破解22端口
1
Port xxx
Tips
- 现在你需要使用
ssh {user}@{IP} -p {port}
来登录你的服务器。如果觉得麻烦,可以!ssh
执行上一次的ssh命令,或者history | grep ssh
粘贴命令。 - 传输文件时使用
scp -P {port}
来指定端口。scp(secure copy)通过ssh端口就行加密传输。 - ssh_config是针对客户端的配置文件,sshd_config是针对服务器端的配置文件,服务器后台运行的也是sshd守护进程(Daemon)。
启用ssh密钥认证,指定密钥存放路径
1
2
3RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /root/.ssh/authorized_keys /home/s1mple/.ssh/authorized_keys禁用密码登录,只允许ssh登录
1
2
3PasswordAuthentication no
UseLogin no
PermitRootLogin yes另外,阿里云的服务器在你终端一段时间没有指令输入会断开,可以这样避免
1
ClientAliveInterval 30
每30s发送一个心跳包
修改完成后
service sshd restart
使配置生效
About SSH
SSH(Secure Shell)协议,专为远程登录会话提供安全性的协议,传输的数据都进行了加密。SSH提供两种级别的安全验证,第一种是基于口令的安全验证。第二种是基于密匙的安全验证,较之第一种不需要传输口令,但速度稍慢一些。
基于密钥的安全验证
客户端创建一对密钥,公钥存放在服务器上,当你想通过ssh远程连接服务器时进行公钥比对。如果一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端。客户端收到“质询”之后就可以用你的私钥解密再把它发送给服务器。
这个配对密钥类似Https协议中的对称密钥。是基于RSA算法的。
在本地执行
ssh-keygen
生成配对密钥,在你的~/.ssh
目录下会生成两个文件,id_rsa
私钥,id_rsa.pub
公钥。将公钥拷贝到服务器的
~/.ssh/authorized_keys
文件中给
authorized_keys
增加不可修改、删除的权限1
chattr +i authorized_keys