PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables und ftp



H-net
21.04.09, 17:09
hi...

auf meinem system läuft proftpd auf port 21.

nun habe ich mir einen eigenen ftp-server programmiert, der genauso wie proftpd passive verbindungen annehmen kann. dieser selbstprogrammierte läuft auf port 54.

beide ports habe ich mit einer iptables regel freigegeben (funktioniert auch)

nur wenn ich eine passive ftp-verbindung zu meinem selbstprogrammierten ftp-server aufbaue wird ja wie es im ftp-protokoll üblich ist, ein freier port (portgrößenordnung >35000) gewählt.Dann baut der client darüber eine verbindung zum server auf. nur das da iptables dazwischenfunkt, und das verhindert

wie mache ich das die verbindungen zu meinem selbstprogrammierten ftp-server nicht blockiert werden (bei proftpd geht das ja auch ohne extra iptables regel)?

gruß

derRichard
21.04.09, 17:24
hi!

beim laden vom modul nf_conntrack_ftp musst deinen non-standard port zusätzlich noch angeben.
per default lauscht das netfilter hilfsmodul für ftp nur auf port 21.

zb:


modprobe nf_nat_ftp
modprobe nf_conntrack_ftp ports=21,54


hth,
//richard

H-net
21.04.09, 17:54
erstmal danke für die schnelle antwort!

also das ist mein firewallscript:


# 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

# MY_REJECT-Chain
iptables -N MY_REJECT

# MY_REJECT fuellen
iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A MY_REJECT -p icmp -j DROP
iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable

# MY_DROP-Chain
iptables -N MY_DROP
iptables -A MY_DROP -j DROP

# Korrupte Pakete zurueckweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# Stealth Scans etc. DROPpen
# Keine Flags gesetzt
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP


# SYN und FIN gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP

# SYN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP

# FIN und RST gleichzeitig gesetzt
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP

# FIN ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP

# PSH ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP

# URG ohne ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP

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

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

# HTTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT


# FTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 21 -j ACCEPT

# SSH
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 22 -j ACCEPT


# Mein FTP-server
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 54 -j ACCEPT

iptables -A INPUT -j MY_REJECT
iptables -A OUTPUT -j MY_REJECT

# Max. 500/Sekunde (5/Jiffie) senden
echo 5 > /proc/sys/net/ipv4/icmp_ratelimit

# Speicherallozierung und -timing für IP-De/-Fragmentierung
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 30 > /proc/sys/net/ipv4/ipfrag_time

# TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# Maximal 3 Antworten auf ein TCP-SYN
echo 3 > /proc/sys/net/ipv4/tcp_retries1

# TCP-Pakete maximal 15x wiederholen
echo 15 > /proc/sys/net/ipv4/tcp_retries2
aus dem
modprobe ip_conntrack_ftp
habe ich jetzt
modprobe ip_conntrack_ftp ports=21,54
gemacht, aber es geht immernochnicht.

worann könnte das liegen? was muss ich machen?

gruß

derRichard
21.04.09, 20:06
hi!

ohne jetzt dein iptables script genau gelesen zu haben kommt es mir etwas komisch vor.
du vermischt da einige stateful und stateless regeln.

ich würde mal mit tcpdump genau nachschauen was wo gedroppt wird beim ftp...

hth,
//richard

H-net
21.04.09, 20:21
also mein iptables script habe ich noch von harry.homelinux.org, der hatte mal so einen iptables generator.
das ganze iptables zeug ist für mich nämlich ein buch mit 7 siegeln...

also wenn ich tcpdump eingebe dann kommt da endlos viel von dem:

20:14:50.904967 IP Debian-40-etch-64-LAMP.ssh > [clienthostname].3789: P 4553644:4553808(164) ack 20021 win 18224
20:14:51.022566 IP [clienthostname].3789 > Debian-40-etch-64-LAMP.ssh: . ack 4562864 win 64879

aber ich weis jetzt nicht was mir das sagen soll.

was soll ich jetzt am besten machen um das hinzubekommen?
(iptables script wegwerfen und ein neues machen traue ich mir nicht zu weil ich keine ahnung habe gegen was ich mich alles absichern/beachten muss)

gruß

honkstar
21.04.09, 20:24
Das:

