我想将一些 Linux 服务设置为非标准端口 - 最高有效端口号是多少?
答案1
(2^16)-1,或 0-65,535(-1 是因为端口 0 已保留且不可用)。(已编辑,因为 o_O Tync 提醒我我们不能使用端口 0,而 Steve Folly 提醒我您要求的是最高端口,而不是端口数)
但你可能用错了方法。有人支持非标准端口,也有人反对。我认为,除了最普通的扫描仪外,它们与非标准端口无关,而最普通的扫描仪可以通过使用最新软件和适当的防火墙技术以及强密码来防范。换句话说,安全最佳实践。
答案2
1-65535 范围内的端口可用,1-1023 范围内的端口是特权为了监听这些端口,应用程序需要以 root 身份运行。
答案3
虽然 1-65535 是合法的 TCP 端口,但 1-1023 确实是用于众所周知的端口服务。如果在建立临时端口后启动自己的服务,则可能会遇到随机问题。对于那些可能不知道的人来说,临时端口是本地连接到远程端点(或类似的东西)的端口。因此,如果您编写了一个侦听端口 20001 的 TCP 服务。今天和明天可能都很好。但是有一天您的服务可能会启动并尝试绑定到 20001,但会失败,因为它被视为临时端口。有一个解决方案。您必须让您的管理员或您自己更改服务器上的系统临时端口范围策略。在 Linux 系统上,它分两步完成:
- 动态地
- 永久
必须执行这两个步骤,除非您计划重新启动(在这种情况下不需要动态步骤)。要将范围设置为 40000 至 65535,请执行以下操作:
动态的
echo 40000 65535 > /proc/sys/net/ipv4/ip_local_port_range
或者
sysctl -w net.ipv4.ip_local_port_range="40000 65535"
永恒的
将以下内容添加到 /etc/sysctl.conf:
net.ipv4.ip_local_port_range = 40000 65535
要读取当前设置或确认更改:
/sbin/sysctl net.ipv4.ip_local_port_range
输出将会像这样:
net.ipv4.ip_local_port_range = 9000 65500
确保您了解服务器的用途。过度缩小范围可能会导致其他问题。
快乐编码!(或无论你做什么)
答案4
所有说 65,535 的人都是正确的。
但是!!!通过一些仔细的内核可调参数操作,您可以告诉 Linux 使用更多。一些商业 UNIX 系统会在技术上越界的端口上运行服务而不会出现问题。这也是绕过一些防火墙/ACL 保护网络的超级简单方法!:P
我曾经在 tcp/99999 上运行第二个 telnet 服务器,它总是能正常工作。即使在典型的特权端口 (1-1024) 被 ACL 或网络防火墙阻止的情况下也是如此。
几乎没有人会扫描 65,535 以上的端口。大多数网络设备无法检查定义范围(0-65535)之外的任何内容,除非规则另有指示,否则会盲目转发流量。现在我们有了 64 位系统,上限范围在技术上就是 64 位边界。这并不意味着网络会通过流量,但通常它们会通过没有规则丢弃或拒绝的任何内容。