1.1 CentOS 6.x / 7.x 对比

1.1.1 文件系统

CentOS 6.x:EXT4
Ext4 的单个文件系统容量达到1EB,单个文件大小则达到16TB
CentOS 7.x:XFS
XFS 默认支持 8EB 减1字节的单个文件系统,最大可支持的文件大小为 9EB,最大文件系统尺寸为 18EB。

1.1.2 防火墙,内核版本,默认数据库

CentOS 6.x:
防火墙:iptables
内核版本:2.6.x-x
默认数据库:MySQL
CentOS 7.x:
防火墙:firewalld
内核版本:3.10.x-x
默认数据库:MariaBD

1.1.3 时间同步,修改时区,修改语言

:::info 清华大学NTP时间源服务器:
s1b.time.edu.cn
s1e.time.edu.cn
阿里云NTP时间源服务器:
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com ::: CentOS 6.x:
时间同步:ntpq -p
修改时区:/etc/sysconfig/clock
修改语言:/etc/sysconfig/i18n
CentOS 7.x:
时间同步:chronyc sources
修改时区:timedatectl set-timezone Asia/Shanghai
修改语言:localectl set-locale LANG=zh_CN.UTF-8
范例:时间同步,修改时区,修改语言

  1. #CentOS6修改时区
  2. ~ cat /etc/sysconfig/clock
  3. ZONE="Asia/Shanghai"
  4. #CentOS7修改时区
  5. ~ timedatectl
  6. Local time: Mon 2022-06-20 09:48:37 CST
  7. Universal time: Mon 2022-06-20 01:48:37 UTC
  8. RTC time: Mon 2022-06-20 01:48:37
  9. Time zone: Asia/Macau (CST, +0800)
  10. ~ timedatectl set-timezone Asia/Shanghai
  11. timedatectl
  12. Local time: Mon 2022-06-20 09:49:02 CST
  13. Universal time: Mon 2022-06-20 01:49:02 UTC
  14. RTC time: Mon 2022-06-20 01:49:02
  15. Time zone: Asia/Shanghai (CST, +0800)
  16. #CentOS6修改语言
  17. ~ cat /etc/sysconfig/i18n
  18. LANG="en_US.UTF-8"
  19. #CentOS7修改语言
  20. ##查看所有的语言
  21. ~ localectl list-locales
  22. ##修改语言
  23. ~ localectl set-locale LANG=zh_CN.utf8

1.1.4 主机名

CentOS 6.x 的配置文件为 /etc/sysconfig/network (永久设置)
CentOS 7.x 的配置文件为 /etc/hostname (永久设置)
CentOS 7.x 还可以通过使用命令永久设置

hostnamectl set-hostname centos7.kubesphere.com

  1. #CentOS6修改主机名
  2. ~ vim /etc/sysconfig/network
  3. HOSTNAME=centos6server
  4. #CentOS7修改主机名
  5. ~ vim /etc/hostname
  6. centos7server
  7. ~ hostnamectl set-hostname centos7.kubesphere.com

1.1.5 网络服务管理

操作行为 CentOS 6.x CentOS 7.x
启动指定服务 service start systemctl start
关闭指定服务 service stop systemctl stop
重启指定服务 service restart systemctl restart
查看指定服务状态 service status systemctl status
查看所有服务状态 service —status-all systemctl list-units
设置服务自启动 chkconfig on systemctl enable
设置服务不自启动 chkconfig off systemctl disable
查看所有服务自启动状态 chkconfig —list systemctl list-unit-files

范例:网络服务管理

  1. #CentOS6
  2. ~ yum install -y vsftpd
  3. ~ service vsftpd start
  4. Starting vsftpd for vsftpd: [ OK ]
  5. ~ netstat -antl | grep 21
  6. tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
  7. ~ service vsftpd stop
  8. ~ service vsftpd status
  9. #CentOS7
  10. ~ yum install -y vsftpd
  11. ~ systemctl start vsftpd
  12. ~ netstat -antl | grep 21
  13. tcp6 0 0 :::21 :::* LISTEN
  14. ~ systemctl stop vsftpd
  15. ~ systemctl status vsftpd
  16. #CentOS6查看服务开机自启动
  17. ~ chkconfig --list | grep vsftpd
  18. vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
  19. ~ chkconfig vsftpd on
  20. ~ chkconfig --list | grep vsftpd
  21. vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  22. #查看所有的服务自启动状态
  23. ~ chkconfig --list
  24. #CentOS7查看服务开机自启动
  25. ~ systemctl list-unit-files | grep vsftpd
  26. ~ systemctl enable vsftpd
  27. ~ systemctl list-unit-files | grep vsftpd
  28. vsftpd.service enabled
  29. #查看所有的服务自启动状态
  30. ~ systemctl list-unit-files

