服务器安全之SSH设置

引言

最近买了个VPS,搭了个shadowsocks,为了服务器安全,学习了下SSH安全设置。脑子不好使,还是记录下来比较好。
服务器:Centos 6 x86
本地:OS X 10.10.2

登陆服务器

命令行中输入ssh命令登陆服务器
格式:

ssh -p port name@ip

➜  ~  ssh -p 29381 root@45.73.15.91
root@45.73.15.91's password:
[root@chen ~]#

添加用户

为禁止ROOT用户登陆,先给服务器添加用户

useradd cc
passwd cc

服务器/home/目录下会生成一个cc的新目录

visudo

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
tommy   ALL=(ALL)     ALL

通过SSH公钥指纹登陆

使用cc用户在服务器/home/cc/下创建一个.ssh文件夹

[cc@chen ~]$ chmod 700 .ssh

切换到本机,将本机home目录下的.ssh文件夹中的公钥id_rsa.pub拷贝至服务器对应用户的.ssh下,重命名为authorized_keys

➜  ~  scp -P 29381 ~/.ssh/id_rsa.pub cc@45.73.15.91:~/.ssh/authorized_keys
cc@45.73.15.91's password:
id_rsa.pub                       100%  400     0.4KB/s   00:00

服务器端修改authorized_keys的权限

[cc@chen .ssh]$ chmod 600 authorized_keys
[cc@chen .ssh]$ ls -al
总用量 16
drwx------ 2 cc  cc   4096  7月 16 01:16 .
drwx------ 3 cc  cc   4096  7月 16 01:14 ..
-rw------- 1 cc  cc    400  7月 16 01:16 authorized_keys

接下来就可以以之前设置的cc用户名登陆了,不用密码哦

➜  ~  ssh -p 29381 cc@45.73.15.91
Last login: Thu Jul 16 01:25:20 2015 from 180.166.49.54
[cc@chen ~]$

为了偷懒,可以在~/.ssh/config中添加以下配置文件

Host bwg
    HostName 45.73.15.91
    User cc
    Port 29381

然后就可以这样登陆了

➜  ~  ssh bwg
Last login: Thu Jul 16 02:07:43 2015 from 180.166.49.54
[cc@chen ~]$

设置SSH安全

关于SSH安全基本在这2类文件中

  • /etc/ssh/sshd_config
  • /etc/hosts.allow, /etc/hosts.deny

SSH服务的配置文件位于/etc/ssh/sshd_config

# 禁止ROOT用户登陆
PermitRootLogin no
# 禁止空密码登陆
PermitEmptyPasswords no
# 禁用基于主机的身份验证
HostbasedAuthentication no
# 登录验证时间为2分钟
LoginGraceTime 2m
# 最大重试次数为6
MaxAuthTries 6
# 设置10分钟无操作自动掉线
ClientAliveInterval 600
ClientAliveCountMax 0

修改完不要忘了执行

service sshd restart

/etc/hosts.allow, /etc/hosts.deny这两个文件可以控制外部IP对本机服务的访问,
通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务,
如果两个文件的配置有冲突,以/etc/hosts.deny为准。

举例来说,你的 sshd 只想让本机以及区域内的主机来源能够登陆的话,那就这样做:

# vim /etc/hosts.allow
sshd: 127.0.0.1 192.168.1.0/255.255.255.0 192.168.100.0/255.255.255.0

# vim /etc/hosts.deny
sshd : ALL

基本格式如下:

只允许一些特定的host访问:

   ALL: .friendly.domain: ALLOW
   ALL: ALL: DENY

允许所有的hosts访问除了bad dimain:

   ALL: .bad.domain: DENY
   ALL: ALL: ALLOW

Reference

鸟哥的Linux私房菜

VPS安全之SSH设置@老高