Frage zum Script für Iptables

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Frage zum Script für Iptables

Beitrag von Yuenlo » 21.10.2014 09:29:06

Hallo

Ich wollte ein Script schreiben was jedesmal mit geladen wird wenn der Server neustartet, das ist auch kein Problem, die Frage die sich mir grad stellt ist, wie werden die Regeln in dem Script abgearbeitet von oben nach unten oder von unten nach oben?
Da ich ein Whitelist-verfahren durchfürhen werde frage ich mich halt wo ich das alles blockieren hinsetzen muss als erstes oder als letztes im Script.
Habe hier bei mir unterschiedliche Ausagen gehört daher hier nochmal die Frage und ich hoffe das mir hier jemand die Erleuchtung bringt in welcher Reihenfolge dieses Script abgearbeitet wird :)

mfg

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 21.10.2014 10:09:38

Moin,

das kommt darauf an ob du, iptables -I für Insert, da fügt er die Regel oben in die Tabelle ein, oder iptables -A für Append, da fügt er die Regel ans Ende der Tabelle ein.

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 21.10.2014 10:17:02

das anfügen würd ich wahrscheinlich mit A machen die Frage ist in welcher Reihenfolge wird es abgearbeitet von oben nach unten oder von unten nach oben

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 21.10.2014 11:05:00

Moin,

sorry iptables geht immer von oben nach unten die Tabellen durch.

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 21.10.2014 11:26:32

Ok danke

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 21.10.2014 13:55:52

kann man so in etwa eine schreiben oder ist es von der syntax irgendwas falsch?
das ist das script für ein router in meinen netz der nur bei bestimmten sachen weiterleiten oder zulassen soll der Rest soll geblockt werden

echo -n "IPtables werden geladen ..."

#Flush alte Regeln
iptables -F
iptables --delete-chain

#Insert erlaubte Weiterleitung
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#iptables -A FORWARD -i eth0 -p tcp --dport 80 --to 10.22.0.21
#iptables -A FORWARD -i eth1 -p tcp --dport 80 --to 10.1.13.0
#iptables -A FORWARD -i eth0 -p tcp --dport 443 --to 10.22.0.21
#iptables -A FORWARD -i eth1 -p tcp --dport 443 --to 10.1.13.0
#iptables -A FORWARD -i eth0 -p tcp --dport 20 --to 10.22.0.21
#iptables -A FORWARD -i eth1 -p tcp --dport 20 --to 10.1.13.0
#iptables -A FORWARD -i eth0 -p tcp --dport 21 --to 10.22.0.21
#iptables -A FORWARD -i eth1 -p tcp --dport 21 --to 10.1.13.0
#iptables -A FORWARD -i eth0 -p tcp --dport 22 --to 10.22.0.0
#iptables -A FORWARD -i eth1 -p udp --dport 22 --to 10.1.13.102
#iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
#iptables -A OUTPUT -i eth0 -p udp --sport 22 -j ACCEPT


#geblockte Regeln
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
echo "iptables sind geladen ..."

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

Re: Frage zum Script für Iptables

Beitrag von Cae » 21.10.2014 16:05:34

Nunja, du schmeisst alle Regeln weg und setzt genau eine. Das sollte keine Syntax-Fehler enthalten, aber die auskommentierten Regeln darunter sehen falsch aus, da sie kein -j-Ziel haben. Vermutlich soll das

Code: Alles auswählen

-j DNAT --to-destination 192.0.2.42
o.ae. sein.

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

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 22.10.2014 07:36:21

ich habe die regeln auskommentiert da sie fehler verursacht haben, muss ich dazu noch bei jeder regel nen -j ACCEPT hinschreiben und was kommt normal hinter dem --to da das alleine den Fehler verursacht ?
das sind ja regeln die erlaubt werden sollen und unten dann die regeln das sonst alle anderen geblockt werden sollen.
Sollte doch von der reihenfolge richtig sein oder?

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 22.10.2014 12:54:52

Moin,

es kommt sehr darauf an was du machen möchtest, wenn der Rechner als Router fungieren soll, dann fehlen dir noch die FORWARD Chain, die INPUT und OUTPUT nur für Pakete sind die an einen oder von einem lokalen Prozess kommen.

Hier mal ein Link zu einer Übersichtsgrafik der Chains:
http://xkr47.outerspace.dyndns.org/netf ... _flow9.png

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 22.10.2014 13:33:11

danke aber wenn man oben schaut sind fast alle Regeln die auskommentiert sind Forward regeln sind^^
aber danke für den link den werd ich mir mal anschauen

edit:hab mir die grafik mal angeschaut aber schlau werd ich net draus. Ich habe das erste mal mit Iptables zu tun daher sehr unwissend ausser das bisschen was ich aus dem Inet gefunden habe und mir ein Reim drauf machen kann.

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 22.10.2014 13:56:19

Moin,

die Grafik zeigt dir, wie die Pakete durch iptables laufen und durch welche Tabellen (Chains) die laufen. Die Regeln die du mit -P schreibst, sind die default policy, die greift wenn keine andere Regel vorher greift.

