我想通过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
,你会喜欢它;)