SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的 Telent(远程登录)、RSH(Remote Shell,远程执行命令)、RCP
(Remote File Copy,远程文件复制)等应用相比,SSH 协议提供了更好的安全性。
在 CentOS 7.3 系统中,OpenSSH 服务器由 openssh、openssh-server 等软件包提供
(默认已安装),并已将 sshd 添加为标准的系统服务。执行“systemctl start sshd”命令即可启动 sshd 服务,包括 root 在内的大部分用户(只要拥有合法的登录 Shell)都可以远程登录系统。
sshd 服务的默认配置文件是/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高 sshd 远程登录的安全性。
`
●sshd 服务使用的默认端口号为 22,必要时建议修改此端口号,并指定监听服务的具体IP 地址,以提高在网络中的隐蔽性。除此之外,SSH 协议的版本选用 V2 比 V1 的安全性要更好,禁用 DNS 反向解析可以提高服务器的响应速度。
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 22 监听端口为 22
ListenAddress 172.16.16.22 监听地址为 172.16.16.22
Protocol 2 使用SSH V2 协议
…… 略部分内容
UseDNS no 禁用DNS 反向解析
●特别要提醒一点:生产环境下有管理平面和数据平面,我们要监听管理平面,因为数据平面通道拥挤,你和一堆用户一起使用下,很容易就会被挤掉线
●安全加固设的IP地址是跳板机的IP地址
远程拷贝用的是22端口
●sshd 服务默认允许 root 用户登录,但在 Internet 中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全 Shell 环境后,根据实际需要使用 su 命令切换为 root 用户。
关于 sshd 服务的用户登录控制,通常应禁止 root 用户或密码为空的用户登录。另外, 可以限制登录验证的时间(默认为 2 分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。
[root@localhost ~]# vi /etc/ssh/sshd_config
LoginGraceTime 2m 登录验证时间为 2 分钟
PermitRootLogin no 禁止root 用户登录
MaxAuthTries 3 最大重试次数为 3
PermitEmptyPasswords no 禁止空密码用户登录
…… 省略部分内容
[root@localhost ~]# systemctl restart sshd
●当希望只允许或禁止某些用户登录时,可以使用 AllowUsers 或 DenyUsers 配置,两者用法类似(注意不要同时使用)。例如,若只允许 jerry、tsengyia 和 admin 用户登录,且其中 admin 用 户 仅 能 够 从 IP 地 址 为 61.23.24.25 的 主 机 远 程 登 录 , 则 可 以 在/etc/ssh/sshd_config 配置文件中添加以下配置
[root@localhost ~]# vim /etc/ssh/sshd_config
…… 省略部分内容
AllowUsers jerry tsengyia admin@61.23.24.25 多个用户以空格分隔
●密码验证:核对用户名、密码是否匹配
●密钥对验证:核对客户的私钥、服务端公钥是否匹配
[root@localhost ~]# vim /etc/ssh/sshd_config
PasswordAuthentication yes 启用密码验证
PubkeyAuthentication yes 启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys 指定公钥库文件
…… 省略部分内容
[root@localhost ~]# systemctl restart sshd
●当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较 高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则 两种方式都可启用。
通过 ssh 命令可以远程登录 sshd 服务,为用户提供一个安全的 Shell 环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数
[root@localhost ~]# ssh tsengyia@172.16.16.22
The authenticity of host '172.16.16.22 (172.16.16.22)' can't be established.
......
Are you sure you want to continue connecting (yes/no)? yes 接受密钥
......
tsengyia@172.16.16.22's password: 输入密码
[tsengyia@localhost ~]$ whoami 确认当前用户
tsengyia
●如果sshd 服务器使用了非默认的端口号(如 2345),则在登录时必须通过“-p”选项指定端口号
[root@localhost ~]# ssh -p 2345 jerry@172.16.16.22
●通过 scp 命令可以利用 SSH 安全连接与远程主机相互复制文件。使用 scp 命令时,除了必须指定复制源、目标之外,还应指定目标主机地址、登录用户,执行后根据提示输入验证口令即可
下载
[root@localhost ~]# scp root@172.16.16.22:/etc/passwd /root/pwd254.txt
root@172.16.16.22's password:
passwd 100% 2226 2.2KB/s 00:00
把172.16.16.22主机/etc/passwd 复制到本机的/root/pwd254.txt
上传
[root@localhost ~]# scp -r /etc/vsftpd/ root@172.16.16.22:/opt
root@172.16.16.22's password:
ftpusers 100% 125 0.1KB/s 00:00
user_list 100% 361 0.4KB/s 00:00
vsftpd.conf 100% 5030 4.9KB/s 00:00
vsftpd_conf_migrate.sh 100% 338 0.3KB/s 00:00
把本机的/etc/vsftpd/ 上传到172.16.16.22的/opt下
●通过 sftp 命令可以利用 SSH 安全连接与远程主机上传、下载文件,采用了与 FTP 类似的登录过程和交互式环境,便于目录资源管理
[root@localhost ~]# sftp tsengyia@172.16.16.22
Connecting to 172.16.16.22...
tsengyia@172.16.16.22's password: 输入密码
sftp> ls
sftp> put /boot/config-3.10.0-514.el7.x86_64 上传文件
Uploading /boot/config-3.10.0-514.el7.x86_64 to
/home/tsengyia/config-3.10.0-514.el7.x86_64
/boot/config-3.10.0-514.el7.x86_64 100% 103KB 68.0KB/s 00:00
sftp> ls
config-3.10.0-514.el7.x86_64
sftp> bye 退出登录
在 Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、HTTPD、OpenSSH 等
客户访问服务器时,TCP Wrappers会对数据进行过滤和控制
●方式1:通过tcpd程序对其他服务程序进行包装
●方式2:由其他服务程序调用libwrap.so.*链接库
访问控制策略的配置文件
l/etc/hosts.allow
letc/hosts.deny
●策略格式 : 服务程序列表:客户端地址列表
●服务程序列表
多个服务以逗号分隔,ALL表示所有服务
●客户端地址列表
◆多个地址以逗号分隔,ALL表示所有地址
◆允许使用通配符?和*
网段地址,如192.168.1.或者192.168.1.0/255.255.255.0
区域地址,如.benet.com
1.检查hosts.allow,找到匹配则允许访问
2.再检查hosts.deny,找到则拒绝访问
3.若两个文件中均无匹配策略,则默认允许访问
若只希望从 IP 地址为 61.63.65.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