Linux网络---远程访问控制

前言

大多数企业服务器是通过远程登录的方式来进行管理的
当需要从一个工作站管理数以百计的服务器主机时,远程维护的方式将更占优势

一:SSH远程管理

1.1:配置Open SSH服务端

1.1.1:SSH协议

为客户机提供安全的shell环境,用于远程管理
默认端口:TCP 22

1.1.2:OpenSSH服务–1

服务名称:sshd

服务端主程序:/usr/sbin/sshd

服务端配置文件:/etc/ssh/sshd_config

ssh_config:针对客户端

sshd_config:针对服务端

1.1.3:OpenSSH服务–2
  • 服务器监听项

    端口号,协议版本,监听地址

    禁用反向解析

    [root@test01 opt]# vim /etc/ssh/sshd_config
    #Port 22                 #监听端口号22,可以修改
    #ListenAddress 0.0.0.0   #ipv4监听地址,可以修改
    #ListenAddress ::        #ipv6监听低,可以修改
    ...
    #UseDNS no               #禁用反向解析
    ....
    
  • 用户登录控制

    禁用root用户,空密码用户

    限制登录验证时间,重试次数

    AllowUsers,DenyUsers

    [root@test01 opt]# vim /etc/ssh/sshd_config
    LoginGraceTime 2m            #会话超时时间两分钟
    PermitRootLogin no           #不允许root远程登录
    MaxAuthTries 6               #允许最大的验证次数
    MaxSessions 10               #允许最大的会话次数
    PermitEmptyPasswords no      #不允许空密码远程登录
    AllowUsers lisi admin@192.168.20.30	'仅允许lisi用户在所有终端登录,仅允许admin用户通过地址192.168.20.30远程登录
    ...
    
    [root@test01 opt]# vim /etc/ssh/sshd_config
    ....
    PermitRootLogin no
    [root@test01 opt]# systemctl reload sshd
    
    [root@test02 ~]# ssh root@192.168.100.110      #远程以root身份登录
    The authenticity of host '192.168.100.110 (192.168.100.110)' can't be established.
    ECDSA key fingerprint is SHA256:z9DjPlPWqhHOp4AsbDxOiSb4w86EvV9018/iUUHE1NM.
    ECDSA key fingerprint is MD5:e5:d9:66:a5:4e:2f:fe:86:06:ef:cc:2f:09:4c:40:a7.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.100.110' (ECDSA) to the list of known hosts.
    root@192.168.100.110's password: 
    Permission denied, please try again.                      #访问拒绝
    
    

    但是这里有个问题,用户可以通过su root远程登录root用户

    [root@test01 opt]# useradd wangwu
    [root@test01 opt]# passwd wangwu
    更改用户 wangwu 的密码 。
    新的 密码:
    无效的密码: 密码少于 8 个字符
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    
    [root@test02 ~]# ssh wangwu@192.168.100.110
    wangwu@192.168.100.110's password: 
    Last login: Wed Jul  8 20:07:59 2020 from 192.168.100.120
    [wangwu@test02 ~]$ su - root
    密码:
    上一次登录:三 7月  8 20:08:09 CST 2020pts/1 上
    最后一次失败的登录:三 7月  8 20:08:24 CST 2020从 test01ssh:notty 上
    最有一次成功登录后有 1 次失败的登录尝试。
    [root@test01 ~]# 
    #这里已经登录到test01主服务器的root用户
    

    解决方法,增加pam远程su 认证

    [root@test01 opt]# vim /etc/pam.d/su
    
      1 #%PAM-1.0
      2 auth            sufficient      pam_rootok.so
      3 # Uncomment the following line to implicitly trust users in the "wheel" group.
      4 #auth           sufficient      pam_wheel.so trust use_uid
      5 # Uncomment the following line to require a user to be in the "wheel" group.
      6 auth            required        pam_wheel.so use_uid       #取消注释
    [root@test01 ~]# gpasswd -a lpf wheel
    正在将用户“lpf”加入到“wheel”组中
    
  [root@test01 ~]# id lpf
  uid=1000(lpf) gid=1000(lpf) 组=1000(lpf),10(wheel)
  [root@test01 ~]# id wangwu
  uid=1001(wangwu) gid=1001(wangwu) 组=1001(wangwu)
  [root@test01 ~] /etc/pam.d/su
  auth            required        pam_wheel.so use_uid
  ##开启pam.d认证 允许lpf wheel组允许su切换用户
  [root@test02 ~]# ssh lpf@192.168.100.110
  lpf@192.168.100.110's password: 
  Last failed login: Wed Jul  8 22:56:39 CST 2020 on pts/1
  There was 1 failed login attempt since the last successful login.
  Last login: Wed Jul  8 18:48:13 2020
  [lpf@test01 ~]$ su - root
  密码:
  上一次登录:三 7月  8 22:49:24 CST 2020从 192.168.100.1pts/0 上
  最后一次失败的登录:三 7月  8 22:55:59 CST 2020pts/1 上
  最有一次成功登录后有 1 次失败的登录尝试。
  [root@test01 ~]# exit
  登出
  [lpf@test01 ~]$su - wangwu
  密码:
  上一次登录:三 7月  8 22:55:40 CST 2020从 192.168.100.120pts/1 上
  [wangwu@test01 ~]$ su - root
  密码:
  su: 拒绝权限
  [wangwu@test01 ~]$ su - lpf
  密码:
  su: 拒绝权限
  [wangwu@test01 ~]$ 

