
==ssh密钥对登录原理 :首先,客户端事先生成一对密钥,并将公钥保存在服务器上的授权文件中。接下来,客户端不用密码,而是用密钥对来验证身份。客户端用服务器的公钥来加密自己的公钥,然后把加密后的信息发送给服务器。服务器用自己的私钥解密这些信息,得到客户端的公钥,并检查是否与服务器存储的客户端公钥匹配。如果匹配,服务器会进一步确认这个公钥是客户端创建的,于是发送一个加密的质询信息给客户端,让客户端用它的私钥来解密。如果客户端能正确解密并用服务器的公钥重新加密后发回,服务器就能确认这个公钥属于客户端,从而验证了客户端的身份。==
  SFTP,SCP基于SSH协议
  
 Linux基于Unix,提供多种类Unix系统选择。
 AIX和HPUX是Unix系统,区别于Mac OS。
 BSD  一种unix的操作系统
跳板机 提供临时的、免密登录至后台服务器的服务
 堡垒机 在跳板机的基础上提供了身份验证、授权控制等功能,有效防止内部误操作,此外提供安全审计、追溯和事故分析的功能,以便于故障定位和责任认定
 jumpserver 开源的堡垒机
撞  库:由于数据库之间的数据相似,就会出现撞库
 伪设备文件:  
   /dev/zero    /dev/null   /dev/urandom 生成随机字符的文件
生成随机密钥脚本
``` shell
    #!/bin/bash  
   
     read -p "请输入要生成密码的长度: " len  
     read -p "请输入要生成密码的个数: " num  
   
     for ((;;))  
     do
       #这个是生成随机字符,tr -dc就是来保留或者过滤字符串的过滤组分  
       pass=$(head -5 /dev/urandom | tr -dc a-zA-Z0-9\@\_\(\-\* | cut -c 1-$len)  
         xpass=$(echo $pass | awk '/[a-z]/&&/[A-Z]/&&/[0-9]/&&/[\@\_\(\-\*]/{printf $1"\n"}')   #输出指定规格的密码
         #对密码规格要求的判断
           if [ -n $xpass ]  
           then  
                passwd=(${passwd[*]} $xpass)  
           fi  
           if [ ${#passwd[*]} -eq $num ]  
           then  
                for i in ${passwd[*]}  
                do  
                     echo $i  
                done  
                        break  
             fi  
     done
```
``` shell
  #两种死循环
      for ((;;))
      while true
 ```
### SSH命令
SSH(Secure SHell)是一个命令行程序,用于安全地管理远程计算机。以下是几个常用的SSH命令:
- **远程登录**:
    ``` shell
     ssh 用户名@服务器IP地址
     ```
     
     例如:
    ``` shell
     ssh root@192.168.88.20
     ```
     
 - **密钥对验证**:
     
     1. **生成密钥对**:
        ``` shell
        ssh-keygen -t rsa -b 2048
         ```
         
         `-t`指定加密算法,`-b`指定密钥长度。
     2. **将公钥上传至服务器**:
        ``` shell
           ssh-copy-id 用户名@服务器IP地址
         ```
         
         `-i`指定公钥文件的位置。
     3. **使用密钥对登录**:
         ``` shell
         ssh -p 端口号 用户名@服务器IP地址 
         ```
         
 - **安全的远程文件复制**:
    ```
     scp 本地文件 用户名@服务器IP地址:远程目录
     ```
     
     如果SSH服务使用非默认端口,则需指定端口:
     ```
     scp -P 端口号 本地文件 用户名@服务器IP地址:远程目录
     ```
     
### SSH配置文件
SSH的主要配置文件位于`/etc/ssh/sshd_config`。**root和普通用户的.ssh目录 700 和authorized_keys 文件是600权限**以下是几个关键的配置项:
- **禁止密码登录**:不推荐设置
    
     ``` shell
     PasswordAuthentication no
     ```
     
     这一行取消注释后,将不允许使用密码进行登录。
     
 - **禁止root远程登录**: 推荐在练习时使用 记得想创建一个用户 并用visudo设置权限
    ```
     PermitRootLogin no
     ```
     
     此配置项设置为`no`后,root账户将不能通过SSH远程登录。
     
 - **修改默认监听端口**: 
     - ps :建议在生产环境中修改默认的SSH端口号。
         配置文件 /etc/ssh/sshd_config 在这个文件加注释的代码如果修改是会按默认配置生效
    ```
     Port 新端口号
     ```
     
     修改后的端口号需要在客户端连接时指定:
    ```
     ssh -p 新端口号 用户名@服务器IP地址
     ```
     
 - **修改SSH监听IP**:使用场景:部署服务时,使用公网接口连接至公网交换机并通过路由器接入互联网,提供对外服务;而内网接口则仅限于用于服务器间的数据传输、备份等内部通信。在进行监听IP设置时,对于内外网分离场景下的服务器,应确保SSH等服务只监听内网接口,有效阻止了互联网用户直接访问内部系统。(内外网分离才使用)
    
     ```
     ListenAddress IP地址
     ```
     
     这样可以限定SSH服务只监听特定的IP地址。
 实验 请提前准备2个网卡 并把ens33的网卡信息复制给ens36 假设地址是192.168.90.120
    ``` shell
     
  vim /etc/ssh/sshd_config 
      ListenAddress 192.168.90.120
      这样就只让ssh监听192.168.90.120主有这个IP才可以远程登录
 ```
 #### TCP Wrappers
 是一个用于控制访问的框架,它允许系统管理员定义哪些主机可以访问特定的服务。
 #### TCP Wrappers的工作原理
 ![[Pasted image 20240911160842.png]]
 黑名单:放行所有,拒绝个别   适合开放性服务器:apache、nginx、iis
 白名单:拒绝所有,放行个别    适合 非开放性服务:ssh,telnet
 白名单优先级比黑名单高![[Pasted image 20240911204806.png]]
 libwrap.so.0 这是受防火墙过滤的函数文件
 #### 配置文件编写规则
