网络配置
网卡管理
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.1ip 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.8sudo 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 默认 DROP 或 ACCEPT
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
# 按端口排序
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