PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Firewall-Script... Bitte lesen...



Seiten : [1] 2

MatzeG2002
29.01.03, 22:31
Hallo liebes Forum,

trotz Suchfunktion und google und Linux 2.4 Packet Filtering HowTo habe ich eine Frage,
möglicherweise kapiere ich es immer noch nicht.

Ich will:
Einzelne Ports freigeben, diese dürfen über eth0 etwas senden und empfangen.
Ich habe ein Firewall-Script erstellt, bzw. erstellen lassen und es ein wenig modifiziert.
Trozdem bekomme ich es nicht hin einzelne Ports zu sperren und freizugeben.

Ich bin offen für alles und häng mich voll rein wenn ihr mir ein paar Tips gebt.
Aber bitte keine Sprüche wie: Suchfunktion, Ließ das oder Ließ jenes.
Ich weiß mit lesen kommt man weiter, aber ich glaube ich brauch die Erfahrung von euch.

Vielen Dank

mfg Matthias

HangLoose
29.01.03, 22:34
hi

es wäre ganz sinnvoll, wenn du das script mal posten würdest. die meisten scripte sind eigentlich so aufgebaut, das nur *rein oder raus* darf, was explizit erlaubt wurde. damit stellt sich die frage von ports sperren eigentlich nicht.


Gruß HL

MatzeG2002
29.01.03, 22:38
Danke HL,

<----- SCRIPT
#!/bin/bash

case "$1" in
start)
echo "Starte IP-Paketfilter"

# iptables-Modul
modprobe ip_tables

# Connection-Tracking-Module
modprobe ip_conntrack

# Das Modul ip_conntrack_irc ist erst bei Kerneln >= 2.4.19 verfuegbar
modprobe ip_conntrack_irc
modprobe ip_conntrack_ftp

# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Default-Policies setzen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


# Connection-Tracking aktivieren
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Packete blocken
iptables -A INPUT -i eth0 -p icmp -j DROP
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

// Wenn diese Zeile drinnen ist, funktioniert es ? Ist das für den Verbindungsaufbau ?
iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT

#HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT

#DNS
iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

#FTP
iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT

#DHCP
iptables -A INPUT -i eth0 -p tcp --dport 68 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 68 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 68 -j ACCEPT
iptables -A OUTPUT -p udp --dport 68 -j ACCEPT

#ICQ/AIM
iptables -A INPUT -i eth0 -p tcp --dport 5190 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 5190 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 5190 -j ACCEPT
iptables -A OUTPUT -p udp --dport 5190 -j ACCEPT

#MAIL
iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Loopback-Netzwerk-Kommunikation zulassen
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


# Default-Policies mit REJECT
iptables -A INPUT -j REJECT
iptables -A OUTPUT -j REJECT

;;

stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;

status)
echo "Tabelle filter"
iptables -L -vn
echo "Tabelle nat"
iptables -t nat -L -vn
echo "Tabelle mangle"
iptables -t mangle -L -vn
;;

*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;

esac

SCRIPT------>

Thomas
29.01.03, 22:42
Als Default ist also alles gesperrt.
Mit


iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

kannst du z.B. ausgehende Verbindungen zum Port 80 (Webserver) erlauben.

Soll dein Rechner von aussen via SSH erreichbar sein?


iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

Die lässt Verbindungen zum Port 22 über das Interface eth0 zu.



Im übrigen finde ich es recht frech, Dinge wie


Aber bitte keine Sprüche wie: Suchfunktion, Ließ das oder Ließ jenes.

zu schreiben, da für die Infos, welche du benötigst, die Suchfunktion soviele Treffer geliefert hätte, dass du die ganze Nacht mit lesen beschäftigt gewesen wärst.

MatzeG2002
29.01.03, 22:45
@TTHomas
Ok tut mir leid, diese Zeile war unnötig.
Aber ich habe doch
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
im Script drinnen, aber es funkt nicht.

