- 课程知识点
- OpenSSH远程管理
- TCP Wrappers访问控制
- 技术目标
- 掌握OpenSSH远程管理
- 掌握TCP Wrappers访问控制的应用与配置
- 课程内容
1、OpenSSH远程管理
1.1 配置OpenSSH服务端
1.1.1 配置OpenSSH配置文件
openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl status sshd.service"即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。
sshd服务的配置文件是:/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍一些最常用的配置项,关于sshd_config文件的更多配置可参考man手册。
1.1.2 服务监听选项
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。
# vim /etc/ssh/sshd_config
Port 22 监听端口为22
ListenAddress 192.168.10.1 监听地址为192.168.10.1
....... 省略内容
UseDNS yes 禁用DNS反向解析
...... 省略内容
# systemctl restart sshd
1.1.3 用户登录控制
sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。关于sshd服务的用户登录控制,通常就禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重次数,若超过限制后仍未登录则断开连接。
# vim /etc/ssh/sshd_config
LoginGraceTime 2m //登录验证时间
PermitRootLogin no //禁止root用户登录
MaxAuthTries 3 //最大重试次数
MaxSessions 10 //最大连接数
PermitEmptyPasswords no //禁止空密码用户登录
..... //省略内容
# systemctl restart sshd
如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。
【举例】 只允许stu1和stu2用户录,其中stu2用户仅能从IP地址为192.168.10.100的主机远程登录,配置如下:
vim /etc/ssh/sshd_config
..... //省略内容
AllowUsers stu1 stu2@192.168.10.100 //多个用户用空格隔开
systemctl restart sshd
1.1.4登录验证方式
对于服务器的管理,除了用户帐号的安全控制外,登录验证试也非常重要。sshd服务支持两种验证方式:密码验证和密钥对验证,可以设置只使用其中一种,也可以两种都用。
密码验证
以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。
密钥对验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大增强了远程管理的安全性。公钥(Public Key)与私钥(Privtae Key)的关系如下:
公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。
不能根据一个密钥来推算出另一个密钥。
公钥对外公开,私钥只有私钥的持有人才知道。
公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。
其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。如果要禁用密码验证,启用密钥对验证,修改配置文件如下:
# vim /etc/ssh/sshd_config
PasswordAuthentication no 禁用密码验证
PubkeyAuthentication yes 启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys 指定公钥库数据文件
..... 省略内容
# systemctl restart sshd
1.2 使用SSH客户端程序
在CentOS7系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等图形工具。
1.2.1 命令程序ssh、scp、sftp
(1)ssh远程登录
通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。
【举例】 以student用户远程登录到主机192.168.75.158
ssh student@192.168.75.158
Are you sure you want to continue connecting (yes/no)? yes 接受密钥
student@192.168.75.158's password: 输入密码
当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入"yes")后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts文件中。密码验证成功以后,就登录到目标服务器的命令行环境中了,就好像把客户机的显示器、键盘连接到服务器一样。
如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过"-p"选项指定端口号。
【举例】 以student用户远程登录到主机192.168.75.158的2345端口
ssh -p 2345 student@192.168.75.158
(2)scp远程复制
使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。
【举例】将远程主机的/etc/passwd文件复制到本机,
将本机的/var/log/复制到远程主机。
scp root@192.168.75.158:/etc/passwd /root/pwd11.txt
scp -r /var/log root@192.168.75.158:/logbak
(3)sftp介绍
sftp也叫安全ftp,通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,以更加安全的方式进行目录资源管理。
【举例】使用sftp远程登录,并进行文件上传与下载。
sftp student@192.168.75.158
1.2.2图形工具MobaXterm
MobaXterm是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。
安装并运行MobaXterm后,在Session Settings对话框中指定相关协议,并指定远程主机的IP地址、端口号等相关信息,然后单击OK,根据提示输入密码验证后即可成功登录目标主机。
1.2.3 配置SSH密钥对验证登录
方法一:在Linux客户端使用密钥对登录服务器
(1)在客户端创建密钥对
student@localhost log]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): //指定私钥位置
Enter passphrase (empty for no passphrase): //设置私钥短语
Enter same passphrase again: //确认所设置的短语
将公钥上传至服务器
[student@localhost ~]$ scp ~/.ssh/id_rsa.pub root@192.168.75.158:/tmp/
在服务器中导入公钥文本
mkdir -p /home/stu1/.ssh
cat /tmp/id_rsa.pub >> /home/stu1/.ssh/authorized_keys
ll
-rw-r--r--. 1 root root 411 12月 30 22:59 authorized_keys
配置sshd_config文件允许密钥对访问
PasswordAuthentication yes 密码验证
PubkeyAuthentication yes 密钥对验证
AuthorizedKeysFile .ssh/authorized_keys
客户端使用密钥对登录服务器
[student@localhost ~]$ssh stu1@192.168.75.158
方法二:在windows系统中使用putty实现密钥对登录服务器
(1)首先要用PuTTYgen 生成密钥对
(2)点击Save private key按钮,选择一个存放文件的路径并定义名称,点击"保存"
(3)复制公钥到Linux服务器
[root@aminglinux ~]# mkdir /root/.ssh 创建目录
[root@aminglinux ~]# chmod 700 /root/.ssh 更改这个目录的权限
[root@aminglinux ~]# vim /root/.ssh/authorized_keys 把公钥内容粘贴到这
个文件里并保存。
- 关闭SELinux
[root@aminglinux ~]# setenforce 0 暂时关闭SELinux 。
(5)设置Putty通过密钥登陆
2、TCP Wrappers访问控制
在Linux系统中,许多网络服务针对客户机提供了某种访问控制机制,如samba、BIND、Httpd、OpenSSH等,除此之外还有一种防护机制---TCP Wrappers(TCP封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。
2.1 TCP Wrappers概述
TCP Wrappers将其他的TCP服务程序"包裹"起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。TCP Wrappers的访问控制是基于TCP协议的应用服务。
相对于iptables防火墙访问控制规则,TCP Wrappers的配置更简单。但是TCP Wrappers也有两个缺点:第一,TCP Wrappers只能控制TCP协议的应用服务;第二,并不是所有基于TCP协议的应用服务都能接受TCP Wrappers控制。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。
2.2 TCP Wrappers 的访问策略
TCP Wrappers机制的保护对象为种网络服务程序,针对访问服务的客户机地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。
2.1.1 策略的配置格式
两个策略文件的作用相反,但配置记录的格式相同,如下所示:
<服务程序列表>:<客户机地址列表>
服务程序列表、客户机地址列表之间以冒号分隔,在每个表内的多个项之间以逗号分隔。
服务程序列表,可以分为以下几类:
ALL:代表所有的服务。
单个服务程序:如"sshd"。
多个服务程序组成的列表:如"sshd,vsftpd"。
客户机地址列表,可以分为以下几类:
ALL:代表任何客户机地址。
LOCAL:代表本机地址。
单个IP地址:如"192.168.75.158"。
网络地址段:如"192.168.75.0/255.255.255.0"。
以"."开始的域名:如".kgc.cn"匹配域中的所有主机。
以"."结束的网络地址:如192.168.75.匹配整个192.168.75.0/24网段。
嵌入通配符"*""?":前者代表任意长度字符,后者仅代表一个字符,如"10.0.8.2*"匹配以10.0.8.2开头的所有IP地址。不可与以"."开始或结束的模式混用。
多个客户机地址组成的列表:如"192.168.1.,172.17.17.,.kgc.cn"。
2.2.2 访问控制的基本原则
关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则:
首先检查/etc/hosts.allow文件,如果匹配则允许访问;
否则继续检查/etc/hosts.deny文件,如果匹配则拒绝访问;
如果上述两个文件都没有匹配,则允许访问。
2.2.3TCP Wrappers配置实例
实际应用TCP Wrappers机制时,较宽松的策略可以是"允许所有,拒绝个别",只在hosts.deny文件中添加拒绝策略就可以了。较严格策略是"允许个别,拒绝所有",除了在hosts.allow中添加允许策略外还需要在hosts.deny文件中设置"ALL:ALL"的拒绝策略。
【举例】 只允许61.63.65.67的主机或者位于192.168.2.0/24网段的主机访问sshd服务,拒绝其他地址。
vim /etc/hosts.allow
sshd:61.63.65.67,192.168.2.*
vim /etc/hosts.deny
sshd:ALL