GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Tipps für eine sichere iptables-Konfiguration zur Abwehr von Angriffen. (Kundenseite!)

Mir ist klar, dass es unterschiedliche Meinungen gibt, aber eine Haupteinstellung von Leuten, die sich wirklich mit Netzwerken und Sicherheit auskennen, ist, dass die meisten dieser iptables/sysctl-Regeln überflüssig sind, wenn nicht sogar schädlich für Sie und das Netzwerk. Einige werden Sie aggressiv dafür kritisieren, dass Sie ohne Grund mit Standardverhalten brechen. Einige Beispiele:

  • Das Standardverhalten von TCP/IP besteht darin, ABLEHNEN, sodass der Peer einen Hinweis darauf erhält, was vor sich geht. Vielleicht hat jemand einfach eine falsche URL eingegeben oder Ihr Admin zählt die Hosts oder jemand möchte sich mit Ihrem Gaming-Server verbinden, hat aber den falschen Port eingegeben. Mit DROP bekommen sie nur obskure und lästige Timeouts.

  • Es besteht keine Notwendigkeit, ungültige oder fehlerhafte Pakete zu verwerfen, alle diese Angriffe sind ein Jahrzehnt alt. Die Linux-Kernel-Entwickler sind viel aktueller als Sie darüber, welche Art von Paketen gültig sind und welche nicht. "Was ist mit zukünftigen Mängeln", mögen einige argumentieren. Nun, woher wissen Sie, dass der zukünftige Fehler im TCP-Handler und nicht im iptables-TCP-Parser liegen wird?

  • Die meisten sysctl-Einstellungen sind Standard. Ist dies nicht der Fall, hat dies in der Regel einen Grund. Warum zum Beispiel das Senden von Weiterleitungen deaktivieren? Ich finde es sehr nützlich, von einem Peer darüber informiert zu werden, dass mein Routing schlecht ist, auch wenn ich niemals automatisch reagieren würde ("accept_redirects", default=0).

  • Ich hoffe, dass Sie mit Ihren log_martians und anderen Protokollierungsregeln auch ein Kontingent für /var/log haben, oder es wird großen Spaß machen, Ihre Festplatte aus der Ferne zu füllen, wodurch normalerweise Ihre Dienste/Apps beendet werden. Darüber hinaus sollten Sie ein Ratenlimit für die Protokollierung verwenden, da sonst jemand das Kontingent füllen könnte, um zu verhindern, dass Sie die SSH-Passwort-Bruteforce-Versuche in auth.log oder anderen Dingen sehen. Lesen Sie diese Protokolle tatsächlich auf einem Desktop? Ich empfehle logcheck.

  • Sie scheinen ICMP zu blockieren. Abgesehen von dem erwähnten DHCP-Problem verhindert dies auch die PMTU-Erkennung. Ohne PMTUD erhalten Sie ein seltsames Verhalten, wenn Sie das System an Orten mit DSL-Verbindung oder anderen Netzwerkeinstellungen verwenden. Einige Pakete werden einfach verworfen und niemand sagt Ihnen warum.

  • Das Filtern ausgehender Pakete ist etwas obskur. Vertraust du dir nicht? Sie sollten generell keine Programme ausführen, denen Sie nicht vertrauen können. Commodity-Betriebssysteme sind meistens nicht in der Lage, diese Programme vor dem Abhören oder sogar Manipulieren der Daten anderer Programme zu schützen (z. B. Cache-Timing-Angriffe)

  • Sie benötigen NEUE Pakete, um SYN zu haben. Dies wird unterbrochen, wenn eine TCP-Verbindung fortgesetzt wird, nachdem der entsprechende Zustand in iptables bereits abgelaufen ist. Ich bin mir nicht sicher, was die Standardzeitüberschreitungen sind, aber ein Netfilter-Typ hat davor gewarnt.

Also, wann sollte ein Desktop eine Firewall haben?

  • Wenn es in den Nachrichten einen bestimmten Angriff gibt, für den Ihr aktuelles Betriebssystem oder Ihre Server anfällig sind, und eine der empfohlenen schnellen Lösungen eine Firewall-Regel ist.

  • Sie müssen bestimmte Dienste ausführen, die keine sichere Konfiguration zulassen. Die meisten tun es, und der Rest wird am besten durch sichere Alternativen ersetzt.

  • Sie haben komplexere Netzwerke mit mehreren VMs und/oder Schnittstellen auf Ihrem Desktop.