Entschuldigung. :(

Gruß Matze

MatzeG2002
29.01.03, 22:49
hmm,

ich denke die Frage die ich mir stelle bzw, euch versuche zu erklären ist die,

"Was muss ich außer Port 80 noch erlauben um ne Verbindung und die dementsprechenden Daten zu erhalten?"
Da war noch was mit einem --syn und ACK.

Gruß Matze

HangLoose
29.01.03, 22:49
hi

also, das script ist so aufgebaut, das von innen alles erlaubt ist und pakete die zu einer von innen gestarteten verb. gehören, werden wieder reingelassen.

ausserdem hast du in der Input und Output Chain die ports für http, dns, ftp, icq, dhcp und mail geöffnet. das macht aber nur sinn, wenn du diese dienste auf dem firewallrechner auch *anbietest*. ich glaube kaum, das du einen eigenen DNS server laufen hast, also schließen (auskommentieren).

die dns anfragen die du für's surfen etc brauchst, werden schon durch das connection tracking modul erlaubt.


Gruß HL

Thomas
29.01.03, 22:52
Hm, warum sind die Connection-Tracking betreffenden Zeilen auskommentiert? Wenn diese Zeilen nicht auskommentiert wären, dann würde eine Menge der Folgenden Regeln wegfallen.
Muss jetzt leider weg...

MatzeG2002
29.01.03, 22:52
@HL
Für was ist das Connection Tracking Modul zuständig ?
Regelt das den Verbindungsaufbau ? (SYN , ACK )
Und ist dann der Rest der Regeln verantwortlich was nun zu meinem Port 80 darf ?

Danke.

HangLoose
29.01.03, 22:55
up's hab ich übersehen, du hast connection tracking auskommentiert

# Connection-Tracking aktivieren
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


nimm die # davor weg und dann kalppt es auch mit dem nachbarn. ;)

MatzeG2002
29.01.03, 23:00
@all

Mal ne dumme Frage, wie sperre ich jeglichen Verkehr nach innen und nach aussen ?
So oder.

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Ich will ja folgende ausgangssituation, das ich mit

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
sagen kann, das der Verkehr auf Port 80 erlaubt ist.

Gruß Matze

HangLoose
29.01.03, 23:03
wie schon gesagt, wenn du die # vor dem connection tracking abschnitt wegnimmst, dann kannst du von innen heraus alles starten was du willst und die antworten dürfen auch wieder rein.

wenn du einem apachen auf dem firewall rechner laufen hast, der von aussen erreichbar sein soll, brauchst du diese zeilen ansonsten nicht.


iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT


ps: sei ehrlich das ist ein *verstümmeltes* harry script ;)


Gruß HL

HangLoose
29.01.03, 23:04
definier mal "Verkehr auf Port 80 erlaubt ist"

MatzeG2002
29.01.03, 23:09
@HL

ps: sei ehrlich das ist ein *verstümmeltes* harry script
ok, erwischt. Hast recht.

Hab wahrscheinlich zu viel gefummelt, ;) am Script mein ich. :D

Damit meine ich, ich will sagen wer/was heraus darf und wer/was nicht.
Nehmen wir mal an Connection Tracking erlaubt jeden Verbindungsaufbau von innen nach außen und
läßt auch wieder Antworten der Verbindung herein. Was ist wenn ein böses Programm sachen verschickt von innen.
Dann können auch irgendwelche anderen Dinge passieren. Deswegen will ich sagen können
ich will nur Port 80,21,25,110,5190 wo ich weiß das auf meiner Seite ein Programm läuft das diese Ports benutzt.

Danke

HangLoose
29.01.03, 23:17
hi

ich kenn doch harrys scripte :D

was du vorhast, ist nicht mal eben so erklärt, zumal mir iptables auch noch nicht so locker flockig von der hand geht. ;)

hast du eigentlich nur den einen rechner oder stehen in einem lan noch andere kisten rum.


ps: ich bastel im moment selbst an so einem script, bin aber die letzten tage nicht dazu gekommen weiter zu machen. wenn ich fertig bin, kann ich dir das gerne schicken.


Gruß HL

MatzeG2002
29.01.03, 23:23
@HL

Ich habe 2 Rechner. Ein Router und meine WorkStation.
Der Router leitet ja alles weiter , soweit ich das mitbekommen habe.
Also baue ich mir auf meiner Workstation ein eigenes Firewall-Script.

hmm, das muss gehen. Aber ich glaube dafür bzw für unseren Zweck ist das Connection Tracking nicht gut.
Weil dieses ja Verbindungen von Innen nach Aussen zuläßt und die Antworten von Außen auch wieder rein läßt.
Und das ist nicht gut, da wie gesagt, ein böses Programm ziemlichen unfug machen könnte.

Gruß Matze

HangLoose
29.01.03, 23:30
hi

da hattest du uns aber noch einiges an info's vorenthalten ;)

