与 iptables 规则绑定冲突

与 iptables 规则绑定冲突

我正在用 C 语言开发一个绑定在随机端口上的服务器

我担心所选的随机端口可能会与 iptables 规则冲突。我的意思是所选端口是否已经作为转发端口存在于 iptables 中。

如何使用 C 检查所选端口是否在 iptables 规则中不存在?

答案1

如果您的服务器使用的标准协议已经分配了官方端口号,那么您应该使用官方的端口号。

如果服务器使用没有官方端口号的非标准协议,则您应该使用 49152-65535 范围内的指定端口号:动态和/或私有端口。

IANA 尚未指定哪些数字用于动态分配,哪些用于本地定义的服务。但是您的操作系统可能会指定。对于 Linux,任何动态分配给向外连接的客户端的端口号都将取自/proc/sys/net/ipv4/ip_local_port_range

默认情况下,此范围为32768 61000,因此您需要避免在此范围内或以下的任何内容。 61000 以上的端口号应该可以安全使用。

通常,您需要在配置中使用静态端口号,以便任何需要从外部联系它的人都知道要联系哪个端口号。但是您可以从该范围内选择一个随机数,并将其放入配置文件中,这样当您需要与选择了相同范围内端口号的其他服务一起工作时,端口扫描发现它的可能性就会降低,也不会导致冲突。

我通常使用此命令为任何本地定义的服务选择一个端口号:

echo $[61002+RANDOM%4532]

答案2

查看http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml并选择一个不常用的端口。(最好大于 1024)

就像任何其他 Linux 守护进程一样,创建并读取 .conf 来配置端口,以防用户想要更改它。

相关内容