Linux Router + Paketfilter + FTP Proxy

Post Reply
Message
Author
tweb_de
Posts: 46
Joined: 14. Feb 2002 11:30
Location: Berlin
Contact:

Linux Router + Paketfilter + FTP Proxy

#1 Post by tweb_de »

Hallo.
Ich habe mir meinen Linuxrouter mit Paketfilterung aufgesetzt und bin damit sehr zufrieden - nur eine Sache geht noch nicht: FTP
Ich muss einen FTP Proxy verwenden, um die FTP Clients durch Linux ins www zu routen.
Ich habe den ftp-proxy von Suse versucht, habe aber kein Ergebnis hinbekommen.

Ich häng hier mal die Konfigurationsdateien vom Paketfilter und dem Proxy an.
Ich habe auch schon versucht, alle Pakete durchzulassen (Routing + Masquerading an + alle Ports 100% auf).

Ich schätze mal, das ich den Proxy falsch konfiguriere.
Das der Paketfilter derzeit noch den Proxy behindert, ist mir schon klar, deshalb schalte ich ihn zum testen auch aus und werde ihn erst später richtig hinbiegen - aber erstmal muss der Proxy überhaupt funktionieren, damit meine Clients FTP betreiben können.

Help - danke.

Den Proxy starte ich übrigens mit /usr/sbin/ftp-proxy -d

#####################################################################################

#!/bin/tcsh

#####################################################################################

#----------------------#
# VARIABLEN DEFINIEREN #
#----------------------#

# AUSGANGSINTERFACES

set isdn = ippp0
set intern = eth0
set extern = eth1


# ADRESSBEREICHE FESTLEGEN

set extern_ip = 192.168.10.0/255.255.255.0
set intern_ip = 192.168.0.0/255.255.255.0


# SPEZIELLE IPS FESTLEGEN

set admin_ip = 192.168.0.3
set server_ip = 192.168.0.1

#####################################################################################

#--------------------------#
# STANDARDREGELN FESTLEGEN #
#--------------------------#

# ALLE VORHANDENEN REGELN LÖSCHEN

iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F log_drop
iptables -X
iptables -t nat -F


# ALLE ZÄHLER LÖSCHEN

iptables -Z INPUT
iptables -Z OUTPUT
iptables -Z FORWARD


# REGELKETTE ZUM LOGGEN UND DROPPEN ANLEGEN

iptables -N log_drop
iptables -A log_drop -p ICMP -m limit --limit 6/minute --limit-burst 5 -j LOG --log-ip-options --log-prefix "FIREWALL DROP ICMP "
iptables -A log_drop -p UDP -m limit --limit 6/minute --limit-burst 5 -j LOG --log-ip-options --log-prefix "FIREWALL DROP UDP "
iptables -A log_drop -p TCP -m limit --limit 6/minute --limit-burst 5 -j LOG --log-tcp-options --log-ip-options --log-prefix "FIREWALL DROP TCP "
iptables -A log_drop -j DROP


# STANDARDMÄSSIG ALLE PAKETE VERWERFEN, AUF DIE KEINE REGEL ZUTRIFFT

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


# LOOPBACK ERLAUBEN

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


# GENERELL UNGÜLTIGE PAKETE VERWERFEN

iptables -A INPUT -m state --state INVALID -j log_drop
iptables -A OUTPUT -m state --state INVALID -j log_drop
iptables -A FORWARD -m state --state INVALID -j log_drop

#####################################################################################

#------------------------#
# MASQUERADING FESTLEGEN #
#------------------------#

# ISDN KARTE ALS AUSGANG VERWENDEN (MASQUERADING)
iptables -t nat -A POSTROUTING -o $isdn -s $intern_ip -j MASQUERADE


# EXTERNE NETZWERKKARTE ALS AUSGANG VERWENDEN (MASQUERADING)
iptables -t nat -A POSTROUTING -o $extern -s $intern_ip -j MASQUERADE

#####################################################################################

#----------------------#
# FORWARDING ÜBER ISDN #
#----------------------#

# INTERNET FORWARDING ÜBER ISDN AUF FOLGENDEN PORTS

# 80 = http
# 443 = https
# 53 = dns
# 25 = smtp
# 110 = pop3
# 22 = ssh
# 23 = telnet
# 20 = ftp data
# 21 = ftp
# 5190 = icq

#----------

# AUSGEHENDES FORWARDING ERLAUBEN

iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp -m multiport --dport 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp -m multiport --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp -m multiport --dport 22,23 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp -m multiport --dport 25,110 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -o $isdn -s $intern_ip -i $intern -p tcp --dport 5190 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#----------

