ssh服务的最佳实践方案:
1.更换服务端口,不要使用默认的22号端口;
2.禁止使用sshv1;
3.合理的设置登陆用户的黑名单和白名单;
4.设置空闲会话的超时时间,将其改的短一些;
5.须要利用防火墙来配合设置ssh的安全访问规则;
6.监听固定的IP地址而不是0.0.0.0;
7.若是必须使用口令认证机制,则须要使用足够复杂的密码;
~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
~]# openssl rand -base64 30 | head -c 30 | xargs
8.建议最好使用基于密钥的认证机制;
9.禁止用户使用空密码登陆;
10.禁止root用户直接进行远程登陆;
11.限制ssh的密码失败频度和并发数;
12.作好日志记录,并常常分析日志内容;linux
OpenSSH:
在linux系统上实现ssh协议的应用程序;实施远程登陆服务器端;算法
登陆:login,登入 计算机终端设备经过输入用户帐户标识和与之对应的口令的方式,被计算机验证的过程就是登陆; 终端:Terminal,完整的称呼是"终端设备",是计算机中的外围设备,主要用于用户信息的输入和计算机计算结果的输出; 终端的分类: 物理终端:计算机自己的控制台设备;一般将其标识为"pty";在现代计算机上,物理终端与早期的计算机上的物理终端的意义不同了。在如今的Linux系统上,物理终端设备被映射到/dev/console上,全部内核输出的信息都输出到console终端,除此以外,其余用户进程输出的信息通常都输出到虚拟终端或伪终端上; 虚拟终端:在现代的计算机中,一般将键盘+显示器组合称做"虚拟终端"或者"虚拟控制台",即一个虚拟的终端设备;一般将其标识为"tty"; 串行终端:若是服务器上没有装配显卡设备,就可使用串行终端设备链接计算机,一般将其标识为"ttyS"; 模拟终端:伪终端,经过网络客户端工具或图形终端下开启的命令行终端,都称为伪终端;一般将其标识为"pts" 远程登陆: Telnet: C/S结构,默认不容许管理员直接实施远程登陆; Client:telnet Server:telnet-server Socket:23/TCP 安装telnet-server, telnet程序包,本地光盘yum仓库中; CentOS 5,6: 关闭防火墙和SELinux; service iptables stop setenforce 0 启动telnet服务: chkconfig telnet on service xinetd restart|reload 检测服务是否启动: ss -tnl | grep :23 CentOS 7: 关闭防火墙和SELinux; systemctl disable firewalld.service systemctl stop firewalld.service iptables -F setenforce 0 启动telnet服务: systemctl start telnet.socket 检测服务是否启动: ss -tnl | grep :23 注意:telnet服务出于安全考虑,默认不容许root用户直接登陆;但可使用普通用户登陆以后,利用su命令切换至root用户登陆; SSH:Secure SHell; 其目的旨在取代较早的很是不安全的telnet协议,实现安全的远程登陆; C/S结构; Client:Xshell,OpenSSH(ssh,scp,sftp),SecureCRT,sshsecureshellclient,putty; Server:OpenSSH(sshd),dropbear Socket:22/TCP SSH提供的认证方式: 基于口令的认证: 使用远程服务器上的有效用户帐户和该用户的口令,进行身份认证; 须要在网络中传递被加密的用户名和口令信息;有被拦截和破解的风险; 基于密钥的认证: 用户在客户端提供一对密钥,私钥保存在客户端,公钥保存在远程服务器的某个用户的家目录下; 使用私钥加密一段数据,若是服务器可使用对应的公钥进行解密,则说明认证成功,能够继续后续通讯; 在整个过程当中不涉及用户名和密码等敏感信息的传递; SSH协议: v1:不安全,禁用; v2:当前流行的安全应用协议;
Openssh
openssh应用程序的组成:
服务器端:
应用程序
sshd
配置文件
/etc/ssh/sshd_configshell
客户端: 应用程序: ssh, scp, sftp 配置文件: /etc/ssh/ssh_config 客户端程序: ssh命令: ssh - OpenSSH SSH client (remote login program) ssh [options...] [user@]hostname [command] 经常使用选项: -l login_name:指定这次使用哪一个用户进行远程登陆;若是使用了该选项,则hostname前面就不能再使用"user@"; 注意:若是既没有指定此选项,有没有在hostname前面指定"user@"用户名前缀,SSH协议的客户端程序会默认使用客户端本地登陆的用户帐户做为这次远程登陆的用户名; -p port:指明访问服务器的哪一个具体的服务端口;省略该选项,默认是22; -b bind_address:指明这次访问服务器时的源IP地址;省略该选项,则从当前客户端全部有效的IP地址中,选择一个; -X:支持X11转发功能,当客户端使用SSH协议远程链接到服务器时,能够在客户端打开图形界面的配置窗口; -Y:支持受信任的X11转发;功能与-X类似; -o option=value: 在实施远程链接时,引入特定的功能或以特定的方式对服务器进行访问; 注意:-o选项所可以使用的配置内容很是复杂,一般会将经常使用的此类功能选项直接写到ssh客户端的配置文件中(/etc/ssh/ssh_config); 格式为: HOST pattern OPTION1 value1 OPTION2 value2 ... 基于密钥的认证机制: 1.建立密钥对儿: ssh-keygen命令: ssh-keygen — authentication key generation, management and conversion 格式: ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile] 经常使用选项: -q:安静模式; -b bits:指定建立的密钥的长度; RSA:最少768bits,默认是2048bits; DSA:显式给出1024bits; ECDSA:256bits, 384bits, 521bits; ED25519:只是使用固定长度的密钥而忽略-b选项指定内容; -t type:指明公钥加密算法的类型; 在SSHv2协议中可使用上述四种算法; -P passphrase:指定加密私钥文件的口令; -f output_keyfile:生成的密钥文件保存的路径; 示例: ~]# ssh-keygen -t rsa -P '123456' -f .ssh/id_rsa 2.将上一步骤中生成的公钥复制到目标服务器指定用户的家目录中: ssh-copy-id命令: 示例: ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.67.1 3.登陆测试: 在客户端执行下列命令: ~]# ssh -l USER hostname ~]# ssh USER@hostname scp命令:基于ssh协议的cp命令;安全复制命令; scp - secure copy (remote file copy program) 两种使用情形: 推送:PUSH scp [option...] /PATH/FROM/LOCAL_FILE [user@]hostname:/PATH/TO/DESTINATION_REMOTE_FILE 拉取:PULL scp [option...] [user@]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE 经常使用选项: -r:递归复制,能够复制目录; -p:保留源文件中的权限信息; -q:安静模式; -P port:指定远程主机的sshd进程监听的服务端口; sftp: FTP over ssh FTP over ssl(ftps) C/S架构: S:sftp-server, 由sshd进程管理的一个子服务项目,是sshd的一个子系统;在CentOS中默认是开启的; C:sftp命令 sftp [user@]HOSTNAME sftp> help sftp> get sftp> put ... sshd程序: 配置文件:/etc/ssh/sshd_config 配置指令的格式: 指令 值 经常使用的指令: Port 22:指明sshd服务进程要监听的端口号;建议改成非22号端口; ListenAddress 0.0.0.0:指明sshd服务进程监听的IP地址,建议某个固定的IP地址;0.0.0.0表示当前主机上全部的可用IP地址; Protocol 2:ssh协议的版本; LoginGraceTime 2m:登陆时,输入密码操做的最大时长; PermitRootLogin yes:是否运行root用户直接进行远程登陆;在生产环境中,强烈建议禁用此功能; PasswordAuthentication yes:是否开启口令认证机制; UseDNS no:是否容许使用DNS反向解析主机名;建议关闭此功能; AllowUsers user1 user2 ...:设置登陆用户的白名单; AllowGroups group1 group2 ...:设置组的白名单; DenyUsers user1 user2 ...:设置登陆用户的黑名单; DenyGroups group1 group2 ...:设置组的黑名单; 若是对此配置文件中的指令进行了修改,那必需要让sshd进程从新读取配置文件的内容才能使新配置生效; CentOS 五、6: ~]# service sshd reload CentOS 7: ~]# systemctl reload sshd