尚硅谷 Linux网络服务&数据库 笔记

目录

首先说明我使用的环境

[root@C7B1 filesrc]# uname -a
Linux C7B1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@C7B1 filesrc]# cat /proc/version 
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
[root@C7B1 filesrc]# cat /etc/issue
\S
Kernel \r on an \m
[root@C7B1 filesrc]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

以下实验,如无特殊说明均指的是 CentOS7 关闭防火墙与SELinux

网络基础服务

CentOS6与CentOS7区别

常见命令

项目 CentOS6.x CentOS7.x 区别
文件系统 ext4 xfs(性能好,速度快) 使用的时候ext4的瓶颈都很难达到,感知不强
内核 2.6.x-x 3.10.x-x 内核存在大升级导致防火墙等变化
防火墙 iptables firewalld 后者优秀,感知不强,短期不会取而代之,大多数人习惯安装7后再重装iptables
默认数据库 MySQL MariaDB 两者几乎相同,更换只是防止版权纠纷,MySQL优化方案比较成熟,短期不会取而代之
时间同步 ntpq -p chronyc sources
修改时区 /etc/sysconfig/clock加入ZONE=“Asia/Shanghai” timedatectl set-timezone Asia/Shanghai 7的命令实际上就是修改了6的配置文件
修改语言 /etc/sysconfig/i18n写入LANG=“zh_CN.UTF-8” localectl set-locale LANG=zh_CN.UTF-8 这个指的是终端的语言,自己不要改,怕不支持给乱码
主机名 /etc/sysconfig/network写入 /etc/hostname写入或者hostnamectl set-hostname XXX,全是永久生效 主机名有一个设置要求,完整主机名是主机名.localhost.localdomain,不遵守也问题不大

网络命令

操作 CentOS6.x CentOS7.x
启动服务 service 服务名 start systemctl start 服务名
关闭服务 service 服务名 stop systemctl stop 服务名
重启服务 service 服务名 restart systemctl restart 服务名
查看所有服务状态 service --status-all systemctl list-units
查看某个服务状态 service 服务名 status systemctl statu 服务名
设置自启动 chkconfig 服务名 on systemctl enable 服务
设置不自启动 chkconfig 服务名 off systemctl disable 服务
查看所有自启动状态 chkconfig --list systemctl list-unit-files

CentOS7中所有的服务后面加上了.service,例如httpd.service这个写法的变化在CentOS7.0.x,CentOS7.1.x是必须的,但是后来RedHat加不加都可以了

网络配置

项目 CentOS6.x CentOS7.x
网卡名 eth0 ens33(7.0-7.5是ens+随机数)
网络配置 ifconfig/setup ip/nmtui
网络服务名 network NetworkManager(network作为备用)

网卡配置与网卡修改

网卡的配置文件在/etc/sysconfig/network-scripts/ifcfg-enp0s3

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp							# 网络连接模式 dhcp动态,static静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3								# 网卡名
UUID=ddc655f4-514a-499e-bbca-8dd27fa91684
DEVICE=enp0s3							# 设备名
ONBOOT=yes								# 开机加载

和CentOS6比起来就是多了IPv6的配置,注意大小写,等号左面大写,右面小写,如果可以用nmtui解决不要用这个

将enp0s3换为eth0

[root@bogon ~]# cd /etc/sysconfig/network-scripts/						# 进入目录
[root@bogon network-scripts]# ls ifcfg-enp0s3
ifcfg-enp0s3
[root@bogon network-scripts]# cp -a ifcfg-enp0s3 ifcfg-enp0s3.back		# 备份原文件
[root@bogon network-scripts]# mv ifcfg-enp0s3 ifcfg-eth0			    # 修改文件名
[root@bogon network-scripts]# vim ifcfg-eth0						   # 修改配置文件

修改网卡配置信息,改两处

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=enp0s3
+ NAME=eth0
UUID=ddc655f4-514a-499e-bbca-8dd27fa91684
- DEVICE=enp0s3
+ DEVICE=eth0
ONBOOT=yes

修改GRUB配置,关闭一致性命名规则(就是不让内核算名字)

[root@bogon network-scripts]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
- GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
+ GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"

更新配置文件加载新的参数,重启

[root@bogon network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@bogon network-scripts]# reboot

注意,CentOS7.x用的是Grub2,配置文件变化到/etc/default/grub/boot/grub2/grub.cfg是grub2-mkconfig生成的

