Iptables
Mit iptables wird die Firewall auf Linux Betriebssystemen konfiguriert.
Kommandos
Listet alle Rollen auf, gruppiert nach Chains:
iptables -L
Liste alle Rollen einer bestimmten Chain auf:
iptables -L [Chain]
iptables -L DOCKER
Falls ihr sehr viele Rollen habt, oder Dank fail2ban
sehr viele IP-Adressen geblockt sind, dann die Auflistung sehr lange dauern. In diesem Falle fügt ihr noch ein -n
an, um die Namensauflösung (IP zu Domainname) zu unterdrücken:
iptables -L -n
iptables -L DOCKER -n
Für das Hinzufügen von Rollen verwende ich gerne diesen iptables Generator.
Einfach IP-Adresse hinzufügen, noch ein “sudo” davor und Euch wird der Befehl automatisch zusammengebaut.
Löschen könnt ihr Rollen mit -D
iptables -D DOCKER-USER 3
Wobei die 3 die Rolle in der 3ten Zeile bedeutet.
Alle Rollen, die ihr hinzufügt, sind nur temporär im Arbeitsspeicher aktiv. Startet ihr euren Server neu, sind alle eure Änderungen futsch. Bei Ubuntu/Debian könnt ihr folgenden Befehl ausführen, um eure Änderungen persistent zu machen:
sudo iptables-save
iptables und Docker
Docker registriert sich selbst mit einigen Chains in iptables
. Die wichtigsten sind wohl DOCKER
und DOCKER-USER
. Lieb gemeinter Rat: Lasst die Finger von der DOCKER
Chain und arbeitet ausschließlich mit der DOCKER-USER
Chain.
Schonmal mit Solr
gearbeitet? Ich empfinde die Berechtigungsstruktur als schwierig und blocke darum den Port 8983
für alle IP-Adressen außer dem Server auf dem Solr benötigt wird. Dazu füge ich folgende Rollen hinzu:
sudo iptables -I DOCKER-USER 1 -i eth0 -p tcp -s 1.2.3.4 --dport 8983 -j ACCEPT
sudo iptables -I DOCKER-USER 4 -i eth0 -p tcp -s 0.0.0.0/0 --dport 8983 -j REJECT
Mit -I
gebe ich die zu verwendende Chain an.
Mit -i
das zu verwendende ethernet. Mit ifconfig
kommt ihr an diesen Wert dran. Sucht dort nach der öffentlichen IP-Adresse Eures Servers
Mit -p
gebe ich das Protokoll an: tcp
oder udp
. Nur doch diesen Parameter steht Euch das Argument --dport
überhaupt erst zur Verfügung.
Mit -s
gebe ich die Quell-IP des Servers an, der den Solr Dienst benötigt. Hier nur beispielhaft mittels 1.2.3.4
Mit --dport
gebe ich den destination Port des Servers an, auf dem der Solr Dienst läuft.
Mit -j
gebe ich an, wie die Firewall, sofern die Rolle übereinstimmt, reagieren soll. Mögliche Werte sind hier ACCEPT
, DROP
und REJECT
.
Ich bevorzuge REJECT
immer vor DROP
. Bei Verwendung von DROP
sieht es im Browser immer so aus als würde die Webseite noch laden und irgendwann nach Minuten kommt dann endlich ein Timeout. Da nehme ich lieber REJECT
und teile jedem sofort mit, dass keine Verbindung hergestellt werden kann.
Die Zahlen hinter der Chain geben eine Position an, wo diese Rolle der Chain hinzuzufügen ist. Würdet ihr die Zeilen ohne diese Angabe hinzufügen, würde die letzte Zeile mit dem REJECT ganz oben in der Chain hinzugefügt werden. Wenn eine Rolle, die alles blockt, an erster Position steht, dann wird keine weitere Rolle mehr überprüft. Die Rolle für den erlaubten Server wird also gar nicht mehr abgearbeitet und wird ebenfalls geblockt. Darum: Alles was erlaubt ist noch ganz oben und alles was verboten ist nach ganz unten.
Falls ihr mit den Positionen etwas durcheinander kommt, weil es schlicht zu viele sind, dann könnt ihr den Parameter --line-numbers
hinzufügen:
iptables -L DOCKER-USER -n --line-numbers
iptables und DDEV
Ja, DDEV ist nicht für den LIVE-Betrieb konzipiert und trotzdem habe ich ein paar TYPO3 Testinstanzen öffentlich laufen. Damit die DDEV Projekte an die öffentliche Ethernet Schnittstelle gebunden werden können, muss bei DDEV in der ~./.ddev/global_config.yaml
die Zeile router_bind_all_interfaces
auf true
gesetzt werden. Damit ist es nun möglich FQDN für Euer Projekt in der .ddev/config.yaml
zu registrieren:
additional_fqdns:
- typo3104.my-domain.de
Leider werden für diese Projekte auch automatisch die Ports 80, 443, 8025, 8026 und 8036 geöffnet. Während Port 80 und 443 durchaus erwünscht sind, sollte gerade der Port 8036, mit dem jeder Zugriff auf PhpMyAdmin hätte, geblockt werden. DDEV selbst schlägt vor, den dba (PhpMyAdmin) Container in der ~/.ddev/global_config.yaml
für alle Ethernets (Netzwerk-Interfaces) zu deaktivieren:
omit_containers: [dba]
Wenn ihr aber trotzdem unbedingt PhpMyAdmin haben wollt, dann blockt diesen Port bitte für alle IP-Adressen, außer eurer eigenen IP-Adresse:
sudo iptables -I DOCKER-USER 9 -i eth0 -p tcp -s 0.0.0.0/0 --dport 8036 -j REJECT
sudo iptables -I DOCKER-USER 1 -i eth0 -p tcp -s 123.234.123.234 --dport 8036 -j ACCEPT
Falls sich eure IP-Adresse jeden Tag ändert, könnt ihr euch mithilfe von Google Cloud zum Beispiel eine kleine f1-micro Instanz mit Docker und OpenVPN bauen. Die erste Instanz ist im Monat komplett kostenlos. Ist zwar arsch langsam, aber fürs Surfen absolut ausreichend und ihr habt ne statische IP-Adresse. Falls ihr ne eigene Webseite habt, auf die ihr mittels SSH draufkommt, dann macht euch mal bzgl. SOCKS Proxy schlau. Auf diese Weise hättet ihr dann auch ne kostenfrei statische IP-Adresse, die ihr dieser Rolle hinzufügen könnt.
Vergesst nicht den oberen Befehl auch für die Ports 8025 und 8026 durchzuführen, damit Fremde nicht an die versendeten Email dran kommen.