linux 网络管理技术

发布于:2023-01-22 ⋅ 阅读:(13) ⋅ 点赞:(0) ⋅ 评论:(0)

linux 网络管理技术

OSI七层模型和TCP/IP四层模型

OSI 七层模型:OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。
TCP/IP 四层模型:TCP/IP 参考模型是计算机网络的祖父 ARPANET 和其后继的因特网使用的参考
模型。
OSI七层参考模型,TCP/IP四层参考模型图

1.1 功能及优点

七层模型的优点
1、把复杂的网络划分成为更容易管理的层(将整个庞大而复杂的问题划分为若干个容易处理的小问题)
2、没有一个厂家能完整的提供整套解决方案和所有的设备,协议.
3、独立完成各自该做的任务,互不影响,分工明确,上层不关心下层具体细节,分层同样有益于网络排错

功能:
分层 名字 功能
7 应用层 提供用户界面
6 表示层 表示数据,进行加密等处理
5 会话层 将不同应用程序的数据分离
4 传输层 提供可靠或不可靠的传输,在重传前执行纠错
3 网络层 提供逻辑地址,路由器使用它们来选择路径
2 数据链路层 将分组拆分为字节,并将字节组合成帧,使用MAC 地址提供介质访问,执行错误检测,但不纠错
1 物理层 在设备之间传输比特,指定电平,电缆速度和电缆针脚

扩展:为什么现在普遍使用TCP/IP四层模型,却不是用OSI七层模型呢??
OSI 七层模型是理论模型,一般用于理论研究,他的分层有些冗余,实际应用,选择 TCP/IP 的四层模型。而且 OSI 自身也有缺陷,大多数人都认为 OSI 模型的层次数量与内容可能是最佳的选择,其实并非如此,其中会话层和表示层几乎是空的,而数据链路层和网络层包含内容太多,有很多的子层插入,每个子层都有不同的功能。

1.2 常见网络相关的协议

ARP:(Address Resolution Protocol),地址解析协议,将 IP 解析成 MAC 地址
**DNS:**域名解析协议 www.baidu.com
SNMP:(Simple Network Management Protocol)简单网络管理协议
DHCP:(Dynamic Host Configuration Protocol)动态主机配置协议,它是在 TCP/IP 网络上使客户机获得配置信息的协议
FTP:(File Transfer Protocol)文件传输协议,它是一个标准协议,是在计算机和网络之间交换文件的最简单的方法。
HTTP:(Hypertext Transfer Protocol ):超文本传输协议
HTTPS:(Secure Hypertext Transfer Protocol):安全超文本传输协议,它是由 Netscape 开发并内置于其浏览器中,用于对数据进行压缩和解压操作.
ICMP:(Internet Control Message Protocol):Internet 控制信息协议,互联网控制报文协议ping ip 定义消息类型有:TTL 超时、地址的请求与应答、信息的请求与应答、目的地不可到达
SMTP:(Simple Mail Transfer Protocol):简单邮件传送协议
TELNET Protocol::虚拟终端协议
TFTP:(Trivial File Transfer Protocol):小文件传输协议
UDP:(User Datagram Protocol):用户数据报协议,它是定义用来在互连网络环境中提供包交换的计算机通信的协议
TCP:(Transmission Control Protocol): 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议 log 转发:开启一个协议:tcp(三次握手和四次挥手)

TCP和UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP 较多,UDP 少);
3.UDP 程序结构较简单;UDP 信息包的标题很短,只有 8 个字节,相对于 TCP 的 20 个字节信息包的额
外开销很小。所以传输速度可更快
4.TCP 保证数据正确性,UDP 可能丢包;TCP 保证数据顺序,UDP 不保证。

1.3 TCP和UDP常用端口号
端口号 服务 服务描述
21 ftp 文件传输服务
22 ssh 安全远程连接服务
23 telnet 远程连接服务
25 smtp 电子邮件服务
53 DNS 域名解析服务,有 tcp53 也有用 udp53 端口传输
80 http web 服务
443 https 安全 web 服务

如何查询端口对应服务
/etc/services
此文件中,包含所有常见端口号及服务名称,iptables 或 netstat 要把端口解析成协议名时,都需要使用到这个文件。另外后期 xinetd 服务管理一些小服务时,也会使用到此文件来查询对应的小服务端口号。

1.4 IP地址分类
A类:范围从 0-127,0 是保留的并且表示所有 IP 地址,而 127 也是保留的地址,并且是用于测试环回口用的。因此 A 类地址的可用的范围其实是从 1-126 之间。子网掩码:255.0.0.0
B类:范围从 128-191,如 172.168.1.1,以子网掩码来进行区别:255.255.0.0
C类:范围从 192-223,以子网掩码来进行区别:255.255.255.0
D类:范围从 224-239,被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E类:范围从 240-254,为将来使用保留。

