Firewall script

Alles rund um sicherheitsrelevante Fragen und Probleme.
Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Firewall script

Beitrag von Freymuth » 23.07.2015 20:43:38

Hey,

ich wollte euch mein erstes Firewall Script vorstellen, was glaube ich alles beinhaltet, was ich brauche. =)

Entdeckt ihr Fehler oder Sachen die dort nicht drin stehen sollten? Ein paar Tipps wären nicht schlecht. ^^ Auf dem Root läuft bis jetzt nur ein TS3 Server.

Code: Alles auswählen

#!/bin/bash

echo "Initializing Firewall ..."

# Load modules
modprobe ip_conntrack_ftp

# Clear all other rules
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Creation of my own chains
iptables -N MYDROP
iptables -N MYACCEPT

# Loopback communication
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -i lo -j ACCEPT

# Statefull Inspection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j MYDROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Configuring our own chains
iptables -A MYDROP -j LOG --log-prefix "FW-DROP: "
iptables -A MYDROP -j DROP
iptables -A MYACCEPT -j LOG --log-prefix "FW-ACCEPT: "
iptables -A MYACCEPT -j DROP

# SSH
iptables -A INPUT -p tcp --dport 22 -j MYACCEPT
#iptables -A OUTPUT -p tcp --dport 22 -j MYACCEPT

# ICMP Ping
iptables -A INPUT -p icmp -j MYACCEPT
iptables -A OUTPUT -p icmp -j MYACCEPT

# DNS
iptables -A INPUT -p udp --dport 53 -j MYACCEPT
iptables -A INPUT -p tcp --dport 53 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 53 -j MYACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j MYACCEPT

# WWW
#iptables -A INPUT -p tcp --dport 80 -j MYACCEPT
#iptables -A OUTPUT -p tcp --dport 80 -j MYACCEPT
#iptables -A INPUT -p tcp --dport 443 -j MYACCEPT
#iptables -A OUTPUT -p tcp --dport 443 -j MYACCEPT
# Mail
#iptables -A INPUT -p tcp --dport 25 -j MYACCEPT
#iptables -A OUTPUT -p tcp --dport 25 -j MYACCEPT
#iptables -A INPUT -p tcp --dport 110 -j MYACCEPT
#iptables -A INPUT -p tcp --dport 143 -j MYACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -j MYACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j MYACCEPT

# DHCP
iptacles -A INPUT -p udp --dport 67 -j MYACCEPT

#Teamspeak 3 Server
iptables -A INPUT -p udp --dport 9987 -j MYACCEPT
iptables -A INPUT -p tcp --dport 30033 -j MYACCEPT
iptables -A INPUT -p tcp --dport 10011 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 2010 -j MYACCEPT
iptables -A INPUT -p tcp --dport 41144 -j MYACCEPT
iptables -A OUTPUT -p tcp --dport 2008 -j MYACCEPT


echo "Firewall is configured and active!"

iptables -A INPUT -j LOG --log-prefix "FW-LAST-DROP:"

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 23.07.2015 21:43:03

Das ist nen Rootserver? Warum dann dhcp?

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 23.07.2015 21:53:47

Stimmt hast recht...

ich bin blöd ^^

Wie kann ich das Script einlesen lassen, beim jeden Neustart des Servers?

tomi89
Beiträge: 269
Registriert: 21.08.2014 00:21:52

Re: Firewall script

Beitrag von tomi89 » 23.07.2015 22:49:24

Freymuth hat geschrieben:Wie kann ich das Script einlesen lassen, beim jeden Neustart des Servers?
Falls das Netzwerk über /etc/network/interfaces konfiguriert wird z.B. so:

Code: Alles auswählen

auto lo
iface lo inet loopback
pre-up /sbin/iptables-restore < /etc/iptables
Dann musst du natürlich vorher folgendes ausgeführt haben:

Code: Alles auswählen

/sbin/iptables-save > /etc/iptables

Bezüglich des Scripts:

Wo wird New Akzeptiert? Es wird bei INPUT und OUTPUT nur RELATED, ESTABLISHED akzeptiert und dann folgt jump MYDROP oder MYACCEPT, wo bloß geloggt und gedropt wird.

Aber damit RELATED, ESTABLISHED akzeptiert werden kann, müsste erstmal irgendwo NEW rein oder raus kommen.

Ich schätze du willst statt -j MYACCEPT lieber -m state --state NEW -j ACCEPT anwenden und dann für alles restliche in der letzten Zeile LOG & DROP anwenden.

Außerdem sollen eigene chains klein geschrieben werden. Und am Ende des Scripts sollte exit 0 stehen.

Also so: http://nopaste.debianforum.de/38695


Achso und falls Dhclient arbeiten soll, müsste der so aussehen: iptables -A OUTPUT -p udp --sport 68 --dport 67 -m state --state NEW -j ACCEPT

Und vergiss nicht Ip6tables generell zu droppen falls du IPv6 nicht brauchst, oder dies ebenfalls zu konfigurieren.
Zuletzt geändert von tomi89 am 23.07.2015 23:23:53, insgesamt 8-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 4203
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Firewall script

Beitrag von heisenberg » 23.07.2015 23:05:44

Wie ich vor kurzem gelernt habe, gibt es bei Debian das Paket iptables-persistent. Wie der Name sagt, soll es einem die Verwaltung erleichtern iptables-Regeln persistent zu speichern.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 23.07.2015 23:38:12

Hey,

danke für die Antworten! Echt super! Wie droppe ich die ipv6? :/ Hab ich noch gar nichts von gehört.

Liebe Grüße

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 01:29:05

Sorry für den Doppelpost, aber ich habe es bis eben versucht.

Ich bekomme es wieder so hin, noch mit iptables-persistent ...

Auch zahlreiche Videos und Anleitungen helfen nicht. Ich verstehe es nicht.

Andere können iptables -P INPUT DROP schreiben, aber bei mir kappt es die Verbindung und ich muss das System neu aufsetzen ... Hm.

Hat jemand eine detallierte Anleitung wie ich meine Regeln nun speichere? :(

Liebe Grüße

Benutzeravatar
heisenberg
Beiträge: 4203
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Firewall script

Beitrag von heisenberg » 24.07.2015 02:11:12

Andere können iptables -P INPUT DROP schreiben, aber bei mir kappt es die Verbindung und ich muss das System neu aufsetzen ... Hm.
Kommt mir bekannt vor. Die Regeln zu testen, bevor Du sie reboot-fest machst ist durchaus empefehlenswert :)

Ansonsten bieten ja die meisten Hoster eine Webkonsole an als eine Remotekonsole, die unabhängig von der Netzwerkkonfiguration des Servers funktioniert. Damit kannst Du die Regeln erstmal wieder löschen ohne Neuinstallation.

Im übrigen probiere es doch erstmal klein mit iptables-persistent und nimm dann nach und nach mehr Regeln dazu. Als erstes sollte das mal funktionieren, dass Du deinen SSH-Zugang behältst und dann gehst Du weiter.

Bash Watchdog als Vorsichtsmassnahme
Bei den ganz heissen Remote-Eingriffen, bei denen ich keinen Möglichkeit hatte den Server per Was-auch-immer-für ein Interface neu zu starten, habe ich mir ein Watchdog-Script geschrieben. Das prüft dann auf dem entfernten Server alle 5 Sekunden, ob eine bestimmte lokale Datei nicht älter als z. B. 2 Minuten ist. Zusätzlich gab es ein Skript das auf meinem lokalen Arbeitsplatzrechner auf dem entfernten Server alle 5 Sekunden per SSH + touch das Änderungsdatum der besagten Datei aktualisiert. Wenn ich mir also irgendwie die Netzwerk- oder Firewall-Config zerschossen habe und ich nicht mehr drauf komme, dann bootet sich das System in 2 Minuten selbst und ist wieder da - vorausgesetzt dass ich die üblen Änderungen nicht reboot-fest gemacht habe.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 24.07.2015 03:01:03