Debian-40-etch-64-LAMP.ssh
sind die Pakete deiner ssh-Verbindung auf den Server.
Starte tcpdump mal so:

tcpdump -n port not ssh, dann kriegst du alle Pakete, die nicht ssh betreffen.
Das -n bewirkt, dass die Ports numerisch angezeigt werden, dann siehst du schneller deinen 54er Port.

H-net
21.04.09, 20:44
also dann sieht das gleich viel schöner aus.
wäred ich versuche zu verbinden gibt mir das folgendes aus:


listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
20:41:11.889256 IP [CLIENTIP].1383 > [SERVERIP].54: S 2357456027:2357456027(0) win 65535 <mss 1260,nop,nop,sackOK>
20:41:11.889332 IP [SERVERIP].54 > [CLIENTIP].1383: S 970583370:970583370(0) ack 2357456028 win 5840 <mss 1460,nop,nop,sackOK>
20:41:11.938449 IP [CLIENTIP].1383 > [SERVERIP].54: . ack 1 win 65535
20:41:11.940303 IP [SERVERIP].54 > [CLIENTIP].1383: P 1:29(28) ack 1 win 5840
20:41:12.090137 IP [CLIENTIP].1383 > [SERVERIP].54: P 1:17(16) ack 29 win 65507
20:41:12.090281 IP [SERVERIP].54 > [CLIENTIP].1383: . ack 17 win 5840
20:41:12.091092 IP [SERVERIP].54 > [CLIENTIP].1383: P 29:42(13) ack 17 win 5840
20:41:12.203920 IP [CLIENTIP].1383 > [SERVERIP].54: P 17:32(15) ack 42 win 65494
20:41:12.206435 IP [SERVERIP].54 > [CLIENTIP].1383: P 42:72(30) ack 32 win 5840
20:41:12.314560 IP [CLIENTIP].1383 > [SERVERIP].54: P 32:38(6) ack 72 win 65464
20:41:12.315312 IP [SERVERIP].54 > [CLIENTIP].1383: P 72:90(18) ack 38 win 5840
20:41:12.443973 IP [CLIENTIP].1383 > [SERVERIP].54: P 38:44(6) ack 90 win 65446
20:41:12.444706 IP [SERVERIP].54 > [CLIENTIP].1383: P 90:114(24) ack 44 win 5840
20:41:12.519273 IP [CLIENTIP].1383 > [SERVERIP].54: P 44:52(8) ack 114 win 65422
20:41:12.519966 IP [SERVERIP].54 > [CLIENTIP].1383: P 114:132(18) ack 52 win 5840
20:41:12.632251 IP [CLIENTIP].1383 > [SERVERIP].54: P 52:60(8) ack 132 win 65404
20:41:12.633026 IP [SERVERIP].54 > [CLIENTIP].1383: P 132:156(24) ack 60 win 5840
20:41:12.743331 IP [CLIENTIP].1383 > [SERVERIP].54: P 60:65(5) ack 156 win 65380
20:41:12.743825 IP [SERVERIP].54 > [CLIENTIP].1383: P 156:185(29) ack 65 win 5840
20:41:12.910389 IP [CLIENTIP].1383 > [SERVERIP].54: . ack 185 win 65351
20:41:13.329828 IP [CLIENTIP].1383 > [SERVERIP].54: P 65:73(8) ack 185 win 65351
20:41:13.330130 IP [SERVERIP].54 > [CLIENTIP].1383: P 185:203(18) ack 73 win 5840
20:41:13.421966 IP [CLIENTIP].1383 > [SERVERIP].54: P 73:79(6) ack 203 win 65333
20:41:13.422555 IP [SERVERIP].54 > [CLIENTIP].1383: P 203:252(49) ack 79 win 5840
20:41:13.546489 IP [CLIENTIP].1384 > [SERVERIP].55430: S 3454659654:3454659654(0) win 65535 <mss 1260,nop,wscale 2,nop,nop,sackOK>
20:41:13.546525 IP [SERVERIP].55430 > [CLIENTIP].1384: R 0:0(0) ack 3454659655 win 0
20:41:13.577415 IP [CLIENTIP].1383 > [SERVERIP].54: P 79:89(10) ack 252 win 65284
20:41:13.577713 IP [SERVERIP].54 > [CLIENTIP].1383: P 252:305(53) ack 89 win 5840
20:41:13.816536 IP [CLIENTIP].1383 > [SERVERIP].54: . ack 305 win 65231
20:41:14.015544 IP [CLIENTIP].1384 > [SERVERIP].55430: S 3454659654:3454659654(0) win 65535 <mss 1260,nop,wscale 2,nop,nop,sackOK>
20:41:14.015572 IP [SERVERIP].55430 > [CLIENTIP].1384: R 0:0(0) ack 1 win 0
20:41:14.518241 IP [CLIENTIP].1384 > [SERVERIP].55430: S 3454659654:3454659654(0) win 65535 <mss 1260,nop,wscale 2,nop,nop,sackOK>
20:41:14.518284 IP [SERVERIP].55430 > [CLIENTIP].1384: R 0:0(0) ack 1 win 0