1.1.6 网络设置

网卡名
CentOS 6.x 网卡名是:eth0;CentOS 7.x 网卡名是:ens33
网络配置命令
CentOS 6.x 中:ifconfig / setup;CentOS 7.x 中:ip / nmtui
网络服务
CentOS 6.x 默认使用:network 服务
CentOS 7.x 默认使用:NetworkManager 服务(network 作为备用)
范例:网络设置

  1. #CentOS6网络设置命令
  2. ~ which ifconfig
  3. /sbin/ifconfig
  4. ~ rpm -qf /sbin/ifconfig
  5. ~ rpm -qf $(which ifconfig)
  6. net-tools-1.60-114.el6.x86_64
  7. ~ which setup
  8. /usr/sbin/setup
  9. ~ rpm -qf /usr/sbin/setup
  10. ~ rpm -qf $(which setup)
  11. setuptool-1.19.9-4.el6.x86_64
  12. #CentOS7网络设置命令
  13. ~ nmtui
  14. ~ ip address show
  15. #CentOS6的网络服务状态
  16. ~ service network status
  17. #CentOS7的网络服务状态
  18. ~ systemctl status NetworkManager
  19. ~ systemctl status network

image.png

1.1.6.1 CentOS 7.x 配置文件/网卡改名

网卡配置文件

  • 网卡配置目录:/etc/sysconfig/network-scripts
  • 配置管理命令:ifconfig / ip address show
  • 配置文件内容: :::info DEVICE=ens33 #设备名称
    NAME=ens33 #网卡名称
    BOOTPROTO=static #连接方式(dhcp/static)
    ONBOOT=yes #是否开机加载
    IPADDR=10.0.0.30 #IP地址
    PREFIX=24 #子网掩码(NETMASK=255.255.255.0)
    GATEWAY=10.0.0.2 #网关
    DNS1=114.114.114.114 #DNS ::: 注意:网卡配置文件内容,选项要大写,小写不报错,但是不会生效,参数可以小写
    范例:将CentOS 7网卡名改为eth0 ```bash

    方法1:

    ~ vim /etc/sysconfig/network-scripts/ifcfg-eth0 NAME=eth0 DEVICE=eth0 BOOTPROTO=none ONBOOT=yes IPADDR=10.0.0.30 PREFIX=24 GATEWAY=10.0.0.2 DNS1=223.6.6.6 DNS2=223.5.5.5

~ sed -i.bak -r ‘/^GRUB_CMDLINE_LINUX=/s#(.*)”#\1 net.ifnames=0”#g’ /etc/default/grub ~ grub2-mkconfig -o /boot/grub2/grub.cfg ~ reboot

方法2:

修改网卡配置文件名(建议将原配置文件备份)

cp -av ifcfg-ens33 ifcfg-eth0

修改网卡配置文件内容

~ vim ifcfg-eth0 NAME=eth0 DEVICE=eth0

修改grub配置文件

~ vim /etc/default/grub GRUB_CMDLINE_LINUX=”auto rhgb quiet net.ifnames=0 biosdevname=0”

在指定位置新增参数,关闭一致性命名规则

~ sed -i.bak -r ‘/^GRUB_CMDLINE_LINUX=/s#(.*)”#\1 net.ifnames=0 biosdevname=0”#g’ /etc/default/grub

更新grub配置文件,并加载新的参数

~ grub2-mkconfig -o /boot/grub2/grub.cfg

重启操作系统

~ reboot

两种方法本质是一样的,根据需要自行配置

<a name="PYG58"></a>
## 1.2 常见网络协议和端口
<a name="ZAwHk"></a>
### 1.2.1 网络地址和物理地址

- 网络地址:互联网协议地址(IP地址)为互联网上每一个网络或者主机分配一个逻辑地址,IP地址工作在网络层。
- 网络地址:32 bit

IP地址的分类:IPv4,IPv6

- 物理地址:物理地址(MAC地址)为每一个设备设置一个固定的硬件地址,MAC地址工作在数据链路层
- 物理地址:48 bit

MAC地址:00-23-5A-15-99-42
<a name="RyuoI"></a>
### 1.2.2 TCP/IP 五层常见协议
应用层协议:FTP(文件传输协议),HTTP(超文本传输协议),SMTP(电子邮件传输协议),Telnet(远程登录服务标准协议),DNS(域名解析协议)等<br />传输层协议:TCP(传输控制协议),UDP(用户数据报协议)等<br />网络层协议:IP,ICMP,ARP(地址解析协议)等<br />数据链路层协议:PPP协议等<br />物理层:不常用
<a name="mYZCJ"></a>
### 1.2.3 常见网络端口
端口配置文件:/etc/services
:::info
20/21    ftp服务                            文件共享(21是常见监听端口,20是用于传输数据)<br />22        ssh服务                            安全远程管理<br />23        telnet服务                        不安全远程管理<br />25        smtp服务:简单邮件传输协议        发信<br />465        smtp(SSL)                    发信<br />110        pop3:邮局协议                    收信<br />143        imap4                            收信<br />993        imap4(SSL)                    收信<br />80        www服务(http://)                网页访问<br />443        www服务(https://)            加密网页访问(使用SSL加密)<br />3306    mysql端口                        数据库连接端口<br />53        DNS端口                        域名解析端口
:::
<a name="TSKhf"></a>
## 1.3 Linux下网关路由配置
<a name="Vb8H7"></a>
### 1.3.1 路由器:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/2555283/1654565362419-3746907a-cd0e-4d15-a6c7-9e54dee0847a.png#clientId=u0b20b745-d79d-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=167&id=u564f4c42&name=image.png&originHeight=167&originWidth=452&originalType=binary&ratio=1&rotation=0&showTitle=false&size=64026&status=done&style=none&taskId=u48df5a03-af48-4a0f-99d3-a484b125760&title=&width=452)<br />路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成,路由器只关心网络的状态和决定网络中最佳路径。路由的实现依靠路由器中的路由表来完成。<br />为了实现路由,路由器需要做下列事情:

- 分隔广播域和冲突域
- 选择路由表中到达目标最好的路径
- 维护和检查路由信息
- 连接广域网
- 工作在第三层:网络层

![image.png](https://cdn.nlark.com/yuque/0/2022/png/2555283/1654565381423-ec8f9c55-a2f9-46bc-8c75-95183c8327c9.png#clientId=u0b20b745-d79d-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=241&id=u46147207&name=image.png&originHeight=241&originWidth=420&originalType=binary&ratio=1&rotation=0&showTitle=false&size=92158&status=done&style=none&taskId=u27d7b0e7-6053-41c8-8a82-b198fc90347&title=&width=420)
:::info
路由器可以起到连接广域网的功能。<br />家用路由器是集成产品:集成了交换机,路由器,无线AP。
:::
<a name="jqiIe"></a>
### 1.3.2 网关和路由总结
> 路由设备来连接不同的网段,路由器最基本的功能就是跨网段通信
> 交换设备(交换机)只能在局域网内部或者是同一个网段进行通信
> 交换机在同一个网段通信,路由器可以使不同网段通信
> 路由器另一个基本功能就是路由选择
> 路由器会根据所使用的路由协议的优先级和开销来进行选择路径。
> 路由器默认使用最短路径优先的原则进行匹配路由,该使用场景主要是小型局域网,网络规模简单,网络带宽小的场合,路由器消耗的资源最少。
> 路由协议分为动态路由(适合于中大型网络) 和 静态路由(适合于小型网络)

路由:

- 不同网段数据转发
- 路由选择

网关:

- 不同网段数据转发
- 路由选择
- 默认路由(是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由。目的地不在路由器的路由表里的所有数据包都会使用)
- NAT转换(地址转换协议)
<a name="RS8DV"></a>
### 1.3.3 网关和路由设置
> 任何一个网络通信的主机都有路由表,包括Linux,Windows以及路由器等网络设备都有路由表
> Route Record:
> - 网络路由:表示一个网段的路由
> - 主机路由:表示一个主机的路由
> - 默认路由:所有未知网段的路由 0.0.0.0/0
> 
路由表组成:四个组成部分
> - 目标网络Destination:目标主机所在的网络ID
> - 子网掩码Netmask:目标网络的子网掩码
> - 接口lface:当前网络设备的出口
> - 网关Gateway:下一个路由器的邻近当前路由器的接口IP,下一跳Next Hop
> - 开销Metric:费用,值越小,优先级越高

```properties
route -n #查看系统中的路由表信息

