PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : FTP in eigener Firewall



Klaus Ribbe
17.10.02, 23:14
Hallo Leute.
Hab mir mit nem Bekannten (auch großer Linuxfan :D) ne eigene Firewall zusammengebastelt.
Jetzt stoßen wir aber doch an ein hartnäckiges Problem.
Ich hab hier nen Linuxrouter auf dem die selbstgebastelte FW läuft und dahinter einen Linuxclient.

erstmal die Regeln fürs ftp.
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport ftp -j ACCEPT

und nü die Meldung aus dem Protokoll
mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5554 DF PROTO=TCP SPT=20 DPT=1228 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:06 router pppd[649]: sent [LCP EchoReq id=0x68 magic=0xcf85326]
Oct 17 22:56:06 router pppd[649]: rcvd [LCP EchoRep id=0x68 magic=0xa516fa5] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 88 88 88
Oct 17 22:56:20 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=217.127.104.88 DST=80.130.153.58 LEN=34 TOS=0x00 PREC=0x00 TTL=112 ID=35842 PROTO=UDP SPT=61298 DPT=4665 LEN=14
Oct 17 22:56:24 router kernel: mangle OUTPUT-CHAIN: IN= OUT=ppp0 SRC=80.130.153.58 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=54 PROTO=TCP SPT=1232 DPT=34209 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 17 22:56:33 router last message repeated 2 times
Oct 17 22:56:36 router pppd[649]: sent [LCP EchoReq id=0x69 magic=0xcf85326]
Oct 17 22:56:36 router pppd[649]: rcvd [LCP EchoRep id=0x69 magic=0xa516fa5] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 88 88 88
Oct 17 22:56:38 router squid[702]: ftpTimeout: timeout in SENT_PASV state
Oct 17 22:56:38 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5831 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:39 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5833 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:41 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5834 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:44 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5835 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:48 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=40 TOS=0x00 PREC=0x00
TTL=56 ID=5836 DF PROTO=TCP SPT=20 DPT=1228 WINDOW=32850 RES=0x00 RST URGP=0
Oct 17 22:56:48 router kernel: mangle OUTPUT-CHAIN: IN= OUT=eth0 SRC=192.168.168.75 DST=192.168.168.100 LEN=1135 TOS=0x00 PREC=0x00 TTL=64 ID=51656 PROTO=TCP SPT=3128 DPT=32973 WINDOW=6853 RES=0x00 ACK PSH URGP=0
Oct 17 22:56:48 router kernel: mangle OUTPUT-CHAIN: IN= OUT=eth0 SRC=192.168.168.75 DST=192.168.168.100 LEN=1135 TOS=0x00 PREC=0x00 TTL=64 ID=51656 PROTO=TCP SPT=3128 DPT=32973 WINDOW=6853 RES=0x00 ACK PSH FIN URGP=0

Das witzige ist, nach dem selben Prinzip hab ich mir meinen pop und smtp Zugang erstellt, und der funzt.
Aber vielleicht läuft das ftp ja nach etwas anderen regeln :rolleyes:

besten Dank schon mal vorab.

derRichard
17.10.02, 23:17
Original geschrieben von Klaus Ribbe
Hallo Leute.
Hab mir mit nem Bekannten (auch großer Linuxfan :D) ne eigene Firewall zusammengebastelt.
Jetzt stoßen wir aber doch an ein hartnäckiges Problem.
Ich hab hier nen Linuxrouter auf dem die selbstgebastelte FW läuft und dahinter einen Linuxclient.

erstmal die Regeln fürs ftp.
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport ftp -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport ftp -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport ftp -j ACCEPT