验证最大登录次数

  [root@test01 ~]# vim /etc/ssh/sshd_config
  MaxAuthTries 6
  [root@test02 ~]# ssh lpf@192.168.100.110
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

#此时从服务器尝试登陆三次失败就拒绝了,那么6是怎么生效的呢

#设置能够连接次数为8,输入错误密码,连接可以尝试8次,但是到尝试登录6次后拒绝,尝试登录次数生效。

  [root@test02 ~]# ssh -o NumberOfPasswordPrompts=8 lpf@192.168.100.110
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Permission denied, please try again.
  lpf@192.168.100.110's password: 
  Received disconnect from 192.168.100.110 port 22:2: Too many authentication failures
  Authentication failed.
1.1.4:OpenSSH服务–3
  • 用户登录控制

    禁止root用户,空密码用户

    登录时间,重试次数

    AllowUsers(白名单,仅允许,只有这些可以登录)

    DenyUsers(黑名单,仅拒绝,只有这些不行)

    AllowUsers不可与DenyUsers同时使用

  [root@test01 ~]# vim /etc/ssh/sshd_config
  LoginGraceTime 2m
  PermitRootLogin yes
  StrictModes yes
  MaxAuthTries 6
  MaxSessions 10
  ...
  AllowUsers lpf wangwu@192.168.100.120	'仅允许wangwu用户在终端192.168.100.120登录';仅允许lpf用户通过任意终端登录

#验证白名单

  [root@test01 ~]# vim /etc/ssh/sshd_config
  .....添加
  AllowUsers lpf wangwu@192.168.100.130
  [root@test01 ~]# systemctl reload sshd

  [root@test02 ~]# ssh lpf@192.168.100.110
  lpf@192.168.100.110's password: 
  Last failed login: Wed Jul  8 23:30:40 CST 2020 from 192.168.100.120 on ssh:notty
  There were 6 failed login attempts since the last successful login.
  Last login: Wed Jul  8 23:28:55 2020 from 192.168.100.120
  [lpf@test01 ~]$ exit
  登出
  Connection to 192.168.100.110 closed.
  [root@test02 ~]# ssh wangwu@192.168.100.110
  wangwu@192.168.100.110's password: 
  Permission denied, please try again.