临时:
  网关:
    添加默认路由:route add default gw <ip_address>
    删除默认路由:route del default gw <ip_address>
    添加主机/网络路由:route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
    删除主机/网络路由:route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
永久:
网关:
    /etc/sysconfig/network-scripts/ifctg-eth0

范例:

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         10.0.0.2        0.0.0.0         UG    0      0        0 eth0

#临时生效
~ route add -net 139.198.105.0/24  gw 10.0.0.2
~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
139.198.105.0   10.0.0.2        255.255.255.0   UG    0      0        0 eth0

#永久生效
~ vim /etc/sysconfig/network-scripts/ifctg-eth0
GATEWAY=10.0.0.2

范例:使用 ip 命令进行路由操作

ip route show # 显示系统路由
ip route add default via 192.168.1.254   # 设置系统默认路由
ip route list                 # 查看路由信息
ip route add 192.168.4.0/24  via  192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
ip route del default          # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由

1.4 Linux 下网络管理命令

1.4.1 DNS命令

nslookup:域名解析测试命令

范例:使用nslookup命令

~ nslookup www.baidu.com
Server:         114.114.114.114
Address:        114.114.114.114#53

Non-authoritative answer:
Name:   www.baidu.com
Address: 183.232.231.174
Name:   www.baidu.com
Address: 183.232.231.172