Das wichtigste Werkzeug für Ihre Netzwerksicherheit ist das Systemupdate. Zweitens gibt es netstat und nmap, die Sie verwenden sollten, um herauszufinden und zu bestätigen, welche Dienste Sie ausführen. Deaktivieren Sie dann einfach diejenigen, die Sie nicht benötigen, oder beschränken Sie sie auf 127.0.0.1.

Bonus, wenn Sie bis hierhin gelesen haben:Pakete sind entweder ESTABLISHED, RELATED oder NEW, alles andere lassen Sie fallen. Sie löschen auch NEW, es sei denn, es ist nur SYN gesetzt. Da ESTABLISHED,RELATED Flags zu überprüfen scheint, macht dies alle --tcp-flags-Regeln und auch die -f-Regel überflüssig. Dasselbe gilt für OUTPUT, aber da für OUTPUT sowieso keine Pakete akzeptiert werden, spielt das wahrscheinlich keine Rolle.


Ich würde vorsichtig sein, wenn ich diese für Geräte innerhalb eines vertrauenswürdigen Netzwerks und für Geräte in einer DMZ zu einem Teil desselben Regelsatzes machen würde. Indem Sie die Regeln verwenden, die Sie dort definiert haben, werden Sie nicht auf die Frage eines DHCP-Servers (ICMP-Echo) antworten, ob Ihre IP verwendet wird. Dies könnte zu einer doppelten Adresssituation führen.

Ich würde zwei verschiedene Regelsätze erstellen, die auf jedes Szenario angewendet werden können. Etwas wie das oben Aufgeführte ist eine gute Grundlage für eine DMZ-Maschine, stellt jedoch einige Herausforderungen in einem typischen LAN dar.

Außerdem würde ich auf jeden Fall empfehlen, Marsmenschen Protokollierung, ausgehende Drops, eingehende eingehende Verbindungen usw. hinzuzufügen. Dies kann für die Fehlerbehebung von entscheidender Bedeutung sein und kann nützlichere Daten für Ihr SIEM sein.


Für einen Client-PC, der über ppp direkt mit dem Internet verbunden ist, ist der folgende Regelsatz ein guter Anfang:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Es erlaubt alles auf der internen lokalen Schnittstelle.
  2. Es erlaubt jedes Paket, das eine Antwort auf ein von Ihnen gesendetes Paket ist. Dazu gehören Pakete innerhalb einer TCP-Verbindung, Antworten auf UDP-Pakete wie kleine DNS-Anfragen. Für das unverschlüsselte FTP-Protokoll alten Stils beinhaltet dies die Datenverbindung, vorausgesetzt, dass ip_conntrack_ftp geladen ist
  3. Alle ablehnen versucht, eine TCP-Verbindung von außen zu öffnen
  4. Alle anfänglichen (nicht antwortenden) UDP-Pakete ablehnen.

Alternativ können Sie in den letzten beiden Regeln -j DROP verwenden. Eine Diskussion zu diesem Thema finden Sie unter IP-Pakete mit ICMP-Fehler ablehnen oder einfach verwerfen?


Linux
  1. Sicheres OpenVPN mit Zwei-Faktor-Authentifizierung von WiKID auf Centos 7

  2. Kurztipps für den OpenShift oc-Client

  3. Ausgabe welchen Befehls für die Eingabe auf CD verwendet?

  4. Chirp – Ein elektronenbasierter Twitter-Client für Linux

  5. Gibt es eine clientseitige Problemumgehung für eine zu kurze automatische Abmeldung von einer SSH-Verbindung?

16 Tipps und Tricks zu iptables für Systemadministratoren

Tipps zur Verwendung von tmux

Tipps zur Verwendung des Bildschirms

Gibt es einen OneDrive-Client für Linux?

Pithos – Ein Pandora-Radio-Client für Linux

So öffnen Sie Port 2195 in iptables CentOS 6 zum Aktivieren des APNS