栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

ssh安全远程管理和TCP Wrappers(简单防火墙)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ssh安全远程管理和TCP Wrappers(简单防火墙)

5.1 什么是ssh

       ssh是Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。

5.2 ssh的登录验证模式

ssh提供了基于账号密码(口令)和密钥对两种登录验证方式。这两者都是通过密文传播的。

 账户密码登录认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。

Linux主机之间的远程登录管理工具是ssh命令,所以在命令行中直接使用ssh命令进行远程登录。

格式:ssh  用户名@IP地址

           ssh  root@192.168.80.20

windows远程登录Linux主机一般使用第三方工具,比如Xshell等工具。

1、首先需要在Client上创建一对密钥,并且需要把公钥放在需要访问的Server上
2、当Client需要连接Server时,Client端的软件就会向Server端发出登录请求,请求使用密钥对中的公钥进行安全验证
3、Server收到请求之后,会在该用户的家目录下查询公钥文件,拿Client发送过来的公钥和自己家目录下的公钥进行比较
4、如果两个公钥一致,Server就用公钥加密“challenge(质疑)”,并把它发送给Client软件。Client收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给Server端,Server端验证成功后,允许登录
注意:若第3个步骤对比结果失败,则Server端会通知Client端此公钥未在本机注册,无法验证登录
 

5.3 配置ssh服务

5.3.1 环境准备

      (1)准备两台linux操作系统的主机,配置好相关网络参数,实现正常通信,并将主机名修改为不同的名字,便于分辨。

①# hostnamectl set-hostname www2(修改主机名为www2)

②reboot(重启电脑,使配置生效)

       (2)关闭两台电脑的防火墙和SELinux策略,有利于实验的顺利进行。

①[root@www1 ~]# systemctl disable firewalld.service (设置firewalld服务的不自启动)

[root@www1 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

②vim /etc/selinux/config(修改selinux配置文件)

“SELINUX=enforcing”修改为“SELINUX=disabled”

③reboot(重启电脑,使配置生效)

④systemctl status firewalld.service(查询firewalld服务是否启动)

[root@www1 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

⑤getenforce(查询SELinux是否关闭)

[root@www1 ~]# getenforce 
Disabled

至此,环境准备完成!!!

5.3.2 用户密码验证

Linux主机之间的远程管理工具是ssh命令,所以我们直接使用ssh进行远程登录

格式:ssh 用户名@ip地址

[root@hua ~]# ip addr   #查询主机hua的IP地址
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ec:ec:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.50/24 brd 192.168.31.255 scope global noprefixroute ens33  #主机hua的IP地址为192.168.31.50
       valid_lft forever preferred_lft forever
    inet6 fe80::b430:3b07:1365:fecb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@hua ~]# ssh root@192.168.31.40  #在主机hua上远程登录192.168.31.40主机的root账号
root@192.168.31.40's password:        #输入密码
Last login: Thu May 12 20:07:05 2022 from 192.168.31.50
[root@www2 ~]# ip addr                #登录成功,主机名已经由hua变为www2
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b6:d2:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.40/24 brd 192.168.31.255 scope global noprefixroute ens33  #主机www2的IP地址为192.168.31.40
       valid_lft forever preferred_lft forever
    inet6 fe80::b430:3b07:1365:fecb/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::23df:84f4:8ba1:8550/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@www2 ~]# exit   #退出登录www2的主机
登出
Connection to 192.168.31.40 closed.
[root@hua ~]#     

Windows远程登录Linux主机一般使用第三方工具,比如Xshell工具

格式:ssh 用户名@ip地址

 

 

 5.3.3 密钥对验证

①客户端生成密钥对文件

ssh-keygen  -t  rsa  -b  2048

选项:-t:指定加密类型(rsa/dsa等)一般用rsa

           -b:指定密钥对加密长度(现在已经可以破解1024位长度以内的密码,建议设置为2048以上)