und nü die Meldung aus dem Protokoll
mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5554 DF PROTO=TCP SPT=20 DPT=1228 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:06 router pppd[649]: sent [LCP EchoReq id=0x68 magic=0xcf85326]
Oct 17 22:56:06 router pppd[649]: rcvd [LCP EchoRep id=0x68 magic=0xa516fa5] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 88 88 88
Oct 17 22:56:20 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=217.127.104.88 DST=80.130.153.58 LEN=34 TOS=0x00 PREC=0x00 TTL=112 ID=35842 PROTO=UDP SPT=61298 DPT=4665 LEN=14
Oct 17 22:56:24 router kernel: mangle OUTPUT-CHAIN: IN= OUT=ppp0 SRC=80.130.153.58 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=54 PROTO=TCP SPT=1232 DPT=34209 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 17 22:56:33 router last message repeated 2 times
Oct 17 22:56:36 router pppd[649]: sent [LCP EchoReq id=0x69 magic=0xcf85326]
Oct 17 22:56:36 router pppd[649]: rcvd [LCP EchoRep id=0x69 magic=0xa516fa5] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 88 88 88
Oct 17 22:56:38 router squid[702]: ftpTimeout: timeout in SENT_PASV state
Oct 17 22:56:38 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5831 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:39 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5833 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:41 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5834 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:44 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=64 TOS=0x00 PREC=0x00
TTL=56 ID=5835 DF PROTO=TCP SPT=20 DPT=1234 WINDOW=32850 RES=0x00 SYN URGP=0
Oct 17 22:56:48 router kernel: mangle PREROUTING-CHAIN: IN=ppp0 OUT= MAC= SRC=195.37.77.171 DST=80.130.153.58 LEN=40 TOS=0x00 PREC=0x00
TTL=56 ID=5836 DF PROTO=TCP SPT=20 DPT=1228 WINDOW=32850 RES=0x00 RST URGP=0
Oct 17 22:56:48 router kernel: mangle OUTPUT-CHAIN: IN= OUT=eth0 SRC=192.168.168.75 DST=192.168.168.100 LEN=1135 TOS=0x00 PREC=0x00 TTL=64 ID=51656 PROTO=TCP SPT=3128 DPT=32973 WINDOW=6853 RES=0x00 ACK PSH URGP=0
Oct 17 22:56:48 router kernel: mangle OUTPUT-CHAIN: IN= OUT=eth0 SRC=192.168.168.75 DST=192.168.168.100 LEN=1135 TOS=0x00 PREC=0x00 TTL=64 ID=51656 PROTO=TCP SPT=3128 DPT=32973 WINDOW=6853 RES=0x00 ACK PSH FIN URGP=0

Das witzige ist, nach dem selben Prinzip hab ich mir meinen pop und smtp Zugang erstellt, und der funzt.
Aber vielleicht läuft das ftp ja nach etwas anderen regeln :rolleyes:

besten Dank schon mal vorab.
hallo!

ftp läuft nicht nur über port 21 sondern auch über port 20(ftp-data) und wenn ich mich nicht irre über noch einen anderen.
such mal hier im board das hatten wir schon mal.

mfg
richard

Klaus Ribbe
17.10.02, 23:31
hab aber doch als --dport ftp angegeben. Nimmt der dann nich alle dafür in Frage kommenden Ports ?

HangLoose
18.10.02, 00:29
hi

das ganze ist jetzt unter vorbehalt, hab da auch noch nicht so den plan von ;)




iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT

mangle brauchst du für ftp imho nicht.



iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ftp -j ACCEPT

beim PREROUTING ist das eingangsinterface nicht deine lan-karte sondern ppp0. außerdem fehlt bei deiner dnat-regel der source-port und der *zielrechner* an den die pakete weitergeleitet werden sollen. mit der PREROUTING-Regel wird aber nur festgelegt, wohin die eingehenden pakete weitergereicht werden sollen. es wird praktisch die zieladresse umgeschrieben. das ganze ist aber noch keine filterregel, die die pakete auch durch läßt. das geschieht in der forward chain.


#Eingehende FTP-Verbindung, DNAT
iptables -t nat -A PREROUTING -i ppp0 -p tcp --sport 1024:65565 --dport ftp -j DNAT --to 192.168.20.50


#Eingehende FTP-Verbindung, Paketfilterregel
iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.20.50 -m state --state NEW,ESTABLISHED,RELATED -p tcp --sport 1024:65535 --dport ftp -j ACCEPT

damit steht der verbindungsaufbau internet => ftp-server. aber nur der kommunikationskanal. für die daten übertragung wird noch eine extra filterregel benutzt


#Eingehende Ftp-Verbindung, passiver Datentransfer
iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.20.50 -m state --state NEW,ESTABLISHED,RELATED \ -p tcp --sport 1024:65565 --dport 1024:65565 -j ACCEPT

damit die daten auch wieder nach draussen gelangen, braucht man noch eine letzte regel


#rückkanal: serverdienste
iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.20.50 -m state --state ESTABLISHED,RELATED -j ACCEPT


ich hoffe das funzt so ;). bei fehlern bitte korrigieren

