• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Firewall konfigurieren

rob3000

Newbie
Hallo,

ich möchte mir selbst eine kleine Firewall mit entsprechenden Ketten von Regeln definieren. (iptables). Gibts im Netz ein gutes HowTo wie man so eine Firewall definiert?

lg robi
 
OP
R

rob3000

Newbie
OKay danke, habe mich da jetzt mal ein bißchen eingelesen. Nur mal Grundlegend wie kann Shellscript aussehen, das eine Firewall implementiert und das einfach alle Verbindungen die ich von meinem Rechner nach außen aufbaue zugelassen werden und alle die sich von außen auf meinen Rechner verbinden wollen abgeblockt werden?
 

Martin Breidenbach

Ultimate Guru
Die Syntax kannst Du selber nachschauen :mrgreen:

Initialisierung:
- alle Chains löschen
- kein NAT
- Default für alle Chains: drop oder reject

Output Chain: neue ausgehende Verbindungen rauslassen

Regel die 'established' und 'related' Verbindungen durchläßt

Was übrig bleibt: drop oder reject

Schau mal hier: http://www.linuxguruz.com/iptables/ Jede Menge Beispielskripte !
 
OP
R

rob3000

Newbie
Ich habe mal versucht ein Skript dafür zu entwickeln um alle Verbindungen, die von meinem Rechner aus aufgebaut werden, zugelassen werden, und alle Verbindungen, die zu meinem Rechner aufgebaut werden, sollen abgeblockt werden:

Code:
#!/bin/bash

IPTABLES="/sbin/iptables"
WLANDEV="eth1"

# Verwerfe erstmal alles, indem
# die Default-Policy auf REJECT gesetzt wird
$IPTABLES -P INPUT REJECT
$IPTABLES -P OUTPUT REJECT
$IPTABLES -P FORWARD REJECT

$IPTABLES -t nat -F

$IPTABLES -A OUTPUT -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Ist das so in Ordnung bzw. habe ich was vergessen? - also zuerst mal alle Chains per default auf DROP stellen, nur wenn bei der OUTPUT Chain also von meinem Rechner nach außen eine Verbindung aufgebaut wird, sollte diese akzeptiert werden, also wenn eine neue Verbindung nach außen aufgebaut wird (1.Regel) oder wenn bereits eine Verbindung besteht oder sich auf eine andere bezieht (2+3.Regel), sowohl von innen nach außen (OUTPUT) als auch von außen nach innen (INPUT).

robi
 
OP
R

rob3000

Newbie
Naja, ich möchte einfach ein sicheres Firewallskript erstellen. Habe jetzt die Firewall nochmal modifiziert, wobei ich SSH und FTP Verbindungen von außen zulassen möchte:

Code:
#!/bin/bash

IPTABLES="/sbin/iptables"
WLANDEV="eth1"

# Verwerfe erstmal alles
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

#Die Regeln alle Löschen
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD

#alle ausgehende Verbindungen, neue, bestehende, antworten, zulassen
$IPTABLES -A OUTPUT -m state --state NEW, ESTABLISHED,RELATED -j ACCEPT

#Fehlermeldungen und Antwortpakete zulassen
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Erlaube SSH-Verbindungen von außen
$IPTABLES -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

#Erlaube FTP-Verbindungen von außen
$IPTABLES -A INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT

Dazu hätte ich jetzt drei Fragen:

1) Ist dieses Skript so korrekt?

2) Sollte man die NAT-Tabelle nicht vorher löschen, bevor man die Regeln erstellt?

3) Wie kann ich am einfachsten die Korrektheit des Skripts praktisch testen?
 

Wastl

