Я хочу ограничить количество одновременных FTP-подключений к моему серверу FreeBSD с помощью брандмауэра pf. Например, возможно только 10 одновременных подключений к порту 20 или 21 с одного IP-адреса источника.
Я использую для этого следующее правило:
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.
Есть у кого-нибудь хорошее решение этой проблемы?
Это легко сделать с rctl
. Вы должны запустить демон ftp с уникальным UID и ограничить количество процессов этим UID. Вот и все.
Возможно, вам потребуется перекомпилировать ядро с помощью
options RACCT
options RCTL
и чем вы можете использовать rctl вот так:
rctl -a user:ftp:maxproc:deny=11
Посмотри на man rctl
и вам это понравится;)