[root@www2 ~]# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):     #询问秘钥文件保存位置,一般默认保存在当前用户家目录下的.ssh/目录下
Enter passphrase (empty for no passphrase):      #询问是否对私钥文件进行加密;若加密,则在调用私钥文件时需要先验证私钥文件的密码,密码正确才能使用秘钥文件;若不加密,则秘钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录。本次设置密码执行  
Enter same passphrase again:          #再一次输入密码
Your identification has been saved in /root/.ssh/id_rsa.       #身份证明保存在/root/.ssh/id_rsa中
Your public key has been saved in /root/.ssh/id_rsa.pub.       #公钥文件保存/root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:iErnFeAZKugzLyTKdqN1pZpB2LPe7HFj9Kujr1ay9Zc root@www2
The key's randomart image is:
+---[RSA 2048]----+
|    o            |
|.  o +           |
|o . o .          |
|..o  . o         |
|.*.+o ooS        |
|=.=+oo+o.        |
|.+.B.+=+..  .    |
|. * Oo+....E     |
| . +o*+oo..      |
+----[SHA256]-----+

②将客户端的公钥文件上传至服务器端(密钥对验证比账号密码验证更安全,但是密钥对验证需要建立在账号密码登录基础上进行的,就是说首先你得有账号密码,才能设置密钥对验证)

格式:ssh-copy-id 用户名@ip地址

[root@www2 .ssh]# ssh-copy-id root@192.168.31.50
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.31.50 (192.168.31.50)' can't be established.
ECDSA key fingerprint is SHA256:wx588OtI9K8B0rHGSWaVdsMjixGdXd350+BZjU9F7pQ.
ECDSA key fingerprint is MD5:fd:b9:dd:68:ed:70:71:ed:ee:bf:25:30:ab:3c:85:6b.
Are you sure you want to continue connecting (yes/no)? yes
/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
root@192.168.31.50's password:      #输入账号登录密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.31.50'"
and check to make sure that only the key(s) you wanted were added.
[root@www2 .ssh]# 

[root@hua ~]# cd /root/.ssh/  服务器主机将客户端的公钥内容保存在/root/.ssh/authorized_keys中
[root@hua .ssh]# ls 
authorized_keys

③客户端尝试登录服务器

格式:ssh 用户名@ip地址  

[root@www2 .ssh]# ssh root@192.168.31.50   #密钥对验证优先级大于账户密码验证,因此如果设置了密钥对,则不用再输入账号密码了
Enter passphrase for key '/root/.ssh/id_rsa':   #输入私钥文件的密码,并不是服务器主机的账号密码
Last login: Thu May 12 20:21:39 2022
[root@hua ~]# ip addr           #登录服务器主机hua成功
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:ec:ec:90 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.50/24 brd 192.168.31.255 scope global noprefixroute ens33  #服务器主机
       valid_lft forever preferred_lft forever
    inet6 fe80::b430:3b07:1365:fecb/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@hua ~]# exit   #退出登录服务器主机hua
登出
Connection to 192.168.31.50 closed.
[root@www2 .ssh]# 

Windows使用密钥对登录Linux

1、使用Xshell自带的密钥对生成向导生成密钥对

 

 

2、将公钥导入Linux主机的指定用户下的指定公钥配置文件内(一般为/root/.ssh/authorized_keys;如果没有这个文件,则我们自己创建)

3、使用window尝试登录

 5.3.4 禁止使用账号密码登录

当我们学会使用密钥对进行验证后,建议在生产环境中将账户密码登录功能关掉

修改服务器主机中的配置文件:/etc/ssh/sshd_config

内容:PasswordAuthentication no

5.3.5 禁止使用root远程登录

root在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到root用户,这样可以最大限度的避免因为root的误操作而对系统造成破坏,同时也可以避免黑客在暴力破解后直接使用root用户登录系统,一般在远程登录管理上我们会禁止直接使用root用户登录。

修改服务器主机中的配置文件:/etc/ssh/sshd_config

内容:PermitRootLogin no

