admin 管理员组文章数量: 1086019
对于提供互联网应用的服务器,网络防火墙是其抵御攻击破坏的安全屏障,如 何在攻击时及时做出有效的措施是网络应用时时刻刻面对的问题。高昂的硬件防火墙是一般开发者难以接受的。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 秒后开始执行。
示例如下:
-
直接ping(下图是ping的通的情况)
-
ping指定次数
-
指定时间间隔和次数限制
-
ping公网域名
-
发送周期,设置发送包的大小,设置TTL值
更多内容:Linux ping 命令 | 菜鸟教程 (runoob)
配置网络或显示当前网络接口状态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行: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 # 开启
-
为网卡配置和删除IPv6地址
ifconfig ens33 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址 ifconfig ens33 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
-
修改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 //启动网卡
-
启用和关闭ARP协议
ifconfig ens33 arp //开启 ifconfig ens33 -arp //关闭
-
设置最大传输单元
# ifconfig ens33 mtu 1500 //设置能通过的最大数据包大小为 1500 bytes
更多内容:Linux ifconfig命令 | 菜鸟教程 (runoob)
显示添加或修改路由表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为例子)
指定了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/桌面
复制文件至其他系统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
本地目录传送到远程主机(命名为dao)
rsync -avz --port 56789 daokun root@192.168.2.7:dao
用法更多详解:Linux rsync命令用法详解 (biancheng)
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
显示所有TCP端口
netstat -at
显示所有UDP端口
netstat -au
所有TCP端口并显示对应的进程名称或进程号
netstat -plnt
显示核心路由信息
netstat -r
显示网络接口列表
netstat -i
下载工具wget
语法: wget [参数] [软件地址]
参数:
- -b 后台执行
- -nc 不覆盖原有文件
- -c 断点续传
举例
wget -c http://ftp.gnu/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.conf
name service switch configuration,名字服务切换配置):规定通过哪些途径,以及按照什么顺序通过这些途径来查找特定类型的信息。
配置Linux系统的IP地址
首先进入目录cd /etc/sysconfig/network-scripts
我们使用的网卡是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
设置默认网关
设置好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中,系统安装了两个防火墙firewalld和iptables,并且默认使用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
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

删除网络地址
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种是关于类型的关键字,如host、net和port。例如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工作原理
客户端请求IP地址和配置参数的过程有以下几个步骤:
-
客户端需要寻求网络IP地址和其他网络参数,然后向网络中广 播,客户端发出的请求名称叫DHCPDISCOVER。如广播网络中有可以分配IP地址 的服务器,服务器会返回相应应答,告诉客户端可以分配,服务器返回包的名 称叫DHCPOFFER,包内包含可用的IP地址和参数。
-
如果客户在发出DHCPOFFER包后一段时间内没有接收到响应,会重新发送请求,如广播区域内有多于一台的DHCP服务器,由客户端决定使用哪个(一般是谁先回应就用谁的)。
-
当客户端选定了某个目标服务器后,会广播DHCPREQUEST包,用以通知选定的DHCP服务器和未选定的DHCP服务器。
-
服务端收到DHCPREQUEST后会检查收到的包,如果包内的地址和所提供的地址一致,证明现在客户端接收的是自己提供的地址;如果不是,则说明自己提供的地址未被采纳。如被选定的服务器在接收到DHCPREQUEST包以 后,因为某些原因可能不能向客户端提供这个IP地址或参数,可以向客户端发送DHCPNAK包。
-
客户端在收到包后,检查内部的IP地址和租用时间,如发现有问题,则发包拒绝这个地址,然后重新发送DHCPDISCOVER包。如无问题,就接受 这个配置参数。
配置DHCP服务器
查看是否安装:rpm -qa|grep dhcp
软件安装yum install -y dhcp
/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 | 192.168.2.100 | A |
---|---|---|
test2.daokun | 192.168.2.101 | A |
test3.daokun | test2.daokun | CNAME |
DNS配置
目前网络上的域名服务系统使用最多的为BIND(Berkeley Internet Name Domain)软件,该软件实现了DNS协议。
centos7安装:yum install -y bind bind-utils
或yum install -y bind*
ubuntu20.0安装
ubuntu配置更多内容:Ubuntu Server 安装配置 bind9 - 简书 (jianshu))
在终端提示符下,输入以下命令安装 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和test2,
在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正向解析成IP地址,文件是daokun.zone
zone "daokun" IN {
type master;
file "daokun.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.zone
- 复制文件
为了省事,自己少些一些内容,我们复制文件:
正向文件cp /var/named/named.localhost /var/named/daokun.zone
反向文件cp /var/named/named.localhost /var/named/2.168.192.zone
daokun.zone是自定义的,和上文有关。
在目录**/var/named**下有文件 named.localhost
- 配置正向文件
$TTL 1D
# 域名. root.域名(注意空格)
# @ IN SOA daokun. root.也可以
@ IN SOA daokun. root.daokun (
202307 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.daokun.
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.zone修改文件所属的用户组。chgrp named 2.168.192.zone
- 配置反向文件
$TTL 1D
# daokun.后面需要空格,否则后续报错
@ IN SOA daokun. root.daokun. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.daokun.
4 PTR dns.daokun.
100 PTR test1.daokun.
101 PTR test2.daokun.
101 PTR test3.daokun.
检查文件有没有问题
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. 没有空格,导致数字无效daokun. root.daokun或者@ root.daokun都可以
客户端
DNS服务测试
DNS服务端已经部署完毕,客户端还需设置一些东西。
- 配置/etc/resolv.conf
客户端需要设置DNS服务器地址。
namesever 地址看自己情况
重启一下:
systemctl restart named
- 域名测试
域名测试可以使用ping、nslookup或dig命令。
可以看到正向解析有问题,反向解析是好的。大概率是区域配置库文件(也就是正、反向解析文件)的属主和属组的问题。
cd /var/named
ll
果然是这个问题。我们自己定义的正向解析文件和反向解析文件的属组为 root 而DNS原配置文件的属组为 named 所以我们就要修改 正向、反向解析文件的属组,执行命令
chgrp named 2.168.192.zone
chgrp named daokun.zone
重启systemctl restart named
这下应该没有问题了吧
果然
192.168.1.101(我手误)会报错是因为我们没配置,我们都是配置的192.168.2.xx。
192.168.2.4是我的dns服务器IP地址
推荐一本更多更全的书籍(非广告)
版权声明:本文标题:基于Centos7.9的网络管理技能 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1738281547a1956300.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论