常见的网络协议与端口

  • 网络地址与物理地址:

    IP地址是互联网协议地址,作用是为了给每个连接局域网的设备一个独一无二的数字地址,10.X.X.X,172.16.X.X-172.31.X.X.X,192.168.X.X是内网IP段

    MAC地址是物理地址,是为每一个设备设置一个固定的硬件地址,MAC工作在链路层,是一个12个16进制数

  • TCP/IP五层协议

    应用层:FTP,HTTP,SMTP,Telnet,DNS…

    传输层:TCP,UDP…

    网络层:IP,ARP,ICMP…

    数字链路:PPP,PPPop…

    物理层:不常用

  • 最常见网络端口

    配置文件在:/etc/service

    端口 服务 作用
    20/21 FTP 文件共享
    22 ssh 远程管理
    23 Telnet 不安全的远程管理
    25 smtp 发邮件
    465 smtp(SSL) 发邮件
    110 pop3 收邮件
    143 IMAP4 收邮件
    993 IMAP4(SSL) 收邮件
    80 www服务http 网页访问
    443 www服务https 加密网页访问
    3306 musql端口 数据库链接端口
    53 DNS端口 域名解析端口
    • FTP有两个端口,21是长期监听的,用于登录等验证,具体文件传输走20端口
    • SMTP有两个,一个是加密的,一个没加密
    • pop3只能收文本文件,想要图片需要IMAP

网关和路由

路由具有跨网段通信与路由选择的能力

  • 一个局域网中的设备可能需要访问另一个局域网中的设备,这个时候就需要路由器作为连接
  • 一个网段去另一个网段可能有很多路可以走,这时候根据路由协议的不同路由器可能会规划出不同的走法
    路由有动态路由与动态路由,静态是规定路线的,计算少,但是网络情况变化就要修改所有路由,适合局域网,动态是自动寻路的

网关

  • 网关首先必须是一个路由(可以是虚拟的也可以是真实的),所以具有路由转发与自动寻路的能力
  • 网关可以默认路由,只要是电脑处理不了的都会交给网关进行路由
  • 网关可以进行NAT转换例如一个内网IP想要访问公网IP,可以经过网关,网关可以记下下这个数据包,重新包装,转发(例如几下这个包是内网ip10.65.1.1发来的,然后将这个数据包打包,用自己的公网IP名义发出,等收到包后根据包的特征返还非10.65.1.1)