Mir ist nur noch nicht ganz klar, was du mit den -to Regeln bezwecken möchtest.

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 22.10.2014 14:10:34

das sind regeln wenn eine Anfrage an den Router kommt für den gewissen Port an die bestimmte IP dann lass sie durch ansonsten soll es geblockt werden daher die verschiedenen Ports und IP da es 2 weitere Maschinen in diesen Subnetz gibt die aber nicht alle über die gleichen Ports und Protokolle erreichbar sein sollen. Die haben dann auch noch Regeln zum blocken aber der Router soll auch schon mal Filtern welche er weiter reicht und welche nicht.
Dazu kommt das es ein Netzbereich gibt der von ausserhalb rein darf, aber zum beispiel ssh wird aber nur von einen Rechner erlaubt der Rest nicht.
Das sind ja immer die Regeln für das durchreichen bei einer Anfrage vom äusseren Netz wenn erlaubt und die das zurück geben wenn der Rechner der angesprochen wurde seine Antwort zurück sendet.

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 23.10.2014 10:07:50

Moin,

dann musst du mit Source (-s) und Destination (-d) arbeiten und wenn das Anfragen aus dem Internet sind wäre dann auch noch DNAT nötig.

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 23.10.2014 10:41:30

Hi

also statt -i dann -s und hinten bei --to noch -destination ran ?

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

Re: Frage zum Script für Iptables

Beitrag von Cae » 23.10.2014 13:24:28

Yuenlo hat geschrieben:also statt -i dann -s und hinten bei --to noch -destination ran ?
Lies' doch einfach, was man dir schreibt dauzu:
Cae hat geschrieben:sehen falsch aus, da sie kein -j-Ziel haben. Vermutlich soll das

Code: Alles auswählen

-j DNAT --to-destination 192.0.2.42
o.ae. sein.
Folglich wuerde ich

Code: Alles auswählen

iptables -A FORWARD -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.22.0.21
anstatt der ersten im Kommentarblock vorschlagen.

Das Matchen auf Interfaces ist schon okay so, zumindest wuesste ich nicht, warum es uebersichtlicher sein sollte, nach Quell-IPs zu unterscheiden.

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

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 23.10.2014 13:54:30

danke dir, das dnat kann ich dann weglassen ist alles lokal, mit den ip und netzid daher, da nicht alle das gleichen dürfen auf den verschiedenen servern
ich habe auch nur die iptables nur von einen server gepostet die anderen beiden server sind noch nicht geschrieben :)

