在 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,您一定會喜歡的;)

相關內容