Wo haperts denn genau?
Am Besten suchst Du Dir mal ein Tutorial aus, und fragst gezielt nach den Abschnitten, die Dir daran unklar sind.

Für den Anfang versuch ichs mal mit ner (stark vereinfachtem) Erklärung:

Code: Alles auswählen

iptables -P INPUT DROP
Die manpage erklärt, dass -P die Policy setzt. Soweit ok?

Jetzt stell Dir vor, Du hast Dein leeres Regelwerk. Anfangs stehen alle Policies auf ACCEPT. Input sieht so aus

Code: Alles auswählen

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination  
Hängst Du jetzt weitere Regeln schrittweise mit z.B. -A an, sieht es z.B. so aus

Code: Alles auswählen

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

Was passiert also (denk dran: ganz stark vereinfacht) wenn jetzt ein eingehendes Paket ankommt? Richtig, es landet in der Inputschlange. Hier werden von "oben nach unten" solange die Regeln durchprobiert, bis irgendwas passt.
Stell Dir vor das Paket sollte an den Webserver auf 80 gehen, in dem Fall ist gleich die erste Regel ein Treffer, das Paket wird akzeptiert, weitere Behandlung nicht nötig.
Nun kommt ein zweites Paket an, Ziel diesmal Port 443. Also wird die erste Regel geprüft: passt nicht. Weiter zur nächsten Regel: passt. Paket wird aktzeptiert, fertig.
Nun kommt ein drittes Paket, Ziel 12345. Erste Regel passt nicht, zweite ebenfalls nicht. Was jetzt? Nun ja, es gibt ja noch die Policy. Die sagt "ACCEPT", also wird das Paket angenommen und fertig.

Soweit logisch, oder? Und was passiert bei Dir wenn Du die Policy änderst?
Dein Befehl da oben setzt die Policy auf DROP, übersetzt "schmeiss alles -was nicht schon vorher aktzeptiert wurde- einfach weg". Du bist per ssh auf dem Server, wenn Du den Befehl absetzt? Tja, schon etwas blöd, wenn die ssh Pakete auf einmal im Papierkorb landen ;)

Lösung: vorher noch ne Regel absetzen, die SSH erlaubt.

Regeln speichern: iptables-save > /root/meintetollefirewall
Regeln laden: iptables-restore < /root/meintetollefirewall
Die ganzen Befehle gibts so ähnlich auch für Ipv6 (ip6tables, ip6tables-save, ip6tables-restore).
Für "Nach dem Reboot" hast Du mehrere Möglichkeiten, eine Variante wäre ein Script in /etc/network/if-up.d/meinefirewall anzulegen, und da einfach das iptables-restore aufzurufen.
Das iptablespersitent macht auch nicht viel anderes, die Regeln werden an entsprechender Stelle abgelegt und den Rest sollte das Script übernehmen.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 11:42:43

Wow. Tolle Erklärung. :) Mir halt iptables-restore gefehlt. ^^

Ich habe alles soweit verstanden und wie iptables im Grunde genommen funktioniert.

Ich mache iptables-save > /etc/sysconfig/iptables

Dann editiere ich das ganze. Am liebsten verwende ich nano. Also nano /etc/sysconfig/iptables. Copy/Paste das Script und mache dann:

iptables-restore < /etc/sysconfig/iptables und dann sagt er: "iptables-restore: line 3 failed" Hm... okay. Nehme ich halt die Line 3 mal raus und versuche es erneut: "iptables-restore: line 4 failed"


Komisch:/ Was jetzt?

Liebe Grüße

EDIT: Das geht bis 11 Uhr so weiter ^^ http://www.youscreen.de/fguwnitu41.jpg

Script:

Code: Alles auswählen

#!/bin/bash

echo "Initializing Firewall ..."

# Load modules
modprobe ip_conntrack_ftp

