FTPPROXY - ein FTP-Proxy-Server für Linux und Windows
Teil 1
1. Allgemeine Beschreibung
1.1. Allgemeine Beschreibung
FTPProxy ist ein Programm welches den Kontakt zu FTP-Servern über die eigene Firewall
hinweg ermöglicht. Dadurch braucht man das FTP-Protokoll nicht über die Firewall
routen und man kann verschiedene Dinge wie z.Bsp. die erlaubten Server, Verzeichnisse
oder auch Userberechtigungen prüfen und kontrollieren.
Damit gewinnt man ein Höchstmaß an Sicherheit und Flexibilität im Sicherheitskonzept
der Firma oder auch im Heimnetzwerk.
1.2. Installation
Die Installation erfolgt ganz einfach. Nachdem man die aktuellen Dateien von
www.ftpproxy.org heruntergeladen und in einem
lokalen Verzeichnis entpackt hat, passt man das "Makefile"-Datei an die lokalen Gegebenheiten
(je nach Distribution) an und ruft danach "make" ...; "make install" in diesem Verzeichnis
auf.
Die Anpassungen im "Makefile" beschränken sich auf folgende zwei Installationsverzeichnisse
(hier an SuSE 7.2 angepasst):
Zeilen nach "install":
### hier Pfad des Installationsverz. der kompilierten
# Programmdatei
cd src; strip $(TARGETS) && cp $(TARGETS) /usr/local/sbin
### im folgenden passt man den Pfad der manpage an ###
cd doc; cp *.1 /usr/share/man/man1
1.4. Konfiguration
1.4.1 ... für "inetd"
Zum Abschluss ...
... der Installation des FTP-Proxy-Server-Programms, muß man in der Datei
"/etc/inetd.conf" oder "xinetd.conf" (diese ist dafür zuständig Dienste
zu starten, wenn auf dem in der Datei "/etc/services" festgelegten Port eine Anforderung
kommt) noch folgendes, an deine Bedürfnisse angepasst, einfügen :
# - clientside server selection:
# Serverauswahl durch den Client
# in einer Zeile geschrieben!!!
ftp stream tcp nowait nobody /usr/sbin/tcpd \
/usr/local/sbin/ftp.proxy -e
Oder:
# - clientside server selection with enhanced logging:
# Serverauswahl durch den Client mit ... Logging
#
ftp stream tcp nowait nobody /usr/sbin/tcpd \
/usr/local/sbin/ftp.proxy -e -l -m
Oder:
# - only to one particular FTP-Server:
# Verbindung nur zu einem einzigem Server:
# (Serverseitig voreingestellt)
ftp stream tcp nowait nobody /usr/sbin/tcpd \
/usr/local/sbin/ftp.proxy my.special.server
Der Aufruf von /usr/sbin/tcpd bewirkt eine einfache Berechtigungs-Kontrolle
mit Hilfe der Dateien "/etc/host.allow" und "/etc/host.deny". Ohne diesen Aufruf
funktioniert das Programm nicht.
1.4.1 ... für "xinetd"
Gerade heute (14.08.2003) kam aus der Mailingliste folgende Nachricht von
Greg Lyons:
You can't start ftp.proxy from the command line, which is why you got the
"Socket operation on non-socket" error. You need to start it from xinetd.
Below is a sample configuration snippit, which you could put in
/etc/xinetd.conf or in a separate file /etc/xinetd.d/ftpproxy.
service ftpproxy
{
disable = no
socket_type = stream
wait = no
user = nobody
server = /usr/local/sbin/ftp.proxy
server_args = my.server.com
}
Proxying different servers on different ports or IP addresses is done within
your xinetd configuration. Output is written to syslog.
As for your 250 users, you'll need to write an ACP (access control program),
which can be anything from simple Perl script that looks for users in a clear
text file to a compiled binary that searches multiple databases. I have
written one that works against an LDAP directory, if you're interested.
All of this information is available in the man page
(http://ftpproxy.org/html/ftp.proxy-1.html) and in the FAQ
(http://ftpproxy.org/faq/).
Dies war die Antwort auf eine Anfrage bezüglich der xinetd-Konfiguration und den
Möglichkeiten für 250 Benutzer einen gesicherten Zugang (mit Passwortauthentifizierung)
zu verschiedenen Servern, die wiederum vom Benutzername abhängen, einzurichten.
Danach kam noch dieses:
If you already have something listening on port 21, you'll need to choose a
different port (like 2121 or something). You can do that by adding a line to
your /etc/xinetd.d/ftpproxy file like the one below and restart xinetd.
port = 2121
You won't need to add a user to start with, since you don't have an ACP yet,
which is the thing that will require authentication on the proxy itself. So
to test, you'd run ftp and and type "open localhost 2121". It will prompt
you for a username, which would be something like "anonymous@ftp.gnu.org".
The password would be your email address. If you can do an ls or get, then
you're working!
1.5. Problem am Rande
Würde man nun den ersten Aufruf des FTP-Proxys versuchen gäbe es ein Problem mit dem auf
dem gleichen Port (21/tcp) "lauschenden" ftp-daemons (bei mir "proftpd"). Dieser FTP-Daemon
ist dein eigener FTP-Server.
Laut manpage könnte man den "ftp.proxy" mit Hilfe der Option "-p PortNr" auf einem anderen
Port laufen lassen. Als ich dieses versuchte gab es bei mir aber die Fehlermeldung
cannot bind to port .... Ich vermute nun stark, das die Option steuert auf welchem
Port der extern anzurufende FTP-Server angesprochen wird.
Um das Programm nun nutzen zu können "verlege" ich meinen FTP-Server auf einen anderen Port.
Dazu muß man (bei mir für Proftpd) in der Datei /etc/proftpd.conf folgende
Einträge anpassen:
### <<<<<< /etc/proftpd.conf >>>>> ###
#
# bei Aufruf nach Bedarf
ServerType inetd
# bei Aufruf bei Server-Start
#ServerType standalone
#
# disable listen on 0.0.0.0:21 - the port (and IP) should
# be specified explicitly in each VirtualHost definition
#######
# Von mir hier willkürlich gewählter freier Port
# natürlich müssen dann alle Ports in "etc/services"
# entsprechend angepasst werden
Port 192.168.0.20:3118
In /etc/services habe ich folgendes angepaßt:
### <<<<<< /etc/services >>>>> ###
#
ftp_proxy 21/tcp # ftp.proxy von Andreas Schoenberg
ftp 3118/tcp # File Transfer [Control]
#ftp 21/tcp # File Transfer [Control]
|