Gruß HangLoose

Thomas Mitzkat
18.10.02, 00:30
die übersetzung name->port läuft über /etc/services. dort kann man nachlesen, dass jeder name zu einem port gehört. da ftp etwas spezielles ist und jede firewall vor probleme stellt, würde ich mir erstmal grundlegende informationen über ftp besorgen.

IPTABLES=/sbin/iptables
j=ppp0
LOCAL=192.168.100.0/24

${IPTABLES} -A OUTPUT -j ACCEPT -o ${j} -p tcp --sport 1024: --dport ftp -m state --state NEW,ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -j ACCEPT -o ${j} -p tcp --sport 1024: -s $LOCAL --dport ftp -m state --state NEW,ESTABLISHED,RELATED
${IPTABLES} -A INPUT -j ACCEPT -i ${j} -p tcp --dport 1024: --sport ftp -m state --state ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -j ACCEPT -i ${j} -p tcp --dport 1024: -d $LOCAL --sport ftp -m state --state ESTABLISHED,RELATED
${IPTABLES} -A OUTPUT -j ACCEPT -o ${j} -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -s $LOCAL -j ACCEPT -o ${j} -p tcp --sport 1024: --dport 1024: -m state --state NEW,ESTABLISHED,RELATED
${IPTABLES} -A INPUT -j ACCEPT -i ${j} -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED
${IPTABLES} -A FORWARD -j ACCEPT -i ${j} -p tcp --sport 1024: -d $LOCAL --dport 1024: -m state --state ESTABLISHED,RELATED

Passives FTP macht keinen Gebrauch von Port 20, sondern macht die Verbindung zwischen zwei beliebigen Ports oberhalb von 1023. Ohne Stateful Filtering wäre das eine sicherheitstechnische Katastrophe, da man alle Ports freigeben müßte. Mit den hier angegebenen Regeln sollte es aber sicherer sein als aktives FTP. Wir lassen hier explizit keine neuen Verbindungen zu, sondern nur solche, die mit einer existierenden Verbindung in Zusammenhang stehen. Die existierende Verbindung ist hier natürlich die ursprüngliche Verbindung zum FTP-Server auf Port 21.

Klaus Ribbe
20.10.02, 11:00
Besten Dank für eure Mühe
aber leider läuft das FTP immer noch net.
Wenn ich von Thomas das Script einbaue bekomme ich folgende Meldung.
Oct 20 10:55:52 router kernel: mangle OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.83.43.233 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=16610 PROTO=TCP SPT=3882 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 20 10:55:55 router kernel: mangle OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.83.43.233 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=16610 PROTO=TCP SPT=3882 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0

Ich werd mir wohl doch noch in meinem nächsten Urlaub etwas mehr Lektüre über das FTP in einer FW reinziehen müssen.

HangLoose
20.10.02, 12:58
moin moin

hast du meinen part auch mal probiert? poste doch noch mal dein aktuelles script.


Gruß HangLoose

Harry
20.10.02, 19:53
Hallo,

wenn's um FTP geht und dann noch um iptables auf dem Router, dann geht's hier immer heiß her :D
Die einzige Chain, die Du auf einem Router betrachten mußt, ist die FORWARD-Chain der filter-Table. Machst Du zusätzlich noch Masquerading auf dem Router, dann benötigst Du noch eine Regel in der POSTROUTING-Chains ... mehr nicht. Ach ja: Und Du benötigst halt das Connection-Tracking Modul für FTP.


modprobe ip_conntrack
modprobe ip_conntrack_ftp

# Sicherheitshalber auch noch das Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# FTP-Kommando-Connect zulassen
iptables -A FORWARD -o ppp0 -p tcp --dport 21 -m state --state NEW -j ACCEPT

# Alles weiter können wir gelassen dem Connection-Tracking überlassen
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vielleicht brauchen wir auch noch Masquerading
iptables -A POSTROUTING -o ppp0 -j MASQUERADE

Wer da mehr konfiguriert, ist selber schuld :D

Harry

HangLoose
20.10.02, 20:11
Original geschrieben von Harry
Hallo,

wenn's um FTP geht und dann noch um iptables auf dem Router, dann geht's hier immer heiß her :D


:D,

ich hab mir grade nochmal das eingangsposting durchgelesen. tja wa soll ich sagen, ich bin mal wieder meilenweit am ziel vorbei geschossen. klaus ging es ja gar nicht um einen ftp-server. :D:D:D