配置文件:
局部:/etc/sysconfig/network-scripts/ifctg-eth0

~ vim /etc/sysconfig/network-scripts/ifctg-eth0
DNS1=<IPADDRESS>
DNS2=<IPADDRESS>

全局:/etc/resolv.conf
nameserver ip

~ vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8

范例:常用的DNS服务器地址

#常用的DNS服务器
DNS_SERVER_IP:
114.114.114.114,8.8.8.8
#阿里
223.5.5.5,223.6.6.6
#百度
180.76.76.76
#腾讯
119.29.29.29,119.28.28.28,
182.254.118.118,182.254.116.116

相关配置文件:/etc/hosts

1.4.2 修改/etc/hosts和DNS的优先级

cat /etc/nsswitch.conf | grep ^hosts
hosts: files dns

1.4.3 网络查看命令

1.4.3.1 netstat

netstat 查看系统的网络连接状态,路由信息,接口等。
常用选项

-a:显示所有活动连接 -n:以数字形式显示 -t:查看TCP协议相关信息 -u:查看UDP协议相关信息 -p:显示PID和进程名 -l :监听

范例:netstat 常用组合

~ netstat -antp
~ netstat -tunlp

1.4.3.2 traceroute

traceroute:测试从当前主机到目的主机之间经过的网络节点数,用于追踪数据包在网络上传输时的全部路径,它默认发生的数据包大小是 40个字节,默认使用 ICMP 协议
常用选项:

-p :使用UDP端口进行测试,默认端口为33434 -q 3:指定测试时发送的数据包个数(即测试次数,默认数据包个数为3) -n :以IP的方式进行连接测试,避开DNS的解析

注意:该命令在NAT模式时无法实现效果,请切换到桥接模式(VMware 官方回复)
范例:traceroute 常用组合

~ traceroute 183.232.231.172
~ traceroute -n 183.232.231.172

~ traceroute -q 1 183.232.231.172

1.4.3.3 ping

ping:测试网络连通性
常用选项:

-i :指定间隔时间 -c :指定ping的次数 -s :指定数据包的大小 -W :指定超时时间

1.4.4 地址解析命令

arp:地址解析协议,将IP地址解析成MAC地址
常见选项:

-a:查看所有 -d:IP地址,删除某条ARP记录

范例:arp 使用

~ arp -a
? (10.0.0.1) at 00:50:56:c0:00:08 [ether] on eth0
? (10.0.0.2) at 00:50:56:e7:4a:8b [ether] on eth0
? (10.0.0.10) at <incomplete> on eth0

1.4.5 网络探测命令

