SSH是对常见登录服务(如 telnet、ftp、rlogin、rsh和rcp)的安全加密替代服务。强烈建议站点放弃旧的明文登录协议,使用SSH防止会话劫持和从网络嗅探敏感数据
SSH配置文件为/etc/ssh/sshd_config文件,一旦对SSH配置文件进行了更改,就必须运行以下命令重新加载sshd配置令SSH服务配置生效:
systemctl reload sshd
SSH支持两种不同且不兼容的协议:SSH V1 和 SSH V2。SSH V1 是最初的协议,存在安全问题,SSH V2是改进后更安全的协议。
SSH V1包含一些基本的漏洞,这些漏洞使会话易受中间人攻击。SSH V2 暂时未有安全影响。
编辑 /etc/ssh/sshd_config文件来设置如下所示参数:
Protocol 2
运行以下命令验证输出是否匹配:
grep "^Protocol" /etc/ssh/sshd_config
SSH1免费,SSH2收费
其实 SSH 并不只是在 Linux 和 Unix 下使用,他们同样在Windows NT下广泛使用。
相对于 Telnet,ssh 对传输内容加密并压缩。
使用SSH2又不想付费,那么一个可供选择的自由软件是Openssh,它是一个遵守GPL协议的软件包,同时支持SSH1及SSH2标准,可以从www.openssh.com下载。
SSH X11 Forwarding 参数提供了通过连接隧道X11来传输流量的功能,以启动远程图形连接。SSH X11 Forwarding 提供通过SSH连接并运行Linux上有GUI需要的程序的服务。
使用SSH X11 Forwarding 远程登录 X11 服务器的用户可能会受到X11 服务器上其他用户的攻击,这是一个小风险,除非有直接使用X11 应用程序的操作需求,否则建议禁用X11 Forwarding
编辑/etc/ssh/sshd_config文件来设置如下所示参数:
X11ForWarding no
运行以下命令验证输出是否匹配:
grep "^X11Forwarding" /etc/ssh/sshd_config
MaxAuthTries参数指定每个连接允许的最大身份验证尝试次数。当登录失败数量达到一半时,错误消息将被详细写入说明登录失败的syslog文件中。
MaxAuthTries控制SSH最大认证尝试次数,将MaxAuthTries参数设置为一个较低的值,可以将成功的暴力攻击SSH服务器的风险降到最低。
编辑/etc/ssh/sshd_config文件设置SSH MaxAuthTries参数为3到6之间:
MaxAuthTries 4
PermitRootLogin参数指定root用户是否可以使用ssh登录系统。
不允许通过root账户直接SSH登录,需要系统管理员使用自己的个人账户进行身份验证,然后通过sudo或su升级到root权限。这反过来增加了不可抵赖性的可能性,并在发生安全事件时提供了清晰的审计跟踪。
编辑 /etc/ssh/sshd_config文件来设置如下推荐参数:
PermitRootLogin no
检测方法:
运行以下命令验证输出是否匹配:
grep "^PermitRootLogin" /etc/ssh/sshd_config
PermitEmptypasswords参数指定SSH服务器是否允许使用空密码字符串登录账户。
不允许密码为空的账户进行远程SSH登录shell访问,可以降低对系统进行未经授权访问的可能性。
编辑 /etc/ssh/sshd_config文件来设置如下所示参数:
PermitEmptyPasswords no
运行以下命令验证输出是否匹配:
grep "^PermitEmptyPasswords" /etc/ssh/sshd_config
ClientAliveInterval 和 ClientAliveCountMax这两个选项控制ssh会话的超时时间和超时次数。ClientAliveInterval变量控制指定时间长度内没有活动的ssh会话终止。ClientAliveCountMax变量控制ssh最多允许在每个ClientAliveInterval上发送多少个客户端活动消息。当发送的客户机活动消息连续没有来自客户机的响应时,ssh会话终止。
没有与SSH会话连接关联的超时值,则可能允许未经授权的用户访问另一个用户的ssh会话(例如,用户离开计算机没有锁定屏幕)。设置超时值可以降低发送这种情况的风险。
编辑/etc/ssh/sshd_config文件,根据站点策略来设置,将ClientAliveInterval设置为 300 到 900,即5 - 15分钟,将ClientAliveCountMax设置为 0 - 3
ClientAliveInterval 300
ClientAliveCountMax 0
注意:所有设置,操作完毕后,要重启ssh服务器,systemctl reload sshd
运行以下命令验证输出是否匹配:
grep "^ClientAliveInterval" /etc/ssh/sshd_config
grep "^ClientAliveCountMax" /etc/ssh/sshd_config
LoginGraceTime 参数限制用户必须在指定的时限内认证成功。LoginGraceTime参数限制用户宽限期越长,可存在的未经身份验证的连接就越多。与此会话中的其他会话控件一样,宽限期应限于适当的组织限制,以确保服务可用于所需的访问。
LoginGraceTime参数设置为一个较低的数值,可以将成功的暴力攻击SSH服务器的风险降到最低。它还将限制并发的未经身份验证的连接的数量。
编辑 /etc/ssh/sshd_config文件来设置如下所示参数:
LoginGraceTime 60
运行以下命令验证输出的 LoginGraceTime 在1到60s之间:
grep "^LoginGraceTime" /etc/ssh/sshd_config
Avahi是一个免费由zeroconf实现,用于多播DNS / DNS-SD 服务发现的服务。Avahi允许程序发布和发现在本地网络上没有经过特定配置的运行服务和主机。例如,用户将计算机接入网络,Avahi会自动查找要打印的打印机,要查看的文件和要与之通话的人,和将在计算机上运行的网络服务。
系统功能通常不需要自动发现网络服务。建议禁用该服务以减少潜在的网络攻击。
1、运行以下命令验证avahi-daemon运行状态:
systemctl status avahi-daemon
2、运行以下命令禁用avahi-daemon,重启系统后生效
systemctl disable avahi-daemon.service
检测方法:
运行以下命令验证avahi-daemon在所有运行级别已列为"off"或不可用:
systemctl status avahi-daemon
同理,根据服务器需要和站点策略设置关闭其他服务:
1、CUPS服务:通过Unix打印系统(CUPS)提供了打印到本地和网络打印机的功能
2、NFS和RPC服务:网络文件系统(NFS)是UNIX环境中分布最广的文件系统之一。它使系统具有向其他服务器挂载文件系统的能力
3、FTP 服务:文件传输协议(FTP)为联网计算机提供传输文件的能力。
4、DNS服务:域名系统(DNS)是一种分层命名系统,它将名称映射到连接到网络的计算机,服务和其他资源的IP 地址。
5、Samba服务:Samba守护进程允许系统管理员配置他们的Linux系统共享文件系统和目录给Windows系统
为了保护数据不被泄露,可以使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。很多情况下限制用户使用USB可以用来保障系统安全和数据的泄露。
在Linux系统下,每个程序执行完毕都会返回一个退出码给调用者,一般情况下0表示成功,其他值表明有问题或者程序退出的特殊含义。/bin/true
选项让被设置程序什么都不做,只设置程序退出。
打开创建/etc/modprobe.d/CIS.conf
文件,然后将下行内容添加进去:
install usb-storage /bin/true
运行modprobe
命令验证USB设备被设置为/bin/true
,然后lsmod
命令无返回值确认USB设备探测已被禁用:
modprobe -n -v usb-storage
lsmod | grep usb-storage