Member
Du würdest etwas über dein Ziel hinausschiessen. Wenn du wirklich alle eingehenden Verbindungen rejectest dann legst du dich ziemlich lahm netzwerkmässig, da viele Dienste z.b. ftp ja auch "Rückkanäle" aufbauen.
Netzverkehr ist fast immer bidirektional...
Also soweit würde ich nicht gehen...ich würd halt ggf. alles zumachen und nur das auf was sein soll.
Aber selbst das ist teilweise nicht einfach. Ich habe mal alleine für ftp einen 5 oder 6 Zeilen Block für eingehend und das selbe nochmal für ausgehend gebraucht aufm Server :)
Ich kann dir gerne den Regelsatz mal zeigen...
AFAIR erlaubt mein Server damit nur http(s), ftp, vpn, vmware console, ssh und apt an seinem Netzwerkinterface, alles andere ist dicht...

lg
wastl
 

DanteZ

Newbie
Code:
# Regelketten leeren
iptables -F
iptables -F -t nat
iptables -X

#----------------------------------------------------------------------------

# INPUT-Regeln erstellen

#Akzeptiere etablierte und verwandte Verbindungen
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#Akzeptierte Kommunikation ber die Loopback-Schnittstelle
iptables -A INPUT -s 127.0.0.0/255.255.255.0 -j ACCEPT

#Akzeptiere Pakete aus dem lokalen Netz
iptables -A INPUT -s 192.168.0.0/255.255.255.0  -j ACCEPT

# http-Antworten  von berall erlauben
iptables -A INPUT -p tcp --sport 80 --dport 1024: -j ACCEPT

# eigenen http-Server freigeben
iptables -A INPUT -p tcp --sport 1024: --dport 80 -j ACCEPT

#Aufbau der Verbindung
iptables -A INPUT -p tcp --dport 1024: --sport 21 ! --syn -j ACCEPT

#Aktives FTP
iptables -A INPUT -p tcp --dport 1024: --sport 20 -j ACCEPT

#Passives FTP
iptables -A INPUT -p tcp --dport 1024: --sport 1024: ! --syn -j ACCEPT

#ssh freigabe fr TCP und UDP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -j ACCEPT
#iptables -A INPUT -p udp --dport 22 -j ACCEPT
#iptables -A INPUT -p udp --sport 22 -j ACCEPT

#DNS Freigabe
iptables -A INPUT -p udp -s 192.168.0.200 --dport 53 --sport 1024:65335  -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.200 --sport 53 --dport 1024:65335  -j ACCEPT

#Default-Policy �dern
iptables -P INPUT DROP

#---------------------------------------------------------------------------------------------


# OUTPUT-Regeln erstellen

#Akzeptiere etablierte und verwandte Verbindungen
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#Akzeptierte Kommunikation ber die Loopback-Schnittstelle
iptables -A OUTPUT -d 127.0.0.0/255.255.255.0 -j ACCEPT

#Akzeptiere  alle Pakete aus dem lokalen Netz
iptables -A OUTPUT -d 192.168.0.0/255.255.255.0  -j ACCEPT

# http nach berall erlauben
iptables -A OUTPUT -p tcp --sport 1024: --dport 80 -j ACCEPT

# eigenen http-Server feigeben
iptables -A OUTPUT -p tcp --sport 80 --dport 1024: -j ACCEPT

#Kontrollverbindung
iptables -A OUTPUT -p tcp --sport 1024: --dport 21 -j ACCEPT

#Aktives FTP
iptables -A OUTPUT -p tcp --sport 1024: --dport 20  -j ACCEPT

#Passices FTP
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024 -j ACCEPT

#ssh freigabe fr tcp und udp
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#iptables -A OUTPUT -p udp --dport 22 -j ACCEPT
#iptables -A OUTPUT -p udp --sport 22 -j ACCEPT

#DNS Freigabe
iptables -A OUTPUT -p udp --sport 53 --dport 1024:65335  -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 --sport 1024:65335  -j ACCEPT

#Default-Policy �dern
iptables -P OUTPUT DROP

# nicht behandelte Ketten droppen
iptables -P FORWARD DROP

#----------------------------------------------------------------------------------

also o hab ich die iptables in einer schulungsumgebung geschrieben, und es funzt recht gut.

vieleicht kannst du das ja als basis verwenden.

wenn fehler drin sind bitte mitteilen

thx
 
Oben