# REINKOMMENDES FORWARDING ERLAUBEN

iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp -m multiport --sport 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp -m multiport --sport 20,21 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp -m multiport --sport 22,23 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp -m multiport --sport 25,110 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i $isdn -d $intern_ip -o $intern -p tcp --sport 5190 -m state --state ESTABLISHED,RELATED -j ACCEPT

#----------

# PINGS AUS DEM INTERNEN NETZ ERLAUBEN

iptables -A FORWARD -s $intern_ip -i $intern -o $isdn -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -d $intern_ip -o $intern -i $isdn -p icmp --icmp-type echo-reply -j ACCEPT

#####################################################################################

#-----#
# DNS #
#-----#

# DNS ANFRAGEN AN DEN SERVER ERLAUBEN

iptables -A INPUT -d $server_ip -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -d $server_ip -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# DNS ANTWORTEN DES SERVERS ERLAUBEN

iptables -A OUTPUT -s $server_ip -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s $server_ip -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

#----------

# DNS ANFRAGEN DES SERVERS ÜBER ISDN ERLAUBEN

iptables -A OUTPUT -o $isdn -p tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $isdn -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# DNS ANTWORTEN VON ISDN AN SERVER ERLAUBEN

iptables -A INPUT -i $isdn -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $isdn -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

#####################################################################################

#------#
# HTTP #
#------#

# HTTP ANFRAGEN AN DEN SERVER UND ANTWORTEN VOM SERVER ÜBERALL ERLAUBEN

iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

#####################################################################################

#-----------------#
# NETBIOS (SAMBA) #
#-----------------#

# NETBIOS ANFRAGEN VOM INTERNEN NETZWERK ERLAUBEN

iptables -A INPUT -s $intern_ip -i $intern -d $server_ip -p tcp --dport 137:139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s $intern_ip -i $intern -d $server_ip -p udp --dport 137:139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# NETBIOS ANTWORTEN AN INTERNES NETZWERK ERLAUBEN

iptables -A OUTPUT -d $intern_ip -o $intern -s $server_ip -p tcp --sport 137:139 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -d $intern_ip -o $intern -s $server_ip -p udp --sport 137:139 -m state --state ESTABLISHED,RELATED -j ACCEPT

# PINGS AUS DEM INTERNEN NETZ ERLAUBEN

iptables -A INPUT -s $intern_ip -i $intern -d $server_ip -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -d $intern_ip -o $intern -s $server_ip -p icmp --icmp-type echo-reply -j ACCEPT

# SAMBA SWAT VON DER ADMIN IP AUS ERLAUBEN

iptables -A INPUT -d $server_ip -s $intern_ip -i $intern -p tcp --dport 901 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s $server_ip -d $intern_ip -o $intern -p tcp --sport 901 -m state --state ESTABLISHED,RELATED -j ACCEPT

#####################################################################################

#----------------#
# TELNET UND SSH #
#----------------#

# TELNET UND SSH ANFRAGEN AN DEN SERVER VON DER ADMIN IP ERLAUBEN

iptables -A INPUT -s $admin_ip -i $intern -d $server_ip -p tcp --dport 22:23 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s $admin_ip -i $intern -d $server_ip -p udp --dport 22:23 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# TELNET UND SSH ANTWORTEN VOM SERVER AN DIE ADMIN IP ERLAUBEN

iptables -A OUTPUT -d $admin_ip -o $intern -s $server_ip -p tcp --sport 22:23 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -d $admin_ip -o $intern -s $server_ip -p udp --sport 22:23 -m state --state ESTABLISHED,RELATED -j ACCEPT

#####################################################################################

# ALLES LOOGEN UND DROPPEN, WAS VORHER NICHT ERLAUBT WURDE

iptables -A INPUT -j log_drop
iptables -A OUTPUT -j log_drop
iptables -A FORWARD -j log_drop

#####################################################################################

#----------------------#
# BESTÄTIGUNG AUSGEBEN #
#----------------------#

echo "


Das Firewall-Script wurde ausgefuehrt.


"

#####################################################################################

PROXY:

AllowMagicUser yes
PassiveMinDataPort 42900
PassiveMaxDataPort 42999
ActiveMinDataPort 41000
ActiveMaxDataPort 41999
Group nogroup
DestinationTransferMode passive
DestinationPort 1088
AllowTransProxy yes
PortResetsPasv yes
SameAddress yes
ServerRoot /var/ftp-proxy/rundir
ServerType standalone
TCPWrapper yes
User ftpproxy
ValidCommands ABOR, PASS, PASV, STOR, USER, MODE, QUIT, RETR, LIST, SYST
LogDestination /var/log/ftp-proxy.log
PidFile /var/run/ftp-proxy.pid
Port ftp