1.1.5:OpenSSH服务–4
  • 登录验证对象

  • 服务器中的本地用户账号

  • 登录验证方式

  • 密码验证:核对用户名,密码是否匹配

  • 密钥对验证:核对客户的私钥,服务端公钥是否匹配

  • 密钥对:包含公钥,私钥

  • 公钥:服务器使用

  • 私钥:客户保留

  • 非对称秘钥:RSA

  • 对称秘钥:3DES,AES

[root@test01 ~]# vim /etc/ssh/sshd_config
PasswordAuthentication yes		'是否使用密码'
PermitEmptyPasswords no	        '禁止空密码'
PasswordAuthentication yes	    '是否需要密码验证'
    
PubkeyAuthentication yes	    '开启公钥验证'

AuthorizedKeysFile      .ssh/authorized_keys  '指定公钥库位置';默认存放在所在家目录,这里是隐藏文件

1.2:使用SSH客户端程序

1.2.1:SSH客户端程序命令
  • ssh命令–远程安全登录

  • 环境

主服务器test01提供sshd服务

从服务器test02 充当客户机访问

  • 命令基本格式
    ssh user@host
#客户机
[root@test02 ~]# ssh root@192.168.100.110
The authenticity of host '192.168.100.110 (192.168.100.110)' can't be established.
ECDSA key fingerprint is SHA256:z9DjPlPWqhHOp4AsbDxOiSb4w86EvV9018/iUUHE1NM.
ECDSA key fingerprint is MD5:e5:d9:66:a5:4e:2f:fe:86:06:ef:cc:2f:09:4c:40:a7.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.100.110' (ECDSA) to the list of known hosts.
root@192.168.100.110's password: 
Last login: Wed Jul  8 19:00:04 2020 from 192.168.100.1
[root@test01 ~]# touch /opt/test.txt

#服务机

[root@test01 ~]# cd /opt
[root@test01 opt]# ll
总用量 0
drwxr-xr-x. 3 root root 16 6月  10 09:09 opt
drwxr-xr-x. 2 root root  6 10月 31 2018 rh
-rw-r--r--. 1 root root  0 7月   8 19:11 test.txt
  • scp命令–远程安全复制

命令基本格式
格式一:scp user@host:file 1 file 2
格式二:scp file 1 user@host:file 2
选项:-r 表示递归复制
口诀:@在复制对象前就是从远程复制到本地(要先身份验证在复制)
@在复制对象后就是从本地复制到远程(要先复制后身份验证)

[root@test01 ~]# scp /etc/hosts root@192.168.100.120:/etc/hosts	'将本机文件/etc/hosts以root权限复制到192.168.100.120中'
root@192.168.100.120's password: 
hosts    
[root@test01 ~]# scp root@192.168.100.120:/etc/hosts /etc/hosts1   '将远程的/etc/hosts文件复制到本地'
root@192.168.100.120's password: 
hosts  
  • sftp命令–安全FTP上下载

命令基本格式
sftp user@host
get:下载
put:上传
选项:-r 表示递归复制

例如
[root@test02 .ssh]# sftp wangwu@192.168.100.110
Connected to 192.168.100.110.
sftp> ls
sftp> ls     #登录到的是王五的家目录
wangwu.txt   
sftp> get wangwu.txt                   #下载到登录sftp服务前的目录,这里是.ssh
Fetching /home/wangwu/wangwu.txt to wangwu.txt
sftp> exit
[root@test02 .ssh]# ls
id_ecdsa  id_ecdsa.pub  known_hosts  wangwu.txt          #复制过来的王五文件

[root@test02 .ssh]# touch root.txt
[root@test02 .ssh]# sftp wangwu@192.168.100.110
Connected to 192.168.100.110.
sftp> put root.txt                                   #上传root.txt到王五的家目录
Uploading root.txt to /home/wangwu/root.txt
root.txt                                        100%    0     0.0KB/s   00:00    
sftp> ls
root.txt     wangwu.txt 
1.2.2:Xshell
  • Windows下一款功能非常强大的安全终端模拟软件

