
Quero limitar conexões FTP simultâneas ao meu servidor FreeBSD com o firewall pf. Por exemplo, apenas 10 conexões simultâneas são possíveis à porta 20 ou 21 de um IP de origem.
Eu uso para isso esta regra:
pass in quick proto tcp from any to em0 port {20, 21} keep state (max-src-conn 10)
O problema é que cada upload ou download produz uma entrada de estado com o estadoFIN_WAIT_2:FIN_WAIT_2quando terminar. Este estado só será removido quando otcp.finwaito tempo limite foi atingido. Após 10 destes estados FIN_WAIT não aceita a nova conexão de dados do servidor. Este é um problema quando você tenta baixar ou fazer upload de vários arquivos sequenciais com um único login de FTP.
Alguém tem uma boa solução para este problema?
Responder1
Isso poderia ser feito facilmente com rctl
. Você executaria o daemon FTP com um UID exclusivo e limitaria o número de processos a esse UID. É isso.
Você pode precisar recompilar o kernel com
options RACCT
options RCTL
e então você pode usar o rctl assim:
rctl -a user:ftp:maxproc:deny=11
Dê uma olhada man rctl
e você vai adorar ;)