Seite 2 von 2

Re: Firewall script

Verfasst: 25.07.2015 13:11:10
von eggy
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.

Re: Firewall script

Verfasst: 25.07.2015 13:19:02
von Freymuth
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

Re: Firewall script

Verfasst: 25.07.2015 13:59:34
von Cae
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

Re: Firewall script

Verfasst: 25.07.2015 17:41:36
von Freymuth
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

Re: Firewall script

Verfasst: 25.07.2015 18:36:18
von DeletedUserReAsG
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.

Re: Firewall script

Verfasst: 25.07.2015 19:14:29
von Freymuth
Ah okay.

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

Liebe Grüße :-)

Re: Firewall script

Verfasst: 26.07.2015 11:45:45
von eggy
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"

Re: Firewall script

Verfasst: 26.07.2015 12:15:54
von Freymuth
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

Re: Firewall script

Verfasst: 28.07.2015 01:09:08
von Freymuth
#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?