我想使用 pf 防火墙限制同时连接到我的 FreeBSD 服务器的 FTP 连接。例如,从同一个源 IP 到端口 20 或 21 最多只能同时建立 10 个连接。
我使用这个规则:
pass in quick proto tcp from any to em0 port {20, 21} keep state (max-src-conn 10)
问题是每次上传或下载都会产生一个状态条目,状态为FIN_WAIT_2:FIN_WAIT_2完成时。此状态仅当tcp.finwait已达到超时。10 次 FIN_WAIT 状态后,服务器不接受新数据连接。当您尝试使用单个 ftp 登录连续下载或上传多个文件时,这是一个问题。
有人对这个问题有好的解决办法吗?
答案1
这可以通过 轻松完成rctl
。您将使用唯一的 UID 运行 ftp 守护程序,并将进程数限制为此 UID。就是这样。
您可能需要使用以下命令重新编译内核
options RACCT
options RCTL
然后你可以像这样使用 rctl:
rctl -a user:ftp:maxproc:deny=11
看一看man rctl
你一定会喜欢的;)