Linux 使用 net.ipv4.ip_local_port_range 内核参数增加 TCP 端口范围
如果您的 Linux 服务器正在打开大量传出网络连接,则需要增加本地端口范围。默认情况下范围很小。例如,如果 Squid 代理服务器用尽端口,它可能会受到攻击。其他示例包括流量很大的网络服务器,如 nginx 负载平衡器、LXD vm 等。
您可以使用 sysctl 命令在运行时修改内核参数。可用的参数列在 /proc/sys/ 下。请注意,此技巧仅适用于高带宽、繁忙的 Linux 服务器或大型网格服务器。
如何查找当前端口范围类型
键入以下cat 命令:
$ cat /proc/sys/net/ipv4/ip_local_port_range
或者使用 sysctl 命令:
$ sysctl net.ipv4.ip_local_port_range
示例输出:
net.ipv4.ip_local_port_range = 32768 61000
设置新的本地端口范围
您可以使用以下任一命令设置范围。您必须是 root 用户:
# echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
或
$ sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"
以上定义了 TCP 和 UDP 使用的本地端口范围,请选择本地端口。第一个数字是第一个本地端口号,第二个是最后一个本地端口号。如果可能,这些数字最好具有不同的奇偶校验,即一个偶数值和一个奇数值。默认值分别为 32768 和 60999,或由您的发行版或系统管理员设置的任何值。在此示例中,1024 不是奇数,而 65535 是奇数。否则,您将收到以下警告:
ip_local_port_range:优先使用不同的奇偶校验来作为起始/结束值。
Linux 使用 sysctl.conf 增加 ip_local_port_range TCP 端口范围
最后,编辑 /etc/sysctl.conf 文件,永久更改 /proc 文件系统,即将以下行附加到 /etc/sysctl.conf 文件:
# increase system IP port limits
net.ipv4.ip_local_port_range = 1024 65535
如何查看所有 tcp/udp/ip 会话信息
使用 ss 命令/netstat 命令
示例输出:$ netstat -s | more
$ netstat -st #tcp
$ netstat -su #udp
$ netstat -sw #raw
$ netstat -nap
$ netstat -naptu | more
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 172.16.3.1:11211 172.16.3.4:49806 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.4:49796 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.3:57004 TIME_WAIT - tcp 0 0 172.16.3.1:11211 10.105.28.42:50818 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40514 TIME_WAIT - tcp 0 0 172.16.3.1:3306 10.105.28.44:37984 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.3:57008 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40508 TIME_WAIT - tcp 0 0 172.16.3.1:3306 10.105.28.44:38080 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40500 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.4:49774 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40462 TIME_WAIT - tcp 0 0 172.16.3.1:3306 172.16.3.2:40806 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40518 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40472 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40442 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40414 TIME_WAIT - tcp 0 0 172.16.3.1:3306 10.105.28.44:38066 TIME_WAIT - tcp 0 0 172.16.3.1:11211 172.16.3.2:40432 TIME_WAIT - ... ..
或者使用 ss 命令:
$ ss -s
示例输出:
Total: 923 (kernel 39850) TCP: 439 (estab 6, closed 423, orphaned 0, synrecv 0, timewait 370/0), ports 0 Transport Total IP IPv6 * 39850 - - RAW 0 0 0 UDP 7 6 1 TCP 16 15 1 INET 23 21 2 FRAG 0 0 0
欲了解更多信息,请阅读以下手册页:
$ man sysctl
$ man 5 sysctl.conf
$ man ss
$ man netstat