# SockBindRand no
# ActiveMinDataPort 40000
# ActiveMaxDataPort 40999
# UseMagicChar %
# DenyMessage /etc/proxy-suite/ftp-deny.txt
# DenyString Service out of order
DestinationAddress www.twebs-home.de
# DestinationTransferMode client
# DestinationTransferMode active
# Group nobody
# LDAPServer ldap.domain.tld[:port]
# LDAPBaseDN dc=domain,dc=tld
# LDAPBindDN uid=ftp-proxy,dc=domain,dc=tld
# LDAPBindPW aPassword
# LDAPIdentifier LoginName
# LDAPObjectClass FTPProxyUser
# Listen 0.0.0.0
# MaxClients 64
# MaxClientsMessage /etc/proxy-suite/ftp-maxclients.txt
# MaxClientsString The server is full
# ServerType inetd
# TimeOut 900
# TranslatedAddress 0.0.0.0
# User nobody
# WelcomeMessage /etc/proxy-suite/ftp-welcome.txt
# WelcomeString Welcome to %h

tweb_de
Posts: 46
Joined: 14. Feb 2002 11:30
Location: Berlin
Contact:

Re: Linux Router + Paketfilter + FTP Proxy

#2 Post by tweb_de »

Hatte ich noch vergessen:
Es sollte ein transparenter Proxy nur für ausgehende Verbindungen sein.
Deshalb fange ich alle ausgehenden Verbindungen an Port 21 mit
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 1088
ab und leite sie damit an den Proxy weiter, der ab die die Arbeit übernehmen soll.

MrDeath

Re: Linux Router + Paketfilter + FTP Proxy

#3 Post by MrDeath »

Du leitest ja nur die Control-Connection des FTP auf den Proxy um, jedoch müsste die Data-Connections auch entsprechend umgeleitet werden, bei aktivem FTP ist das der Ziel-Port 20 bei passivem FTP ist es nen unpriveligierter Ziel-Port ... also transp. in dieser Form nicht umzusetzen.

Allerdings gibt es hier noch ne Alternative (ohne Proxy):
Seit Kernel 2.4 unterstützt Linux auch Connection-Tracking, wofür Du ein paar zusätzliche Module laden musst:

modprobe /lib/modules/2.4.8-4GB/kernel/net/ipv4/netfilter ip_conntrack
modprobe /lib/modules/2.4.8-4GB/kernel/net/ipv4/netfilter ip_conntrack_ftp
modprobe /lib/modules/2.4.8-4GB/kernel/net/ipv4/netfilter ip_nat_ftp

Danach musst Du nur noch den Ziel-Port 21 freigeben, das reicht dann auch schon ... dein Router unterstüzt dann aktives und passives FTP und das ohne Proxy <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

tweb_de

Re: Linux Router + Paketfilter + FTP Proxy

#4 Post by tweb_de »

Das wäre ja super - ich gehe das morgen mal an.
Ein Lichblick am Ende .......

trinity
Posts: 821
Joined: 12. Oct 2001 10:04

Re: Linux Router + Paketfilter + FTP Proxy

#5 Post by trinity »

@the_web
Normalerweise werden nicht erlaubte Pakete REJECTed und nicht geDROPed. Das gilt ganz besonders für die ICMP-Pakete. Was passiert wenn P****** ICMP-Nachrichten verwerfen kannst du hier fast jeden Tag nachlesen.


@MrDeath
Mit dem unerschied, dass Netfilter das FTP-Protokoll nicht versteht. Gezielte Befehlssperrung ist damit nicht möglich.
Last edited by trinity on 05. Apr 2002 20:11, edited 1 time in total.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)

MrDeath

Re: Linux Router + Paketfilter + FTP Proxy

#6 Post by MrDeath »

>Normalerweise werden nicht erlaubte Pakete REJECTed und nicht geDROPed. Das gilt ganz besonders für die ICMP-Pakete.
>Was passiert wenn P****** ICMP-Nachrichten verwerfen kannst du hier fast jeden Tag nachlesen.

Naja, mit Drop kann man (für Scrippt-Kiddies) den Anschein nach außen erwecken, als sei der Router bzw. das Netzwerk dahinter nicht existent. Und solange hinter Deinem Router keine DMZ sitzt, würde ich auch nicht "Reject ..." verwenden. Das es Schwachsinn ist, den ICMP-Verkehr komplett zu verbieten (siehe GMX), wenn es sich um einen Server handelt bzw. hinter dem Router eine DMZ sitzt, ist auch klar, aber bei einem normalen Netzwerk, in dem die Klienten keine Dienst für das internet anbieten ...