du kannst das connection tracking aber trotzdem nehmen. in deinem fall aber nur für die INPUT CHAIN => ESTABLISHED, RELATED

in der OUTPUT CHAIN gibst du dann nur die ports frei, die benötigt werden.

dadurch das du in der input chain mit established, related arbeitest, brauchst du nicht für jeden port den du *freigibst* eine extra regel für die input chain schreiben, spart also einiges an tipp arbeit

Gruß HL

MatzeG2002
29.01.03, 23:36
Ich werd irre... *umfall*

Es klappt, ich kann entscheiden was raus geht. Das ist ja genial.


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#HTTP
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
geht

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#HTTP
iptables -A OUTPUT -p tcp --dport 80 -j DROP
geht nicht ;)

Super, ich hoffe das war das was ich wollte ;)

Danke HL.

Gruß Matze

PS: Vieleicht schreibe ich ein HowTo für Newbies ins Tutorial-Forum... :D

HangLoose
29.01.03, 23:41
genau so :)

du kannst das ganze auch am router machen in der forward chain

MatzeG2002
29.01.03, 23:43
hmm,

Das werd ich auch noch am Router einstellen.

Mail geht noch nicht ? Ist doch Port 110 und 25 oder ?

EDIT: Und gaim auch nicht ?

Gruß Matze ;) *freude*

HangLoose
29.01.03, 23:45
ich glaube

vergiß dns nicht

MatzeG2002
29.01.03, 23:53
#DNS
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
hat noch gefehlt.

Jetzt geht alles. Perfekt.

Gruß Matze

MatzeG2002
30.01.03, 12:24
hmm, :(

FTP geht noch nicht.


#FTP-Kontrollkanal
iptables -A OUTPUT -p tcp --sport 1024 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#FTP-Datenkanal
iptables -A OUTPUT -p tcp -o eth0 --sport 20 --dport 1024 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
warum geht es so nicht,

iptables -A OUTPUT -p TCP --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
FTP-Datenkanal
iptables -A OUTPUT -p TCP -o eth0 --sport 1024:65535 --dport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
aber so.

Was ist anderst in der unteren Regel ? Mehr Ports offen oder was ?

Gruß Matze

cane
30.01.03, 13:47
@HangLoose

Schreib mir bitte ne PM wenn dein Script fertig ist.
Würd mich auch mal interessieren...

Gruß
cane

MatzeG2002
30.01.03, 15:46
hm,

hat noch einer ne Idee wegen dem FTP ?

Gruß Matze :(

HangLoose
30.01.03, 16:16
hi


das liegt an der art der ftp verbindung

passives ftp

client sendet anfrage über die sogenannte control connection an den server => in der antwort vom server teil dieser dem client mit, welchen port der server für den datenkanal geöffnet hält.

daraufhin startet der client einen verbindungsaufbau zu dem mitgeteilten port für den datenkanal. diese ports sind high ports und nicht vorhersehbar, du musst also für diesen zweck die highports freigeben. deshalb funzt auch nur die 2. variante.

#connection control
iptables -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --sport 21-m state --state ESTABLISHED, RELATED -j ACCEPT

#datenkanal
iptables -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT

so müßte es imho funzen.

ausserdem solltest du noch modprobe ip_conntrack_ftp am anfang des scripts einfügen


Gruß HL

Windoofsklicker
30.01.03, 16:53
wenn man jetzt diesen threat zusammen faßt, kommt doch für jeden ein nettes fw-script bei 'raus :D

MatzeG2002
30.01.03, 17:11
@windoof...

Hab weiter oben schon geschrieben. Das ich so happy bin, möglicherweise mach ich ein schönes HauTo für
Newbies. :D

Gruß Matze

Elektronator
30.01.03, 21:00
Ich bin normalerweise nicht wählerisch mit OUTPUT, sondern filtere nur am Router in der INPUT und FORWARD-Chain. Dann kann ich die OUTPUT-Policy sogar guten Gewissens auf accept stellen. Am Router kann sich ja ausser mir keiner einloggen :)

cane
02.02.03, 12:38
@Elektronator


Am Router kann sich ja ausser mir keiner einloggen

Theoretisch nicht aber was ist wenn einer deiner Clients auf einmal einen Trojaner drauf hat.
Zwar unwarscheinlich aber nicht unmöglich...
Lieber ein paar mehr Zeilen Firewallscript als nachher den Ärger zu haben...

Gruß
cane