配置文件的每一行遵循以下格式:
 ```
 service_list @ host : client_list
 ```
其中:
- `service_list`:是程序(服务)的列表,可以是多个,多个时用逗号隔开。
 - `@ host`:设置允许或禁止他人从自己的哪个网口进入。如果不写,则代表全部。
 - `client_list`:是访问者的地址,如果需要控制的用户较多,可以使用空格或逗号隔开。
### 示例配置
- **拒绝单个IP使用SSH远程连接**:
    ```
     hosts.deny: sshd:192.168.88.20
     ```
     
     `hosts.allow`文件为空。
     
 - **拒绝某一网段使用SSH远程连接**:
     
     
     ```
     hosts.deny: sshd:192.168.88.
     ```
     
     `hosts.allow`文件为空。
     
 - **仅允许某一IP使用SSH远程连接**:
    ```
     hosts.allow: sshd:192.168.88.20
     hosts.deny: sshd:ALL
     ```
     
### 判断方式
- **查看对应服务命令所在位置**:
    
     ```
     which sshd
     ```
     
 - **查看指定命令执行时是否调用libwrap.so文件**:
    ```
     #ldd用来查看服务调用了哪些函数文件 即.so结尾的文件
     ldd /usr/sbin/sshd | grep libwrap.so
     ```
 防火墙规则![[Pasted image 20240911215713.png]]
 ACL 访问控制列表 来限制特定用户的上网行为
 ## DHCP 
 是一个工作在应用层的局域网网络协议,使用UDP不可靠传输协议工作,dhcp主要在工作中主要用于批量装机 端口 67       tftp 69端口  dhcp服务日志保存在 /var/log/messages中
![[Pasted image 20240918095558.png]]
服务器连接原理:==首先客户端通过广播DHCP Discover数据包来寻找可用的DHCP服务器;服务器接收到请求后,从其可用的IP地址池中选择一个地址,并通过DHCP Offer数据包将此地址及相关配置信息发送给客户端;客户端收到并决定接受后,会发送DHCP Request确认;最后,DHCP服务器通过发送DHCP ACK数据包正式确认分配,客户端据此设置其IP,网关等网络参数并开始通信。但是如果此时无DHCP服务器可用,DHCP客户机会使用169.254.0.0/16中随机的一个地址,并且每隔5分钟再进行尝试。==
     如何处理客户端的续租和释放IP地址的情况?
         设备默认有最长租约时间和默认租约时间,续租周期通常是基于默认租约时间的50%,例如十分钟的有效租期对应于每五分钟进行一次续租尝试。如果续租失败,设备将会等待一段时间后再尝试续租,若连续多次续租失败,则将使用剩余的最大租约时间继续使用IP地址,直至到期或释放。
搭建DHCP服务器实验
  ``` shell
       yum -y install dhcp  安装DHCP服务
        cd /etc/dhcp/   dhcp服务的配置文件目录
        vi dhcpd.conf    dhcp规则文件  发现是空的提示到/usr/share/doc/dhcp下拿
        cp -a  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  ./dhcpd.conf 直接把规则复制过来
        在vim dhcpd.conf
         写入的规则
         注意: 全局和局部的配置  至少要声明一个地址池和本机网段相同也就是这个   192.168.90.230 192.168.90.249地址池 
         subnet 192.168.90.0 netmask 255.255.255.0 {
           range 192.168.90.230 192.168.90.249;
           option domain-name-servers 223.5.5.5,8.8.8.8;
           option routers 192.168.90.2;
           option broadcast-address 192.168.90.255;
           default-lease-time 600;
           max-lease-time 7200;
         }
         systemctl enable --now dhcpd  启动DHCP服务
         netstat -anpu  | grep :67  查看服务是否正常启动
         tail -f /var/log/messages  查看DHCP服务租约日志的文件
  
  ```
 规则文件解释
 ![[1726058296182.jpg]]  
 注意事项 
      ![[Pasted image 20240911203801.png]]