网关是逻辑概念,路由器是物理设备,路由器可以作为网关来使用。路由器是一个设备,而网关是一个结点(概念层)。应该说:路由器可以实现网关的功能。另外,网关的功能还可以由局域网中一台双网卡的机器(其中一块网卡接入广域网)来实现。

  • 查询路由表

    [root@bogon ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
    

    我们可以看到这是本机可以处理几个路由表,这是没有配配置网关的情况,当配置网关后,下方会显示一个默认路由,网关进行处理

  • 临时修改网关

    添加:route add default gw 网关的地址(路由器的地址)

    添加:route del default gw 网关的地址(路由器的地址)

    之后查询可以看到

    [root@bogon ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 eth0
    10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
    192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
    

    最上面这个0.0.0.0意思是任意ip,意思是,不在下面这几个ip列表的ip本机没法路由,就直接交给网关10.0.2.2路由

网络管理命令

  • DNS解析测试命令

    • 可以用过nslookup进行测试

      [root@bogon ~]# nslookup www.baidu.com
      Server:         192.168.43.1
      Address:        192.168.43.1#53
      
      Non-authoritative answer:
      Name:   www.baidu.com
      Address: 112.80.248.76
      Name:   www.baidu.com
      Address: 112.80.248.75
      www.baidu.com   canonical name = www.a.shifen.com.
      
    • 修改一张网卡的DNS

      /etc/sysconfig/network-scripts/ifcfg-eth0文件下DNS1=ip,DNS2=ip

      或者使用setup

    • 修改全局DNS

      /etc/resolv.conf文件下nameserver ip

      或者使用setup

    • hosts文件

      /etc/hosts文件下是静态的解析记录,优先级高于DNS解析

  • 网络查看命令

    查看网络连接与端口:netstat -tuln

    查看进程,网络连接与端口:netstat -tulnp

    查看所有不管是否连接的活动:netstat -an

  • 查询本机和目标主机经过的节点数,路由追踪

    traceroute [选项] 网址

    • -p 指定UDP端口测试(默认是ICMP)
    • -q n指定测试n次
    • n以IP的方式测试,避开DNS

    注意这个功能在虚拟机NAT模式下无法实现,想要实现开机桥接模式

    这个可以测试主机连接效率

    这个功能的原理就是尝试去ping网址,成功之后就去ping他指向的网站,但是这个功能成功率不断下降,原因是很多网址禁止了这种ping

  • 测试网络连通性

    ping 网站

    选项

    • -i 间隔时间
    • -cping的次数
    • -s数据包的大小
  • 地址解析,将ip转化为mac

    arp ip

    选项

    • -a查看曾经与本机连接过的所有设备的mac
    • -d ip删除某个ip的记录
  • 网络探测命令

    nmap命令,默认不安装

    选项

    • -sP 扫描网段内有哪些计算机,例如nmap -sP 10.0.2.0/24子网掩码为24,网段为10.0.2.0,对方必须关闭防火墙才扫的到
    • -sT 查询指定ip开了哪些端口
  • 常见的远程工具

    • Windows管理Linux:Xshell SecureCRT
    • Linux管理Windows:rdesktop
    • Linux管理Linux:SSH

SSH管理

  • 什么是SSH

    是Secure Shell缩写,与之前的Telnet比起来非明文传输,比较安全

  • SSH的登录验证模式

    有账户密码验证与密钥对连接两种模式

账户密码验证登录模式

  • 客户端尝试发送连接请求(问问能不能远程连接)
  • 服务器生成和发送公钥给计算机
  • 客户端使用公钥加密信息,发送
  • 服务器解密验证

密钥对的登录验证模式

  • 客户端向服务器发送连接请求和自己的客户端的公钥文件,服务器收到后直接返回服务器的公钥
  • 服务器检查到自己没有客户端公钥时:
    • 返回没有收到客户端的公钥
  • 服务器检查到有公钥的时候
    • 服务器返回一段使用客户端的公钥加密的challenge(随便找了点内容加密)
    • 客户端用客户端的私钥解密,然后用服务器的公钥加密
    • 服务器用服务器的私钥解密验证到和之前自己找的那个内容一样
  • 注意:在连接之前客户端要想办法把自己的公钥放在服务器上

SSH连接实验

  • 环境准备

    • 修改主机名以方便识别

      [root@bogon ~]# uname -n					# 查看主机名
      bogon
      [root@bogon ~]# vim /etc/sysconfig/network	# 修改主机名
      
      NETWORKING=yes
      - HOSTNAME=localhost.localdomain
      + HOSTNAME=KarryZenBook14s
      

      注意,主机名规范应该是X.Y但是不写成这种格式基本不影响,最多有两个waring

      如果需要立即生效还需要修改hosts文件

      [root@bogon ~]# vim /etc/hosts
      

      将原主机名(localhost.localdomain)换成新的(KarryZenBook14s)注意原主机名是一个整体,第一列那个localhost不是主机名

        - 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
        + 127.0.0.1   localhost KarryZenBook14s localhost4 localhost4.localdomain4
        - ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
        + ::1         localhost KarryZenBook14s localhost6 localhost6.localdomain6
      

      重启

    • 关闭防火墙和SELinux

      永久关闭防护(重启生效)

      [root@KarryZenBook14s ~]# chkconfig iptables off	# 关闭防火墙自启
      [root@KarryZenBook14s ~]# vim /etc/selinux/config
      

      修改SELinux配置

      #     disabled - No SELinux policy is loaded.
      - SELINUX=enforcing
      + SELINUX=disabled
      # SELINUXTYPE= can take one of these two values:
      

      临时关闭防火墙和SELinux

      [root@KarryZenBook14s ~]# iptables -F		# 注意,这里不是关闭了防火墙,是清空了防火墙规则
      [root@KarryZenBook14s ~]# setenforce 0
      
  • 用户密码验证连接(客户端Windows与Linux均可)

    ssh命令:ssh [-l username] [-p port] ip地址,这里-l指定用户不写会自动root登录,-p指定端口,不写默认22,如果虚拟机是NAT的还是要写端口,例如

    PS C:\Users\tclkr> ssh -l root -p 9001 127.0.0.1
    

    退出连接:exit或者Ctrl+D

  • 使用密钥对连接(客户端Windows与Linux均可)

    • 在客户端生成客户端的公钥与私钥

      PS C:\Users\tclkr> ssh-keygen -t rsa -b 2048
      Generating public/private rsa key pair.
      Enter file in which to save the key (C:\Users\tclkr/.ssh/id_rsa):
      # 询问存放位置
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      # 询问是否加密
      Your identification has been saved in C:\Users\tclkr/.ssh/id_rsa.
      Your public key has been saved in C:\Users\tclkr/.ssh/id_rsa.pub.
      The key fingerprint is:
      SHA256:xfRZov/YP/9Jas0OcLmTZ1vlPv3Ka3dmgUP65yENgHY tclkr@KarryZenBook14s
      The key's randomart image is:
      +---[RSA 2048]----+
      |          . . .  |
      |         o.o +   |
      |         o+Eo    |
      |        .......  |
      |        S  .++. .|
      |           .o*=o.|
      |            o***=|
      |             +XO@|
      |            .oB@&|
      +----[SHA256]-----+
      
      • -t加密方式,设置为rsa
      • -b密钥长度
      • 询问密钥位置的时候直接回车保存在默认的家目录的/.ssh/id_rsa,在Linux上可能是/root,也可能是/home
      • 之后询问是否加密私钥,这个是考虑到在不加密的情况下,如果别人获取到了计算机,就可以直接免密连接服务器,回车就是不加密,也可以连续两边输入私钥密码以后登录的时候输入私钥密码即可
    • 上传客户端公钥到服务器

      不必使用scp/ftp,ssh有自己的命令

      tclkr@KarryZenBook14s MINGW64 ~/Desktop
      $ ssh-copy-id -p 9001 root@127.0.0.1
      root@127.0.0.1's password:
      
      Number of key(s) added: 1
      
      Now try logging into the machine, with:   "ssh -p '9001' 'root@127.0.0.1'"
      and check to make sure that only the key(s) you wanted were added.
      

      ssh-copy-id可以直接复制,但是windows的PowerShell并没有这个命令,这里临时切换到了Windows的GitBash完成了操作,-p是指定端口

      命令执行完,你的公钥(HOME/.ssh/id_rsa.pub)内容就被追加到了(Linux的HOME/.ssh/authorized_keys)

      注意:这里填写的用户名就是未来你要登录的用户的用户名,不能写了一个用户还想免密登录到别的用户

      注意:不得直接上传公钥文件,如果不用ssh-copy-id,请将文件复制下来,自己创建文件然后粘贴,而不是使用ftp/scp直接上传,因为Windows与Linux的换行格式不同!

    • 登录服务器

      与密码登录的命令一样,只不过免密了

  • 禁用密码登录

    正常情况下是允许密钥对和密码同时登录的,但是密钥对明显安全等级高,可以禁用密码登录

    修改配置文件(是sshd,d是deamon缩写,是守护程序的意思,一般服务的进程有d,客户端进程没有d)

    [root@KarryZenBook14s ~]# vim /etc/ssh/sshd_config
    

    搜索Password修改即可,注意P大写

    #PasswordAuthentication yes
    #PermitEmptyPasswords no
    - PasswordAuthentication yes
    + PasswordAuthentication no
    # Change to no to disable s/key passwords
    #ChallengeResponseAuthentication yes
    
  • 禁止使用root远程登录

    由于很多事故是root误操作造成的,建议ssh的时候禁止root登录,可以在需要的时候由普通用户su过去

    [root@KarryZenBook14s ~]# vim /etc/ssh/sshd_config
    

    搜索RootLogin修改即可,注意R L大写

    #LoginGraceTime 2m
    - #PermitRootLogin yes
    + PermitRootLogin no
    #StrictModes yes
    
  • 修改ssh默认端口

    默认ssh是使用22口,为了防止攻击,我们可以修改端口,尽量使用1000-65536端口(1000-端酒容易被占用)

    [root@KarryZenBook14s ~]# vim /etc/ssh/sshd_config
    

    搜索Port修改即可,注意P大写

    # possible, but leave them commented.  Uncommented options change a
    # default value.
    
    - #Port 22
    + Port 9000
    #AddressFamily any
    #ListenAddress 0.0.0
    

    之后ssh -p 9000 ip,要是使用的是NAT,要修改NAT端口转发设置

  • 限制ssh监听IP

    在生产环境中服务器大都有两块网卡,一个对内,一个对外,对外的负责服务,对内的负责被管理,注意这里限制的是ssh被访问的ip,不是限制客户机IP,例如,有:客户机IP为10.1.1.1,服务器内网网卡IP为10.2.2.2,服务器外网网卡IP为:9.9.9.9,这个时候我们可以限制ssh只能连接到10.2.2.2不可连接到9.9.9.9,对公网暴露9.9.9.9这个IP。是限制服务器被连接的网卡IP不是客户机的IP!

    [root@KarryZenBook14s ~]# vim /etc/ssh/sshd_config
    

    搜索ListenAddress修改即可,注意L A大写

    #Port 22
    #AddressFamily any
    - #ListenAddress 0.0.0.0
    + ListenAddress 内网IP
    #ListenAddress ::
    
  • scp命令

    是一个安全的远程文件赋值命令,类似于命令cp,scp的传输是加密的,所以可能会影响一点速度,但是scp不是很站资源,不会提高多少系统负荷

    scp [-P 端口] [-r] 源文件 username@ip:目标位置 -P表示连接端口,scp默认是22口,-r递归复制,例如scp -P 9000 -r ./download/httpd-2.2.9.tar.bz2 liukairui@127.0.0.1:/home/liukairui

    当然,既然和cp差不多,也可以反向拷贝scp [-P 端口] [-r] username@ip:源文件 目标位置

    注意,ssh的端口是-p,scp的端口是-P

  • sftp命令

    是一个安全的文件学出协议,几乎与ftp语法功能一样,但是由于使用了加密技术,安全但是低效,使用示例:sftp -P 9001 liukairui@127.0.0.1

    执行后进入一个交互界面,在这里的命令可能与Linux的相似,不一样,这里面的是独立的

    • help获取帮助

    • pwdlpwd,pwd指的是服务器当前工作路径,lpwd是登录这个服务器前宿主机的位置,l是local的意思,例如

      sftp> pwd
      Remote working directory: /home/liukairui
      sftp> lpwd
      Local working directory: c:\users\tclkr
      
    • cdlcd,cd进入服务器目录,lcd进入客户端的某个目录

    • lslls,ls查看服务器目录,lls查看客户端的某个目录

      sftp> cd itisserverflod
      sftp> ls
      itisserverfile
      sftp> lcd Desktop
      sftp> lls
       驱动器 C 中的卷没有标签。
       卷的序列号是 E25C-B336
      
       C:\Users\tclkr\Desktop 的目录
      
      2021/03/04  11:24    <DIR>          .
      2021/03/04  11:24    <DIR>          ..
      2021/03/01  23:04            10,337 2021.xlsx
                     1 个文件         10,337 字节
                     2 个目录 212,300,955,648 可用字节
      
    • put,get上传和下载文件到服务器

      sftp> pwd
      Remote working directory: /home/liukairui/tmp
      sftp> put .wakatime.cfg
      Uploading .wakatime.cfg to /home/liukairui/tmp/.wakatime.cfg
      .wakatime.cfg                             100%   58    41.6KB/s   00:00
      sftp> ls -al
      drwxrwxr-x    2 liukairui liukairui     4096 Mar  5 08:41 .
      drwx------    6 liukairui liukairui     4096 Mar  5 08:40 ..
      -rw-rw-r--    1 liukairui liukairui       58 Mar  5 08:41 .wakatime.cfg
      
      sftp> pwd
      Remote working directory: /home/liukairui/test
      sftp> lpwd
      Local working directory: c:\users\tclkr\desktop
      sftp> get .wakatime.db
      Fetching /home/liukairui/test/.wakatime.db to .wakatime.db
      /home/liukairui/test/.wakatime.db         100%   12KB   4.4MB/s   00:00
      sftp> lls
       驱动器 C 中的卷没有标签。
       卷的序列号是 E25C-B336
      
       C:\Users\tclkr\Desktop 的目录
      
      2021/03/05  08:45    <DIR>          .
      2021/03/05  08:45    <DIR>          ..
      2021/03/05  08:45            12,288 .wakatime.db
      2021/03/01  23:04            10,337 2021.xlsx
                     2 个文件         22,625 字节
                     2 个目录 212,298,076,160 可用字节
      

      注意sftp只能get服务器登录用户所属的文件

    • 要是-P换端口不行可以尝试-oPort=端口

TCP Wrappers 简单防火墙

一个Linux自带的简易版防火墙,比iptables弱,生产环境用的不多,是工作在传输层的安全工具,可以对有状态连接TCP特定服务,常见的服务有telnet,sshd,vsftpd,rpcbind

  • 查询服务是否被TCP Wrapper控制
    先查询服务的命令所在位置(以ssh为例,但是我们要查的是服务端的,命令是sshd)
    使用ldd静态的查看服务在执行的时候调用的库文件列表,使用grep查询有没有调用libwrap.so

    [root@KarryZenBook14s itisserverflod]# which sshd
    /usr/sbin/sshd
    [root@KarryZenBook14s itisserverflod]# ldd /usr/sbin/sshd | grep libwrap.so
          libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f864052c000)
    
  • TCP Wrappers的工作原理

    当获取连接请求后,先读取系统管理员设置的访问控制文件,符合要求就会将连接原封不动的发送给服务,否则直接拒绝

    控制文件的读取方式

    • /etc/host.allow的权限比/etc/host.deny大
    • 看到/etc/host.allow有则直接放行
    • 看到/etc/host.allow无但是/etc/host.deny没有也放行
    • 看到/etc/host.allow无但是/etc/host.deny有不放行
    • 需要个别服务允许,其他拒绝需要把服务写在allow,deny上写all
    • 需要拒绝部分直接在deny里面写要拒绝的
  • TCP Wrappers的使用

    编写规则是service_list@host: client_list

    • service_list 服务列表

    • host 服务器的ip,例如服务器有内网网卡IP为10.65.1.1和外网网卡2.2.2.2,我们希望只有内网网卡可以建立服务,可以在allow中将host写成10.65.1.1,不写就是哪个网卡均可

    • client_list 列出访问者的显示,多个可以用,或者空格隔开

      • 基于IP地址的:10.65.1.1(一个ip),一个ip段10.65.1.,一个ip段10.65.注意,限制网段要这么写,不得写成10.65..
      • 基于主机名的:很少用,
      • 基于ip/掩码的,10.65.1.1/255.255.255.0,在CentOS7中支持将掩码改为/24
      • 其他规则写法:ALL和LOCAL
    • 限制网段用户访问ssh

      修改限制文件

      [root@KarryZenBook14s ~]# vim /etc/hosts.deny
      

      添加规则,注意,希望限制10.65.11.*10.65.11.,希望限制10.65.*.*10.65.,不得写成10.65..,我们限制的是访问服务器的ssh所以写的是sshd

      sshd:10.65.
      

      直接exit退出登录即可,这个服务的配置文件无需重启服务,尝试登录

      PS C:\Users\tclkr> ssh -l root -p 9001 127.0.0.1
      Last login: Fri Mar  5 10:09:16 2021 from 10.0.2.2
      

DHCP服务

DHCP动态主机配置协议,是一种在局域网内的使用UDP的不可靠传输协议工作的协议,主要作用是集中管理分配网络资源,使得网络中的主机可以动态获取IP,网关,DNS

DHCP的工作原理

所谓的DHCP就是给需要IP的机器分配IP地址,当机器不需要的时候就收回来,相当于租房子一样,有一个租期,快到的时候还需要报告是否续租

DHCP客户机 DHCP服务机 DHCP Discover DHCP Offer DHCP Request DHCP ACK/NAL DHCP客户机 DHCP服务机

可以这样粗略的理解

  • DHCP客户机不知道内网中到底谁是DHCP服务机,于是想全网广播DHCP Discover包,请求DHCP服务
  • DHCP服务机收到请求后向DHCP客户机发送一个可用的IP地址
  • 客户端可能接受到很多服务机发来的很多IP,选择最早收到的那个IP(证明这个路线最快的)发送DHCP Request包告诉服务器,这个IP我用了
  • 服务器收到Request包后再次确认这个IP有没有被别的机器占用(可能在客户机回复的这个期间这个IP就被占用了),如果没有占用回复DHCP ACK包,代表可用,如果被占用了回复DHCP NAL包拒绝分配

可以这样理解

  • 一个人(DHCP客户端)去找工作,先给整个行业发送简历面试(DHCP Discover)
  • 有公司看上了他,于是回复offer(DHCP offer)说可以来我们公司上班了
  • 这个人收到了很多公司(DHCP服务器)的offer(DHCP Offer)决定选择待遇最好(回复DHCPoffer最快的)的公司上班于是就回复Offer(DHCP Request)说我去你们公司上班了
  • 公司收到回复后再次确认这个offer是否有效,比如超时了?Offer发给别人了?然后回复

详细的过程

  • 当DHCP客户机启动后,发现自己没有IP,于是将自己的IP设置为0.0.0.0,但是0.0.0.0不是合法IP无法通信,于是联系DHCP,联系方法就是向全网的UDP 67端口发送请求包,这个包里面包含了自己的MAC和主机名(方便后续确认)
  • DHCP收到主机名后在自己的可用IP池里找一个,做好标记,将自己的MAC与自己的IP,合法的IP合法的网关,子网掩码发回,由于不知道到底是谁发来的,于是仍然是以全网广播的形式发回,此时所有发送给DHCP请求的设备都会收包,但是由于有主机名与MAC可以校验是否正确收到
  • 客户机收到OFFER后找到最先收到的,保留服务器的IP,向全网广播REQUEST,告诉全网DHCP服务器自己和那个服务器联系上了,相当于拒绝 了其他服务器,这个数据包包含了服务器IP,服务器表示字段
  • 当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。
  • 重新登录。以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息(因为已经保留了DHCP服务器地址)。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

DHCP的续租

  • 默认租约与最长租约:默认租约指的是服务器租告诉客户机下次续租的时间,在这个时间内如果需要续约,客户机会联系服务机,如果一直联系不到服务机,客户机会在最长租约到期的时候自动退租
  • 客户机会在租约过去50%的时候找DHCP服务器续租,方式就是发送DHCPRequest包,收到ACK包代表成功,客户机就会根据包内数据更新租期,调整参数,如果没有收到,客户机会继续使用剩下的50%
  • 如果50%的时候没有收到ACK,客户机会在87.5%的时候再次请求续租,如果还是失败,到最长租期的时候客户机会自动放弃IP,重新广播请求

DHCP服务搭建

环境准备:

  • 切换到VMware 使用CentOS7
  • 关闭SELinux,关闭防火墙
  • 关闭VMware网络编辑器的DHCP功能(编辑-虚拟网络编辑器-选择NAT和HostOnly-取消勾选DHCP)
  • 准备两台机器开启网络连接设置NAT

软件:

  • dhcp:DHCP服务用软件包(yum -y install dhcp)
  • dhcp-common:DHCP软件命令包(BaseServer自带)

服务:

  • dhcpd:DHCP服务名
  • dhcrelay:DHCP中继服务

端口号:

  • udp 67:服务器监听端口,收用户的请求
  • udp 68:服务器源端口,发送数据包给用户

配置文件:

  • dhcpd的配置文件:/etc/dhcp/dhcpd.conf(这个文件默认空,只说了模板文件在哪里)与/usr/share/doc/dhcp-***/dhcpd.conf.sample(DHCP模板文件)
  • dhcrelay的配置文件:/etc/sysconfig/shcrelay

基础实验

  • 生成配置文件:复制/usr/share/doc/dhcp-***/dhcpd.conf.sample到/etc/dhcp/dhcpd.conf

  • 有很多

    subnet 10.254.239.32 netmask 255.255.255.224 {
         
      range dynamic-bootp 10.254.239.40 10.254.239.60;
      option broadcast-address 10.254.239.31;
      option routers rtr-239-32-1.example.org;
    }
    

    subnet开头的代码块,全部注释,只保留最后一个,如下

    subnet 10.5.5.0 netmask 255.255.255.224 {
         			# 分配网段 子网掩码
      range 10.5.5.26 10.5.5.30;						# IP池
      option domain-name-servers ns1.internal.example.org;	# 主机所在域
      option domain-name "internal.example.org";		# 主机名
      option routers 10.5.5.1;							# 默认网关
      option broadcast-address 10.5.5.31;				# 广播地址
      default-lease-time 600;							# 租约
      max-lease-time 7200;								# 租约
    }
    

    修改配置为

    subnet 192.168.46.0 netmask 255.255.255.0 {
         
      range 192.168.46.101 192.168.46.110;
      default-lease-time 600;
      max-lease-time 7200
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liukairui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值