一、sshd_config文件说明

sshd_config 是 OpenSSH SSH 服务器守护进程配置文件,主要用于设置ssh server服务的相关参数,包括监听地址、监听端口、允许验证次数、是否允许root账户登录等等。sshd服务从/etc/ssh/sshd_config(或命令行中用-f指定的文件)读取配置数据。该文件包含关键字参数对,每行一对。以“#”开头的行和空行被解释为注释。参数可以用双引号(“)括起来,以表示包含空格的参数。改配置文件,只有root账户或者拥有root权限的账户可以配置和修改,配置文件修改后,重启sshd服务后参数生效。

二、使用实践

1、修改默认监听端口

ssh server服务默认监听端口为22,为了系统安全,我们可以修改默认端口号。对应参数为Port,默认值为22,我们可以根据规划设置为指定端口。

[root@s142 ~]# cd /etc/ssh/
[root@s142 ssh]# vim sshd_config
…
Port 22222
…
[root@s142 ssh]# systemctl restart sshd
[root@s142 ssh]# netstat -tnpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22222 0.0.0.0:* LISTEN 15808/sshd

2、指定监听地址

  如果服务器有多个网卡,我们只希望在某网卡提供sshd服务,则我们可以设置监听地址。

[root@s142 ssh]# vim sshd_config
…
ListenAddress 192.168.0.142
…
[root@s142 ssh]# systemctl restart sshd
[root@s142 ssh]# netstat -tnpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.0.142:22222 0.0.0.0:* LISTEN 15819/sshd
…

3、禁止root账户登录

  centos是默认运行root登录的,Ubuntu是默认禁止root登录的。如果我们需要禁止root账户登录,可以通过设置参数PermitRootLogin no,重启sshd服务后可以达到禁止root账户登录的目的。

[root@s142 ssh]# vim sshd_config
…
PermitRootLogin no
…

4、设置每个连接最大允许的认证次数

  MaxAuthTries,指定每个连接最大允许的认证次数。默认值是 6 。如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。

[root@s142 ssh]# vi sshd_config
…
MaxAuthTries 2
…
…[root@s142 ssh]# ssh wuhs@192.168.0.142 -p 22222
wuhs@192.168.0.142’s password:
Permission denied, please try again.
wuhs@192.168.0.142’s password:
Received disconnect from 192.168.0.142 port 22222:2: Too many authentication failures
Authentication failed.

5、设置Banner语

  设置登录前的横幅语,默认是空。Banner参数后参数值为路径及文件名。

[root@s142 ssh]# vi sshd_config
…
Banner /tmp/hi
…
[root@s142 ssh]# systemctl restart sshd
[root@s142 ssh]# cat /tmp/hi
欢迎登陆s142
[root@s142 ssh]# systemctl restart sshd
[root@s142 ssh]# ssh wuhs@192.168.0.142 -p 22222
欢迎登陆s142
wuhs@192.168.0.142’s password:

6、登录后显示上次登录信息

  PrintLastLog参数控制是否显示上一次登录信息,默认是yes,即显示。通过登录信息我

们可以了解上一次是否登录成功或者失败,会显示上一次登录的IP地址。这个信息有利有弊,

利是可以显示上一次登录信息记录,如果显示陌生地址登录失败,说明有人在尝试登录服务器。

弊端自然就是会暴露一些你实际的使用源地址信息。

Last failed login: Mon Sep 19 16:38:42 CST 2022 from s142 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Sep 19 16:38:25 2022 from 192.168.0.32

三、sshd_config配置文件参数说明

1、常见参数说明

  实际上sshd_config参数除了如下表格中,还有很多,只是我们大部分我们都使用默认值即可。如果想了解每个参数的用途和说明,我们可以使用man sshd_config命令进行查看。

2、相关重要文件说明

~/.ssh/known_hosts文件

ssh 会把每个你访问过的计算机的公钥(public key)都记录到~/.ssh/known_hosts文件中,

