网络配置

网卡管理

ethtool is a networking utility on Linux. It is used to configure Ethernet devices

find the assigned names of all the available network interfaces of your computer, with the following command: ip link show

禁用/启用

ip 命令启用禁用网卡: 语法ip link set Down/Up

ip link set enp0s3 down # 禁用
ip link set enp0s3 up   # 启用 

ifdown/up 命令启用禁用网卡:

ifdown eth1  # 禁用
ifup eth1    # 启用 

ifconfig 命令启用禁用网卡

ifconfig enp0s3 down # 禁用
ifconfig enp0s3 up   # 启用 

DHCP

打开终端,进入 root 用户。

  • 执行命令:vi /etc/network/interfaces,打开网络配置文件。

  • 在文件中找到要配置为 DHCP 的网卡,例如 eth0。

将该网卡的配置改为如下形式:

auto eth0
iface eth0 inet dhcp

保存并关闭文件

  • 执行命令:systemctl restart networking,重启网络服务。
  • 执行命令:ifconfig,查看网络配置是否生效。

Ubuntu server 18.xx 在 Ubuntu 18.04中,传统的配置 /etc/network/interfaces 已无用 修改 sudo vim /etc/netplan/{XX编号}-cloud-init.yaml

# This is the network config written by 'subiquity'
version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true # 启用dhcp
      dhcp6: no
      addresses: [192.168.1.9/24] # 不启用dhcp 则
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]

重启网络: sudo netplan apply sudo netplan --debug apply //带日志

IP

ip link show                    # 显示网络接口信息
ip link set eth0 up             # 开启网卡
ip link set eth0 down            # 关闭网卡
ip link set eth0 promisc on      # 开启网卡的混合模式
ip link set eth0 promisc offi    # 关闭网卡的混合模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400        # 设置网卡最大传输单元
ip addr show     # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 为eth0网卡添加一个新的IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 为eth0网卡删除一个IP地址192.168.0.1

ip addr add 192.168.40.1/24 dev ens3 ip link set ens3 down,

https://www.runoob.com/linux/linux-comm-ip.html

DNS

/etc/systemd/resolved.conf

https://www.wenjiangs.com/doc/systemd-resolved.conf resolved.conf, resolved.conf.d — 网络名字解析服务配置文件 默认设置是在编译期间确定的,所以仅在确实需要修改默认设置的情况下,才需要使用配置文件。位于/etc/systemd/ 目录中的初始配置文件,仅包含了展示选项默认值的注释,目的在于方便系统管理员查看和直接修改。

vi /etc/systemd/resolved.conf

# 指定 DNS 服务器,以空白分隔,支持 IPv4 或 IPv6 位置
DNS=114.114.114.114
# 备用 DNS 服务器
FallbackDNS=8.8.8.8
# 设置搜索域名
Domains=domain.com
# 设置 LLMNR 是否激活,可用的选项有 yes、no、resolve
LLMNR=yes
# 设置 MulticastDNS 是否激活,可用的选项有 yes、no、resolve
MulticastDNS=yes
# 设置 DNSSEC 是否激活,可用的选项有 yes、no、allow-downgrade
DNSSEC=yes
# 设置缓存是否激活,可用的选项有 yes、no、no-negative
Cache=no-negative
 
 

/etc/resolv.conf

编辑 /etc/resolv.conf 文件

sudo vim /etc/resolv.conf

nameserver 114.114.114.114
nameserver 8.8.8.8

sudo systemctl restart systemd-resolved.service

NetworkManager

sudo systemctl disable network
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
sudo systemctl restart NetworkManager
sudo systemctl status NetworkManager

ip link show

在许多Linux发行版中,包括Ubuntu,/etc/resolv.conf文件通常是由网络管理器(如NetworkManager)或resolvconf服务动态生成的。如果您直接编辑这个文件,那么在网络服务重新启动或配置更改时,您的更改可能会被覆盖。

首先,找出你的网络接口名称:

nmcli device show

使用以下命令修改DNS设置(替换{interface} 为您的网络接口名称)

nmcli con mod ens3 ipv4.dns "114.114.114.114 114.114.114.114"

应用更改:

nmcli con up ens3

ifconfig

Linux ifconfig 命令用于显示或设置网络设备。 ifconfig 可设置网络设备的状态,或是显示目前的设置。

配置IP地址

//给eth0网卡配置IP地址 ifconfig eth0 192.168.1.56

// 给eth0网卡配置IP地址,并加上子掩码 ifconfig eth0 192.168.1.56 netmask 255.255.255.0

// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址 ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255

启动关闭指定网卡

ifconfig eth0 down
ifconfig eth0 up

配置多个IP

配置网卡ip别名(重启失效)

ifconfig eth0:0 192.168.6.100  broadcast 192.168.6.100 netmask 255.255.255.0 up
ifconfig eth0:1 173.173.173.173 netmask 255.255.255.0 up
ifconfig eth0:2 119.110.120.1 netmask 255.255.255.0 up

