在FreeBSD上限制ftp与pf防火墙的连接

我想通过pf防火墙同时限制FTP连接到我的FreeBSD服务器。 例如,只有10个同时连接可能来自一个源IP的端口20或21。

我使用这个规则:

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超时时才会删除此状态。 这个FIN_WAIT状态中有10个不接受服务器新的数据连接。 当您尝试使用单个ftplogin顺序地下载或上载多个文件时,这是一个问题。

有没有人有一个很好的解决这个问题?

这可以很容易地用rctl来完成。 您将运行带有唯一UID的ftp守护进程,并将进程数限制为此UID。 而已。

您可能需要使用重新编译内核

 options RACCT options RCTL 

比你可以像这样使用rctl:

 rctl -a user:ftp:maxproc:deny=11 

看看man rctl ,你会喜欢它;)