SSH、DHCP和Telnet服务
一、Linux下两大服务
1.1 独立服务
独立的进程和独立的启动脚本
启动方式
/etc/init.d/xxx start
或者/etc/rc.d/init.d/xxx start
或者service xxx start
1.2 依赖服务
注意:RHEL7/Centos7服务的管理方式不一样.
没有独立的启动脚本,依赖于xinetd服务(xinetd服务本身是一个独立服务)
启动方式
必须启动xinetd服务
1.3 什么是xinetd服务?
Extended internet daemon(扩展的网络守护进程),又叫超级Internet服务,常用来管理多种轻量级Internet服务;
作用:唤醒在睡觉的服务,由xinetd管理的服务只有在用到的时候才被唤醒,平时不占用系统资源;支持Tcp_Wrappers一种安全策略机制。
TCP_Wrappers简介:
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers工作原理:
TCP_Wrappers有一个守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件/etc/hosts.allow和/etc/hosts.deny;合乎要求,则会把这次连接原封不动的转给真正的sshd进程,sshd完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
二、 SSH服务
2.1 介绍
- SSH是Linux下远程管理的工具,相比Telnet安全,运维人员必备的神器!
- SSH的全称Secure Shell,安全的shell,是Client/Server架构,默认端口号为22,TCP/IP协议
- SSH其实用于商业,而OpenSSH即为开源的,在Linux中默认安装
- SSH有v1和v2版本
- ssh v1:有漏洞,容易受到攻击
- ssh v2:通过公钥加密(数字签名和密钥交换)的方式进行,确保服务器端的身份识别
2.2 SSH加密算法
des 对称的公钥加密算法,安全低,数据传输速度快;使用同一个秘钥进行加密或解密
rsa 非对称的公钥加密算法,安全,数据传输速度慢 ,SSH默认的加密算法
补充了解:
DSA数字签名,非对称加密的另一种实现。
2.3 SSH服务的认证方式
- 基于用户密码的认证
[root@client ~]# ssh 192.168.10.171
The authenticity of host '192.168.10.171 (192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)?
提示信息:无法确认主机192.168.10.171的真实性,指纹是9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
,你确定想要继续吗?
说明: 理论上应该是对公钥的确认,由于公钥通过RSA算法加密,太长,不好直接比较,所以给公钥生成一个hash的指纹,方便比较。
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
root@192.168.10.171's password:
说明:
当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts
文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
- SSH工具指定用户名访问
[stu1@client ~]$ ssh root@192.168.10.171 //方式一 用@
root@192.168.10.171's password:
Last login: Mon Apr 16 15:12:45 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -l root 192.168.10.171 //方式二 用-l
root@192.168.10.171's password:
Last login: Mon Apr 16 15:18:59 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -lstu2 192.168.10.171 //方式三 -l用户名
stu2@192.168.10.171's password:
- 基于秘钥对的认证(免密码登录)
重点:公钥和私钥在客户端,服务端得到客户端的公钥后生成随机数给客户端,客户端验证后建立连接。不用账号、密码验证。
相关文件解读:
- id_rsa:保存私钥
- id_rsa.pub:保存公钥
- authorized_keys:保存已授权的客户端公钥
- known_hosts:保存已认证的远程主机公钥
2.4 SSH的基本配置
- client端生成一对秘钥
- 将生成的公钥远程拷贝到server端
步骤:
- client端的user01用户生成一对秘钥对
[root@client ~]# useradd user01
[root@client ~]# su - user01
[user01@client ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .emacs .gnome2 .mozilla
[user01@client ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa):
Created directory '/home/user01/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
df:5b:4f:f8:26:38:0f:5f:f0:df:4c:78:54:bd:94:9e user01@client
The key's randomart image is:
+--[ RSA 2048]----+
| |
| o|
| oo|
| o +|
| S .E.|
| . . * |
| . o.+ *|
| o=.O+|
| .ooo*|
+-----------------+
[user01@client ~]$
[user01@client ~]$ ls .ssh/
id_rsa(私钥) id_rsa.pub(公钥)
2 . 将刚刚生成的公钥远程拷贝到server端的root家目录里指定位置
[user01@client ~]$ scp .ssh/id_rsa.pub root@192.168.10.171:/root/.ssh/authorized_keys
或者
[user01@client ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@192.168.10.171 (推荐)//会自动帮助拷贝到目的地并且重命名,所以推荐
The authenticity of host '192.168.10.171(192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
root@192.168.10.171's password:
Now try logging into the machine, with "ssh 'root@192.168.10.171'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
补充:如果拷贝出错可以关闭selinux
[root@server ~]# getenforce
Enforcing //强制模式
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive //警告模式
server端查看:
[root@server .ssh]# ls
authorized_keys
[root@server .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAssRLeKnKiLRZ2NbGi/uIZD1IpTnvMqFdKXEUlLH+Eli2PkxamDAszQVf7dsn2FHxCptzL04tDEdqWJ1Nr3zTDyjha9gfHWu6AuXAzaX9gWVIt8qza+yJSxpuoam3OwC6y88HMxvTuYy3jkL/6aCk6b5wzhKUYXwvTKwRctb/dO/9GC22CsmPvLHyFH+CpzmdcG2BzlOkg05CVshDIJSJ2Xmaj7G6m+N2cN4m/NV61rXPHn93wwdFcdNQLlRjDvZ6s7UIgmD04497PKUxJ/hTgkm6p3kAGxESEc0JxYHTGnhVE5D6byfRd0Aa/ydBiSov1x5a6vniGQeUh2+NP6omUQ== user01@client
3.测试验证
[user01@client ~]$ ssh root@192.168.10.171
Last login: Mon Apr 16 16:00:55 2018 from 192.168.10.171
[root@server ~]#
注意:是客户端将秘钥复制给服务端,然后客户端登录服务端。
2.5 用户登录控制
1. 禁止远程登录
- 了解软件相关知识
[root@server ~]# rpm -ql openssh-server
/etc/rc.d/init.d/sshd //启动脚本
/etc/ssh/sshd_config //配置文件
/usr/sbin/sshd //二进制命令
[root@server ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
[root@server ~]# rpm -qf /usr/bin/ssh-keygen
openssh-5.3p1-94.el6.x86_64
- 步骤:
[root@server ~]# vim /etc/ssh/sshd_config
。。。
PermitRootLogin no
重启服务:
[root@server ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
测试验证:
[root@client ~]# ssh 192.168.10.171
root@192.168.10.171's password:
Permission denied, please try again.
root@192.168.10.171's password:
2. 修改默认端口号
[root@server ~]# vim /etc/ssh/sshd_config
。。。
Port 10022
测试验证:
[root@client Desktop]# ssh -p10022 stu1@192.168.10.171
ssh: connect to host 192.168.10.171 port 10022: No route to host //路由无法到达
原因:
1、 网络问题
2、 防火墙
解决:
关闭防火墙
注意: /etc/services
中也记录了一些协议的端口信息,可能会与配置文件中信息冲突,但是以配置文件为主,如果端口信息更改失效,可以尝试修改此文件,或删除此文件中冲突信息。
3. ssh
服务的远程访问控制
可以使用
tcp_wrappers
工具做网络控制/etc/hosts.allow
和/etc/hosts.deny
如何判断一个服务支持TCP_wrappers功能
rpm包安装的服务:
[root@server ~]# ldd /usr/sbin/sshd |grep libwrap libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fbb65b57000) //有以上模块说明支持
源码包:
./configuer --enable-libxxxx
//配置的时候开启功能需求:
不允许192.168.10.170服务器来远程访问
vim /etc/hosts.deny sshd:192.168.10.170 //该文件写法如下:更多参考man文档 sshd:192.168.10.0/255.255.255.0 EXCEPT 192.168.10.170 sshd,vsftpd:.yu.net EXCEPT review.yu.net 测试验证: [root@client ~]# ssh stu1@192.168.10.170 -p 10022 ssh_exchange_identification: Connection closed by remote host
三、DHCP
3.1 DHCP服务介绍
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,UDP协议,67号端口
- 主要用于动态管理分配IP地址
过程分析:
- dhcpdiscover(发现):该过程中客户端开始建立请求,以0.0.0.0作为自己的ip地址而以255.255.255.255(广播地址)作为服务器的地址,等待DHCP服务器响应。
- dhcpoffer(提供):当网络中的dhcp服务器收到dhcpdiscover信息后,对自身进行检查,并发送相应的地址。服务器发送给请求客户机的信息中主要包含了ip地址、子网掩码、租约和提供dhcp服务的服务器的ip。
- dhcprequset(请求):当dhcp客户收到服务器的返回信息后,就以广播的方式发送一个dhcp请求信息给本网络中的存在或不存在的其他的dhcp服务器,该信息中包含了已选择的dhcp服务器的ip地址。
- dhcpack(确认):一旦被选中的dhcp收到客户端的请求信息后,就将以保留的这个ip标识为以租用,然后广播的方式发送一个dhcpack信息给dhcp客户端,当客户端收到了确认信息后就完成了整个的获取ip的过程。
3.2 DHCP服务器配置
- 安装软件
[root@review1 ~]# yum -y install dhcp
[root@review1 ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf //主配置文件
/etc/rc.d/init.d/dhcpd //启动脚本
/usr/sbin/dhcpd //二进制命令
- 修改配置文件
vim /etc/dhcp/dhcpd.conf
option domain-name "yu.net"; //域名
option domain-name-servers 192.168.10.11, 8.8.8.8; //DNS(可以写多个)
default-lease-time 3600; //缺省租约
max-lease-time 7200; //客户端最大租约
log-facility local7; //定义日志设备载体 (/var/log/boot.log输出)
subnet 192.168.10.0 netmask 255.255.255.0 { //子网<网段>
range 192.168.10.20 192.168.10.50; //地址范围<地址池>
option routers 192.168.10.11; //网关
option broadcast-address 192.168.10.255 //广播地址
}
//注意:地址池中的IP要与DHCP服务器的IP在同一个网段,不然客户机在求取IP时找不到DHCP服务器
[root@review1 ~]# service dhcpd start
Starting dhcpd: [OK]
四、Telnet服务
4.1 Telnet服务介绍
- telnet远程管理服务,TCP协议 23号端口
- telnet服务是依赖服务,由xinetd服务管理
- 通过明文的帐号与密码传输,不安全,不适用于类unix系统
- Linux系统默认不使用telnet,使用ssh
4.2 Telnet服务搭建
[root@review1 xinetd.d]# yum -y install telnet-server xinetd //安装telnet-server(注意这是服务端,客户端安装telnet) 和xinetd
# cat /etc/xinetd.conf //主配置文件,轻易不修改,改变后会影响所有托管于xinetd的服务。
defaults
{
log_type = SYSLOG daemon info //--日志类型,表示使用syslog进行服务登记。
log_on_failure = HOST //--失败日志,失败后记录客户机的IP地址。
log_on_success = PID HOST DURATION EXIT //--成功日志,记录客户机的IP地址和进程ID
cps = 50 10 //表示每秒50个连接,如果超过限制,则等待10秒。主要用于对付拒绝服务攻击。
instances = 50 //最大连接数
per_source = 10 //每个IP地址最大连接数
v6only = no //不使用ipv6
groups = yes //确定该服务的进程组ID,/etc/group
umask = 002 //文件生成码反掩码 666(664) 777(775)
}
includedir /etc/xinetd.d //外部调用的目录
# cat /etc/xinetd.d/telnet //子配置文件
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no //默认开启服务,=yes表示关闭
flags = REUSE //标记
socket_type = stream //tcp协议
wait = no //表示不需等待,即服务将以多线程的方式运行,并发连接;yes表示单线程
user = root //以root身份启动该进程
server = /usr/sbin/in.telnetd //二进制命令
log_on_failure += USERID //表示设置失败时,UID添加到系统登记表
}
注:不能用root登录,telnet连接不加密,telnet服务自己拒绝root连接
[root@review2 ~]# telnet 192.168.10.11
Trying 192.168.10.11...
Connected to 192.168.10.11.
Escape character is '^]'.
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
login: root
Password:
Login incorrect
login: test1
Password:
[test1@review1 ~]$