1.3:密钥对验证的SSH体系

1.3.1:构建密钥对验证的SSH体系
  • 整体实现过程

    mark

  • 环境ssh服务机test01;ssh客户机test02

  • 1.创建密钥对(由客户端的用户lisi在本地创建密钥对)

    公钥文件:id_rsa

    公钥文件:id_rsa.pub
    ssh-keygen命令
    可用的加密算法:RSA或DSA

  [zhangsan@test02 ~]$ ssh-keygen -t ecdsa                         #生成公共/私有ecdsa密钥对
  Generating public/private ecdsa key pair.
  Enter file in which to save the key (/root/.ssh/id_ecdsa):   # 输入保存秘钥的文件,选择默认回车
  Enter passphrase (empty for no passphrase):                  #输入加密密码
  Enter same passphrase again: 
  Your identification has been saved in /root/.ssh/id_ecdsa.
  Your public key has been saved in /root/.ssh/id_ecdsa.pub.
  The key fingerprint is:
  SHA256:Ly0Ayf8n8CCYjLaoyuxYPFg3sMLhMx5MaPzBnKk4qqI root@test02
  The key's randomart image is:
  +---[ECDSA 256]---+
  |                 |
  |o o.o.           |
  |.=.*+            |
  |Bo+=.o           |
  |=X*.+ = S        |
  |=*=. o * o       |
  |+o+     * +      |
  |B. .     =       |
  |E+               |
  +----[SHA256]-----+
  [root@test02 ~]# ls
  anaconda-ks.cfg  initial-setup-ks.cfg
  [zhangsan@test02 ~]# ls -a
  .                .bash_logout   .config               .ssh         .xauthu4rj4W
  ..               .bash_profile  .cshrc                .tcshrc
  anaconda-ks.cfg  .bashrc        .dbus                 .viminfo
  .bash_history    .cache         initial-setup-ks.cfg  .Xauthority
  [zhangsan@test02 ~]# cd .ssh
  [zhangsan@test02 .ssh]# ll
  总用量 12
  -rw-------. 1 root root 314 7月   9 00:26 id_ecdsa
  -rw-r--r--. 1 root root 173 7月   9 00:26 id_ecdsa.pub
  -rw-r--r--. 1 root root 177 7月   8 19:05 known_hosts
  [root@test02 .ssh]# 
  
  注意:这里客户端生产密钥可以是root用户,也可以是普通用户
  • 2.上传公钥文件 id_rsa.pub

任何方式均可(共享,FTP,Email,SCP,。。。)

例如
[zhangsan@test02 ~]# ls -a
.           anaconda-ks.cfg  .bashrc  .dbus                 .viminfo
..          .bash_history    .cache   initial-setup-ks.cfg  .Xauthority
123123      .bash_logout     .config  .ssh                  .xauthu4rj4W
123123.pub  .bash_profile    .cshrc   .tcshrc

[zhangsan@test02 ~]# scp ~/.ssh/id_ecdsa.pub root@192.168.100.100:/tmp
  • 3.导入公钥信息(导入到服务端用户66的公钥数据库)

将公钥文本添加到目标用户的公钥库

默认公钥库文件:~/.ssh/authorized_keys

[root@test01 ~]#mkdir /home/zhangsan/.ssh/

[root@test01 ~]#cat /tmp/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys

[root@test01 ~]#tail -1 /home/zhangsan/.ssh/authorized_keys

  ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJKqpTveFdFvp6YgahM5/E5PJ2VEUfpT8sM0TkSEVdHL8bvC5Xx+HXB3BMOHZuslIW+r4QlTW0xev/l+SIPP4Ow= zhangsan@test02

第二步和第三步可以采用另外一种方法