# Clear all other rules
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Creation of my own chains
iptables -N mydrop

# Configuring our own chains
iptables -A mydrop -j LOG --log-prefix "FW-DROP: "
iptables -A mydrop -j DROP

# Loopback communication
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -i lo -j ACCEPT

# Statefull Inspection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j mydrop
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# ICMP Ping
iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW -j ACCEPT

# DNS
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT

# WWW
#iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Mail
#iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 143 -m state --state NEW -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

# DHCP
#iptacles -A INPUT -p udp --dport 67 -m state --state NEW -j ACCEPT

#Teamspeak 3 Server
iptables -A INPUT -p udp --dport 9987 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 30033 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 10011 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 2010 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 41144 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 2008 -m state --state NEW -j ACCEPT


echo "Firewall is configured and active!"

iptables -A INPUT -j LOG --log-prefix "FW-NOT-MATCHED:"
iptables -A INPUT -j DROP
iptables -A OUTPUT -j LOG --log-prefix "FW-NOT-MATCHED:"
iptables -A OUTPUT -j DROP

exit 0

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 24.07.2015 12:15:38

Ich glaube, Du vermischt hier grade "bashscript" und "iptables-save/restore--ein-/ausgabe".
Im bashscript reicht das Einlesen der Regelwerke per restore Befehl:

Code: Alles auswählen

#!/bin/sh
/sbin/iptables-restore < /root/firewall 
/sbin/ip6tables-restore < /root/firewall6
Die beiden, ich nenn sie mal einfach so, "Configdateien" sind vorher per iptables-save > /root/firewall bzw ip6tables-save > /root/firewall6 erzeugt worden.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 12:23:38

Ach so.

Wie genau mach ich das nun bei meinem Script?

Also ich muss nun aus meinem Bash-Script,ein Regelwerk erstellen? Ich dachte ich kann das komplett einfach irgendwie einlesen? Wie würde das dann aussehen? O.o

Ich steig da irgendwie nicht durch, auch wenn ich iptables an sich verstehe. Nur das übernehmen der Regeln für den Server haut nicht hin.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 24.07.2015 13:20:42

Du kannst natürlich auch nur Dein Bashscript nutzen.
Der Fehler dort war wahrscheinlich nur, dass Du statt /sbin/iptables nur iptables geschrieben hast. Wenn das Script läuft und er /sbin/ dann nicht im Suchpfad hat, findet er natürlich nichts.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 13:41:49

Nein das Problem war, dass er gesagt hat "line 3 failed".

Gibt es einen bestimmten Platz wo ich das Bash-Script reinpacken muss? Ich verstehe es immer noch nicht. :-/

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 13:46:07

Aha. Okay. War einfacher als gedacht.

chmod 750 iptables
./iptables

xD

Einen Fehler gibt er aber noch aus: "iptables v1.4.21: Can't use -i with OUTPUT"
Wie kann ich das beheben?

Ansonsten hat es aber geklappt. (Denke ich) Beim Ausgeben der aktuellen Regeln bekomme ich folgende Ausgabe:

Code: Alles auswählen

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
mydrop     all  --  anywhere             anywhere             state INVALID
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh state NEW
ACCEPT     icmp --  anywhere             anywhere             state NEW
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp state NEW
ACCEPT     udp  --  anywhere             anywhere             udp dpt:9987 state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:30033 state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:10011 state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:41144 state NEW
LOG        all  --  anywhere             anywhere             LOG level warning prefix "FW-NOT-MATCHED:"
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere             state NEW
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp state NEW
ACCEPT     udp  --  anywhere             anywhere             udp dpt:2010 state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2008 state NEW
LOG        all  --  anywhere             anywhere             LOG level warning prefix "FW-NOT-MATCHED:"
DROP       all  --  anywhere             anywhere

Chain mydrop (1 references)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere             LOG level warning prefix "FW-DROP: "
DROP       all  --  anywhere             anywhere

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 24.07.2015 14:23:36

