Moderne Linux-Kernel werden mit einem Paketfilter-Framework namens Netfilter geliefert. Mit Netfilter können Sie den eingehenden und ausgehenden Datenverkehr eines Systems zulassen, verwerfen und ändern. Die iptables Das Userspace-Befehlszeilentool baut auf dieser Funktionalität auf, um eine leistungsstarke Firewall bereitzustellen, die Sie konfigurieren können, indem Sie Regeln hinzufügen, um eine Firewall-Richtlinie zu bilden. iptables kann mit seinem reichhaltigen Funktionsumfang und seiner barocken Befehlssyntax sehr einschüchternd sein. Sehen wir uns einige davon an und entwickeln eine Reihe von iptables Tipps und Tricks für viele Situationen, auf die ein Systemadministrator stoßen könnte.
Vermeiden Sie es, sich auszusperren
Szenario:Sie nehmen Änderungen an den iptables-Richtlinienregeln auf dem primären Server Ihres Unternehmens vor. Sie möchten vermeiden, sich selbst – und möglicherweise alle anderen – auszusperren. (Das kostet Zeit und Geld und bringt Ihr Telefon zum Klingeln.)
Tipp Nr. 1:Erstellen Sie vorab ein Backup Ihrer iptables-Konfiguration Fang an, daran zu arbeiten.
Sichern Sie Ihre Konfiguration mit dem Befehl:
/sbin/iptables-save > /root/iptables-works
Tipp Nr. 2:Fügen Sie noch besser einen Zeitstempel in den Dateinamen ein.
Fügen Sie den Zeitstempel mit dem Befehl hinzu:
/sbin/iptables-save > /root/iptables-works-`date +%F`
Sie erhalten eine Datei mit einem Namen wie:
/root/iptables-works-2018-09-11
Wenn Sie etwas tun, das Ihr System daran hindert, zu funktionieren, können Sie es schnell wiederherstellen:
/sbin/iptables-restore < /root/iptables-works-2018-09-11
Tipp Nr. 3:Erstellen Sie jedes Mal, wenn Sie eine Sicherungskopie der iptables-Richtlinie erstellen, einen Link zu der Datei mit "latest" im Namen.
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest
Tipp Nr. 4:Setzen Sie spezifische Regeln an die Stelle oben in der Richtlinie und allgemeine Regeln unten.
Vermeiden Sie allgemeine Regeln wie diese oben in den Richtlinienregeln:
iptables -A INPUT -p tcp --dport 22 -j DROP
Je mehr Kriterien Sie in der Regel angeben, desto geringer ist die Wahrscheinlichkeit, dass Sie sich aussperren. Verwenden Sie statt der sehr allgemeinen Regel oben etwas wie das:
iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP
Diese Regel fügt (-A ) zum INPUT Verketten Sie eine Regel, die DROP wird alle Pakete, die aus dem CIDR-Block 10.0.0.0/8 stammen auf TCP (-p tcp ) Port 22 (--dport 22 ) für die IP-Adresse 192.168.100.101 (-d 192.168.100.101). ).
Es gibt viele Möglichkeiten, wie Sie konkreter werden können. Verwenden Sie zum Beispiel -i eth0 wird die Verarbeitung auf eine einzelne NIC in Ihrem Server beschränken. Auf diese Weise wenden die Filteraktionen die Regel nicht auf eth1 an .
Tipp Nr. 5:Setzen Sie Ihre IP-Adresse ganz oben auf die Whitelist Ihrer Richtlinienregeln.
Dies ist eine sehr effektive Methode, um sich nicht auszusperren. Alle anderen nicht so sehr.
iptables -I INPUT -s <your IP> -j ACCEPT
Sie müssen dies als erstes setzen Regel, damit es richtig funktioniert. Denken Sie daran, -ich fügt es als erste Regel ein; -A fügt es an das Ende der Liste an.
Tipp 6:Kennen und verstehen Sie alle Regeln in Ihrer aktuellen Richtlinie.
Von vornherein keinen Fehler zu machen, ist die halbe Miete. Wenn Sie die inneren Abläufe hinter Ihrer iptables-Richtlinie verstehen, wird dies Ihr Leben einfacher machen. Zeichnen Sie ein Flussdiagramm, wenn Sie müssen. Denken Sie auch daran:Was die Richtlinie tut und was sie tun soll, kann zweierlei sein.
Richten Sie eine Workstation-Firewall-Richtlinie ein
Szenario:Sie möchten einen Arbeitsplatz mit einer restriktiven Firewall-Richtlinie einrichten.
Tipp Nr. 1:Legen Sie die Standardrichtlinie als DROP fest.
# Setzen Sie eine Standardrichtlinie von DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
Tipp Nr. 2:Erlauben Sie Benutzern die minimale Menge an Services, die sie benötigen ihre Arbeit erledigen.
Die iptables-Regeln müssen es der Workstation ermöglichen, eine IP-Adresse, eine Netzmaske und andere wichtige Informationen über DHCP zu erhalten (-p udp --dport 67:68 --sport 67:68 ). Für die Fernverwaltung müssen die Regeln eingehendes SSH zulassen (--dport 22 ), ausgehende E-Mails (--dport 25 ), DNS (--dport 53 ), ausgehender Ping (-p icmp ), Network Time Protocol (--dport 123 --sport 123 ) und ausgehendes HTTP (--dport 80 ) und HTTPS (--dport 443 ).
# Setzen Sie eine Standardrichtlinie von DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# Zugehörige oder hergestellte Verbindungen akzeptieren
-I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state -- state RELATED,ESTABLISHED -j ACCEPT
# Den gesamten Datenverkehr auf der Loopback-Schnittstelle zulassen
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Ausgehende DHCP-Anfrage zulassen
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
# Zulassen eingehendes SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
# Ausgehende E-Mail zulassen
-A AUSGABE -i eth0 -p tcp -m tcp --dport 25 -m state --state NEU -j ACCEPT
# Ausgehende DNS-Lookups
-A AUSGABE -o eth0 -p udp - m udp --dport 53 -j ACCEPT
# Ausgehende PING-Anfragen
-A OUTPUT –o eth0 -p icmp -j ACCEPT
# Outbound Network Time Protocol (NTP) Anfragen
-A OUTPU T –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT
# Outbound HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 - m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
COMMITBeschränken Sie einen IP-Adressbereich
Szenario:Der CEO Ihres Unternehmens denkt, dass die Mitarbeiter zu viel Zeit auf Facebook verbringen und keine Arbeit erledigen. Der CEO fordert den CIO auf, etwas gegen die Zeitverschwendung der Mitarbeiter auf Facebook zu unternehmen. Der CIO fordert den CISO auf, etwas gegen die Zeitverschwendung von Mitarbeitern auf Facebook zu unternehmen. Schließlich Sie Ihnen wird gesagt, dass die Mitarbeiter zu viel Zeit auf Facebook verschwenden, und Sie müssen etwas dagegen tun. Sie beschließen, den gesamten Zugriff auf Facebook zu sperren. Finden Sie zuerst die IP-Adresse von Facebook heraus, indem Sie den Host verwenden und whois Befehle.
host -t a www.facebook.com
www.facebook.com ist ein Alias für star.c10r.facebook.com.
star.c10r.facebook.com hat die Adresse 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum: 31.13.64.0 - 31.13.127.255Konvertieren Sie diesen Bereich dann mithilfe der Seite CIDR-zu-IPv4-Konvertierung in die CIDR-Notation. Sie erhalten 31.13.64.0/18 . Um den ausgehenden Zugriff auf www.facebook.com zu verhindern, geben Sie ein:
iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
Regulate by time
Szenario:Die Gegenreaktion der Mitarbeiter des Unternehmens wegen der Verweigerung des Zugriffs auf Facebook veranlasst den CEO, ein wenig nachzugeben (das und seine Verwaltungsassistentin erinnert ihn daran, dass sie SEINE Facebook-Seite auf dem neuesten Stand hält). Der CEO beschließt, den Zugriff auf Facebook.com nur zur Mittagszeit (12:00 bis 13:00 Uhr) zuzulassen. Angenommen, die Standardrichtlinie ist DROP, verwenden Sie die Zeitfunktionen von iptables, um den Zugriff zu öffnen.
iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d
31.13.64.0/18 -j AKZEPTIERENDieser Befehl legt die zuzulassende Richtlinie fest (-j ACCEPT ) http und https (-m multiport --dport http,https ) zwischen Mittag (--timestart 12:00 ) und 13:00 Uhr (--timestop 13:00 ) an Facebook.com (–d 31.13.64.0/18 ).
Regulate by time – Take 2
Szenario:Während einer geplanten Ausfallzeit für die Systemwartung müssen Sie den gesamten TCP- und UDP-Datenverkehr zwischen 2:00 und 3:00 Uhr ablehnen, damit Wartungsaufgaben nicht durch eingehenden Datenverkehr unterbrochen werden. Dies erfordert zwei iptables-Regeln:
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
iptables -A INPUT -p udp -m time --timestart 02:00 -- Zeitstopp 03:00 -j DROPMit diesen Regeln wird der TCP- und UDP-Datenverkehr (-p tcp und -p udp ) werden verweigert (-j DROP ) zwischen 02:00 Uhr (--timestart 02:00). ) und 3 Uhr morgens (--timestop 03:00 ) bei der Eingabe (-A INPUT ).
Verbindungen mit iptables begrenzen
Szenario:Ihre mit dem Internet verbundenen Webserver werden von Angreifern aus der ganzen Welt angegriffen, die versuchen, sie mit DoS (Denial of Service) zu belegen. Um diese Angriffe abzuschwächen, beschränken Sie die Anzahl der Verbindungen, die eine einzelne IP-Adresse zu Ihrem Webserver haben kann:
iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
Schauen wir uns an, was diese Regel bewirkt. Wenn ein Host mehr als 20 (-–connlimit-above 20 ) neue Verbindungen (–p tcp –syn ) in einer Minute auf die Webserver (-–dport http,https ), lehnen Sie die neue Verbindung ab (–j REJECT ) und teilen Sie dem verbindenden Host mit, dass Sie die Verbindung ablehnen (-–reject-with-tcp-reset ).
IPtables-Regeln überwachen
Szenario:Da iptables auf einer „first match wins“-Basis arbeitet, wenn Pakete die Regeln in einer Kette durchlaufen, sollten häufig übereinstimmende Regeln am oberen Rand der Richtlinie und weniger häufig übereinstimmende Regeln am unteren Rand stehen. Woher wissen Sie, welche Regeln am meisten oder am wenigsten durchlaufen werden, damit sie weiter oben oder unten angeordnet werden können?
Tipp Nr. 1:Sehen Sie, wie oft jede Regel getroffen wurde.
Verwenden Sie diesen Befehl:
iptables -L -v -n –line-numbers
Der Befehl listet alle Regeln in der Kette auf (-L ). Da keine Kette angegeben wurde, werden alle Ketten mit ausführlicher Ausgabe aufgelistet (-v ) mit Paket- und Bytezählern im numerischen Format (-n ) mit Zeilennummern am Anfang jeder Regel, die der Position dieser Regel in der Kette entsprechen.
Anhand der Paket- und Byteanzahl können Sie die am häufigsten durchlaufenen Regeln nach oben und die am seltensten durchlaufenen Regeln nach unten ordnen.
Tipp Nr. 2:Entfernen Sie unnötige Regeln.
Welche Regeln bekommen überhaupt keine Übereinstimmungen? Diese wären gute Kandidaten für die Entfernung aus der Richtlinie. Das kannst du mit diesem Befehl herausfinden:
iptables -nvL | grep -v "0 0"
Hinweis:Das ist kein Tabulator zwischen den Nullen; Zwischen den Nullen sind fünf Leerzeichen.
Tipp Nr. 3:Überwachen Sie, was vor sich geht.
Sie möchten in Echtzeit überwachen, was mit iptables passiert, wie mit top . Verwenden Sie diesen Befehl, um die Aktivitäten von iptables dynamisch zu überwachen und nur die Regeln anzuzeigen, die aktiv durchlaufen werden:
watch --interval=5 'iptables -nvL | grep -v "0 0"'
ansehen führt 'iptables -nvL | aus grep -v "0 0"' alle fünf Sekunden und zeigt den ersten Bildschirm seiner Ausgabe an. So können Sie beobachten, wie sich die Paket- und Byteanzahl im Laufe der Zeit ändert.
Bericht über iptables
Szenario:Ihr Manager findet dieses iptables-Firewall-Zeug einfach großartig, aber ein täglicher Aktivitätsbericht wäre noch besser. Manchmal ist es wichtiger, einen Bericht zu schreiben, als die Arbeit zu erledigen.
Verwenden Sie den Paketfilter/Firewall/IDS-Protokollanalysator FWLogwatch, um Berichte basierend auf den iptables-Firewallprotokollen zu erstellen. FWLogwatch unterstützt viele Protokollformate und bietet viele Analysemöglichkeiten. Es generiert tägliche und monatliche Zusammenfassungen der Protokolldateien, wodurch der Sicherheitsadministrator viel Zeit sparen, eine bessere Kontrolle über die Netzwerksicherheit behalten und unbemerkte Angriffe reduzieren kann.
Hier ist eine Beispielausgabe von FWLogwatch:
Mehr als nur ACCEPT und DROP
Wir haben viele Facetten von iptables behandelt, von der Sicherstellung, dass Sie sich bei der Arbeit mit iptables nicht aussperren, über die Überwachung von iptables bis hin zur Visualisierung der Aktivität einer iptables-Firewall. Diese werden Sie auf den Weg bringen, um noch mehr Tipps und Tricks zu iptables zu realisieren.