清除ip别名 ifconfg eth0:0 down

防火墙/iptables


iptables命令是Linux上常用的防火墙软件,另外配置它是即使生效的,千万不要把你ssh登陆端口给禁了,这就很尴尬o

  • 查看已经配置的规则(rule)列表
iptables -L -n 

如果出现 can’t initialize iptables table ‘filter’ … 提权即可

  • 清除预设表filter中的所有规则链的规则
iptables -F
  • 清除预设表filter中使用者自定链中的规则
iptables -X 
  • 具体配置实例

-I 指定规则名

 
配置 白名单/黑名单规则 - 既 在filter规则之外, 所有 INPUT 默认 DROPACCEPT
iptables -P INPUT DROP/ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT #通常都信任出站 不过默认规则就是同意
 
#双向 (重要,不配置无法使用apt-get. ping... ,可能被允许出站后 ,入站的端口)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
    本规则允许所有来自外部的SSH连接请求,也就是说,只允许进入eth0接口,并且目的端口为22的数据包
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#允许本机 回环
iptables -A INPUT -i lo -j ACCEPT
 
#http 80
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9181 -j ACCEPT
 
#ftp 21
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#mysql 3306 不允许本机登陆都不行=.=
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
 
当然出站的配置大概是:  iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
 
以下未测试;
仅允许来自192.168.100.0/24的网络
    iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
允许HTTP/HTTPS连接请求 1.允许HTTP连接:80端口
    iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
通过指定-m multiport选项,可以在一条规则中同时允许SSH、HTTP、HTTPS连接:
    iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
允许来自指定网络的MySQL连接请求
    iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
防止外部的ping和SYN洪水攻击
    iptables -A INPUT -p tcp --syn -m limit --limit 100/s --limit-burst 100 -j  ACCEPT
ping洪水攻击,限制每秒的ping包不超过10个
    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s –limit-burst 10 -j ACCEPT
防止各种端口扫描,将SYN及ACK SYN限制为每秒钟不超过200个
    iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT
 
  • iptables 当前状态
service iptables status
  • iptables 启动
modprobe ip_tables
  • ubuntu 并没有关闭命令,所以要通过变通方法解决防火墙
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
modprobe -r ip_tables
//依次执行以上命令即可关闭iptables,否则在执行modproble -r ip_tables时将会提示  FATAL: Module ip_tables is in use.
  • 保存配置
service iptables-persistent save

存储位置/etc/iptables/iptables-persistent 会在开机启动时自动load之前的iptables设置
iptables-persisten是bash脚本,位置在/etc/

sudo apt-get install iptables-persistent
该命令脚本下载执行后; 会询问我们是否对IPTables配置进行保存
如果确定的话选择“是”即可。保存后下次重启系统也不会造成配置丢失了.



网络统计 netstat

Linux netstat命令

# 按端口排序
netstat -nltp | awk 'NR > 2 {split($4, a, ":"); print a[length(a)] "\t" $0}' | sort -n | cut -f2-
 

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

默认情况下Linux的 1024 以下端口是只有root用户才有权限占用! netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

-l 或--listening 显示监听Socket。
-t或--tcp 显示TCP
-u或--udp 显示UDP
-p或--programs 显示对应的进程名称/PID
-n或--numeric 显示IP而不是域名, 还有端口
netstat -lntup 

统计连接数

查看TCP的并发请求数及其TCP连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
netstat -n|grep  ^tcp|awk '{print $NF}'|sort -nr|uniq -c
 
# 或者
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'
 

MySQL进程连接数:

ps -axef | grep mysqld -c

CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK:等待所有分组死掉

查看8080端口连接情况 netstat -an|grep 8080 netstat -an|grep 5632

顺带一提 在windows 平台的是

# 要查看当前tcp链接数总量
`netstat -ant|find /C /I "TCP"`
 
# 要查看10.10.0.1的网络链接数:
`netstat -ant|find /C /I "10.10.0.1"`

监听网络端口数据 tcpdump

Linux tcpdump命令用于倾倒网络传输数据。 执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。

tcpdump -i any -n host 192.168.10.87 and port 7688

TCP 包

sudo tcpdump -A -s 0 'tcp port 11883 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
sudo tcpdump -X -s 0 'tcp port 3263 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
 
sudo tcpdump -X -s 0 'tcp port 7688 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

以ASCII码方式查看数据包

sudo tcpdump -A port 3263 

UDP 包

# 抓取所有 UDP 数据包
sudo tcpdump -i any udp
 
# 抓取特定端口的 UDP 数据(如 DNS 端口 53)
sudo tcpdump -i any udp port 53
 
# 保存数据包到文件(后续用 Wireshark 分析)
sudo tcpdump -i any udp -w udp_packets.pcap