5.3.6 修改默认端口、限制ssh监听IP

1、修改默认端口:ssh作为一个用来远程管理服务器的工具,需要特别的安全,默认情况下使用TCP的22端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口(范围1-65535)

修改服务器主机中的配置文件:/etc/ssh/sshd_config

内容:Port 55555

端口修改后远程登录命令:ssh -p 新端口  用户名@服务器IP地址

2、限制ssh监听IP:有些服务器安全级别更高一些,不允许外网直接登录,只有通过局域网才能登录,我们可以在机房中设置其中一台能够被外网远程连接,其他主机都通过这个机器进行远程连接即可

修改服务器主机中的配置文件:/etc/ssh/sshd_config

内容:LinstenAddress  IP地址

5.4 ssh服务相关命令

1、scp:安全的远程文件复制命令

scp是secure copy的简写,用于Linux系统之间的远程拷贝命令,类似于cp。scp传输是加密的,稍微影响速度,但并不占用资源。

格式:scp -P  端口   本地文件 (绝对路径)  用户名@服务器IP地址:目录

2、sftp:安全的文件传输协议

sftp是secure fileTransferProtocol 的缩写,安全文件传送协议。sftp与ftp有着几乎一样的语法和功能。由于这种传输方式使用了加密/解密技术。所以sftp比ftp更安全一些。但传输效率比普通的FTP低的多

格式:sftp -oPort=端口 用户名@服务器IP

交互命令:

help:查看在交互模式下支持哪些命令

pwd/lpwd:查看文件在服务器/客户端所在路径

ls/lls:查看服务器/客户端当前目录下的文件列表

put:将客户机中的指定文件上传到服务器端

get:将服务器端的指定文件下载到客户机的当前目录

rm:删除服务器端的指定文件

quit:退出sftp的交互模式,断开话服务器之间的连接

6.1 TCP Wrappers(简单防火墙)简介

TCP Wrappers是一个工作在第四层(传输层)的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实线访问控制,界定方式是凡是调用libwrap.so库文件的程序就可以受TCP Wrappers的安全控制。他的主要功能就是控制谁可以访问,常见的程序有rpcbind/vsftpd/sshd/telnet。

判断方式:

步骤1:查看对应服务命令所在位置

which sshd

步骤2:查看指定命令执行时是否调用libwrap.so文件

ldd  /usr/sbin/sshd | grep libwrap.so

6.2 TCP Wrappers工作原理

以ssh为例,每当有ssh的连接请求时,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给ssh进程,由ssh完成后续工作;古国这次连接发起的ip不符合访问控制文件的设置,则会中断连接请求,拒绝提供ssh服务

 1、优先查看hosts.allow,匹配即停止

2、允许个别,拒绝所有:hosts.allow文件添加允许的策略,host.deny文件添加all

3、拒绝个别,允许所有:hosts.allow文件为空,hosts.deny文件添加单个拒绝的策略

6.3 TCP Wrappers的使用

TCP Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow,/etc/hosts.deny,以此实线访问控制,默认情况下,这两个文件什么都没有添加,此时没有限制

配置文件编写规则:

service_list@host:client_list

serxice_list:是程序(服务)的列表,可以是多个,多个时,使用“,”隔开

@host:设置允许或禁止他人从自己的哪个网口进入。这一项不写,就代表全部

client_list: 是访问者的地址,如果需要控制的用户较多,可以使用空格或“,”隔开

格式:

基于ip地址:  192.168.88.1  192.168.88.

基于主机名:www.atguigu.com   www.baidu.com   较少用

基于网络、子网掩码: 192.168.0.0/255.255.255.0

内置ACL:ALL(所有主机)、LOCAL(本地主机)

案例:拒绝单个IP使用ssh远程连接

hosts.allow:空着

hosts.deny:sshd:192.168.88.20

仅允许单个IP使用ssh远程连接

hosts.allow:sshd:192.168.88.20

hosts.deny:ALL

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号