Firewall script

Alles rund um sicherheitsrelevante Fragen und Probleme.
eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Firewall script

Beitrag von eggy » 25.07.2015 13:11:10

in Bezug auf 24.07.2015 13:46:07

Code: Alles auswählen

 ACCEPT     all  --  anywhere             anywhere 
In dieser Zeile sagst Du "alles von überall durchlassen". Keine gute Idee.
Im aktuellen Script schränkst Du ein: "nur falls das Paket auf dem lo reinkommt, ist es mir egal wo es herkommt, und dann darf es immer durch". Das ist schonmal viel besser.

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

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 13:19:02

Hehe. Aber dann ist doch alles super oder nicht? Also was ich oben gepostet habe. Meinst du wir sollten noch wo was ändern?

Und der Fehler mit dem TS 3 Server .. :D Ich habe erwartet, wenn für diesen keine Ports freigegeben sind geht der komplett offline o.ä.

Aber wenn man drauf ist funktioniert ja alles einwandfrei. Man kann nur nicht mehr neu connectrn ^^ Hättest du dafür noch eine Erklärung?


Liebe Grüße

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Firewall script

Beitrag von Cae » 25.07.2015 13:59:34

Freymuth hat geschrieben:Und der Fehler mit dem TS 3 Server .. :D Ich habe erwartet, wenn für diesen keine Ports freigegeben sind geht der komplett offline o.ä.

Aber wenn man drauf ist funktioniert ja alles einwandfrei. Man kann nur nicht mehr neu connectrn ^^ Hättest du dafür noch eine Erklärung?
Naja, die Firewall tut, was du eingestellt hast (erste Teamspeak-Zeile): "Alle eingehenden Pakete des Protokolls UDP mit dem Zielport 9987, die du keiner Verbindung zuordnen kannst, sind zu akzeptieren". Sobald ein Paket durch diese Regel zugelassen wurde, besteht die Verbindung, d.h. alle nachfolgenden Pakete werden wegen der Zeile nach dem Kommentar "stateful inspection" (bei dir ist ein Schreibfehler drin) zugelassen: "Alle eingehenden Pakete, die Teil einer Verbindung sind oder zu einer Verbindung gehoeren, sind zu akzeptieren".

Wenn du also on-the-fly die Regel fuer den Port rausnimmst, ist die Verbindung noch bekannt und wird wegen --state ESTABLISHED,RELATED angenommen.

Ansonsten hast du ein grundlegendes Verstaendnisproblem mit der stateful-Eigenschaft: Du musst dich eben nicht mehr um die "Rueckverbindung" kuemmern. Bei den DNS-Regeln machst du das (allerdings waeren dann die OUTPUT-Regeln mit --sport anstatt --dport. Oder du hast tatsaechlich einen DNS-Server laufen). Bei stateful firewalls stellst du auf der INPUT-Seite ein, was du alles zulassen willst, was dazu fuehrt, dass die Verbindung erkannt und zugelassen wird. Eine dazu passende OUTPUT-Regel braucht es nicht, weil rein auf die bestehende Verbindung geprueft und zugelassen wird.

Zum Vergleich, bei statischen Firewalls: Du hast eine eingehende Verbindung von a:x (Host a, Port x) auf den lokalen Socket b:y. Die Antwort darauf ist folglich b:y -> a:x. Bis auf sehr wenige Ausnahmen ist der Port x nicht vorhersehbar, man kann also nur auf y und den Host a oder b matchen. a ist meistens "irgendwer", also bleibt nur b und y uebrig. Die entsprechende Regel waere also

Code: Alles auswählen

-A  INPUT -d b -p tcp --dport y -j ACCEPT
-A OUTPUT -s b -p tcp --sport y -j ACCEPT
Beachte jeweils d/dport und s/sport wie destination und source.
Die Regel einer stateful firewall mit derselben Ausgangslage waere

Code: Alles auswählen

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A  INPUT -d b -p tcp --dport y -m state --state NEW -j ACCEPT
Und das willst du auch so verwenden.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

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

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 17:41:36

Hey,

danke für die Antwort. Ja das ist echt alles ein bisschen viel. Beschäftige mich auch erst seit vorgestern damit.. :D

Soweit habe ich meinen Server nämlich abgesichert:

- Root-Login verboten
- Port verlegt (ist ja eher umstritten)
- fail2ban
- Benachrichitung bei SSH Login
- Rootkits mit rkhunter aufspüren :3

Anstehend:
- eigene Firewall (Dieser Thread)
- Login via Auth Key (Was ich bis jetzt noch nicht ganz verstehe :/)

Ich werde wohl auch noch nicht ganz durchsteigen. Also gehen wir davon aus, dass oben die letzte Konfig war (Die ich gepostet habe). Nein es läuft kein DNS Server. Ich verweise aber mit 2 Domains auf den Server, daher habe ich gedacht das ich diese Ports mit offen haben muss.

Sollte ich den DNS Part noch "ausklammern", stimmt denn dann alles? Sodass ich wenig Angriffsfläche biete? Oder ist immer noch alles offen und ich muss nochmal was umschreiben?