ssh-copy-id -i 公钥文件 user@host                   #密钥推送到对方用户的家目录
  [zhangsan@test02 .ssh]# ssh-copy-id -i id_ecdsa.pub lisi@192.168.100.110
  /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_ecdsa.pub"
  /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
  /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
  wangwu@192.168.100.110's password: 

  Number of key(s) added: 1

  Now try logging into the machine, with:   "ssh 'wangwu@192.168.100.110'"
  and check to make sure that only the key(s) you wanted were added.
  • 查看公用密钥,客户端密钥对验证登录
  [root@test01 tmp]# cd /home/zhangsan
  [root@test01 zhangsan]# cd .ssh/
  [root@test01 .ssh]# ls
  authorized_keys
  [root@test01 .ssh]# cat authorized_keys 
  ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJKqpTveFdFvp6YgahM5/E5PJ2VEUfpT8sM0TkSEVdHL8bvC5Xx+HXB3BMOHZuslIW+r4QlTW0xev/l+SIPP4Ow= zhangsan@test02
  [zhangsan@test02 .ssh]$ ssh lisi@192.168.100.110
  Enter passphrase for key '/zhangsan/.ssh/id_ecdsa': 
  Last login: Thu Jul  9 00:38:15 2020

添加免密登录

  [zhangsan@test02 .ssh]# ll
  总用量 12
  -rw-------. 1 root root 314 7月   9 00:26 id_ecdsa
  -rw-r--r--. 1 root root 173 7月   9 00:26 id_ecdsa.pub
  -rw-r--r--. 1 root root 177 7月   8 19:05 known_hosts
  [zhangsan@test02 .ssh]# ssh-agent bash
  [zhangsan@test02 .ssh]# ssh-add
  Enter passphrase for /home/zhangsan/.ssh/id_ecdsa: 
  Bad passphrase, try again for /home/zhangsan/.ssh/id_ecdsa: 
  Identity added: /home/zhangsan/.ssh/id_ecdsa (/home/zhangsan/.ssh/id_ecdsa) 
  [zhangsan@test02 .ssh]# ssh lisi@192.168.100.110                   #直接免密登录
  Last login: Thu Jul  9 00:47:08 2020 from test01
  [lisi@test01 ~]$ 

二:TCP Wrappers控制

2.1:TCP Wrappers概述

2.1.1:保护原理

mark

2.1.2:保护机制的实现方式
  • 方式一

    通过tcpd主程序对其他服务程序进行包装

  • 方式二

    由其他服务程序调用libwrap.so.*链接库

2.1.3:访问控制策略的配置文件

ldd which sshd 查看模块

  • /etc/hosts.allow
  • /etc/hosts.deny

2.2:TCP Wrappers访问策略

2.2.1:设置访问控制策略

1)策略格式

服务列表:客户机地址列表

2)服务列表

多个服务以逗号分隔,ALL表示所有服务

3)客户机地址列表

多个地址以逗号分隔,ALL表示所有服务

允许使用通配符*和?

网段地址,如192.168.1 或者 192.168.1.0/255.255.255.0

区域地址,如.benet.com

2.2.2:策略的应用程序

先检查hosts.allow,找到匹配则允许访问
否则再检查hosts.deny,找到则拒绝访问
若两个文件中均无匹配策略,则默认允许访问

2.2.3:策略应用实例

仅允许从以下地址访问sshd服务

主机192.168.100.100

网段192.168.200.0/24

禁止其他所有地址访问受保护的服务

[root@test01 ~]# vim /etc/hosts.allow
sshd:192.168.100.100,192.168.200.*
[root@test01 ~]# vim /etc/hosts.deny
sshd:ALL

‘优先读取allow,然后再读取deny’
‘如果做黑名单,name白名单就不用写’
deny: sshd:ALL

黑名单:allow不写; deny:192.168.100
白名单:allow:sshd:192.168.100 ;deny: sshd:ALL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值