当你下次访问该计算机时,openss会核对公钥。如果公钥不同,那openssh就会发出警告,避

免你收到DNSHijack等攻。

/etc/host.allow和/etc/hosts.deny

这两个文件时控制远程访问设置的,通过该设置可以允许或者拒绝某个ip或者ip段访问linux的

某项服务。我们可以用于限制访问服务器sshd服务的源地址,host.allow文件对应白名单,

hosts.deny文件对应黑名单。

3、sshd_config配置文件验证

  我们可以使用sshd -t命令验证配置文件语法是否正确,如果配置文件中语法错误会有提示,我们根据提示修改配置文件即可。

[root@s142 ~]# sshd -t
/etc/ssh/sshd_config: line 15: Bad configuration option: semanage
/etc/ssh/sshd_config: terminating, 1 bad configuration options

四、sshd_config其他说明

1、检查项目 : 设置密码失效时间

加固建议: 在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间,如 PASS_MAX_DAYS 90。需同时执行命令设置root密码失效时间: chage –maxdays 90 root。

2、检查项目 : 设置密码修改最小间隔时间

加固建议: 在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为5-14之间,建议为7:

 PASS_MIN_DAYS 7 需同时执行命令为root用户设置:

 chage –mindays 7 root

3、检查项目 : 密码复杂度检查

加固建议: 1、安装PAM的cracklib模块,执行命令: apt-get update&&apt-get install libpam-cracklib 2、编辑/etc/pam.d/common-password,在”password requisite pam_cracklib.so”开头的这一行配置minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中的3类或4类)设置为3或4,即在行末尾加上参数minclass=3;在”password [success=1 default=ignore] pam_unix.so”开头的这一行增加配置minlen(密码最小长度)设置为9-32位,建议为9,即在行末尾加上参数minlen=9

4、检查项目 : 检查密码重用是否受限制

加固建议: 编辑/etc/pam.d/common-password,在”password [success=1 default=ignore] pam_unix.so”开头的这一行增加配置remember设置为5-24之间,建议为5,即在行末尾加上参数remember=5

5、检查项目 : 禁止SSH空密码用户登录 

加固建议: 在/etc/ssh/sshd_config中取消PermitEmptyPasswords no注释符号#

6、检查项目 : 确保SSH MaxAuthTries设置为3到6之间

加固建议: 在/etc/ssh/sshd_config中取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,建议为5:MaxAuthTries 5

7、检查项目 : 设置SSH空闲超时退出时间

加固建议: 编辑/etc/ssh/sshd_config,将ClientAliveInterval 设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0。

 ClientAliveInterval 300

 ClientAliveCountMax 0

8、检查项目 : 确保SSH LogLevel设置为INFO

加固建议: 编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):

 LogLevel INFO

9、检查项目 : 设置用户权限配置文件的权限

加固建议: 执行以下5条命令

 chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow

 chmod 0644 /etc/group 

 chmod 0644 /etc/passwd 

 chmod 0400 /etc/shadow 

 chmod 0400 /etc/gshadow

10、对应以上建议相关修改:

1.sudo vi /etc/login.defs

PASS_MAX_DAYS   90

PASS_MIN_DAYS   7

PASS_WARN_AGE   10

2.设置

sudo chage --maxdays 90 root

sudo chage --mindays 7 root

sudo apt-get update&&sudo apt-get install libpam-cracklib

3.sudo vi /etc/pam.d/common-password

password        requisite                       pam_cracklib.so retry=3 minlen=8 difok=3 minclass=3

password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 minlen=9 remember=5

4.sudo vi /etc/ssh/sshd_config

MaxAuthTries 5

ClientAliveInterval 900

ClientAliveCountMax 0

PermitEmptyPasswords no

LogLevel INFO

5.sudo chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow

sudo chmod 0644 /etc/group 

sudo chmod 0644 /etc/passwd 

sudo chmod 0400 /etc/shadow 

sudo chmod 0400 /etc/gshadow

参考: