
Ich möchte mit der PF-Firewall gleichzeitige FTP-Verbindungen zu meinem FreeBSD-Server begrenzen. Beispielsweise sind nur 10 gleichzeitige Verbindungen zu Port 20 oder 21 von einer Quell-IP aus möglich.
Ich verwende hierfür diese Regel:
pass in quick proto tcp from any to em0 port {20, 21} keep state (max-src-conn 10)
Das Problem ist, dass bei jedem Upload oder Download ein Statuseintrag mit dem StatusFIN_WAIT_2:FIN_WAIT_2wenn es fertig ist. Dieser Zustand wird erst aufgehoben, wenn dietcp.finwaitTimeout ist erreicht. Nach 10 dieser FIN_WAIT-Zustände akzeptiert der Server keine neue Datenverbindung. Dies ist ein Problem, wenn Sie versuchen, mehrere Dateien nacheinander mit einem einzigen FTP-Login herunter- oder hochzuladen.
Hat jemand eine gute Lösung für dieses Problem?
Antwort1
Dies ließe sich ganz einfach mit erledigen rctl
. Sie würden den FTP-Daemon mit einer eindeutigen UID ausführen und die Anzahl der Prozesse auf diese UID beschränken. Das ist alles.
Möglicherweise müssen Sie den Kernel neu kompilieren mit
options RACCT
options RCTL
und dann können Sie rctl wie folgt verwenden:
rctl -a user:ftp:maxproc:deny=11
Schaut es euch an man rctl
, ihr werdet begeistert sein ;)