2017-07-30 5 views
4

Ich habe Quelle die folgenden IPTables mit IPSet als Regel IP zu blockieren angreifen, aber wenn ich hinzufügen, ein IP-IPSet, in meinem nginx Zugriffsprotokoll angreifen, ich sehe immer noch kontinuierlichen Zugang des Angriffs IP. Nach einer Weile, vielleicht 3 ~ 5 Minuten, wurde die IP blockiert.IPTables nicht blockieren IP mit ipset sofort

iptables

~$ sudo iptables -nvL --line-numbers 
Chain INPUT (policy ACCEPT 317K packets, 230M bytes) 
num pkts bytes target  prot opt in  out  source    destination 
1  106K 6004K DROP  all -- *  *  0.0.0.0/0   0.0.0.0/0   match-set Blacklist src 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
num pkts bytes target  prot opt in  out  source    destination 
1  0  0 DROP  all -- *  *  0.0.0.0/0   0.0.0.0/0   match-set Blacklist src 

Chain OUTPUT (policy ACCEPT 350K packets, 58M bytes) 
num pkts bytes target  prot opt in  out  source    destination 

ipset

sudo ipset -L 
Name: Blacklist 
Type: hash:ip 
Revision: 4 
Header: family inet hashsize 1024 maxelem 65536 timeout 60 
Size in memory: 13280 
References: 2 
Members: 
xxx.xxx.xxx.xxx(attacker ip) timeout 0 

Ich weiß nicht, warum die Regel sofort Wirkung nicht, was mich nur verrückt machen wie der Angreifer bei mir lacht.

Ich füge ipset zur iptables Regel mit -I Option hinzu, die die Regel an der ersten Position halten sollte. Also vielleicht die Chain INPUT(policy Accept) den Trick machen?

Bitte helfen Sie mir, vielen Dank.

BTW.

Ich verwende Nginx+Djano/uWSGI, um meine Anwendung zu implementieren, und ich benutze Shell-Skript, um nginx Log zu analysieren, um böse ip auf Blacklist ipset zu setzen.

+0

Weitere Details können sein zur Verfügung gestellt, bitte helfen Sie mir, danke – Fogmoon

+0

Sie sollten Ihre iptables Regeln zeigen, nachdem Sie die IP auf die schwarze Liste gesetzt haben. – Fabien

+0

@Fogmoon, lieferte meine Antwort genügend Hintergrund hinter der Frage? Wenn nicht, lassen Sie mich wissen, was noch fehlt. Wenn ja, könntest du bitte das Kopfgeld annehmen und/oder vergeben? Wenn Sie keine Aktion ausführen, wird mindestens die Hälfte des Kopfgelds verloren gehen (in diesem Fall, da keine Antwort 2+ hat, ist alles verloren). Danke im Voraus! – cnst

Antwort

2

Der Grund, dass eine Firewall-Regel Verkehr auf Sperrung keine unmittelbare Wirkung haben können aufgrund Stateful Inspektion von Paketen können.

Es kann für die Firewall ineffizient sein, jedes einzelne Paket zu analysieren, das in der Leitung ankommt. Aus Gründen der Leistung gelten die Regeln, die der Benutzer erstellt, oft nur für die ersten Pakete, die die Verbindung herstellen (bekannt) als TCP SYN, SYN, ACK, ACK) - anschließend wird diese Verbindung automatisch auf die weiße Liste gesetzt (genauer gesagt, ist es der Zustand, den die ursprüngliche Regel erstellt hat, der auf die weiße Liste gesetzt wird), bis sie beendet wird (FIN).

Was wahrscheinlich hier passiert ist, dass aufgrund von Pipelining und Keep-Alive-Verbindungen, die nginx hervorhebt, eine einzelne Verbindung verwendet werden kann, um mehrere unabhängige HTTP-Anfragen auszugeben und zu verarbeiten.

um Also, für Sie das Problem zu beheben, können Sie entweder deaktivieren Pipelining und Keep-Alive in nginx (keine gute Idee, da es die Leistung auswirken werden) oder fallen die bestehenden Verbindungen der weißen Liste zB mit etwas wie tcpdrop(8) on *BSD - sicherlich muss es auch ein Linux-ähnliches Tool geben.

jedoch, wenn Sie einfach ein Problem mit einem einzelnen Client durchführen zu vielen Anfragen haben, und als solche Back-End-Überlastung, dann die entsprechende Vorgehensweise zu Rate-Limit sein kann die Kunden basierend auf die IP-Adresse, mit Hilfe des Standards limit-req directive of nginx. (Beachten Sie jedoch, dass einige Ihrer Kunden möglicherweise hinter einem Carrier-Grade-NAT liegen. Seien Sie also vorsichtig, wie viel Sie die Einschränkung anwenden, um False-Positives sicherzustellen.)

+0

Danke für Ihre so detaillierte Antwort. Kann ich den Verbindungsstatus mit einem Befehl überprüfen? Übrigens, es ist nicht einfach, einen entsprechenden Befehl wie 'tcpdrop' auf dem Ubuntu-Server zu finden, sollte ich einfach [tcp_killer] (https://github.com/google/tcp_killer) verwenden oder habe ich etwas verpasst? Vielen Dank. – Fogmoon

+0

@Fogmoon, im Grunde, ja - Sie müssen möglicherweise ein Drittanbieter-tcpdrop unter Linux verwenden. Sie können ['lsof'] (http://mdoc.su/f/lsof.8) verwenden, um alle laufenden Verbindungen zu sehen. z.B. 'lsof -nP-cnginx | fgrep ESTABLISHED'. – cnst

+0

Tut mir leid für diese zu spät akzeptierte Aktion. Ihre Antwort ist hilfreich. Aber ich muss sagen, dass ich mein Problem nicht gelöst habe, ich füge einfach der Konfigurationsdatei nginx Regel hinzu, um zu viele Anfragen gleichzeitig zu vermeiden. Ich weiß nicht, warum das Kopfgeld verloren ist, tut mir leid, wieder. In letzter Zeit bin ich sehr beschäftigt und habe diese Frage vergessen. Wenn es eine andere Methode gibt, dir das Kopfgeld zu geben, lass es mich wissen. Vielen Dank. – Fogmoon

0

Sind Sie in diesem Beitrag sah hier: https://serverfault.com/questions/523021/why-is-iptables-not-blocking-an-ip-address

Dieser Beitrag zeigt zeigt die IP-Person fallen gelassen zu werden -A INPUT -p mit --log-prefix --dport 80 -j LOG tcp "HTTP:"

Ich bin persönlich nicht auf dieses Problem gestoßen, also lassen Sie mich bitte wissen, wenn das hilfreich ist, viel Glück.

+0

Vielen Dank für Ihre Antwort, aber ich bin nicht klar, heiß, um diese Aussage zu verwenden, um IP fallen zu lassen. Kannst du es detaillierter beschreiben? – Fogmoon

+0

Es sollte etwas wie sudo iptable sein -A xxxx -p tcp --dport 80 -j xxx --log-Präfix "HTTP:" Dies wird automatisch Trap und erfassen alle Daten von Ports 80 und etc. zugegriffen wird, aber das ist nicht t genau nützlich, aber wenn die blockierten ips und solche auf diesen Bereich zugreifen möchten, können Sie den Verkehrsfluss stoppen. auf die IP von Ihrem Server fallen (hoffentlich) verwenden, sollten Sie sofort: iptables -A INPUT es xxxxxxx -j iptables -A INPUT DROP es xxxxxxx -j Leider REJECT für nicht in meiner ersten Aussage klar zu sein . –

Verwandte Themen