Linux入门(九)-网络通讯

八、网络通讯

8.1 登录管理

8.1.1 安全的远程连接服务器ssh

ssh命令的功能是用于安全的远程连接服务器主机系统,作为openssh套件中的客户端连接工具,ssh命令可以让我们轻松的基于ssh加密协议进行远程主机访问,从而实现对远程服务器的管理工作。

 ssh [参数] 远程主机
常用参数:
-1	强制使用ssh协议版本1
-2	强制使用ssh协议版本2
-4	强制使用IPv4地址
-6	强制使用IPv6地址
-A	开启认证代理连接转发功能
-a	关闭认证代理连接转发功能
-b	使用本机指定的地址作为对位连接的源IP地址
-C	请求压缩所有数据
-F<配置文件>	指定ssh指令的配置文件,默认的配置文件为“/etc/ssh/ssh_config”
-f	后台执行ssh指令
-g	允许远程主机连接本机的转发端口
-i<身份文件>	指定身份文件(即私钥文件)
-l<登录名>	指定连接远程服务器的登录用户名
-N	不执行远程指令
-o<选项>	指定配置选项
-p<端口>	指定远程服务器上的端口
-q	静默模式,所有的警告和诊断信息被禁止输出
-X	开启X11转发功能
-x	关闭X11转发功能
-y	开启信任X11转发功能

参考实例

基于ssh协议,远程访问服务器主机系统:
# ssh 192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:ZEjdfRjQV8pVVfu0TSYvDP5UvOHuuogMQSDUgLPG3Kc.
Are you sure you want to continue connecting (yes/no)? yes 

Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
[email protected]'s password: 此处输入远程服务器管理员密码
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Tue Dec 14 08:49:08 2022
使用指定的用户身份登录远程服务器主机系统:
# ssh -l linuxprobe 192.168.10.10
[email protected]'s password: 此处输入指定用户的密码
Activate the web console with: systemctl enable --now cockpit.socket

$ 
登录远程服务器主机系统后执行一条命令:

# ssh 192.168.10.10 "free -m"
[email protected]'s password: 此处输入远程服务器管理员密码
              total        used        free      shared  buff/cache   available
Mem:           1966        1359          76          21         530         407
Swap:          2047           9        2038
强制使用v1版本的ssh加密协议连接远程服务器主机:

# ssh -1 192.168.10.10

8.1.2 动态释放获取IP地址dhclient

dhclient命令来自于英文词组“DHCP client”的缩写,其功能是用于动态获取或释放IP地址。使用dhclient命令前需要将网卡模式设置成DHCP自动获取,否则静态模式的网卡是不会主动向服务器获取如IP地址等网卡信息的。

dhclient 参数 [网卡]
常用参数:
-p	指定dhcp客户端监听的端口号(默认端口号86)
-d	总是以前台方式运行程序
-q	安静模式,不打印任何错误的提示信息
-r	释放ip地址
-n	不配置任何接口
-x	停止正在运行的DHCP客户端,而不释放当前租约,杀死现有的dhclient
-s	在获取ip地址之前指定DHCP服务器
-w	即使没有找到广播接口,也继续运行

参考实例

通过指定网卡发起DHCP请求,获取网卡参数:

# dhclient ens160
释放系统中已获取的网卡参数:

# dhclient -r
Killed old client process
向指定的服务器请求获取网卡参数:

# dhclient -s 192.168.10.10
手动停止执行dhclient服务进程:

# dhclient -x
Removed stale PID file

8.1.3 ftp会话信息ftpwho

ftpwho命令用于显示当前所有以FTP登入的用户会话信息。

执行该命令可得知当前用FTP登入系统的用户有哪些人,以及他们正在进行的操作。

ftpwho [参数]
常用参数:
-h	显示帮助信息
-v	详细模式,输出更多信息

参考实例

查询当前正在登录FTP 服务器的用户:
# ftpwho
在详细模式下,查询当前正在登录FTP 服务器的用户:
# ftpwho -v
显示帮助信息:
# ftpwho -h

8.2 通讯状态管理

8.2.1 显示配置网卡参数ip

ip命令的功能是用于显示与配置网卡参数。作为Linux系统下一款好用的网卡参数配置工具,ip命令除了常规操作外,还可以对主机的路由、网络设备、策略路由以及隧道信息进行查看。

ip [参数]
常用参数:
-s	输出更详细的信息
-f	强制使用指定的协议族
-4	指定使用的网络层协议是IPv4协议
-6	指定使用的网络层协议是IPv6协议
-r	显示主机时,不使用IP地址,而使用主机的域名

参考实例:

