📝理论讲解:
SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的Telent(远程登录)、RSH(Remote Shell,远程执行命令)、RCP(Remote Copy,远程文件复制)等应用相比、SSH协议提供了更好大的安全性。
OpenSSH服务器
在CentOS 7.3系统中,OpenSSH服务器openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl start sshd"命令即可启动sshd服务,包括root在内的大部分用户(只需要拥有合法的登录Shell)都可以远程登录系统。
sshd服务的配置文件默认位于/etc/ssh/ssd_config目录下,正确调整相关配置项,可以进一步提高SShd远程的安全性。
服务器监听选项
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。除此之外,SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。
[root@localhost ~]# vim /etc/ssh/sshd_config port 22 //监听端口为22 ListenAddress 192.168.10.22 //监听地址为192.168.10.22 Protocol 2 使用SSH V2版本 …… UseDNS no //禁用DNS反向解析 …… [root@localhost ~]# systemctl start sshd
用户登录控制
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍的做法如下:
先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
关于sshd服务的用户登录控制,通常应禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。
登录验证方式
对于服务器的远程管理,除了用户账号的安全控制以外,登录验证的方式也非常重要。sshd服务支持两种验证方式——密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用。
密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破-解)攻-击时防御能力比较弱。
密钥对验证:要求提供相匹配的密钥才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用时公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互式登录,在Shell中被广泛使用。
当密码验证、密钥对验证都启用时,服务器优先使用密钥对验证。对于安全性要求较高服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可以启用。
[root@localhost ~]# vim/etc/ssh/sshd_config PasswordAuthentication yes //启用密码验证 PubkeyAuthentication yes //启用密钥对验证 AuthorizedKeysFile .ssh/authorized_keys //指定公钥库文件 …… [root@localhost ~]# systemctl restart sshd
其中,公钥库文件用来保存多个客户端上传的公钥文本,以便与客户端本地的私钥文件进行匹配。关于密钥验证方式的使用,还涉及密钥对文件的创建、部署等操作
TCP Wrappers访问控制
在Linux系统中,许多网络服务针对客户端提供了访问控股之机制,如Samba、BIND、HTTPD、OpnSSH等。本文将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。
TCP Wrappers概述
TCP Wrappers将TCP服务程序" 包裹 "起来,代为监听TCP服务程序的端口,增加了uige安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序,如下图所示。TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。
对于大对数Linux发行版,TCP Wrappers是默认提供的功能。CentOS 7.2中是使用的软件包是tcp_wrappers-7.6-77.e17 .x86_64.rpm, 该软件包提供了执行程序tcpd和共享链接库文件libwrap.so.*,对应TCP Wrapper保护机制的两种实现方式——直接使用tcpd程序对其他服务器进行保护,需要运行tcpd; 由其他网络服务程序调用libwrap.so.\*链接库,不需要运行tcpd程序。
通常,链接库方式的应用要更加广泛,也更有效率。例如,vsftpd、sshd及超级服务器xinetd等,都调用了libwrap共享库(使用ldd命令可以查看程序的共享库)。
[root@localhost ~]#ldd /usr/sbin/sshd | grep "libwrap" libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb178fce000)
📢友情提示:
xinetd是一个特殊的服务管理程序,通常被称为超级服务器。xinetd通过在/etc/xinetd.d目录下为每个被保护的程序建立一个配置文件,调用TCP Wrappers机制来提供额外的访问控制保护。
TCP Wrappers的访问策略
TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。
策略的配置格式
两个策略文件的作用相反,但配置记录的格式相同,如下所示。
<服务程序列表>: <客户端地址列表>
服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分隔。
服务程序列表
服务程序列表可分为以下几类。
ALL:代表所有的服务
单个服务程序:如"vsftpd"
多个服务程序组成的列表:如"vsftpd,sshd"。
客户端地址列表
客户端地址列表可分为以下几类
ALL:代表任何客户端地址
LOCAL:代表本机地址
单个IP地址:如"192.168.4.4"
网络段地址:如"192.168.4.0/255/255/255/0"
以" . "开始的域名:如" .bdqn.com "匹配bdqn.com域中的所有主机。
以" . "结束的网络地址:如" 192.168.4. "匹配整个192.168.4.0/24网段、
嵌入通配符" * " " ? ":前者代表任意长度字符,后者仅代表一个字符,如" 10.0.8.2* "匹配以10.0.8.2开头的所有IP地址。不可与以" . "开始或结束的模式混用。
多个客户端弟子组成的列表:如" 192.168.1. ,172.16.16. ,.bdqn.com"。
访问控制的基本原则
关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则:首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;否则继续检查/etc/hosts.deny文件如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略,则允许访问。
TCP Wrappers配置实例
实际使用TCP Wrappers机制时,较宽松的策略可以是"允许所有,拒绝个别",较严格的策略是"允许个别,拒绝所有"。前者只需在hosts.deny文件中添加相应的拒绝策略就可以了;后者则除了在hosts.allow中添加允许策略之外,还需要在hosts.deny文件中设置"ALL:ALL"的拒绝策略。
例如,若只希望从IP地址为61.63.67的主机或者位于192.168.2.0/24网段的主机访问sshd服务,其他地址被拒绝,可以执行以下操作。
[root@localhost ~]# vi /etc/hosts.allow sshd:61.63.65.67,192.168.2.* [root@localhost ~]# vi /etc/hosts.deny sshd:ALL
📖实验配置与实现:
拓扑图:
推荐步骤:
安装 ssh 服务器端和客户端设置服务开机自动启动,配置身份验证的 ssh,保证 ssh 服务器的安全性禁止为空密码访问,将 ssh 服务器端口修改为 2222,在 ssh 服务器端创建 bob 和 tom 两个用户允许客户端 192.168.100.20 登录 bob 和 root 账户,禁止 tom用户通过 192.168.100.20 登录
配置免交互式身份验证 ssh,允许 Centos03 使用 root 用户和 alice 用户免交互式访问ssh 服务器端,配置访问控制阻止主机 192.168.100.30 访问 ssh 服务器
实验步骤:
一、安装 ssh 服务器端配置身份验证 ssh 限制用户访问
1、挂载系统盘安装服务
1) 挂载系统盘
2)安装服务器端和客户端
3)设置服务开机自动启动
2、创建验证账户配置密码
1)创建验证账户 bob、tom
2)设置密码
3、配置 SSH 服务器控制用户访问
1)修改 ssh 主配置文件
2)重启启动服务监听端口
4、验证配置账户密码 ssh 服务器端
1)允许 bob 通过 192.168.100.20 登录
2)禁止 tom 通过 192.168.100.20 登录
3)允许 root 通过 192.168.100.20 登录
二、配置免交互式身份验证 ssh,允许 Centos03 使用 root 用户和 alice 用户免交互式访问 ssh 服务器端,配置访问控制拒绝 192.168.100.30 访问 ssh 服务
1、修改 ssh 服务器支持免交互式验证
1)修改主配置文件
2)重新启动服务
2、配置客户端 root 用户免交互式验证
1)生成密钥对
2)上传公钥到远程访问服务器
3)验证使用 root 登录
2)切换到 alice 用户生成密钥对
3)上传公钥
4)alice 登录远程服务器
4、配置访问控制限制 192.168.100.30 主机访问 ssh 服务
1)配置访问控制
2) 验证远程管理无法访问