>Mit dem unerschied, dass Netfilter das FTP-Protokoll nicht versteht. Gezielte Befehlssperrung ist damit nicht möglich.

Ist mir schon klar, aber für das Sperren von diversen Befehlen sind IMHO die FTP-Server selber zuständig ... Solange Netfilter weiß, auf welchen Ports sich die Data-Connection abspielt, reicht es mir <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

trinity
Posts: 821
Joined: 12. Oct 2001 10:04

Re: Linux Router + Paketfilter + FTP Proxy

#7 Post by trinity »

>Naja, mit Drop kann man (für Scrippt-Kiddies) den Anschein nach außen erwecken, als sei der Router bzw. das Netzwerk
>dahinter nicht existent.

Dann würde ich aber auch keine Dienste anbieten (schau mal über sein Script rüber <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">)
Zudem spielt es keine Rolle, ob Script Kiddies denken, du bist da oder nicht. Solange du deinen Rechner ordentlich konfiguriert hast benötigst du im Prinzip nicht mal eine FW (glaube aber ich erzähl dir sowieso nichts neues).


>Mit dem unerschied, dass Netfilter das FTP-Protokoll nicht versteht. Gezielte Befehlssperrung ist damit nicht möglich.
>Ist mir schon klar, aber für das Sperren von diversen Befehlen sind IMHO die FTP-Server selber zuständig ...
>Solange Netfilter weiß, auf welchen Ports sich die Data-Connection abspielt, reicht es mir

evtl. willst du aber nicht, dass Leute aus dem internen Netz bestimmte Kommados über FTP ausführen (nicht nur dann ist ein Proxy eine tolle Sache <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">)
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)

tweb_de
Posts: 46
Joined: 14. Feb 2002 11:30
Location: Berlin
Contact:

Re: Linux Router + Paketfilter + FTP Proxy

#8 Post by tweb_de »

Da es sich nur um meine privaten Rechner handelt, die, wie Millionen andere, für einen "Hacker" uninteressant sind, reicht mir das aus - da ICH weiss, was ICH im Netz tue und mir meine eigenen Befehle nicht verbieten muss.
Logischerweise würde ich für höhere Sicherheit noch mit Proxies, DMZ und anderen Sachen arbeiten, aber das wäre hier "Mit Kanonenkugeln auf Spatzen schiessen".
Danke für eure Hilfe.
tweb

MrDeath

Re: Linux Router + Paketfilter + FTP Proxy

#9 Post by MrDeath »

@Lutz:
>evtl. willst du aber nicht, dass Leute aus dem internen Netz bestimmte Kommados über FTP ausführen (nicht nur dann
>ist ein Proxy eine tolle Sache)

Ich verstehe schon was Du meinst, Du meinst jetzt von Richtung LAN ins Internet (ich meinte, um die FTP-Server in der DMZ zu schützen) ... aber ich kann mir gerade kein Szenario vorstellen, in dem ich Usern aus dem LAN nur gewisse Befehle erlauben sollte, die sie auf fremden FTP-Servern ausführen dürfen. Ich erlaube den Leutchen entweder FTP oder verbiete es ihnen komplett. Würde mich freuen, wenn Du mir so ein Szenario hier rein posten könntest, also in dem man Leuten nur ein paar Kommandos per FTP erlaubt ... bzw. den Nutzen daraus <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Rossi

Re: Linux Router + Paketfilter + FTP Proxy

#10 Post by Rossi »

Zusammenfassung:

Ab kernel 2.4.17 und iptabels 1.2.5 klappt ftp wunderbar: Sowohl Clientseitig als auch Serverseitig für "active" wie auch für passive.
Die richtigen Module geladen und die Regeln richtig gesetzet vorausgesetzt :)

Und für Befehle ist entweder der Server zuständig oder Du brauchst wirklich einen Proxy.

trinity
Posts: 821
Joined: 12. Oct 2001 10:04

Re: Linux Router + Paketfilter + FTP Proxy

#11 Post by trinity »

@MrDeath
>aber ich kann mir gerade kein Szenario vorstellen, in dem ich Usern aus dem LAN nur gewisse Befehle
>erlauben sollte, die sie auf fremden FTP-Servern ausführen dürfen.

Du könntest z. B. verhindern, dass ein Benutzer den ftp-user ändert, files uploaded, keinnm anderen als dem default Server verwendet, etc.
Zudem schützt dich der Proxy auch vor "bösen" ftp-Server (zumindest sollte er es).


@Rossi
>Und für Befehle ist entweder der Server zuständig oder Du brauchst wirklich einen Proxy.
???
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)

Post Reply