Schlagwort-Archive: iptables firewall

iptables ist ein Userspace-Programm zur Konfiguration der Tabellen (tables), die durch die Firewall im Linux-Kernel bereitgestellt werden.

iptables Konfiguration und Anwendung

Wie funktioniert iptables? so geht’s

iptables ist ein Userspace-Programm für die Linux-Kernel Firewall. Es dient zur Bearbeitung der Paketfilter und der Konfiguration der Linux Firewall, diese den Datenverkehr von und zum Server überwacht, mithilfe von Tabellen. Die Tabellen enthalten Regelsätze, Ketten genannt, die eingehende und ausgehende Datenpakete filtern.

Wenn ein Paket mit einer Regel übereinstimmt, wird es einem Ziel zugewiesen, das eine andere Kette oder einer dieser Werte sein kann:

  • ACCEPT – lässt das Paket passieren.
  • DROP – lässt das Paket nicht passieren.
  • RETURN – hindert das Paket daran, eine Kette zu durchlaufen, und weist es an, zur vorherigen Kette zurückzukehren.

In diesem Tutorial wird mit einer der Standardtabellen namens filter gearbeitet, bestehend aus drei Ketten:

  • INPUT – steuert eingehende Pakete zum Server.
  • FORWARD – filtert eingehende Pakete, die weitergeleitet werden.
  • OUTPUT – Filtern der Pakete, die vom Server ausgehen.

  iptables kann mit der Linux Uncomplicated Firewall (ufw), sowie mit firewalld genutzt werden. iptables-Regeln gelten nur für ipv4. Wird die Firewall für das IPv6-Protokoll genutzt, muss stattdessen ip6tables verwendet werden.

iptables Installation

Ein SSH-Terminal zum Server mit Root Zugriff herstellen, oder mit sudo Berechtigung root werden, mit sudo su - bei Ubuntu/Debian Linux.

iptables ist bei den meisten Linux-Distributionen vorinstalliert. Wenn es jedoch standardmäßig nicht vorliegt, sind bei einem Ubuntu/Debian-System folgende Schritte auszuführen.

$ sudo apt-get update
$ sudo apt-get install iptables

Überprüfe den Status der aktuellen iptables-Konfiguration, mit ausführen des nächsten Kommandos.

$ iptables -vnL

Hier wird die Option L verwendet, um alle Regeln aufzulisten, die numerische Ausgabe von Adressen und Ports mit -n, und -v  dient zum Anzeigen in einem detaillierteren Format. Wie bei dieser Beispielausgabe.

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in out   source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in out   source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in out   source destination

An diesem Punkt wird man feststellen, dass alle Ketten (Chain) auf ACCEPT gesetzt sind und keine Regeln definiert sind. Das System ist also nicht geschützt, da jedes Paket ohne Filterung durchkommt.

Keine Sorge! wie Regeln definiert werden, ist im nächsten Schritt dieses iptables-Tutorials zu erfahren.

Kettenregeln definieren

Eine Regel zu definieren bedeutet, sie an die Kette anzuhängen. Dazu muss die Option -A (Append) direkt nach dem Befehl iptables eingefügt werden.

iptables wird angewiesen eine neue Regel in die Kette einzufügen. Es können Optionen kombiniert angewendet werden.

iptables OptionBeschreibung
-i(interface) Die Netzwerkschnittstelle deren Datenverkehr man filtern möchte, zB. eth0, lo, ppp0 u.a.m.
-p(Protokoll) Das Netzwerkprotokoll in dem der Filterprozess stattfindet. Zulässig sind die Protokolle tcp, udp, udplite, icmp, sctp, icmpv6. Alternativ all für jedes Protokoll.
-s(Quelle) Die Adresse von der der Datenverkehr kommt. Hostnamen oder IP-Adressen verwenden.
–dport(Zielport) Die Zielportnummer eines Protokolls, zum
Beispiel: 22 (SSH), 443 (HTTPS) u.a.m.
-j(target) Der Zielname (ACCEPT / DROP / RETURN), bei jeder Regel immer am Ende anfügen.