-i steht für incomming interface, das passt nicht zu OUTPUT ... schau mal in die Doku, da gibts auch was für outgoing - der Buchstabe ist auch ziemlich naheliegend ;)
Ich glaub so ganz richtig ist Dein Regelwerk noch nicht: Du solltest zumindest nochmal einen Blick auf die oberste Input Regel werfen, denk dran: wenn was passt wirds nicht weiter behandelt.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 24.07.2015 14:50:44

-o .. ^^ Das war echt ziemlich offensichtlich. xD

Ja, irgendwas scheint wirklich noch nicht zu stimmen. Ich hab spaßeshalber mal alle Teamspeak-Regeln ausgeklammert und das Script nochmal geladen. In der Theorie müsste der TS³ Server doch jetzt nicht mehr funktionieren, weil die Ports geblockt werden oder nicht? O.o

Liebe Grüße

P.S: Und bitte spreche nicht in Rätseln ^^ Das ist noch alles ziemlich neu für mich. :D

EDIT: Was aber gut funktioniert ist:

Code: Alles auswählen

iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW -j ACCEPT
Klammere ich dies aus, kann man den Server nicht mehr "anpingen". :-)

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 24.07.2015 20:39:12

Keine Rätsel? Nicht mal ein ganz einfaches?
Also: Was glaubst Du, macht das Stückchen Regelwerk hier mit nem Paket das zu nem TS Port will?

Code: Alles auswählen

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere 
Einfach mal laut vorlesen, dann kommst Du auch drauf, warum da was nicht stimmen kann.

ps "iptables --list -nv --line-numbers" gibt, finde ich, die übersichtlichere Übersicht.

edit: codetags repariert

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 00:31:42

Naja, es werden alle Einkommenden Pakete verworfen oder? O.o Dürfte dann das folgende Problem unten erklären:

Man kann zum TS nicht verbinden, wenn man nicht schon drauf war. :D

Jedenfalls nicht, wenn die TS Regeln ausgeklammert sind. :3

Aber stimmt es dann nicht so? Was müsste ich denn deiner Meinung nach konkret ändern?

Liebe Grüße und danke für deine ganzen Bemühungen

Benutzeravatar
heisenberg
Beiträge: 4203
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Firewall script

Beitrag von heisenberg » 25.07.2015 00:47:10

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere


Ich habe es auch nochmal markiert :)

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 01:07:59

Also werden alle durchgelassen ... das würde aber nicht das Problem erklären. Oder doch? Wie muss es denn richtig heißen?

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 25.07.2015 10:28:09

Du hattest geschrieben "In der Theorie müsste der TS³ Server doch jetzt nicht mehr funktionieren, weil die Ports geblockt werden oder nicht?" - und daher hatte ich darauf hingewiesen, dass Dein Input Regelwerk nicht so läuft wie Du denkst. Der "untere" Teil in Input sah zwar oberflächlich gut aus - die erste Regel hat allerdings dafür gesorgt, dass diese Regeln nie zum Tragen kommen, und einfach jedes Paket eingehend durchkommt. Jetzt haben wir eine unschöne Situation: Was bedeutet "Funktioniert" für Dich? Für Deine "Kunden" bedeutet "Funktioniert", sie können den Dienst nutzen. Dafür müssen Anfragen in den Server gelangen (tut) und Antworten zurück gesendet werden (tut vielleicht - kommt auf die Output Regeln an). Für nen Angreifer bedeutet "Funktioniert" oftmals jedoch schon, wenn seine Pakete das Ziel erreichen. Daher bin ich mir ziemlich sicher, dass Du diese "Accept-sofort-alles" Regel nicht haben willst ;)
Ja, ich finde es auch etwas verwirrend, dass die Policy im Log immer oben drüber steht, wäre logischer wenn sie jeweils als letzte Zeile des Blocks ausgegeben werden würde. Aber daran gewöhnt man sich im Laufe der Zeit. Nicht aufgeben: Firewalls sind nen komplexes Thema, am Anfang denkt man mehrfach "ok, JETZT hab ichs verstanden". Erst wenn Du das Gefühl hast "Das ist ja so fürchterlich, das lern ich NIE" bist Du auf dem richtigem Weg. ;)

