# Linux网络防火墙
# Flag
nethogs
: 按进程查看流量占用ethtool
: 诊断工具tcpdump
: 抓包工具- 监控总体带宽使用:
nload
、bmon
、slurm
、bwm-ng
、cbm
、speedometer
、netload
- 监控总体带宽使用(批量式输出):
vnstat
、ifstat
、dstat
、collectl
- 每个套接字连接的带宽使用:
iftop
、iptraf
、tcptrack
、pktstat
、netwatch
、trafshow
、jnettop
ntopng
- perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、glances、atop、nmon、pcp-gui、nfsstat、netstat、iostat
- https://github.com/htop-dev/htop (opens new window)
- 视图监视器 https://github.com/paradoxxxzero/gnome-shell-system-monitor-applet (opens new window)
- https://github.com/aristocratos (opens new window)
# 查看网络
# 查询系统中缓存的ARP表,ARP表用来维护IP地址与MAC地址的对应关系 arp -an # ip a ifconfig # 输出当前的ESTABLISHED和TIME_WAIT数 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' netstat -ant | awk ' {++s[$NF]} END {for(k in s) print k,s[k]} ' ss -ant | awk ' {++s[$1]} END {for(k in s) print k,s[k]} ' # 详情 netstat -antp # 打印所有进程及其线程 pstree -p # 打印某个进程的线程数 pstree -p {pid} | wc -l # 打印当前地址IP链接情况 netstat -antp |grep "ESTABLISHED" |awk '{print $5}'|awk -F : '{print $4}'|sort |uniq -c
Copied!
# iptables
iptables是Linux从2.4.x版本内核开始,系统自带的防火墙。随着Linux内核的不断更新,Linux的防火墙在iptables基础上泛生出 UFW和Firewalld,并且在一些发行版中已经替代iptables。
#永久关闭防火墙 chkconfig iptables off # 永久关闭后启用 chkconfig iptables on # 查看防火墙规则 iptables -L # 查出所有的规则信息 iptables -nvl iptables -L -n --line-number # 清空已存在的规则 iptables -F iptables --flush # sudo iptables -I INPUT -p tcp --dport [端口号] -j ACCEPT # --dport 目标端口,数据从外部进入服务器 # --sport 数据源端口,数据从服务器出去 sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT # 保存iptables设置规则 iptables-save # 安装iptables-persistent工具,使端口配置持久化 sudo apt-get install iptables-persistent # 端口配置永久生效 sudo netfilter-persistent save sudo netfilter-persistent reload # 生成的规则将被存储在以下文件中: # /etc/iptables/rules.v4 # /etc/iptables/rules.v6
Copied!
# UFW
# 安装 sudo apt install ufw # 检查 UFW 的状态 sudo ufw status verbose # 打开防火墙 ufw enable # 关闭防火墙 ufw disable #重启防火墙 ufw reload # 查看已经定义的ufw规则 ufw status # 外来访问默认允许 ufw default allow # 外来访问默认拒绝 ufw default deny # 允许访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。 ufw allow 20 # 拒绝访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。 ufw deny 20 # 允许自192.168.0.0/24的tcp封包访问本机的22端口。 sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22 # 删除以前定义的"允许访问20端口"的规则 ufw delete allow 20 # 删除以前定义的"拒绝访问20端口"的规则 ufw delete deny 20
Copied!
# firewalld
# 查看firewalld状态,发现当前是dead状态,即防火墙未开启。 systemctl status firewalld # 开启防火墙,没有任何提示即开启成功。 systemctl start firewalld # 查看已开放的端口(默认不开放任何端口) firewall-cmd --list-ports # 重启防火墙 firewall-cmd --reload # 停止防火墙 systemctl stop firewalld.service # 禁止防火墙开机启动 systemctl disable firewalld.service # 删除端口 firewall-cmd --zone= public --remove-port=80/tcp --permanent # 开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent # 开启8080-8089的IP端 firewall-cmd --zone=public --add-port=8080-8089/tcp --permanent # 开启3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent
Copied!
--zone
作用域--add-port=80/tcp
添加端口,格式为:端口/通讯协议--permanent
永久生效,没有此参数重启后失效
配置firewalld-cmd
# 查看版本 firewall-cmd --version # 查看帮助 firewall-cmd --help # 显示状态 firewall-cmd --state # 查看所有打开的端口 firewall-cmd --zone=public --list-ports # 更新防火墙规则 firewall-cmd --reload # 查看区域信息 firewall-cmd --get-active-zones # 查看指定接口所属区域 firewall-cmd --get-zone-of-interface=eth0 # 拒绝所有包 firewall-cmd --panic-on # 取消拒绝状态 firewall-cmd --panic-off # 查看是否拒绝 firewall-cmd --query-panic
Copied!
# 路由跟踪
- 查询IP地理信息 https://github.com/zu1k/nali (opens new window)
- DNS扫描 https://github.com/pwnesia/dnstake (opens new window)
- https://github.com/zartbot/ztrace (opens new window)
ping
、tcptraceroute
、traceroute
、mtr
- https://www.cnblogs.com/xzkzzz/p/7413177.html (opens new window)
- https://www.jianshu.com/p/802010d54849 (opens new window)
- https://cloud.tencent.com/developer/article/1332118 (opens new window)
- http://winmtr.net/download-winmtr (opens new window)
- Netcat详解 (opens new window)
- http://www.dest-unreach.org/socat (opens new window)
- https://github.com/vi/websocat (opens new window)
在Linux中有一个更好的网络连通性判断工具,它可以结合ping | nslookup | tracert 来判断网络的相关特性,这个命令就是mtr。
注意:MTR使用的raw sockets是绕过TCP/IP协议,需要ROOT权限来执行,因此如果以普通用户身份来执行mtr会出错, 提示“mtr: unable to get raw sockets”
tcpping
脚本依赖tcptraceroute
组件,所以必须先安装yum install tcptraceroute
注意
tcpping
与tcping
是不同的两款工具
- https://docs.microsoft.com/zh-cn/sysinternals/downloads/psping (opens new window)
- https://code.google.com/archive/p/paping/downloads (opens new window)
PsPing
是微软PSTools
工具套件中的其中一个命令。除了ICMP
ping 测试,主要用来测试 TCP 端口的连通性, 还可以测试TCP/UDP
网络时延和带宽。不过,PsPing
只能在 Windows 中运行。Linux 可以使用PaPing
(跨平台的开源工具)。
常用网站
- http://ipcheck.need.sh (opens new window)
- https://torch.njs.app (opens new window)
- 瓦工的全球ping工具 http://ping.pe (opens new window)
- https://www.yougetsignal.com/tools/open-ports (opens new window)
- http://tool.chinaz.com/port (opens new window)
- https://www.websitepulse.com/tools/china-firewall-test (opens new window)
- https://www.vps234.com/ipchecker (opens new window)
- https://tools.ipip.net/traceroute.php (opens new window)
- IP范围转换CIDR https://ip2cidr.com (opens new window)
- http://apps.neu.edu.cn/netaggr (opens new window)
- 无类别域间路由(CIDR)网络地址计算器 (opens new window)
- IPv4 / IPv6 CIDR计算器 | RAKKOTOOLS🔧 (opens new window)
- http://ip.chacuo.net/ipconvert (opens new window)
- https://github.com/3th1nk/cidr (opens new window)
- https://www.oldking.net (opens new window)
tracert
Tracert
列出分组经过的路由节点,以及它在IP 网络中每一跳的延迟(这里的延迟是指:分组从信息源发送到目的地所需的时间, 延迟也分为许多的种类——传播延迟、传输延迟、处理延迟、排队延迟等,是大多数网站性能的瓶颈之一).
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
Copied!
选项
-d
指定不将 IP 地址解析到主机名称。-h maximum_hops
指定跃点数以跟踪到称为 target_name 的主机的路由。-j host-list
指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。-w timeout
等待 timeout 为每次回复所指定的毫秒数。target_name
目标主机的名称或 IP 地址。
示例
tracert www.bajins.com
Copied!
# 网卡
# MTU
MTU经过网卡传输的数据包的最大传输单元,传输设备的MTU值不规范造成传输失败的情况
查看MTU值
cat /sys/class/net/eth0/mtu
Copied!
临时更改MTU值
echo "1476" > /sys/class/net/eth0/mtu # 或者 # ifconfig 网口名 mtu 数值 ifconfig eth0 mtu 1476
Copied!
永久更改MTU值
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 在DEVICE=eth0下面加入 MTU=1476 # 启用IPv6地址的,修改IPv6 mtu的参数为 IPV6_MTU="1280"
Copied!
重启网络接口
service network restart
Copied!