我想限制一系列udp端口到单个应用程序(或用户)。 我想实现的不是简单地阻止其他用户的bind()
,而是从可以自动分配的池中删除范围。
例如,如果有人试图显式绑定12345,但不运行指定的应用程序,他们应该得到EPERM。 如果有人试图绑定一个未指定的端口,他们不应该试图随机绑定12345。
有没有什么系统可以帮到这里? 我尝试浏览apparmor / selinux文档,但他们似乎只做阻塞部分。
在Linux上执行此操作的最简单方法是,如果您在标准临时端口范围的顶部或底部范围保留一个块。
通过运行找出你当前的范围
cat /proc/sys/net/ipv4/ip_local_port_range
然后通过回显一些不同的东西来设置它(并修改sysctl.conf或类似的东西,以使其在启动时也可以发生)。 我的系统使用32768-61000,所以我可以将其更改为32768-60000与SELinux / AppArmor一起为我的应用程序保留60001-61000。
echo "32768 60000" > /proc/sys/net/ipv4/ip_local_port_range
我不知道有什么方法可以在短暂的范围内找出差距。
看看portreserve实用程序。 但实际的服务必须要求portreserve在服务可以使用之前释放端口。
安装portreserve ,然后只有你的程序,通过portrelease请求他们可以有套接字。