Poste bitte nochmal Dein aktuelles Script und die Ausgabe von "iptables --list -nv --line-numbers" direkt nach nem Reboot und direkt nachdem Du Dein Script eingelesen hast. Wahrscheinlich sind grade die zwei Zustände "durch Script erzeugt" und "von Hand probiert" durcheinandergekommen.

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 11:03:06

Hm. Gebe dir da in allem Recht was du sagst. ^^ Finde das echt super, dass es Leute gibt die sich solch eine Mühe geben das anderen beizubringen. ^^

Also aktuell ist das Script:

Code: Alles auswählen

#!/bin/bash

echo "Initializing Firewall ..."

# Load modules
modprobe ip_conntrack_ftp

# Clear all other rules
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Creation of my own chains
iptables -N mydrop

# Configuring our own chains
iptables -A mydrop -j LOG --log-prefix "FW-DROP: "
iptables -A mydrop -j DROP

# Loopback communication
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Statefull Inspection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j mydrop
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

# ICMP Ping
iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW -j ACCEPT

# DNS
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT

# WWW
#iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Mail
#iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT
#iptables -A INPUT -p tcp --dport 143 -m state --state NEW -j ACCEPT

# FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

# DHCP
#iptacles -A INPUT -p udp --dport 67 -m state --state NEW -j ACCEPT

#Teamspeak 3 Server
iptables -A INPUT -p udp --dport 9987 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 30033 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 10011 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 2010 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 41144 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 2008 -m state --state NEW -j ACCEPT


echo "Firewall is configured and active!"

iptables -A INPUT -j LOG --log-prefix "FW-NOT-MATCHED:"
iptables -A INPUT -j DROP
iptables -A OUTPUT -j LOG --log-prefix "FW-NOT-MATCHED:"
iptables -A OUTPUT -j DROP

exit 0
Und die Ausgabe nach dem Reboot und einlesen:

Code: Alles auswählen

root@Debian-81-jessie-64-minimal /etc/sysconfig # chmod 750 iptables
root@Debian-81-jessie-64-minimal /etc/sysconfig # ./iptables
Initializing Firewall ...
Firewall is configured and active!
root@Debian-81-jessie-64-minimal /etc/sysconfig # iptables --list -nv --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
2        6   480 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
3        0     0 mydrop     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 state NEW
5        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW
6        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 state NEW
7        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53 state NEW
8        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21 state NEW
9       20  2690 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:9987 state NEW
10       0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:30033 state NEW
11       0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:10011 state NEW
12       6   304 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:41144 state NEW
13       3   180 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 4 prefix "FW-NOT-MATCHED:"
14       3   180 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

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

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
2       30  5508 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
3        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW
4        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 state NEW
5        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53 state NEW
6        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21 state NEW
7        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:2010 state NEW
8        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:2008 state NEW
9        0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 4 prefix "FW-NOT-MATCHED:"
10       0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain mydrop (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 4 prefix "FW-DROP: "
2        0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Liebe Grüße

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 25.07.2015 11:30:42

Code: Alles auswählen

 1        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
Siehst Du den Unterschied in Input ? Da steht ein zusätzliches lo. Klar, was der Unterschied zum vorherigen ist?

Freymuth
Beiträge: 29
Registriert: 21.07.2015 08:59:47

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 12:47:04

Jaein xD Zu welchem vorherigen?

Was müsste denn verändert werden damit es so passt wie ich mir das vorstelle? :/ Die Loopback Communication ganz raus nehmen? O.o

Der Server soll ja generell erstmal alle Pakete verwerfen bis ich ihm sage: "Du, Pass auf. Ich hab da nen neuen Dienst der läuft auf dem und dem Port, das müsstet du durchlassen."

:'D

Liebe Grüße

Antworten