Vielen Dank und liebe Grüße

DeletedUserReAsG

Re: Firewall script

Beitrag von DeletedUserReAsG » 25.07.2015 18:36:18

Wenn du wenig Angriffsfläche haben willst, ist’s eher sinnvoll, dafür zu sorgen, dass an den Ports erst gar nichts lauscht, das geblockt werden müsste. Dann kannst du nämlich die Zeit für so Snakeoil wie ’ne Firewall oder auch rkhunter auf der zu schützenden Maschine sparen, um sie für die tatsächlich wichtigen Dinge (ssh mit Schlüsseln, korrekte Konfiguration der laufenden Dienste [ich las was von einem TS-Server? Sowas kann man in Container packen, z.B.]) zu nutzen.

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

Re: Firewall script

Beitrag von Freymuth » 25.07.2015 19:14:29

Ah okay.

Und die entsprechenden Erklärungen dazu wie ich das mache? :/ So kurz gesagt, kann ich damit überhaupt nichts anfangen.

Liebe Grüße :-)

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

Re: Firewall script

Beitrag von eggy » 26.07.2015 11:45:45

Och, das ist alles ganz einfach: Du suchst Dir eins der unbekannten Wörter aus und tust es in die Eingabemaske der Suchmaschine Deiner Wahl. Dann musst Du auf "Suchen" klicken. Die ersten paar Treffer öffnest Du und überfliegst die Texte. Nach ca. einer halben Stunde solltest Du genug Schlagworte zusammenhaben, um gezielt suchen zu können. Im Laufe Deiner weiteren Recherchen werden Dir einige Programme genannt werden. Hier empfiehlt es sich dann die jeweilige Manpage zu lesen. Der nächste Schritt danach ist, sich eine Virtuelle Maschine anzulegen, in der man sein neu erworbenes Wissen ausgiebig testen kann. Wenn Du DANN gezielte Fragen hast: neuen Thread aufmachen. Und noch ein kleiner Ratschlag: bleibt erstmal bei einem Thema.

Um zum Thema zurück zu kommen: hast Du verstanden, was Cae erklärt hat?
Falls nicht: nachfragen!

Um den Irrtum mit dem DNS aufzuklären, das ganze funktioniert(*) so:
Du bzw Dein Webbrowser wollen wissen, welche IP zu taschenrechner.debianforum.de gehört.
Die Anfrage wird vom sog. Resolver formuliert, und an den in Deiner resolv.conf eingetragenen DNS (Server) geschickt. In der Regel ist das z.B. ein DNS Deines Providers/Hosters. Dieser Server schaut jetzt in seiner Datenbank nach, ob er Deine Frage beantworten kann. (**) Kann er das nicht, fragt er beim Obersten Chef DNS nach. Dieser hat viele Stellvertreter mit jeweils eigenen Aufgabengebieten, den sog. Top-Level-Domains. Einer dieser Abteilungsleiter ist also für alles was auf ".de" endet zuständig. Also fragt man den. Der antwortet "taschenrechner.debianforum? Nie gehört, aber debianforum sollte das wissen, deren DNS steht da ->". Dann frag man dort nach und die sagen "taschenrechner? kenn ich, der hat 1.2.3.4". (Jetzt könnte Dein Browser Kontakt zu 1.2.3.4 aufnehmen und von dort die gewünschte Webseite anfordern.) Wie Du siehst, wurde dabei nicht ein einziges Paket an 1.2.3.4 gesendet.

Wenn Du ausgehenden DNS erlaubst, und die "related"-Rules für incomming richtig gesetzt hast, kann Dein Server selbst Anfragen stellen und die passenden Antworten erhalten. Er selbst braucht aber nie von extern befragt zu werden. denn solange man den DNS nicht selbst betreibt (Sowas ist kein Kinderspiel, da kann soviel schiefgehen, und dann bist Du an Angriffen auf andere beteiligt. Lass das bitte auch weiterhin Deinen Provider machen!), reicht es also locker aus wenn die "Abteilungsleiter" Bescheid wissen, wo die Kisten zu erreichen sind.


*: Erzählt das bloß nicht irgendjemanden der von der Materie Ahnung hat - der lacht Euch so laut aus, dass man das noch in Timbuktu hören kann.
**: falls es Dich (was ich nicht annehme) doch eingehender interessieren sollte: die hier fehlenden Suchworte sind "iterative Auflösung" und "rekursive Auflösung"

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

Re: Firewall script

Beitrag von Freymuth » 26.07.2015 12:15:54

Ahaaa. ^^

Okay dann klammern wir das gleich mal aus. :)

@Cae: Nicht so ganz. Ich steige schon durch den Text durch, aber willst du mir sagen, dass ich jetzt noch etwas ändern muss?

Liebe Grüße

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

Re: Firewall script

Beitrag von Freymuth » 28.07.2015 01:09:08

#Push :/

Ist bei dem Script nun alles richtig?

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
Oder würdet ihr da nun noch was ändern?

Antworten