
我想使用 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
,您一定會喜歡的;)