so richtig viel über mein problem sagt mir das aber auch net, hoffe du weist weiter *hoff*

gruß

honkstar
22.04.09, 14:12
Ich würde es aktuell so interpretieren, dass er ab dieser Zeile

:41:13.546489 IP [CLIENTIP].1384 > [SERVERIP].55430: S 3454659654:3454659654(0) win 65535 <mss 1260,nop,wscale 2,nop,nop,sackOK>
anfängt, den Port für die Datenübertragung zu nutzen.
Von hier sieht es nicht so aus, als würden Pakete gedroppt.

Wie sieht
iptables -vnL aus?

H-net
22.04.09, 15:16
das sieht so aus:


Chain INPUT (policy DROP 1 packets, 346 bytes)
pkts bytes target prot opt in out source destination
754 38176 DROP 0 -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x03/0x03
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x06
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x05/0x05
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x11/0x01
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x18/0x08
0 0 MY_DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x30/0x20
29843 2168K ACCEPT 0 -- lo * 0.0.0.0/0 0.0.0.0/0
1838K 1739M ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2134 110K ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
22442 1169K ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:10000
21 1008 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
40 2348 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
84 4060 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306
132 6336 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:54
234 15251 MY_REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
76 3149 DROP 0 -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
29843 2168K ACCEPT 0 -- * lo 0.0.0.0/0 0.0.0.0/0
1501K 298M ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
0 0 MY_REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0

Chain MY_DROP (7 references)
pkts bytes target prot opt in out source destination
0 0 DROP 0 -- * * 0.0.0.0/0 0.0.0.0/0

Chain MY_REJECT (2 references)
pkts bytes target prot opt in out source destination
207 10988 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
19 3767 REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
8 496 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable


danke das du dir solche mühe gibtst :-)

gruß

honkstar
24.04.09, 15:20
Ich blick durch dein Skript auch nur schwerlich durch, warum baust du dir denn die das My_REJECT Target? Und das My_DROP-Target?
Probier es erstmal so:



modprobe ip_conntrack_ftp

#erstmal alles blocken
iptables -P INPUT DROP
iptables -P OUTPUT DRop
iptables -p foRWARD DROP

# stateful
iptables -A OUTPUT -m state --state ,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ftp
iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state NEW -j ACCEPT

#dein FTP
iptables -A INPUT -i eth0 -p tcp --dport 54 -m state --state NEW -j ACCEPT

...<weitere Regeln, z.B. HTTP...>



Teste dann noch mal

und nimm vorher die Rechtschreibfehler aus dem Skript ;-)

H-net
25.04.09, 15:13
ich habe gerade aus anderen gründen den rechner neu gestartet...

jetzt geht es plötzlich (habe das port=21,54) drinngelassen, anscheinend hats das doch gebracht, nur das ich rebooten musste(anscheinend is irgendwas abgeschmiert)

trozdem nochmal vielen dank!

derRichard
25.04.09, 15:15
ich habe gerade aus anderen gründen den rechner neu gestartet...

jetzt geht es plötzlich (habe das port=21,54) drinngelassen, anscheinend hats das doch gebracht, nur das ich rebooten musste(anscheinend is irgendwas abgeschmiert)

trozdem nochmal vielen dank!
hast du eventuell das modul vorher nicht entladen?

//richard