SSH、DHCP和Telnet服务

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: 
  • 基于秘钥对的认证(免密码登录)

重点:公钥和私钥在客户端,服务端得到客户端的公钥后生成随机数给客户端,客户端验证后建立连接。不用账号、密码验证。

  • 相关文件解读:

    1. id_rsa:保存私钥
    2. id_rsa.pub:保存公钥
    3. authorized_keys:保存已授权的客户端公钥
    4. known_hosts:保存已认证的远程主机公钥

2.4 SSH的基本配置

  • client端生成一对秘钥
  • 将生成的公钥远程拷贝到server端

步骤:

  1. 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 ~]$ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值