显示当前的网络设备运行状态:
# ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160:  mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:60:cd:ee brd ff:ff:ff:ff:ff:ff
3: virbr0:  mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:ad:1e:4d brd ff:ff:ff:ff:ff:ff
4: virbr0-nic:  mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:ad:1e:4d brd ff:ff:ff:ff:ff:ff
显示当前的网络设备的详细运行状态:
# ip -s link 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
2: ens160:  mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:22:31:9c brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    4186       36       0       0       0       0       
3: virbr0:  mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:8a:09:91 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
4: virbr0-nic:  mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:8a:09:91 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
显示当前核心路由表信息:
# ip route list
192.168.10.0/24 dev ens160 proto kernel scope link src 192.168.10.10 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 

8.2.2 显示网络状态netstat

netstat命令来自于英文词组”network statistics“的缩写,其功能是用于显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等等。

netstat命令不仅应用于Linux系统,而且在Windows XP、Windows 7、Windows 10及Windows 11中均已默认支持,并且可用参数也相同,有经验的运维人员可以直接上手。

netstat [参数]
参数:
-a	显示所有连线中的Socket
-p	显示正在使用Socket的程序识别码和程序名称
-c 持续监听网络信息
-l	仅列出在监听的服务状态
-t	显示TCP传输协议的连线状况
-u	显示UDP传输协议的连线状况
-i 显示网络界面信息表单
-r	显示路由表信息
-n	直接使用IP地址,不通过域名服务器
-e显示额外的信息。使用此命令两次可以显示最多的细节。

参考实例
显示系统网络状态中的所有连接信息:

# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ms-wbt-server   0.0.0.0:*               LISTEN     

显示系统网络状态中的UDP连接信息:

# netstat -nu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 172.19.226.238:68       172.19.239.253:67       ESTABLISHED

显示系统网络状态中的UDP连接端口号使用信息:

# netstat -apu 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address    Foreign Address       State    PID/Program name    
udp        0      0 linuxcool:bootpc _gateway:bootps  ESTABLISHED   1024/NetworkManager 
udp        0      0 localhost:323           0.0.0.0:*               875/chronyd         
udp6       0      0 localhost:323           [::]:*                  875/chronyd 

显示网卡当前状态信息:

# netstat -i 
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             1500    31945      0      0 0         39499      0      0      0 BMRU
lo              65536        0      0      0 0             0      0      0      0 LRU

显示网络路由表状态信息:

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         _gateway        0.0.0.0         UG        0 0          0 eth0
172.19.224.0    0.0.0.0         255.255.240.0   U         0 0          0 eth0

找到某个服务所对应的连接信息:

