Назад | Перейти на главную страницу

Ограничение FTP-соединений с помощью брандмауэра pf в FreeBSD

Я хочу ограничить количество одновременных 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 и вам это понравится;)