Gruß HangLoose

Harry
20.10.02, 20:15
Jo - ich hab' gesehen, wie Du vorbeigerauscht bist :D

Harry

Klaus Ribbe
21.10.02, 17:57
Hallo Leute
besten Dank erstmal für eure Mühe. Ich hab von Harry die Regeln eingesetzt.
Aber trotzdem spuckt er mir noch ne Fehlermeldung raus.
Hier kommt jetzt erstmal das komplette FW Script.
Is vielleicht etwas umständlich aufgebaut, aber man fängt ja erst mit der Materie an. :D

# Alle Regeln löschen
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Alle eigenen Chains löschen
iptables -X

# default policy
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t nat -P PREROUTING DROP
iptables -t nat -P OUTPUT DROP
iptables -t nat -P POSTROUTING DROP
iptables -t mangle -P PREROUTING DROP
iptables -t mangle -P OUTPUT DROP

# Loopback-Interface aktivieren
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -t mangle -A OUTPUT -o lo -j ACCEPT
iptables -t mangle -A PREROUTING -i lo -j ACCEPT
iptables -t nat -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -o lo -j ACCEPT

# Masquerading aktivieren
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE

# Stateful Inspection!
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t mangle -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t mangle -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP vom Router erlauben
iptables -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p icmp -m state --state NEW -j ACCEPT
# DNS vom Router erlauben
iptables -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT

# DNS zum Router erlauben
iptables -t mangle -A PREROUTING -i eth0 -p udp --dport domain -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p udp --dport domain -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport domain -j ACCEPT

# SSH zum Router erlauben
iptables -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport ssh -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -p udp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p udp --dport ssh -j ACCEPT

# Proxy zum Router erlauben
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT

# Proxy vom Router erlauben
iptables -t mangle -A PREROUTING -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport 80 -j ACCEPT

# POP3 erlauben
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport pop3 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport pop3 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport pop3 -j ACCEPT

# SMTP erlauben
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport smtp -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport smtp -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport smtp -j ACCEPT

# ftp erlauben
modprobe ip_conntrack
modprobe ip_conntrack_ftp

iptables -A FORWARD -o ppp0 -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# Logging aller restlichen Pakete aktivieren
iptables -A INPUT -j LOG --log-prefix "INPUT-CHAIN: "
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT-CHAIN: "
iptables -A FORWARD -j LOG --log-prefix "FORWARD-CHAIN: "
iptables -t nat -A PREROUTING -j LOG --log-prefix "nat PREROUTING-CHAIN: "
iptables -t nat -A OUTPUT -j LOG --log-prefix "nat OUTPUT-CHAIN: "
iptables -t nat -A POSTROUTING -j LOG --log-prefix "nat POSTROUTING-CHAIN: "
iptables -t mangle -A PREROUTING -j LOG --log-prefix "mangle PREROUTING-CHAIN: "
iptables -t mangle -A OUTPUT -j LOG --log-prefix "mangle OUTPUT-CHAIN: "

Und jetzt die Fehlermeldung dazu wenn ich ftp z. B. über den Browser aufrufe.
Oct 21 17:52:10 router kernel: mangle OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.83.36.92 DST=195.37.77.138 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=44932 PROTO=TCP SPT=1362 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0

Wie gesagt ich will nur das ftp laufenlassen, keinen Server aufbauen. Das kommt erst etwas später wenn man die ganze Geschichte hier besser versteht.

Grüße Klaus

Harry
21.10.02, 18:46
Jo, da hat sich doch wieder mal der kleine Fehlerteufel in dem Skript eingeschlichen. Hier also die korrigierte Version (in der letzten Zeile fehlte nur das "-t nat"):

modprobe ip_conntrack
modprobe ip_conntrack_ftp

# Sicherheitshalber auch noch das Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# FTP-Kommando-Connect zulassen
iptables -A FORWARD -o ppp0 -p tcp --dport 21 -m state --state NEW -j ACCEPT

# Alles weitere können wir gelassen dem Connection-Tracking überlassen
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Vielleicht brauchen wir auch noch Masquerading
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


Harry

Harry
21.10.02, 18:55
Hallo Klaus,