# netstat -ap | grep ssh
unix  2      [ ]         STREAM     CONNECTED     89121805 203890/sshd: root [  
unix  3      [ ]         STREAM     CONNECTED     27396    1754/sshd            
unix  3      [ ]         STREAM     CONNECTED     89120965 203890/sshd: root [  
unix  2      [ ]         STREAM     CONNECTED     89116510 203903/sshd: root@p  
unix  2      [ ]         STREAM     CONNECTED     89121803 203890/sshd: root [  
unix  2      [ ]         STREAM     CONNECTED     29959    1754/sshd            
unix  2      [ ]         DGRAM                    89111175 203890/sshd: root [  
unix  3      [ ]         STREAM     CONNECTED     89120964 203903/sshd: root@p  

8.2.3 监听网络流量tcpdump

tcpdump命令的功能是用于监听网络流量,是一款数据嗅探工具,Linux系统中常用的数据抓包软件,能够记录所有经过服务器的数据包信息,需要使用管理员身份执行。
tcpdump 可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
请准备一个Linux主机,如果你本机是Linux环境,或者你的虚拟机是Linux环境都可以。前提准备:

安装tcpdump命令:sudo yum install tcpdump
安装nc命令:sudo yum install nc
8.2.3.1 基本格式
tcpdump [参数]
参数:
-a	尝试将网络和广播地址转换成名称
-c<数据包数目>	收到指定的数据包数目后,就停止进行倾倒操作
-d	把编译过的数据包编码转换成可阅读的格式
-dd	把编译过的数据包编码转换成C语言的格式
-ddd	把编译过的数据包编码转换成十进制数字的格式
-e	在每列倾倒资料上显示连接层级的文件头
-f	用数字显示网际网络地址
-F<表达文件>	指定内含表达方式的文件
-i<网络接口>	使用指定的网络接口-网卡送出数据包,默认只监听eth0
-l	使用标准输出列的缓冲区
-n	不把主机的网络地址转换成名字
-N	不列出域名
-O	不将数据包编码最佳化
-p	不让网络界面进入混杂模式
-q	快速输出,仅列出少数的传输协议信息
-r<数据包文件>	从指定的文件读取数据包数据
-s<数据包大小>	设置每个数据包的大小
-S	用绝对而非相对数值列出TCP关联数
-t	在每列倾倒资料上不显示时间戳记
-tt	在每列倾倒资料上显示未经格式化的时间戳记
-T<数据包类型>	强制将表达方式所指定的数据包转译成设置的数据包类型
-v	详细显示指令执行过程
-vv	更详细显示指令执行过程
-x	用十六进制字码列出数据包资料
-w<数据包文件>	把数据包数据写入指定的文件
host <主机名/IP> 监听指定主机的数据包,也可以指定两个主机间的通讯
tcp port 23   tcp端口监听
udp port 123 udp端口监听
src 发送数据
dst 接受数据
  • 监听指定接口的数据包
监视指定网络接口的数据包:
# tcpdump -i eth1
监听指定端口号的数据包,并以文本形式展示:
# tcpdump -i any port 80 -A
  • 监听指定主机的数据包
监视指定主机的数据包(主机名):
# tcpdump host user
监听指定主机的数据包(IP地址):
# tcpdump host 192.168.10.10
监听user1 与user2 或者与 user3 之间通信的数据包
tcpdump host user1 and \(user2 or user3 \)
监听user1与除user2以外的,任何其他主机之间通信的IP 数据包
tcpdump ip host user1 and not user2
通过ip地址监听
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname
监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname
  • 监听指定主机与端口的数据包
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1
对本机的udp 123 端口进行监视 123 为ntp的服务端口
tcpdump udp port 123 
  • 监听指定网络的数据包
打印本地主机与Berkeley网络上的主机之间的所有通信数据包(ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包)
tcpdump net ucb-ether
打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)
tcpdump 'gateway snup and (port ftp or ftp-data)'
打印所有源地址或目标地址是本地主机的IP数据包
(如果本地网络通过网关连到了另一网络, 则另一网络并不能算作本地网络。localnet 实际使用时要真正替换成本地网络的名字)
tcpdump ip and net localnet

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

8.2.4 防火墙策略管理iptables

iptables是一个防火墙策略管理工具的命令,同时也是一个基于内核级别的防火墙服务,用户可以基于它来对数据包进行过滤操作,拒绝掉危险的外部请求流量,保护内网的安全。iptables命令默认仅支持ipv4协议,如需ipv6协议支持需使用ip6tables命令。

 iptables [参数]
参数:
-t<表>	指定要操纵的表
-A	向规则链中追加条目
-D	从规则链中删除条目
-I	向规则链中插入条目
-R	替换规则链中的相应条目
-L	显示规则链中的已有条目
-F	清除规则链中的现有条目
-Z	清空规则链中的数据包计数器和字节计数器
-N	创建新的用户自定义规则链
-P	定义规则链中的默认目标(策略)
-h	显示帮助信息
-p<协议>	指定要匹配的数据包的协议类型
-s<源地址>	指定要匹配的数据包的源IP地址
-j<目标>	指定要跳转的目标
-i<网络接口>	指定数据包进入本机的网络接口
-o<网络接口>	指定数据包离开本机做使用的网络接口
-c<包计数>	在执行插入、追加和替换操作时初始化包计数器和字节计数器

参考实例:

显示当前防火墙策略中全部的过滤表信息:
# iptables -L
显示当前防火墙策略中指定的NAT表信息:
# iptables -L -t nat
禁止指定的远程主机访问本地全部的服务,通通禁止:

# iptables -I INPUT -s 192.168.10.10 -j DROP
禁止指定的远程主机访问本地的某个端口,其余允许:

# iptables -I INPUT -s 192.168.10.10 -p tcp --dport 22 -j DROP

8.3 网络测试

8.3.1 网络连通性ping

ping命令的功能是用于测试主机间网络连通性,发送出基于ICMP传输协议的数据包,要求对方主机予以回复,若对方主机的网络功能没有问题且防火墙放行流量,则就会回复该信息,我们也就可得知对方主机系统在线并运行正常了。

不过值得我们注意的是Linux与Windows相比有一定差异,Windows系统下的ping命令会发送出去4个请求后自动结束该命令;而Linux系统则不会自动终止,需要用户手动按下组合键“Ctrl+c”才能结束,或是发起命令时加入-c参数限定发送个数。

ping [参数] 目标主机
常用参数:
-d	使用Socket的SO_DEBUG功能
-c	指定发送报文的次数
-i	指定收发信息的间隔时间
-I	使用指定的网络接口送出数据包
-l	设置在送出要求信息之前,先行发出的数据包
-n	只输出数值
-p	设置填满数据包的范本样式
-q	不显示指令执行过程
-R	记录路由过程
-s	设置数据包的大小
-t	设置存活数值TTL的大小
-v	详细显示指令的执行过程

参考实例:

测试与指定网站服务器之间的网络连通性(需手动按下“Ctrl+c”组合键结束命令):
# ping www.linuxcool.com
PING www.linuxcool.com.w.kunlunar.com (222.85.26.229) 56(84) bytes of data.
64 bytes from www.linuxcool.com (222.85.26.229): icmp_seq=1 ttl=52 time=22.4 ms
64 bytes from www.linuxcool.com (222.85.26.229): icmp_seq=2 ttl=52 time=22.4 ms
64 bytes from www.linuxcool.com (222.85.26.229): icmp_seq=3 ttl=52 time=22.4 ms
64 bytes from www.linuxcool.com (222.85.26.229): icmp_seq=4 ttl=52 time=22.4 ms
^C
--- www.linuxcool.com.w.kunlunar.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 22.379/22.389/22.400/0.094 ms
测试与指定网站服务器之间的网络连通性,发送请求包限定为4次:
# ping -c 4 www.linuxcool.com
PING www.linuxcool.com (222.85.26.234) 56(84) bytes of data.
64 bytes from www.linuxcool.com (222.85.26.234): icmp_seq=1 ttl=52 time=24.7 ms
64 bytes from www.linuxcool.com (222.85.26.234): icmp_seq=2 ttl=52 time=24.7 ms
64 bytes from www.linuxcool.com (222.85.26.234): icmp_seq=3 ttl=52 time=24.7 ms
64 bytes from www.linuxcool.com (222.85.26.234): icmp_seq=4 ttl=52 time=24.7 ms

4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 24.658/24.664/24.673/0.111 ms
测试与指定主机之间的网络连通性,发送3次请求包,每次间隔0.2秒,最长等待时间为3秒:

# ping -c 3 -i 0.2 -W 3 192.168.10.10
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.166 ms
64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.113 ms

--- 192.168.10.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 410ms
rtt min/avg/max/mdev = 0.060/0.113/0.166/0.043 ms

8.3.2 网络设备参数信息ifconfig

ifconfig命令来自于英文词组”network interfaces configuring“的缩写,其功能是用于显示或设置网络设备参数信息。在Windows系统中与之类似的命令叫做ipconfig,同样的功能可以使用ifconfig去完成。

通常不建议使用ifconfig命令配置网络设备的参数信息,因为一旦服务器重启,配置过的参数会自动失效,还是编写到配置文件中更稳妥。

ifconfig [参数] [网卡设备]
常用参数:
add<地址>	设置网络设备IPv6的IP地址
del<地址>	删除网络设备IPv6的IP地址
down	关闭指定的网络设备
up	启动指定的网络设备
IP地址	指定网络设备的IP地址

参考实例:

显示系统的网络设备信息:

# ifconfig
ens160: flags=4163  mtu 1500
        inet 192.168.10.30  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::4d16:980c:e0fe:51c2  prefixlen 64  scopeid 0x20
        ether 00:0c:29:60:cd:ee  txqueuelen 1000  (Ethernet)
        RX packets 407  bytes 34581 (33.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 59  bytes 6324 (6.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
………………省略部分输出信息………………
对指定的网卡设备依次进行关闭和启动操作:

# ifconfig ens160 down
[root@linuxcool ~]# ifconfig ens160 up
对指定的网卡设备执行修改IP地址操作:

# ifconfig ens160 192.168.10.20 netmask 255.255.255.0
对指定的网卡设备执行修改MAC地址操作:

注意Linux系统中的MAC地址间隔符为冒号(:),而在Windows系统中间隔符为减号(-)。

# ifconfig ens160 hw ether 00:aa:bb:cc:dd:ee
对指定的网卡设备依次进行ARP协议关闭和开启操作:

# ifconfig ens160 -arp
# ifconfig ens160 arp

8.3.3 网络配置接口ifcfg

ifcfg命令是一个Bash脚本程序,用来设置linux中的网络接口参数。

 ifcfg [参数]
常用参数:
网络接口	指定要操作的网络接口
add/del	添加或删除网络接口上的地址
ip地址	指定IP地址和子网掩码
Stop	停用指定的网络接口的IP地址

参考实例:

停止指定网络接口上的IP地址:
# ifcfg eth0 stop
为网络接口配置IP地址:
# ifcfg eth1 add 192.168.60.11/24
为网口删除网络地址:
# ifcfg eth0 delete 192.168.10.250/24

你可能感兴趣的:(Linux,linux,服务器,ssh)