
Ich habe ein Problem mit meinem Apache-Webserver, bei dem es eine IP gibt, die eine Verbindung zu meinem Server herstellt, viele Verbindungen verwendet und nicht stirbt, was schließlich zu einem Timeout meines Webservers führt. Die Verbindung bleibt im Status SYN_SENT, wenn ich sie mit
netstat -netapu
Ich habe sogar meine iptables geleert und die Grundregeln verwendet, aber es funktioniert trotzdem nicht. Die IP wird verbunden, wenn ich meinen Apache starte
Grundregeln, die ich verwende:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT -s 89.149.244.117 -j REJECT
iptables -A OUTPUT -s 89.149.244.117 -j REJECT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
Der fettgedruckte Teil ist die fragliche Regel.
Ich bin nicht sicher, ob das damit zusammenhängt, aber der Wert von tcp_syncookies ist 1.
Kann mich jemand auf meinen Fehler aufmerksam machen? Gibt es eine Möglichkeit, ihn dauerhaft zu blockieren?
Antwort1
Können Sie uns die Ausgabe von zeigen?
iptables-save
? Vielleicht ist die Reihenfolge der Regeln nicht so, wie Sie denken. Dann
iptables -A OUTPUT -s 89.149.244.117 -j REJECT
sollte wahrscheinlich lauten:
iptables -A OUTPUT -**d** 89.149.244.117 -j REJECT
Übrigens, warum REJECT und nicht DROP ? Wenn Sie dann das Statusmodul verwenden, sollten Sie schreiben:
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
Beachten Sie, dass das Statusmodul nicht richtig funktioniert, wenn sich Ihr Server hinter einem Load Balancer im DSR-Modus befindet.
Antwort2
Verbindungen, die im Status SYN_SENT hängen bleiben, werden bezeichnet alsembryonale Verbindungen. Diese passieren, wenn Sie versuchen, eine Verbindung zu einer IP-Adresse herzustellen und diese IP Sie aus irgendeinem Grund nicht kontaktieren kann. Das bedeutet, dassDuversuchen, eine Verbindung zu ihm herzustellen, und nicht umgekehrt.
Ich weiß nicht, wie es aussah, bevor Sie diese beiden Regeln hinzugefügt haben, aber so wie es jetzt ist, können Sie den ersten Teil des Drei-Wege-Handshakes (das SYN) senden, aber den zweiten Teil (das SYN/ACK) nicht empfangen, und dadurch bleibt bei jedem Versuch eine Verbindung im Status SEN_SENT.
-s
Ich vermute, Sie haben die erste Regel kopiert/eingefügt, um die zweite zu erstellen, und INPUT in OUTPUT geändert, aber vergessen, in zu ändern -d
. Ich weiß das, weil ich das selbst mehr als einmal gemacht habe.
Antwort3
Sie müssen das Linux-Dienstprogramm „FAIL2BAN“ ausprobieren, das die meisten dieser Brute-Force-Angriffe blockiert. Fail2Ban unterstützt den Schutz vor Brute-Force-Angriffen für SSH, Apache und viele andere Dienste. Wenn beispielsweise eine IP-Adresse versucht, eine große Anzahl gleichzeitiger Verbindungen herzustellen, blockiert Fail2Ban dies, indem die IP-Adresse automatisch von iptables hinzugefügt (und nach einiger Zeit auch wieder entfernt) wird.