Der iptable Befehl mit den Optionen setzt sich in dieser Reihenfolge wie folgt zusammen.

$ sudo iptables -A <Kette> -i <Schnittstelle> -p <Protokoll (tcp/udp) > -s <Quelle> --dport <Port-Nr.> -j <Ziel>

Sobald man mit der grundlegenden Syntax vertraut ist, kann man mit der Konfiguration der Firewall beginnen, um dem Server mehr Sicherheit zu verleihen. Hier verwenden wir die INPUT Kette im Beispiel.

Traffic auf Localhost akzeptieren

Für die meisten Anforderungen wird der localhost nicht eingeschränkt. Den Befehl ausführen um den Datenverkehr auf localhost zu erlauben.

$ sudo iptables -A INPUT -i lo -j ACCEPT

Die lo- oder Loopback-Schnittstelle wird für die gesamte Kommunikation auf dem localhost verwendet. Der obige Befehl stellt sicher, dass die Verbindungen zwischen einer Datenbank und einer Webanwendung auf demselben System ordnungsgemäß funktionieren.

Verbindungen auf HTTP, SSH, SSL Port akzeptieren

Als Nächstes möchten wir, dass die Verbindungen zu den Services HTTP (Port 80), HTTPS (Port 443) und SSH (Port 22) wie gewohnt funktionieren. Dazu müssen wir das Protokoll (-p) und den entsprechenden Port (–dport) übergeben. Die Befehle nacheinander ausführen.

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Es ist nun Zeit zu überprüfen, ob die Regeln in iptables angehängt sind.

$ iptables -vnL

Die Anzeige der Regeln mit der Option List in etwa wie diese.

Chain INPUT (1 references)
 pkts bytes target     prot opt in     out    source         destination
2798K  156M ACCEPT     tcp  --  *      *      0.0.0.0/0      0.0.0.0/0       tcp dpt:22 ctstate NEW
 114K 5508K ACCEPT     tcp  --  *      *      0.0.0.0/0      0.0.0.0/0       tcp dpt:80 ctstate NEW
65438 2804K ACCEPT     tcp  --  *      *      0.0.0.0/0      0.0.0.0/0       tcp dpt:443 ctstate NEW

Pakete von Quellen Filtern

Mit iptables können Pakete basierend auf einer IP-Adresse oder einem Bereich von IP-Adressen gefiltert werden. Hierzu muss man die Option -s angebenUm beispielsweise Pakete von 192.168.2.4 zu akzeptieren, lautet der Befehl.

$ sudo iptables -A INPUT -s 192.168.2.4 -j ACCEPT

Es können auch Pakete von einer bestimmten IP-Adresse abgelehnt werden, indem man das Ziel ACCEPT durch DROP ersetzen.

$ sudo iptables -A INPUT -s 192.168.2.4 -j DROP

Sollen Pakete von einer Reihe von IP-Adressen verworfen werden, muss man die Option -m und das Modul iprange verwenden. Hierbei gibt man den IP-Adressbereich mit –src-range an. Daran denken, dass ein Bindestrich den Bereich der IP-Adressen ohne Leerzeichen trennen sollte, hier wie folgt.

$ sudo iptables -A INPUT -m iprange --src-range 192.168.8.80-192.168.8.90 -j DROP

Verwerfen der gesamten sonstigen Traffic

Es ist wichtig, DROP als Ziel für den gesamten restlichen Datenverkehr zu verwenden, nachdem die –dport Regeln definiert wurden. Dadurch wird verhindert, dass nicht autorisierte Verbindungen über andere offene Ports auf den Server zugreifen. Hierzu einfach Folgendes eingeben.

$ sudo iptables -A INPUT -j DROP

Jetzt werden die Verbindung nachfolgend der Filter abgelehnt.

iptables Regeln löschen

Möchte man alle Regeln entfernen und sauber beginnen, kann die Option -F (Flush) verwendet werden.

