
pf ファイアウォールを使用して、FreeBSD サーバーへの同時 FTP 接続を制限したいと考えています。たとえば、1 つのソース 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タイムアウトに達しました。この FIN_WAIT 状態が 10 秒経過すると、サーバは新しいデータ接続を受け入れません。これは、1 回の FTP ログインで複数のファイルを連続してダウンロードまたはアップロードしようとするときに問題になります。
この問題に対する良い解決策を持っている人はいますか?
答え1
これは で簡単に実行できますrctl
。一意の UID を使用して ftp デーモンを実行し、この UID に対するプロセス数を制限します。これで完了です。
カーネルを再コンパイルする必要があるかもしれません
options RACCT
options RCTL
そして、rctl を次のように使用できます。
rctl -a user:ftp:maxproc:deny=11
ぜひご覧になってman rctl
、気に入っていただけると思います ;)