root@debian-router:/etc# iptables -A FORWARD -i eth0 -p tcp --dport 80 --to-destination 10.22.0.21 -j ACCEPT
iptables v1.4.14: unknown option "--to-destination"
Try `iptables -h' or 'iptables --help' for more information.


da scheint noch was mit den destination net zu stimmen da er dort immer noch wie vorher nur mit dem --tt fehler ausgíbt :(

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

Re: Frage zum Script für Iptables

Beitrag von Cae » 23.10.2014 14:21:09

... was willst du eigentlich erreichen? Entweder, du willst eine Maschine verstecken und so tun, als haette die Firewall-Maschine das Paket angenommen. Dann willst du -j DNAT und kannst --to-destination verwenden. Oder du willst irgendetwas anderes und kannst --to-destination nicht verwenden. Zum Beispiel -j REDIRECT, aber das veraendert nur Ports. Zu weiteren Ideen hilft die Manpage weiter.

Bei der Gelegenheit faellt mir auch auf, das DNAT hier nur in der -t nat-Tabelle sinnvoll waere.

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

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 23.10.2014 15:04:18

es gibt ein router, ein webserver und ein sqlserver. daher werden dann auf web nur http, https, ftp und ssh zugelassen werden wobei ssh nur von einen rechner nur erlaubt wird der rest von einen bestimmten netz , der sql ist nur durch ssh oder über mysql vom webserver aus erreichbar und der router soll die sachen durchreichen und selbst auch nur via ssh erreichbar sein sowie für dns anfragen die ich noch nicht eingebaut hatte.

hschroed
Beiträge: 30
Registriert: 14.03.2005 04:04:00

Re: Frage zum Script für Iptables

Beitrag von hschroed » 24.10.2014 14:15:23

ok irgendwie verstehe ich das immer noch nicht wirklich was du vor hast, kannst du mal ein Netzwerkplan machen?

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 24.10.2014 14:51:37

Bild

das ist im groben der Plan wie die Pakete weiter gehen soll alles andere soll verboten sein, das schreiben wenn ich halbwegs das mit der Syntax mal kapiert habe sollte dann hoffentlich kein Problem sein das was bisher gepostet wurde war für den Router gedacht die anderen beiden wollte ich angehen wenn der soweit hin haut.

mfg

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

Re: Frage zum Script für Iptables

Beitrag von Cae » 24.10.2014 18:04:21

Weil mir das jetzt zu doof wird, tu' ich hier einfach mal das rein, was ich als Referenzimplementation fuer deinen Fall ansehen wuerde (vermutlich mache ich damit deine Hausaufgaben, aber naja). Inklusive der offensichtlich unsinnigen http->db-Verbindungen.

Fix' diese Punkte, probier's aus und verstehe, was da was tut. Und berichte mir, wenn da etwas nicht das tut, was ich geplant hatte. FTP wird vermutlich kaputt sein, weil es zusaetzliche Verbindungen aufmacht, die man nur per deep packet inspection erkennen kann (-m helper, etc.). Das ist ein Grund, warum man das nicht verwendet, sondern stattdessen SCP oder SFTP (beides durch SSH getunnelt, verschluesselt und aus Firewall-Sicht leicht greifbar).

Aus Router-Sicht ist momentan jeder auf der Seite des externen Interfaces ein normaler Benutzer. In der Regel will man das, evtl. mit Einschraenkungen bezueglich privater Netze (die extern nichts zu suchen haben) oder vor allem 127/8.

Fuer den Router gemaess Skizze:

Code: Alles auswählen

#!/bin/sh

ip_ext=10.1.13.128
ip_int=10.22.0.1
ip_www=10.22.0.21
ip_db=10.22.0.22
ip_admin=192.168.1.56

port_ssh_www=22021
port_ssh_db=22022

if_ext=eth0
if_int=eth1

iptables-restore <<EOF
*nat
:PREROUTING  ACCEPT [0:0]
:INPUT       ACCEPT [0:0]
:OUTPUT      ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# prerouting
# ssh dnat
-A PREROUTING -m state --state NEW -i $if_ext -p tcp --dport $port_ssh_www -j DNAT --to-destination $ip_www:22
-A PREROUTING -m state --state NEW -i $if_ext -p tcp --dport $port_ssh_db  -j DNAT --to-destination $ip_db:22
# other dnat
# FIXME: http etc. -> db?!
-A PREROUTING -m state --state NEW -i $if_ext -p tcp --dport  21 -j DNAT --to-destination $ip_db
-A PREROUTING -m state --state NEW -i $if_ext -p tcp --dport  80 -j DNAT --to-destination $ip_db
-A PREROUTING -m state --state NEW -i $if_ext -p tcp --dport 443 -j DNAT --to-destination $ip_db

# postrouting
-A POSTROUTING -o $if_ext -j MASQUERADE

COMMIT

*filter
:INPUT   DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT  DROP [0:0]

# input
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state NEW -i $if_ext -s $ip_admin -p tcp --dport 22 -j ACCEPT

# forward
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# ssh from DNAT
-A FORWARD -m state --state NEW -d $ip_www -p tcp --dport 22 -j ACCEPT
-A FORWARD -m state --state NEW -d $ip_db  -p tcp --dport 22 -j ACCEPT
# other from DNAT
# FIXME: http etc. -> db?!
-A FORWARD -m state --state NEW -d $ip_db -p tcp --dport  21 -j ACCEPT
-A FORWARD -m state --state NEW -d $ip_db -p tcp --dport  80 -j ACCEPT
-A FORWARD -m state --state NEW -d $ip_db -p tcp --dport 443 -j ACCEPT

# output
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT
EOF
Fuer die DB gemaess Skizze:

Code: Alles auswählen

#!/bin/sh

ip_int=10.22.0.1
ip_www=10.22.0.21
ip_db=10.22.0.22
ip_users=192.168.1/24
ip_admin=192.168.1.56

iptables-restore <<EOF
*filter
:INPUT   DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT  DROP [0:0]

# input
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state NEW -s $ip_admin -p tcp --dport  22 -j ACCEPT
-A INPUT -m state --state NEW -s $ip_users -p tcp --dport  21 -j ACCEPT
-A INPUT -m state --state NEW -s $ip_users -p tcp --dport  80 -j ACCEPT
-A INPUT -m state --state NEW -s $ip_users -p tcp --dport 443 -j ACCEPT

# output
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT
EOF
Fuer den Webserver gemaess Skizze:

Code: Alles auswählen

#!/bin/sh

ip_int=10.22.0.1
ip_www=10.22.0.21
ip_db=10.22.0.22
ip_users=192.168.1/24
ip_admin=192.168.1.56

iptables-restore <<EOF
*filter
:INPUT   DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT  DROP [0:0]

# input
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state NEW -s $ip_admin -p tcp --dport 22 -j ACCEPT

# output
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state NEW -d $ip_db -p tcp --dport 3306 -j ACCEPT

COMMIT
EOF
Viel Spass damit.

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

Yuenlo
Beiträge: 19
Registriert: 16.10.2014 11:43:11

Re: Frage zum Script für Iptables

Beitrag von Yuenlo » 25.10.2014 18:31:05

danke schon mal aber ich schau mir aufjedenfall erstmal an denn ich möcht es ja kapieren und net nur abkupfern, das hilft mir ja nicht für weitere aufgaben weiter wenn ich nur kopiere.

hilft mir auf jedenfall mehr wenn ich die zeilen kapiere als nur zu kopieren

mfg

Antworten