$ sudo iptables -F

Dieser Befehl löscht alle aktuellen Regeln. Um jedoch eine bestimmte Regel zu löschen, dient die Option -D. Hierbei werden zuerst alle verfügbaren Regeln anzgezeigt, wie folgender Befehl zeigt.

$ sudo iptables -nL --line-numbers

Es wird eine Liste von Regeln mit Nummern ausgegeben.

Chain INPUT (policy ACCEPT)
num  target     prot opt source           destination
1    ACCEPT     all -- 192.168.8.8        anywhere
2    ACCEPT     tcp -- anywhere           anywhere tcp dpt:https
3    ACCEPT     tcp -- anywhere           anywhere tcp dpt:http
4    ACCEPT     tcp -- anywhere           anywhere tcp dpt:ssh

Um eine Regel zu löschen, füge die entsprechende Kette mit der Nummer aus der Liste ein. Nehmen wir an, wir wollen für dieses Beispiel die Regel Nummer eins (1) der INPUT Kette löschen. Der Befehl dazu wie folgt.

$ sudo iptables -D INPUT 1

Fazit

iptables ist ein leistungsstarkes Userspace-Utility für die Linux Firewall, um Linux-Server abzusichern. Ein Vorteil ist, dass sich verschiedene Regeln basierend auf eigenen Präferenzen definieren lassen.

In diesem iptables-Tutorial lernt man, wie das Tool installiert und verwendet wird. Wir hoffen, dass hierdurch eigene Regelsätze verwaltet werden können, um eingehende und ausgehende Pakete zu filtern.

Block IP by ufw or iptables and firewalld

A large number of suspicious requests is going on, protection is provided by ufw, iptables or firewalld. This tutorial show how to use the commands to reject an IP address on popular Linux software Firewalls.

Block IP by ufw or iptables and firewalld

Using ufw or iptables and firewalld

Fire up a terminal and log on to the server by using SSH and then complete the steps for firewalld in the first chapter. The second chapter shows the commands for UFW, and the third shows using iptables.

firewalld tool

firewalld is on RHEL 7, CentOS 7 and later, Fedora 18 and later.

To ensure that firewalld is running on your server, run the following command. If firewalld is not running, go to the iptables chapter.

$ sudo systemctl status firewalld

Run the following command to block the IP address and to add the rule to the permanent set:

$ sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

Run the following command to reload the firewalld rules:

$ sudo firewall-cmd --reload

Run the following command to list and verify the new rule:

$ sudo firewall-cmd --list-all

Run the following command to remove a blocked IP address.

$ sudo firewall-cmd --remove-rich-rule="rule family='ipv4' source address='xxx.xxx.xxx.xxx' reject"

Run the following command to verify the firewalld is running.

$ firewall-cmd --state

Uncomplicated Firewall (UFW)

ufw is available on Debian 6 and later, Ubuntu 8.04 LTS and later.

To ensure that ufw is running on your server, run the following command. If ufw is not running, go to the iptables chapter.

$ sudo systemctl status ufw

Run the following command to block the IP address:

$ sudo ufw deny from xxx.xxx.xxx.xxx to any

Run the following command to list and verify the new rule:

$ sudo ufw status

Run the following command to remove a blocked IP address.

$ sudo ufw delete 7

Run the following command to show numbered list of firewall rules.

$ ufw status numbered

iptables tool

iptables is commonly pre-installed on all Linux distributions.

Run the following command to block the IP address:

$ sudo iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP

Run the following command to save the settings. The settings persist after the server reboots.

$ sudo service iptables save

Run the following command to list and verify the new rule:

$ sudo iptables -vnL

Run the following command to delete a iptables chain.

$ sudo iptables -D INPUT 7

Run the following command to show numbered list of iptables chains.

$ sudo iptables -L --line-numbers

about ufw or iptables and firewalld

The firewall commands ufw, iptables and firewalld shown here for the corresponding kernel firewalls apply to the most common Linux operating systems.