also ganz ehrlich: Dein Skript ist schon ziemlich eigenwillig, um nicht zu sagen es ist ziemlich krank :D
Du benutzt die nat- und die mangle-Table neben der filter-Table als Paketfilter - das geht zwar macht aber irgendwie a) keinen Sinn und b) das Skript alles andere als übersichtlich.

Mein Vorschlag:
1. Wirf alles raus, was Du in der mangle-Table veranstaltest, denn die eigentlichen Funktionalitäten der mangle-Table nutzt Du in keiner einzigen Regel. Stelle auch die Default-Policies dieser Table wieder auf ACCEPT.
2. Benutze die nat-Table ausschließlich für NAT und nicht zusätzlich als Filter. Dazu gibt es die Filter-Table und in der beschreibst Du bereits recht genau, was durch den Filter geblockt werden soll. Hier ebenfalls die Default-Policies wieder auf ACCEPT.

3. Starte Dein Skript neu und Du wirst sehen, dass dann auch FTP funkioniert :D

Harry

Klaus Ribbe
22.10.02, 20:18
Hi ho
bitte nich hauen:ugly: versuch doch nur selber was auf die Beine zu stellen und
das ist meistens am Anfang net so ausgewogen :D

Aber ichhab mein Script jetzt etwas entrümpelt und die mangle Table komplett gekippt.
Ebenso hab ich die Default Policy für nat auf accept gestellt.
Aber jetzt spuckt mir die OUTPUT-CHAIN und die nat OUTPUT-CHAIN in die Suppe
Hmm muß auch sagen jetzt stoß ich an meine Grenzen und komme nicht mehr so recht mit. :rolleyes:

Harry
22.10.02, 20:43
Original geschrieben von Klaus Ribbe
Aber jetzt spuckt mir die OUTPUT-CHAIN und die nat OUTPUT-CHAIN in die Suppe
Also bei der Problembeschreibung kann ich jetzt einfach nicht widerstehen: Du mußt halt die richtigen Gewürze für Deine Suppe hinzunehmen :D

Ernsthaft: Welches Problem besteht? Welche Meldungen? Wie schauen die Regeln jetzt aus?

Harry

Klaus Ribbe
22.10.02, 23:49
So dann servier ich erstmal die Fehlermeldung:

Oct 22 23:34:32 router kernel: nat OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.229.114.143 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=4 PROTO=TCP SPT=1570 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 22 23:34:32 router kernel: OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.229.114.143 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=4 PROTO=TCP SPT=1570 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 22 23:34:35 router kernel: nat OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.229.114.143 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=4 PROTO=TCP SPT=1570 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0
Oct 22 23:34:35 router kernel: OUTPUT-CHAIN: IN= OUT=ppp0 SRC=217.229.114.143 DST=195.37.77.171 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=4 PROTO=TCP SPT=1570 DPT=21 WINDOW=5800 RES=0x00 SYN URGP=0

und garniere es mit dem momentanen Script:

# Alle Regeln löschen
iptables -F
iptables -t nat -F

# Alle eigenen Chains löschen
iptables -X

# default policy
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Loopback-Interface aktivieren
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A PREROUTING -i lo -j ACCEPT

# Masquerading aktivieren
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE

# Stateful Inspection!
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP vom Router erlauben
iptables -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p icmp -m state --state NEW -j ACCEPT

# DNS vom Router erlauben
iptables -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT

# DNS zum Router erlauben

iptables -t nat -A PREROUTING -i eth0 -p udp --dport domain -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport domain -j ACCEPT

# SSH zum Router erlauben
iptables -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p udp --dport ssh -j ACCEPT

# Proxy zum Router erlauben

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT

# Proxy vom Router erlauben

iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport 80 -j ACCEPT

# POP3 erlauben

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport pop3 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport pop3 -j ACCEPT

# SMTP erlauben

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport smtp -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport smtp -j ACCEPT

# ftp erlauben

iptables -A FORWARD -o ppp0 -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


# Logging aller restlichen Pakete aktivieren
iptables -A INPUT -j LOG --log-prefix "INPUT-CHAIN: "
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT-CHAIN: "
iptables -A FORWARD -j LOG --log-prefix "FORWARD-CHAIN: "
iptables -t nat -A PREROUTING -j LOG --log-prefix "nat PREROUTING-CHAIN: "
iptables -t nat -A OUTPUT -j LOG --log-prefix "nat OUTPUT-CHAIN: "
iptables -t nat -A POSTROUTING -j LOG --log-prefix "nat POSTROUTING-CHAIN: "