linux网络相关的调试命令

2.1 配置网卡

**查看网卡物理连接是否正常 **
[root@ ~]# nmcli device status 
DEVICE TYPE STATE CONNECTION 
ens160 ethernet 连接的 ens160 
virbr0 bridge 连接的 virbr0 
lo loopback 未托管 -- 
virbr0-nic tun 未托管 --

**查看 IP 相关信息**
ifconfig 命令被用于配置和显示 Linux 内核中网络接口的网络参数。
[root@ ~]# ifconfig

**常见的一些网络接口**
eth0 ..... eth4 ... 以太网接口(linux6)
waln0 无线接口
eno177776 以太网接口 (centos7)
ens160 以太网接口(centos7)
ens160 以太网接口(centos8)
bond0 team0 网卡绑定接口
virbr0 虚拟交换机桥接接口
br0 虚拟网桥接口
lo 本地回环接口
vnet0 KVM 虚拟机网卡接口

**添加网卡,并手动生成网卡配置**
默认新增加的网卡没有配置文件,现在手动添加一个
[root@ ~]# cd /etc/sysconfig/network-scripts/
[root@ network-scripts]# cp ifcfg-ens160 ifcfg-ens192
[root@ network-scripts]# vim ifcfg-ens192 #修改内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
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=ens192
UUID=c713acec-674b-411d-9e61-646482a292ca #这一行删除掉
DEVICE=ens192
ONBOOT=yes
IPADDR=192.168.1.68 #改成 68 IP(自定义进行修改)
PREFIX=24
GATEWAY=192.168.1.1
DNS1=114.114.114.114
IPV6_PRIVACY=no
PEERDNS=no
[root@ network-scripts]# systemctl restart network #重启网卡,刷新网卡配置,是网卡生效

使用 nmcli 命令查看网卡 UUID
[root@ ~]# nmcli con
NAME UUID TYPE DEVICE 
ens160 fcdcc4d4-65a4-42ec-8325-86f66aad5071 ethernet ens160 
ens192 a40a9de1-6c41-3c6a-9f8c-e2c6741d2dca ethernet ens192

2.3 查看端口的监听状态

netstat 命令: 查看系统中网络连接状态信息,
常用的参数格式 : netstat -anutp
-a, --all 显示本机所有连接和监听的端口
-n, --numeric don’t resolve names 以数字形式显示当前建立的有效连接和端口
-u 显示 udp 协议连接
-t 显示 tcp 协议连接
-p, --programs 显示连接对应的 PID 与程序名

[root@ ~]# netstat -anutp 命令的解释
Proto=连接协议的种类
Recv-Q=接收到字节数
Send-Q=从本服务器,发出去的字节数
Local Address=本地的 IP 地址,可以是 IP,也可以是主机名
Foreign Address=远程主机的 IP 地址

网络连接状态 STATE:
CLOSED : 初始(无连接)状态。
LISTEN : 侦听状态,等待远程机器的连接请求。
ESTABLISHED: 完成 TCP 三次握手后,主动连接端进入 ESTABLISHED 状态。此时,TCP 连接已经建立,可以进行通信。
TIME_WAIT : 在 TCP 四次挥手时,主动关闭端发送了 ACK 包之后,进入 TIME_WAIT 状态,等待最多 MSL 时间,让被动关闭端收到 ACK 包。

扩展:MSL
MSL,即 Maximum Segment Lifetime,一个数据分片(报文)在网络中能够生存的最长时间,在 RFC 793 中定义 MSL 通常为 2 分钟,即超过两分钟即认为这个报文已经在网络中被丢弃了。对于一个 TCP 连接,在双方进入 TIME_WAIT 后,通常会等待 2 倍 MSL 时间后,再关闭掉连接,作用是为了防止由于 FIN(最后一个挥手包)报文丢包,对端重发导致与后续的 TCP 连接请求产生顺序混乱

当服务器上有大量TIME_WAIT连接,如何优化并释放TCP连接?如下:

[root@ ~]# netstat -antup | grep TIME_WAIT
tcp 0 0 123.57.82.225:80 111.196.245.241:4002 
TIME_WAIT - 
tcp 0 0 123.57.82.225:80 111.196.245.241:3970 
TIME_WAIT - 
tcp 0 0 123.57.82.225:80 111.196.245.241:4486 
TIME_WAIT - 
tcp 0 0 123.57.82.225:80 111.196.245.241:3932 
TIME_WAIT - 
……..

解决:
linux 下默认 MSL 等待时间是 60 秒
[root@xuegod63 ipv4]# cat /proc/sys/net/ipv4/tcp_fin_timeout
60 秒
[root@xuegod63 ipv4]# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout #通过缩短时间time_wait 时间来快速释放连接

修改主机名配置文件,作用:设置主机名永久生效
[root@ ~]# vim /etc/hostname
.cn
[root@ ~]# hostnamectl set-hostname 主机名
配置 IP 与主机名(域名)的对应关系。
[root@ ~]# vim /etc/hosts #优先级高于 DNS 解析
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63   .cn
192.168.1.64   .cn
192.168.1.62   .cn

配置 DNS-路由相关信息
DNS 配置的配置文件
[root@xuegod63 ~]# cat /etc/resolv.conf 
#Generated by NetworkManager
search cn
nameserver 114.114.114.114
注:在 centos5/6 版本,配置 DNS 用这个文件。在centos6 以后,直接在网卡配置文件中指定:DNS1=192.168.1.1
默认情况下,域名解析顺序: 本地 hosts 文件-》DNS查询
是不是一定先解析 hosts 再解析 DNS?
本机域名解析顺序
[root@ ~]# vim /etc/nsswitch.conf #查找以下内容 hosts
#hosts: db files nisplus nis dns
hosts: files dns myhostname #可以看到是先查看 files hosts 文件,再查看 DNS 的

局域网中使用 hping3 伪装 ip 地址进行多线程 SYN洪水攻击

tcp三次握手及 tcp 连接状态

ACK : TCP 协议规定,只有 ACK=1 时有效,也规定连接建立后所有发送的报文的 ACK 必须为 1
SYN(SYNchronization) : 在连接建立时用来同步序号。当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1 和 ACK=1. 因此, SYN 置 1 就表示这是一个连接请求或连接接受报文。
synchronization [ˌsɪŋkrənaɪ’zeɪʃn] 同步
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

建立 tcp 连接时的 tcp 三次握手和断开 tcp 连接时的 4 次挥手整体过程说明图:
在这里插入图片描述
三次握手的核心是:
确认每一次包的序列号。

tcp 三次握手过程:
1、首先由 Client 发出请求连接即 SYN=1,声明自己的序号是 seq=x
2、然后 Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为 ack=x+1,
3、最后 Client 再进行一次确认,设置 ack=y+1.

tcpdump 抓包命令常用参数:
-c 指定包个数
-n IP 和端口用数字方式显示
port 指定端口

TCP 连接状态详解:
服务器端:LISTEN:侦听来自远方的 TCP 端口的连接请求
客户端:SYN-SENT:在发送连接请求后等待匹配的连接请求
服务器端:SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认
客户端/服务器端:ESTABLISHED:代表一个已建立的连接

操作:模拟SYN 洪水攻击的过程:
在服务端返回一个确认的 SYN-ACK 包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的 ACK 包。
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超时关闭,才能施放内存。
如果恶意者通过通过 ip 欺骗,发送大量 SYN 包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和 tcp 连接,从而导致正常客户端无法访问服务端,这就是 SYN 洪水攻击的过程。

hping3 是一个命令行下使用的 TCP/IP 数据包组装/分析工具,通常 web 服务会用来做压力测试使用,也可以进行 DOS 攻击的实验。同样 hping3 每次只能扫描一个目标。
例:使用 hping3 进行压力测试
我们先测试网站正常访问 s
centos7 安装 httpd 服务进行测试。
[root@ ~]# yum install -y httpd
[root@ ~]# systemctl enable httpd --now
[root@ ~]# iptables -F
浏览器访问 http://192.168.1.63/ 可以正常访问。
对 http://192.168.1.63/ 进行压力测试
[root@ ~]# yum -y install https://mirrors.aliyun.com/epel/epel-releaselatest-8.noarch.rpm
[root@ ~]# yum -y install hping3
[root@ ~]# hping3 -c 100000 -d 120 -S -p 80 --flood --rand-source 
192.168.1.63
-c 100000 = 发送的数据包的数量。
-d 120 = 发送到目标机器的每个数据包的大小。单位是字节
-S = 只发送 SYN 数据包。
-p 80 = 目的地端口(80 是 WEB 端口)。你在这里可以使用任何端口。
--flood = 尽可能快地发送数据包,不需要考虑显示入站回复。洪水攻击模式。
--rand-source = 使用随机性的源头 IP 地址。
上服务器查看,被攻击状态:
[root@ ~]# netstat -antup | grep :80
发现很多伪装成公网的 IP 在攻击我们