使用 FreeBSD 的 pf 防火墙限制 ftp 连接

使用 FreeBSD 的 pf 防火墙限制 ftp 连接

我想使用 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你一定会喜欢的;)

相关内容