Wie gesagt irgendwo is wohl zuviel Gewürz drin, aber das so jetzt auf die schnelle zu finden, übersteigt leider meine
Kochkünste. Alles andere ausser ftp scheint aber wohl geraten, da es funktioniert. :)

Ach ja der Kochtopf in dem das alles schmort, ist SUSE 7.3

Guten Appetit. ;)

Harry
22.10.02, 23:54
Sagtest Du nicht in Deinem ersten Posting, dass es sich bei der Firewall um einen Router handelt?
Die Meldungen sagen nun aber aus, dass Du den Router zusätzlich auch als FTP-Client benutzt und das war bisher in den Regeln nicht vorgesehen; daher funktioniert es auch nicht.

Wenn Du also zusätzlich direkt vom Router FTP nutzen willst, dann benötigst Du noch diese Regel:


iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT

Nunja - und wie bereits weiter oben erwähnt, benötigst Du auch die Module für FTP:


modprobe ip_conntrack_ftp
modprobe ip_nat_ftp


btw: Schmeiß' doch bitte alle Regeln in den NAT-Chains raus, die nicht für das Masquerading vorgesehen sind. Somit sollte in der nat-Table nur eine einzige Regel über bleiben.

Harry

Klaus Ribbe
22.10.02, 23:58
Der Router soll als Firewall fungieren, das ist korrekt. Aber dahinter sitzt ein Linuxclient und mit dem will ich das ftp ausführen.

Harry
23.10.02, 15:56
Hallo Klaus,

gib' doch bitte nochmal Bescheid, ob es Deine Firewall nach dem ausführlichen Entrümpeln der Regeln und dem Laden der benötigten Module jetzt tut.

Harry

Klaus Ribbe
23.10.02, 23:06
Hallo Harry
vielen Dank für deine Mühe. :)
Die Verbesserungen die du mir für mein Script vorgeschlagen hast, haben ihre Wirkung nicht verfehlt. :D
Außerdem hab ich die Regeln für das ftp etwas höher angesetzt, wegen erste Regel greift.
Ich kann über den Client jetzt das ftp aufrufen.
Nur muß ich dazu sagen, das mir dafür noch etwas das Verständnis fehlt und ich da noch nich ganz durchblicke,
aber ich denke das legt sich mit der Zeit. Jetzt hat man erstmal ein funktionierendes Script, mit dem man etwas experimentieren kann :ugly:
So sehen meine momentanen Regeln aus:
# Alle Regeln löschen
iptables -F
iptables -t nat -F

# Alle eigenen Chains löschen
iptables -X

# default policy
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Loopback-Interface aktivieren
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A OUTPUT -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A PREROUTING -i lo -j ACCEPT

# Masquerading aktivieren
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE


# Stateful Inspection!
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

# ftp erlauben
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_conntrack
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -o ppp0 -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP vom Router erlauben
iptables -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p icmp -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p icmp -m state --state NEW -j ACCEPT

# DNS vom Router erlauben
iptables -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A OUTPUT -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p udp --dport domain -m state --state NEW -j ACCEPT

# DNS zum Router erlauben
iptables -t nat -A PREROUTING -i eth0 -p udp --dport domain -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport domain -j ACCEPT

# SSH zum Router erlauben
iptables -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p udp --dport ssh -j ACCEPT

# Proxy zum Router erlauben
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT

# Proxy vom Router erlauben
iptables -t nat -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -p tcp --dport 80 -j ACCEPT

# POP3 erlauben
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport pop3 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport pop3 -j ACCEPT

# SMTP erlauben
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport smtp -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport smtp -j ACCEPT

# Logging aller restlichen Pakete aktivieren
iptables -A INPUT -j LOG --log-prefix "INPUT-CHAIN: "
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT-CHAIN: "
iptables -A FORWARD -j LOG --log-prefix "FORWARD-CHAIN: "
iptables -t nat -A PREROUTING -j LOG --log-prefix "nat PREROUTING-CHAIN: "
iptables -t nat -A OUTPUT -j LOG --log-prefix "nat OUTPUT-CHAIN: "
iptables -t nat -A POSTROUTING -j LOG --log-prefix "nat POSTROUTING-CHAIN: "

Vielleicht finden ja auch noch andere hier eine Anregung für ihre eigene Firewall.

Also besten Dank nochmal Harry :cool: