基于Centos7.9的网络管理技能

对于提供互联网应用的服务器,网络防火墙是其抵御攻击破坏的安全屏障,如 何在攻击时及时做出有效的措施是网络应用时时刻刻面对的问题。高昂的硬件防火墙是一般开发者难以接受的。Linux系统的出现,为开发者低成本解决安全问题提供 了一种可行的方案。要熟练应用Linux防火墙,首先需要了解TCP/IP网络的基本原理,理解Linux防火墙的工作原理,并熟练掌握Linux系统下提供的各种工具。

如果管理的计算机有几十台,初始化服务器配置IP地址、网关和子网掩码等参 数是个烦琐耗时的过程。如果网络结构要更改,需要重新初始化网络参数,使用动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)则可以避免 此问题,客户端可以从DHCP服务端检索相关信息并完成相关网络配置,在系统重启 后依然可以工作。尤其在移动办公领域,只要区域内有一台DHCP服务器,用户就可 以在办公室之间自由活动而不必担心网络参数配置的问题。DHCP提供一种动态指定 IP地址和相关网络配置参数的机制。

如今互联网应用越来越丰富,如仅仅用IP地址标识网络上的计算机是不可能完成任务的,也没有必要,于是产生了域名系统。域名系统通过一系列有意义的名称 标识网络上的计算机,用户按域名请求某个网络服务时,域名系统负责将其解析为 对应的IP地址,这便是DNS。

本文的主要内容:

  • 网络管理协议
  • 常用的网络管理命令
  • Linux的网络配置方法
  • 高级网络配置
  • DHCP配置
  • DNS配置

网络管理协议

这里主要简单介绍TCP/IP协议UDP协议ICMP协议。更多内容请自行查找。

TCP/IP协议

网络接口层:主要为上层提供服务,完成链路控制等功能。

网际互联层:主要解决主机到主机之间的通信问题。其主要协议有:网际协议(IP)、地址解析协议 (ARP)、反向地址解析协议(RARP)和互联网控制报文协议(ICMP)。

传输层:为应用层提供端到端的通信功能,同时提供流量控制,确保数据完整和正确。TCP协议位于该层,提供一种可靠的、面向连接的数据传输服务;与此对应的是UDP协议,提供不可靠的、无连接的数据报传输服务。

应用层:对应于OSI参考模型中的上面3层, 为用户提供所需要的各种应用服务,如FTP、Telnet、DNS、SMTP等。

网络字节序

由于不同体系结构的计算机存储数据的格式和顺序都不一样,要使用互联网互联必须定义一个数据的表示标准。如一台计算机发送1个32位的整数至另外一台计算 机,由于机器上存储整数的字节顺序可能不一样,按照源计算机的格式发送到目的 主机可能会改变数字的值。

TCP/IP协议定义了一种所有机器在互联网分组的二进制 字段中必须使用的网络标准字节顺序(network standard byte order),与此对应的是主机字节顺序,主机字节顺序是和各个主机密切相关的。传输时需要遵循 以下转换规则:“主机字节顺序→网络字节顺序→主机字节顺序”,即发送方将主 机字节顺序的整数转换为网络字节顺序然后发送出去,接收方收到数据后将网络字 节顺序的整数转换为自己的主机字节顺序然后处理。

UDP协议

UDP(User Datagram Protocol)是一种无连接的传输层协议,主要用于不要 求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事 务的简单不可靠信息传送服务。由于其不提供数据包分组、组装和不能对数据包进 行排序的缺点,当报文发送之后,是无法得知其是否安全完整到达的,同时流量不 易控制,如网络质量较差,则UDP协议数据包丢失会比较严重。但UDP协议具有资源 消耗小,处理速度快的优点。

ICMP协议

ICMP是Internet Control Message Protocol(Internet控制报文协议)的 缩写,属于TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消 息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。 如经常使用的用于检查网络通不通的ping命令,ping的过程实际上就是ICMP协议工 作的过程。ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方 完成。

网络管理命令

检查网络通常或速度ping

ping常常用来测试与目标主机或域名是否可达,通过发送ICMP数据包到网络主 机,并显示响应情况,并根据输出信息来确定目标主机或域名是否可达。ping的结 果通常情况下是可信的,由于有些服务器可以设置禁止ping,从而使ping的结果并不是完全可信的。

Linux下ping不会自动终止,需要按“Ctrl+c”终止或用参数“-c”指定要求 完成的回应次数。

ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
  • -d 使用Socket的SO_DEBUG功能。
  • -c <完成次数> 设置完成要求回应的次数。
  • -f 极限检测。
  • -i<间隔秒数> 指定收发信息的间隔时间。
  • -I<网络界面> 使用指定的网络接口送出数据包。
  • -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
  • -n 只输出数值。
  • -p<范本样式> 设置填满数据包的范本样式。
  • -q 不显示指令执行过程,开头和结尾的相关信息除外。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
  • -R 记录路由过程。
  • -s<数据包大小> 设置数据包的大小。
  • -t<存活数值> 设置存活数值TTL的大小。
  • -v 详细显示指令的执行过程。
  • -w 在 deadline 秒后退出。
  • -W 在等待 timeout 秒后开始执行。

示例如下:

  1. 直接ping(下图是ping的通的情况)

  2. ping指定次数

  3. 指定时间间隔和次数限制

  4. ping公网域名

  5. 发送周期,设置发送包的大小,设置TTL值

更多内容:Linux ping 命令 | 菜鸟教程 (runoob.com)

配置网络或显示当前网络接口状态ifconfig

ifconfig命令可以用于查看、配置、启用或禁用指定网络接口,如配置网卡的 IP地址、掩码、广播地址、网关等,Windows类似的命令为ipconfig。

语法如下:

ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

参数说明

  • add<地址> 设置网络设备IPv6的IP地址。
  • del<地址> 删除网络设备IPv6的IP地址。
  • down 关闭指定的网络设备。
  • <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
  • io_addr<I/O地址> 设置网络设备的I/O地址。
  • irq<IRQ地址> 设置网络设备的IRQ。
  • media<网络媒介类型> 设置网络设备的媒介类型。
  • mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
  • metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
  • mtu<字节> 设置网络设备的MTU。
  • netmask<子网掩码> 设置网络设备的子网掩码。
  • tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
  • up 启动指定的网络设备。
  • -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
  • -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
  • -promisc 关闭或启动指定网络设备的promiscuous模式。
  • [IP地址] 指定网络设备的IP地址。
  • [网络设备] 指定网络设备的名称。

示例

  1. 显示网络设备信息
image-20230706101545068

第1行:UP表示此网络接口为启用状态,RUNNING表示网卡设备已连接,MULTICAST表示支持组播,MTU为数据包最大传输单元。

第2行:依次为网卡IP、子网掩码、广播地址。

第3行:ipv6地址。

第4行:Ethernet(以太网)表示连接类型,ether为网卡的MAC地 址。

第5行:接收数据包个数、大小统计信息

第6行:异常接收包的数量,如丢包量,错误等。

第7行:发送数据包个数、大小统计信息。

第8行:导演发送包的数量,如丢包量,错误等。

如果第6行和第8行中的丢包量、错误包量较高,通常表示物理链路存在问题。 例如网线干扰过大、距离太长等。

显示指定网卡信息

ifconfig ens33


2. 启动关闭指定网卡

ifconfig ens33 down  # 关闭
ifconfig ens33 up   # 开启
  1. 为网卡配置和删除IPv6地址

    ifconfig ens33 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址
    
    ifconfig ens33 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
    
  2. 修改MAC地址

用ifconfig修改MAC地址

ifconfig ens33 down //关闭网卡
ifconfig ens33 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
ifconfig ens33 up //启动网卡
ifconfig ens33 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址 
ifconfig ens33 up //启动网卡
  1. 启用和关闭ARP协议

    ifconfig ens33 arp  //开启
    ifconfig ens33 -arp  //关闭
    
  2. 设置最大传输单元

    # ifconfig ens33 mtu 1500 
    //设置能通过的最大数据包大小为 1500 bytes
    

更多内容:Linux ifconfig命令 | 菜鸟教程 (runoob.com)

显示添加或修改路由表route

显示所有的路由表


添加一条路由

发往192.168.60.0网段的全部要经过网关192.168.2.1

route add -net 192.168.60.0 netmask 255.255.255.0 gw 192.168.2.1

删除一条路由

删除的时候不需要网关

route del -net 192.168.60.0 netmask 255.255.255.0

复制文件至其他系统scp

如本地主机需要和远程主机进行数据迁移或文件传送,可以使用ftp,或搭建 Web服务,另外可选的方法有scp或rsync。

Linux scp 命令用于 Linux 之间复制文件和目录。也可以用于windows传递数据(前提是安装openssh协议,解决办法,关于scp传输文件踩过的坑(最全!linux与windows相互传输文件)

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

注意由于各个发行版不同,scp语法不尽相同,具体使用方法可查看系统帮助。

语法如下(简易语法):

scp [可选参数] file_source file_target 

centos系统ip:192.168.2.6

ubuntu系统ip: 192.168.2.7

windows系统:192.168.2.2

从本地复制到远程

# 简单版
 scp 本地文件 对端ip:对面目录
# 指定用户名需要输入密码
scp 本地文件目录 远程用户名@对端ip:远程文件目录
Centos7.9到ubuntu20.0(以add.sh为例子)
image-20230706110300510

指定了root用户传输文件

 scp /root/add.sh root@192.168.2.7:/home/daokun/桌面
传输目录-r
scp -r /root/test root@192.168.2.7:/home/daokun/桌面

登录ubuntu查看

win10到ubuntu

准备的文件

命令如下:

scp -r /D:/KwDownload/song root@192.168.2.7:/home/daokun

从远程到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可

Centos7.9到ubuntu20.0(在ubuntu操作)

复制centos系统/root/test目录到ubuntu系统

现在centos的ip是192.168.2.5

scp -r root@192.168.2.6:/root/test /home/daokun/桌面
image-20230706122558338

复制文件至其他系统rsync

rsync是Linux系统下的常用的数据镜像备份工具,用于在不同的主机之间同步文件。

从字面意思上,rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。

本地文件传送到远程主机(默认在家目录,命名为daokun1.txt)

 rsync -v --port 56789 daokun.txt root@192.168.2.7:daokun1.txt
image-20230706181503083

本地目录传送到远程主机(命名为dao)

 rsync -avz --port 56789 daokun root@192.168.2.7:dao
image-20230706181550095

image-20230706181924970

用法更多详解:Linux rsync命令用法详解 (biancheng.net)

rsync 从一台服务器远程拉取另一台服务器数据的实践

显示网络连接、路由表或接口状态netstat

netstat命令用于监控系统网络配置和工作状况,可以显示内核路由表、活动的网络状态以及每个网络接口的有用的统计数字。

参数说明
-a显示所有连接中的Socket
-c持续列出网络状态
-h在线帮助
-i显示网络界面
-l显示监控中的服务器的Socket
-n直接使用IP地址
-p显示正在使用Socket的程序名
-r显示路由表
-s显示网络工作信息统计表
-t显示TCP端口情况
-u显示UDP端口情况
-v显示命令执行过程
-V显示版本信息

示例

显示所有端口,包括UDP、TCP

netstat -a|head -4

image-20230706190019433

显示所有TCP端口

netstat -at

显示所有UDP端口

 netstat -au

所有TCP端口并显示对应的进程名称或进程号

netstat -plnt

显示核心路由信息

 netstat -r

显示网络接口列表

netstat -i

下载工具wget

语法: wget [参数] [软件地址]

参数:

  • -b 后台执行
  • -nc 不覆盖原有文件
  • -c 断点续传

举例

wget -c http://ftp.gnu.org/gnu/wget/wget-1.14.tar.g

Linux网络配置

Linux网络配置相关的文件根据不同的发行版目录名称有所不同,但大同小异, 主要有以下目录或文件。

1)/etc/hostname:主要功能在于修改主机名称。

2)/etc/sysconfig/network-scrips/ifcfg-enoN:是设置网卡参数的文 件,比如IP地址、子网掩码、广播地址、网关等,N为一串数字。

3)/etc/resolv.conf:此文件设置了DNS相关的信息,用于将域名解析到 IP。

4)/etc/hosts:计算机的IP对应的主机名称或域名对应的IP地址,通过设置/etc/nsswitch.conf中的选项可以选择是DNS解析优先还是本地设置优先。

5)/etc/nsswitch.confname service switch configuration,名字服务切换配置):规定通过哪些途径,以及按照什么顺序通过这些途径来查找特定类型的信息。

配置Linux系统的IP地址

首先进入目录cd /etc/sysconfig/network-scripts

image-20230706191746849

我们使用的网卡是ens33,所以vim ifcfg-ens33

名称意义
TYPE=Ethernet类型,以太网
BOOTPROTO=none置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务
NETMASK=255.255.255.0子网掩码
PREFIX = 24子网掩码
NAME设备名,此处对应网络接口为ens33
ONBOOT=yes是否开机自启

自己可以添加的

BOOTPROTO=none设置为static启用静态IP地址
**DNS1=**8.8.8.8,DNS2=(dns自行找最优的)设置DNS1,DNS2
IPADDR=静态IP地址
GATEWAY=网关

设置完ifcfg-ens33文件后,需要重启网络服务才能生效

service network restart

ifconfig也可以设置

ifconfig ens33 192.168.146.152 netmask 255.255.255.0

记得重启网络

设置主机名

临时设置

hostname 名字重新打开终端可以看见,重启失效

永久设置(直接写入)

vim /etc/hostname 

image-20230706194105047

设置默认网关

设置好IP地址以后,如果要访问其他的子网或Internet,用户还需要设置路 由,在此不做介绍,这里采用设置默认网关的方法。在Linux中,设置默认网关有两 种方法:

  • 第1种方法就是直接使用route命令,在设置默认网关之前,先用route – n命令查看路由表。执行如下命令设置网关。通常适用于临时测试
route add default gw 192.168.1.1
  • 第2种方法是在/etc/sysconfig/network-scripts/ifcfg-接口文件中 添加如下字段:
GATEWAY=192.168.1.1

必须重启网络服务来使设置生效,可执行下面 的命令:

service network restart

设置DNS服务器

设置DNS服务器需修改/etc/resolv.conf文件即可


其中192.168.3.1为第一名字服务器,192.168.3.2为第二名字服务器, option rotate选项指在这2个dns server之间轮询,option timeout:1表示解析超时时间1s(默认为5s),attempts表示解析域名尝试的次数。如需添加DNS服务器,可直接修改此文件,需要注意的是使用nameserver指定的DNS服务器只有前三条生效。

Linux防火墙

在最新版的CentOS 7中,系统安装了两个防火墙firewalldiptables,并且默认使用firewalld。本文使用firewalld。更多内容iptables和firewalld详解(本节内容基本选自LinuxProbe)

iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已;或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。

firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板)

区域默认规则策略
trusted允许所有的数据包
home拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal等同于home区域
work拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block拒绝流入的流量,除非与流出的流量相关
drop拒绝流入的流量,除非与流出的流量相关
终端管理工具

firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。它的参数一般都是以“长格式”来提供的。能用Tab键自动补齐命令

​ firewall-cmd命令中使用的参数以及作用

参数作用
–get-default-zone查询默认的区域名称
–set-default-zone=<区域名称>设置默认的区域,使其永久生效
–get-zones显示可用的区域
–get-services显示预先定义的服务
–get-active-zones显示当前正在使用的区域与网卡名称
–add-source=将源自此IP或子网的流量导向指定的区域
–remove-source=不再将源自此IP或子网的流量导向某个指定区域
–add-interface=<网卡名称>将源自该网卡的所有流量都导向某个指定区域
–change-interface=<网卡名称>将某个网卡与区域进行关联
–list-all显示当前区域的网卡配置参数、资源、端口以及服务等信息
–list-all-zones显示所有区域的网卡配置参数、资源、端口以及服务等信息
–add-service=<服务名>设置默认区域允许该服务的流量
–add-port=<端口号/协议>设置默认区域允许该端口的流量
–remove-service=<服务名>设置默认区域不再允许该服务的流量
–remove-port=<端口号/协议>设置默认区域不再允许该端口的流量
–reload让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
–panic-on开启应急状况模式
–panic-off关闭应急状况模式

使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且会随着系统的重启而失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加–permanent参数(注意:永久生效模式只有在系统重启之后才能自动生效)

如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。

1.查看firewalld服务当前所使用的区域。

这是一步非常重要的操作。在配置防火墙策略前,必须查看当前生效的是哪个区域,否则配置的防火墙策略将不会立即生效。

firewall-cmd --get-default-zone

2.查询指定网卡在firewalld服务中绑定的区域。

在生产环境中,服务器大多不止有一块网卡。一般来说,充当网关的服务器有两块网卡,一块对公网,另外一块对内网,那么这两块网卡在审查流量时所用的策略肯定也是不一致的。因此,可以根据网卡针对的流量来源,为网卡绑定不同的区域,实现对防火墙策略的灵活管控。

firewall-cmd --get-zone-of-interface=ens33
image-20230706204735769

3.把网卡默认区域修改为external,并在系统重启后生效。

firewall-cmd --permanent --zone=external --change-interface=ens33
firewall-cmd --permanent --get-zone-of-interface=ens33

4.把firewalld服务的默认区域设置为public。

默认区域也叫全局配置,指的是对所有网卡都生效的配置,优先级较低。在下面的代码中可以看到,当前默认区域为public,而ens33网卡的区域为external。此时便是以网卡的区域名称为准。

通俗来说,默认区域就是一种通用的政策。例如,食堂为所有人准备了一次性餐具,而环保主义者则会自己携带碗筷。如果您自带了碗筷,就可以用自己的;反之就用食堂统一提供的。

 firewall-cmd --set-default-zone=public
 firewall-cmd --get-default-zone 
 firewall-cmd --get-zone-of-interface=ens33

5.启动和关闭firewalld防火墙服务的应急状况模式。

如果想在1s的时间内阻断一切网络连接,有什么好办法呢?大家下意识地会说:“拔掉网线!”这是一个物理级别的高招。但是,如果人在北京,服务器在异地呢?panic紧急模式在这个时候就派上用场了。

firewall-cmd --panic-on
firewall-cmd --panic-off

6.查询SSH和HTTPS协议的流量是否允许放行。

在工作中可以不使用–zone参数指定区域名称,firewall-cmd命令会自动依据默认区域进行查询,从而减少用户输入量。但是,如果默认区域与网卡所绑定的不一致时,就会发生冲突,因此规范写法的zone参数是一定要加的。

firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=https

7.把HTTPS协议的流量设置为永久允许放行,并立即生效。

默认情况下进行的修改都属于Runtime模式,即当前生效而重启后失效。因此在工作和考试中尽量避免使用。

而在使用–permanent参数时,则是当前不会立即看到效果,而在重启或重新加载后方可生效。于是,在添加了允许放行HTTPS流量的策略后,查询当前模式策略,发现依然是不允许放行HTTPS协议的流量:

firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --zone=public --query-service=https


不想重启服务器的话,就用–reload参数吧:

firewall-cmd --reload
firewall-cmd --zone=public --query-service=https


8.把HTTP协议的流量设置为永久拒绝,并立即生效。

由于在默认情况下HTTP协议的流量就没有被允许,所以会有“Warning: NOT_ENABLED: http”这样的提示信息,因此对实际操作没有影响。

firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --reload 


9.把访问8080和8081端口的流量策略设置为允许,但仅限当前生效。

firewall-cmd --zone=public --add-port=8080-8081/tcp
firewall-cmd --zone=public --list-ports

图形管理工具

在LinuxProbe:iptables和firewalld

Linux高级网络配置工具

目前很多Linux在使用之前的arp、ifconfig和route命令。虽然这些工具能够 工作,但它们在Linux 2.2和更高版本的内核上显得有一些落伍。无论对于Linux开 发者还是Linux系统管理员,网络程序调试时数据包的采集和分析是不可少的。

tcpdump是Linux中强大的数据包采集分析工具之一。本节主要介绍iproute2和 tcpdump的相关知识。

高级网络管理工具iproute2

安装yum install -y iproute

检查安装rpm -qa|grep iproute

版本ip -V

ip查看网络配置

显示网卡参数

ip addr list

添加新的网络地址

ip addr add 192.168.128.140/24 dev ens33
ip addr list
image-20230706214213973 ![](https://img-blog.csdnimg.cn/img_convert/b3724fd415e42f76567e9cb0d4de7a1e.png)

删除网络地址

ip addr del 192.168.128.140/24 dev ens33

网络数据采集与分析工具tcpdump

tcpdump即dump traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。对于系统管理员来说,在网络性能急剧下降的时候,可 以通过tcpdump工具分析原因,找出造成网络阻塞的来源。对于程序开发者来说, 可以通过tcpdump工具来调试程序。tcpdump支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句过滤不必要的信息。

Linux系统下tcpdump普通用户是不能正常执行,一般通过root用户执行

安装: yum install -y tcpdump

语法:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

详细参数说明:tcpdump-菜鸟教程

简单使用

tcpdump -i any

tcpdump会从系 统接口列表中搜寻编号最小的已配置好的接口,不包括loopback接口,一旦找到第 1个符合条件的接口,搜寻马上结束,并将获取的数据包打印出来。ctrl+c停止


过滤

tcpdump利用表达式作为过滤数据包的条件,表达式可以是正则表达式。如果数据包符合表达式,则数据包被截获;如果没有给出任何条件,则接口上所有的信息包将会被截获。

表达式中一般有如下几种关键字:

  • 第1种是关于类型的关键字,如hostnetport。例如host 192.168.16.150指明192.168.16.150为一台主机,而net 192.168.16.150则表 示192.168.16.150为一个网络地址。如果没有指定类型,默认的类型是host。

  • 第2种是确定数据包传输方向的关键字,包含src、dst、dst or src和 dst and src,这些关键字指明了数据包的传输方向。例如src 192.168.16.150 指明数据包中的源地址是192.168.16.150,而dst 192.168.16.150则指明数据包 中的目的地址是192.168.16.150。如果没有指明方向关键字,则默认是src or dst关键字。

  • 第3种是协议的关键字,如指明是TCP还是UDP协议。

  • 还有3种逻辑运算,取非运算 是“not”或“!”,与运算是“and”或“&&”,或运算是“or”或“||”。通过 这些关键字的组合可以实现复杂强大的条件。

过滤主机:

tcpdump -i any host 192.168.2.1

过滤端口:

tcpdump -i any port 80

过滤某一网段:

tcpdump -i any net 192.168.0.0/16

过滤协议:

tcpdump -i eth1 arp/ip/tcp/udp/icmp

指定20个包

 tcpdump -c 20

精简显示抓10个包

tcpdump -c 10 -q //精简模式显示 10个包

tcpdump更多使用:Linux系统 tcpdump 抓包命令使用教程,抓包语法

动态主机配置协议(DHCP)

DHCP基于C/S模式,主要用于 大型网络。DHCP提供一种动态指定IP地址和相关网络配置参数的机制。

DHCP工作原理

image-20230706223906646

客户端请求IP地址和配置参数的过程有以下几个步骤:

  1. 客户端需要寻求网络IP地址和其他网络参数,然后向网络中广 播,客户端发出的请求名称叫DHCPDISCOVER。如广播网络中有可以分配IP地址 的服务器,服务器会返回相应应答,告诉客户端可以分配,服务器返回包的名 称叫DHCPOFFER,包内包含可用的IP地址和参数。

  2. 如果客户在发出DHCPOFFER包后一段时间内没有接收到响应,会重新发送请求,如广播区域内有多于一台的DHCP服务器,由客户端决定使用哪个(一般是谁先回应就用谁的)。

  3. 当客户端选定了某个目标服务器后,会广播DHCPREQUEST包,用以通知选定的DHCP服务器和未选定的DHCP服务器。

  4. 服务端收到DHCPREQUEST后会检查收到的包,如果包内的地址和所提供的地址一致,证明现在客户端接收的是自己提供的地址;如果不是,则说明自己提供的地址未被采纳。如被选定的服务器在接收到DHCPREQUEST包以 后,因为某些原因可能不能向客户端提供这个IP地址或参数,可以向客户端发送DHCPNAK包。

  5. 客户端在收到包后,检查内部的IP地址和租用时间,如发现有问题,则发包拒绝这个地址,然后重新发送DHCPDISCOVER包。如无问题,就接受 这个配置参数。

配置DHCP服务器

查看是否安装:rpm -qa|grep dhcp

软件安装yum install -y dhcp

image-20230706224524786

/etc/dhcp/dhcpd.conf为DHCP主配置文件。 /usr/lib/systemd/system/dhcpd.service DHCP服务单元。

DHCP服务端配置

编辑配置文件**/etc/dhcp/dhcpd.conf**

本示例实现的功能为当前网络内的服务器分配指定IP段的IP地址,并 设置过期时间为2天。

#指定接收DHCP请求的网卡的子网地址,注意不是本机的IP地址。netmask为子网掩码
subnet 192.168.2.0 netmask 255.255.255.0{
#指定默认网关
option routers 192.168.2.1;
#指定默认子网掩码
option subnet-mask 255.255.255.0;
#指定最大租用周期
max-lease-time 172800 ;
#此DHCP服务分配的IP地址范围
range 192.168.2.2 192.168.2.240;
}

subnet-mask 默认子网掩码和max-lease-time最大租用周期,单位是秒。需要特别说明的是,在本地须有一个网络接口的IP地址为192.168.2.0网络,DHCP服务才能启动。

启动服务systemctl start dhcpd.service

如启动失败可以参考屏幕输出定位错误内容,或查看/var/log/messages的内容

配置DHCP客户端

当服务端启动成功后,客户端需要与服务端网络联通,然后做以下配置以便自 动获取IP地址。客户端网卡配置如下。

cat /etc/sysconfig/network-scripts/ifcfg-ens33


如需使用DHCP服务, BOOTPROTO=dhcp表示将当前主机的网络IP地址设置为自动获取方式。需要说明的是DHCP客户端无须使用CentOS 7,使用其他版本的Linux 或Windows操作系统均可。

网络重启一下:service network restart

域名服务DNS

在使用域名访问网络应用时,DNS负责将域名解析为IP地址。

DNS简介

DNS是一个分布式数据库系统,扩充性好,由于是分布式的存储,数据量的增长 并不会影响其性能。新加入的网络应用可以由DNS负责将新主机的信息传播到网络中 的其他部分。

域名查询有两种常用的方式:递归查询迭代查询。(这两个概念很重要)

递归查询由最初的域名服务器代替客户端进行域名查询。如该域名服务器不能 直接回答,则会在域中的各分支的上下进行递归查询,最终将返回查询结果给客户 端,在域名服务器查询期间,客户端将完全处于等待状态。

迭代查询则每次由客户端发起请求,如请求的域名服务器能提供需要查询的信 息则返回主机地址信息。如不能提供,则引导客户端到其他域名服务器查询。

如果不理解请网上找其他资料。

DNS域名服务器的分类有高速缓存服务器、主DNS服务器和辅助DNS服务器。高 速缓存服务器将每次域名查询的结果缓存到本机,主DNS服务器则提供特定域的权威 信息,是可信赖的,辅助DNS服务器信息则来源于主DNS服务器。

DNS规划

test1.daokun.com192.168.2.100A
test2.daokun.com192.168.2.101A
test3.daokun.comtest2.daokun.comCNAME

DNS配置

目前网络上的域名服务系统使用最多的为BIND(Berkeley Internet Name Domain)软件,该软件实现了DNS协议。

centos7安装:yum install -y bind bind-utilsyum install -y bind*

ubuntu20.0安装

ubuntu配置更多内容:Ubuntu Server 安装配置 bind9 - 简书 (jianshu.com))

在终端提示符下,输入以下命令安装 dns:

sudo apt install bind9

dnsutils 软件包是测试和解决 DNS 问题非常有用的。 这些工具通常已经安装,但是要检查或安装 dnsutils,请输入以下内容:

sudo apt install dnsutils

/etc/named.conf为DNS主配置文件 /usr/lib/systemd/system/named.service为DNS服务控制单元

服务器端

编辑/etc/named.conf

配置文件如下所示,如需添加注释,可以以“#”、“//”

了解一下name.conf:cat /etc/named.conf

内容如下:

// 此配置文件删除了英文注释

/*
options:是全局服务器的配置选项,即在options中指定的参数,对配置
中的任何域都有效,如在服务器上要配置多个域如test1.com和test2.com,
在option中指定的选项对这些域都生效。
*/
options {
		 # 端口是53,127.0.0.1是监听本机IP,此处换成any是接收所有主机连接
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        
        # directory:指定named从/var/named目录下读取DNS数据文件,可以自行创建,但是目录所属组必须是named,否则无法读取
        directory       "/var/named"; 
        
        # dump-file:当执行导出命令时将DNS服务器的缓存数据存储到指定的文件中。
        dump-file       "/var/named/data/cache_dump.db"; 
        
        # statistics-file:指定named服务的统计文件。当执行统计命令时,会将内存中的统计信息追加到该文件中。
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        
        # allow-query:允许那些客户端可以访问DNS服务,此处“any”表示任意主机。
        allow-query     { any; };

     
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};


logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};


# zone:每一个zone就是定义一个域的相关信息及指定了named服务从哪些文件中获得DNS各个域名的数据文件。

zone "." IN {
        type hint;
        file "named.ca";
};

# 此处是我们添加的内容,或者添加到 "/etc/named.rfc1912.zones"文件
# daokun.com正向解析成IP地址,文件是daokun.com.zone
zone "daokun.com" IN {
	type master;
	file "daokun.com.zone";
	allow-update { none;};
};

#反向解析                                                       
zone "2.168.192.in-addr.arpa" IN{                              
	type master;                                              
	file "2.168.192.zone";                                     
}; 

# 这个是区域文件,上面的添加可以放到这里
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

可以选择在"/etc/named.rfc1912.zones"配置

抱歉,我这里有个错误,2.168.192.in-addr才是对的,需要有.

配置解析文件/var/named/oa.com.zone
  1. 复制文件

为了省事,自己少些一些内容,我们复制文件:

正向文件cp /var/named/named.localhost /var/named/daokun.com.zone

反向文件cp /var/named/named.localhost /var/named/2.168.192.zone

daokun.com.zone是自定义的,和上文有关。

在目录**/var/named**下有文件 named.localhost

  1. 配置正向文件
 $TTL 1D
 # 域名. root.域名(注意空格)
 # @       IN SOA  daokun.com. root.也可以
@       IN SOA  daokun.com. root.daokun.com (
                                        202307  ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
            NS    dns.daokun.com.
dns   A     192.168.2.4 # 本机ip
test1 A     192.168.2.100
test2 A     192.168.2.101
test3 CNAME test2

TTL:表示域名缓存周期字段,指定该资源文件中的信息存放在DNS缓存服务器的时间,

@:表示本域,SOA描述了一个授权区域

serial:表示该区域文件的版本号。
refresh:指定了从域名服务器将要检查主域名服务器的SOA记录的时间间隔,单位为秒。
retry:指定了从域名服务器的一个请求或一个区域刷新失败后,从服务器重新与主服务器联系的时间间隔,单位是秒。
expire:指在指定的时间内,如果从服务器还不能联系到主服务器,从服务器将丢去所有的区域数据。
Minimum:如果没有明确指定TTL的值,则minimum表示域名默认的缓存周期。

A:表示主机记录,用于将一个主机名与一个或一组IP地址相对应。

NS:一条NS记录指向一个给定区域的主域名服务器,以及包含该服务器主 机名的资源记录。

CNAME:用来将一个域名和该域名的别名相关联,访问域名的别名和访问域 名的原始名字将解析到同样的主机地址。

默认权限可能会阻止bind访问daokun.zone和2.168.192.zone文件,因由root用户使 用命令chgrp named daokun.com.zone修改文件所属的用户组。chgrp named 2.168.192.zone

  1. 配置反向文件
$TTL 1D
# daokun.com.后面需要空格,否则后续报错
@       IN SOA  daokun.com. root.daokun.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
          NS  dns.daokun.com.
4   PTR dns.daokun.com.
100 PTR test1.daokun.com.
101 PTR test2.daokun.com.
101 PTR test3.daokun.com.

检查文件有没有问题

 named-checkconf -z /etc/named.conf

语法问题

启动域名服务

放行端口:

firewall-cmd --permanent --add-port=53/tcp --zone=public
firewall-cmd --permanent --add-port=53/udp --zone=public
firewall-cmd --reload 

使用BIND软件提供的**/etc/init.d/named**脚本

systemctl start named.service

如启动失败可以参考屏幕输出定位错误内容,或查看cat /var/log/messages的内 容


我这个情况是daokun.com. 没有空格,导致数字无效

daokun.com. root.daokun.com或者@ root.daokun.com都可以

客户端

DNS服务测试

DNS服务端已经部署完毕,客户端还需设置一些东西。

  1. 配置/etc/resolv.conf

客户端需要设置DNS服务器地址。

namesever 地址看自己情况

重启一下:

systemctl restart named
  1. 域名测试

域名测试可以使用ping、nslookup或dig命令。


可以看到正向解析有问题,反向解析是好的。大概率是区域配置库文件(也就是正、反向解析文件)的属主和属组的问题。

cd /var/named
ll


果然是这个问题。我们自己定义的正向解析文件和反向解析文件的属组为 root 而DNS原配置文件的属组为 named 所以我们就要修改 正向、反向解析文件的属组,执行命令

chgrp named 2.168.192.zone
chgrp named daokun.com.zone

重启systemctl restart named

这下应该没有问题了吧

果然

192.168.1.101(我手误)会报错是因为我们没配置,我们都是配置的192.168.2.xx。

192.168.2.4是我的dns服务器IP地址

推荐一本更多更全的书籍(非广告)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值