nmap:网络探测扫描命令 #此命令默认未安装
常见选项:

-sP:探测某个网段内有哪些主机是存活的 -sT:探测某个主机上开启了哪些TCP端口,扫描的端口均为服务的默认端口。

范例:nmap 常用组合

~ nmap -sP 10.0.0.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2022-06-23 00:03 CST
Nmap scan report for 10.0.0.1
Host is up (0.0011s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.0.0.2
Host is up (0.00066s latency).
MAC Address: 00:50:56:E7:4A:8B (VMware)
Nmap scan report for 10.0.0.40
Host is up (0.00050s latency).
MAC Address: 00:0C:29:4B:20:62 (VMware)
Nmap scan report for 10.0.0.254
Host is up (-0.087s latency).
MAC Address: 00:50:56:EA:A5:37 (VMware)
Nmap scan report for 10.0.0.50
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 4.21 seconds

~ nmap -sT 10.0.0.40
Starting Nmap 7.70 ( https://nmap.org ) at 2022-06-23 00:05 CST
Nmap scan report for 10.0.0.40
Host is up (0.00087s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: 00:0C:29:4B:20:62 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.43 seconds

1.4.6 远程连接工具

Windows -> Linux :Xshell、SecureCRT、MobaXterm等 Linux -> Windows :rdesktop 命令(图形界面) Linux -> Linux :ssh 命令

2 SSH 安全远程管理

2.1 什么是ssh

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

2.2 ssh的登录验证模式

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

  • 账号密码验证:

image.png
账号密码密码认证过程中传输的是用户的账户名和密码,密码具有足够的复杂度才能具有更高的安全性。
Linux 主机之间的远程管理工具是 ssh 命令,所以我们直接使用 ssh 进行远程登录。
格式: :::info ssh 用户名@IP地址
例如:ssh root@139.198.105.99 ::: Windows 远程登录Linux主机一般使用第三方工具,比如:Xshell 等工具 :::info 服务器会自行生成一对密钥对,将私钥保存到服务器中,公钥发送给客户端。客户端通过口令进行验证时,服务器的公钥会对口令进行加密处理后发送到服务器,服务器通过私钥将公钥加密的数据进行解密处理。因为密钥对是严格一对,所以公钥加密处理的数据,可以被私钥解密。否则将处理失败错误。
缺点:加密的次数是一次,即口令的加密加密处理。单向密钥对验证。 :::

  • 密钥对验证:

image.png
密钥对是一对,即公钥和私钥,简单理解为公钥是锁(用于加密使用),私钥是钥匙(用于解密使用)。

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

注意:若第三个步骤对比结果失败,则 Server 端会通知 Client 端此公钥未在本机注册,无法验证登录。 :::info 密钥对验证则是双向的密钥对验证,就不需要进行使用密码。

  1. 客户端发起连接请求(在发起连接请求的时候,服务器端要求就将自己的公钥发给客户端),并且客户端也会将本地生成的密钥对中的公钥发送给服务器端。客户端问服务器是否存了”我”公钥文件。如果服务器有客户端公钥文件则会进行对比,比对一致后方可进行连接请求。如果没有存则就会向客户端发送”此公钥未在服务器中注册”
  2. 当客户端公钥文件比对一致后,则会生成”challenge(质疑)”使用客户端公钥加密回送。
  3. 客户端会使用客户端的私钥将 “challenge(质疑)”进行解密处理。解密处理后的结果则通过服务器端的公钥进行加密处理后发送给服务器。服务器收到后再通过服务器端的私钥进行解密。
  4. 小总结:客户端还是服务器端都是独立拥有各自的私钥,然后还拥有其他的公钥,这样就可以用别人的锁加密发送文件,别人再使用自己的钥匙解密发送过来的加密文件。

例如将 challenge 看成是一串字符串”123456”,服务器端拿着客户端的公钥进行加密后的结果是”abcded”发送给客户端。
> 客户端收到加密”abcdef”,用客户端私钥进行解密为”123456”。此时客户端会再使用服务器端的公钥进行加密,加密结果为”a1b2c3”发送给服务器端。
> 服务器端收到加密”a1b2c3”,用服务器端私钥进行解密为”123456”。此时就会发现,challenge 的信息和最开始发送给客户端的信息是一致的,则建立连接成功。
服务器端将会有三个密钥对的信息。即服务器公钥,服务器私钥,客户端公钥。
客户端将会有三个密钥对的信息。即客户端公钥,客户端私钥,服务器端公钥。 ::: image.png
注意:前提客户端生成一对密钥,当S给C发送加密随机字符串,给C,S的公钥,加密是用的C的公钥,解密后在用S的公钥进行加密发送给S,S在使用私钥解密得到随机字符串。 :::warning 公钥用于以特殊格式加密明文,私钥用于以特殊格式解密密文。 :::

2.3 配置 ssh 服务

2.3.1 环境准备

准备好两台 Linux 操作系统的主机,配置好相关网络参数,实现可以正常通信,并将主机名修改为不同的名字。
临时关闭防护功能:

iptables -F     #清空防火墙规则
setenforce 0    #临时关闭SELinux

永久关闭防护功能:

chkconfig iptables off #设置防火墙开机不自启动
sed -ri '/^SELINUX=/s#(.*)=.*#\1=disabled#g' /etc/selinux/config #永久关闭SELinux
或者
sed -i '7s#enforcing#disabled#' /etc/selinux/config

注意:以上两条命令执行后,需要重启服务器才能生效,切记。 :::warning SELinux 安全机制系统比起通常的 Linux 系统来说,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。
特点:

  • 对访问的控制彻底化
  • 对于进程只赋予最小的权限
  • 防止权限升级
  • 对于用户只赋予最小的权限 :::

    2.3.2 用户密码验证

    Linux 主机之间的远程管理工具是 ssh 命令,所以我们直接使用 ssh 进行远程登录
    格式: :::warning ssh 用户名@IP地址
    例如:ssh root@139.198.105.99 ::: Windows 远程登录 Linux 主机一般使用第三方工具,比如Xshell 等工具
    格式: :::warning ssh root@139.198.105.99 :::

    2.3.3 密钥对验证

    Linux 主机之间的密钥对登录验证
  1. 客户端生成密钥对文件 ```bash ssh-keygen -t rsa -b 2048

-t:指定加密类型(rsa/dsa等) -b:指定密钥对加密长度

询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下 询问2:是否对密钥文件进行加密 加密,若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件 不加密,若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录


2. 将公钥文件上传至服务器。
```bash
ssh-copy-id 用户名@服务器IP地址
#该用户名和要用来登录服务器的用户名一致
  1. 客户端尝试登录服务器

    ssh 用户名@服务器IP地址
    #密钥对验证优先级大于账户密码验证
    

    Windows 使用密钥对登录Linux

  2. 使用Xshell 自带的密钥对生成向导生成密钥对。(Xshell 生成密钥对将公钥和私钥何在一起)

image.png
Xshell -> 工具 -> 新建用户密钥生成向导

  1. 将公钥导入到Linux主机的指定用户下的指定公钥配置文件内,后面用哪个用户登录就放在谁家目录里,以 root 用户为例。

将公钥的内容添加到 Linux 主机的 ~/.ssh/authorized_keys
在root 家目录下,找到 .ssh 目录,然后再里面创建 authorized_keys 文件,并且将会公钥写入进去

  1. 使用 Windows 尝试登录指定用户。

    2.3.4 禁止使用密码登录

    当我们学会了使用密钥对登录进行验证,建议生产环境下将账号密码功能关掉
    配置文件:/etc/ssh/sshd_config
    选项: :::warning PasswordAuthentication no ::: 注意:ssh 的配置文件中,并不是注释掉的就是不生效的,有些是默认生效,需要修改时一定要取消注释再修改
    image.png

    2.3.5 禁止使用root远程登录

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

    2.3.6 修改默认端口,限制ssh监听IP

    修改默认端口:ssh 作为一个用来远程登录服务器的工具,需要特别的安全,默认情况下使用 TCP 的22端口,若不进行修改,很容易被利用遭到攻击,所以我们一般都会修改端口,尽量修改一个高位端口(范围:1-65535)
    配置文件:/etc/ssh/sshd_config
    选项: :::warning Port 9527
    六日:ssh -p 9527 用户名@服务器IP ::: 限制 ssh 监听IP:有些服务器则会安全级别更高一些,不允许使用外网直接登录,只有通过局域网才能登录。我们可以再机房里设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可。
    配置文件:/etc/ssh/sshd_config
    选项: :::warning ListenAddress 139.198.105.99 ::: 当端口发送变化时,原有的公钥信息也会随之修改。

    2.4 ssh服务相关命令

    scp:安全的远程文件复制文件
    SCP 是 Secure Copy 的简写,用于在 Linux 下进行远程拷贝文件的命令,类似于命令有cp,scp 传输是加密的,所以可能会稍微影响一点速度,另外,scp 还非常不占资源,不会提高多少系统负荷。
    格式,scp 本地文件 用户名@服务器IP地址:目录
    例如:scp /root/test_scp.txt root@139.198.105.99:/tmp :::warning -P 端口 #若端口不是默认端口,则需要使用此格式指定端口 ::: sftp:安全的文件传输协议
    sftp 是 Secure FileTransforProtocol 的缩写,安全文件传递协议,sftp 与ftp 有着几乎一样的语法和功能,由于这种传输方式使用了加密/解密技术,所以sftp 比 ftp 更加安全一些,但是传输效率比 ftp 要低的多。
    格式:sftp 用户名@服务器IP地址 :::warning sftp
    -oPort=端口 #若端口不是默认22,则需要使用此格式指定端口 ::: 交互命令: :::warning help:查看在交互模式下支持哪些命令
    pwd/lpwd:pwd是查看服务器所在路径,lpwd是查看客户端所在路径
    ls/lls:ls是查看服务器对当前目录下的文件列表,lls是查看客户端当前所在路径的所有文件列表
    put:将客户机中的指定文件上传到服务器端
    get:将服务器端的指定文件下载到客户机的当前所在目录
    rm:删除掉服务器端的指定文件
    quit:退出 sftp 的交互模式,断开和服务器之间的连接 ::: 范例:

    ~ sftp root@10.0.0.30
    Connecting to 10.0.0.30...
    #列出所有的可用命令
    sftp> help
    #查看远程服务器路径
    sftp> pwd
    Remote working directory: /root
    #查看当前服务器路径
    sftp> lpwd
    Local working directory: /root
    #查看远程服务器的文件列表
    sftp> ls
    #查看当前服务器的文件列表
    sftp> lls
    

    3 TCP Wrappers(简单防火墙)

    3.1 TCP Wrappers 简介

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

  2. 查看对应服务命令所在位置

    which sshd

  3. 查看指定命令执行时是否调用 libwrap.so

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

结合:

ldd $(which sshd) | grep libwrap.so

3.2 TCP Wrappers 工作原理

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

  1. 优先查看 hosts.allow ,匹配即停止
  2. 允许个别,拒绝所有:hosts.allow 文件添加允许的策略,hosts.deny 文件添加 all
  3. 拒绝个别,允许所有:hosts.allow 文件为空,hosts.deny 文件添加单个拒绝的策略

    3.3 TCP Wrappers 的使用

    TCP Wrappers 的使用主要是依赖两个配置文件 /etc/hosts.allow,/etc/hosts.deny,以此来实现访问控制,默认情况下, /etc/hosts.allow,/etc/hosts.deny 什么都没有添加,此时没有限制。编写配置文件后不需要进行重启服务或者机器,立刻生效。
    配置文件编写规则:

    service_list@host: client_list

    • service_list:是程序(服务)的列表,可以是多个,多个时,使用 “,” 隔开
    • @host:设置允许或者禁止他人从自己的哪个网口进入。这一项不写,就代表全部
    • client_list:是访问者的地址,如果需要控制的用户较多,可以使用空格或者 “,” 隔开

格式如下:

基于IP地址:192.168.88.1 192.168.88.(网段)
基于主机名:www.kubesphere.com .kubesphere.com较少用
基于网络/掩码:192.168.0.0/255.255.255.0
内置ACL:ALL(所有主机),LOCAL(本地主机)

实战案例:

  • 拒绝单个IP地址使用 ssh 远程连接 ```bash

    配置文件:

    hosts.allow 为空

~ vim /etc/hosts.deny sshd:10.0.0.160


- 拒绝某一个网段使用 ssh 远程登录
```bash
#配置文件:
hosts.allow 为空

~ vim /etc/hosts.deny
sshd:10.0.0.
  • 仅允许单个IP地址使用ssh远程连接 ```bash

    配置文件:

    hosts.deny sshd:ALL

~ vim /etc/hosts.allow sshd:10.0.0.160 ```