FreeBSD の PF ファイアウォールで FTP 接続を制限する

FreeBSD の PF ファイアウォールで FTP 接続を制限する

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、気に入っていただけると思います ;)

関連情報