1024 以下的端口号是为超级用户保留的,因此普通用户无法绑定到该范围内的端口。
并且可以在中设置系统将分配随机绑定请求的端口范围,/proc/sys/net/ipv4/ip_local_port_range
因此我可以保留自动分配的范围。但是我如何拒绝非特权用户访问某个端口范围?
例如,我希望端口 16000-17000 仅供超级用户使用。或者只是将标准 0-1024 增加到 0-17000 或我选择的任意数字。我该如何实现这一点?
答案1
在内核源代码中找到 include/net/sock.h
在 sock.h 中查找:
#define PROT_SOCK 1024
低于该行数字的任何内容都将是受保护的端口。
如果您也想要一个下限,那么您可以通过查找 PROT_SOCK 的使用位置并添加额外的检查来找到添加下限的位置。使用 grep 快速检查显示检查是按协议进行的,因此您需要修改 ipv4、ipv6 以及您单独使用的其他任何协议的测试。
这应该相对容易,但是每当您想要升级内核时,您都必须手动维护它。