PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vsftp+suse8+firewall



Moogli
12.06.02, 17:04
Hey Leute,

folgendes Problem:

Ich kann mich von einem fremden Rechner auf meinem Linuxrechner, auf dem vsftp läuft, erfolgreich einloggen. Kommandos um auf meinem Rechner via FTP z. B. ein Verzeichnis zu wechseln oder erstellen etc. laufen. Aber es ist nicht möglich z. B. den Verzeichnisinhalt anzeigen zu lassen etc. Schlichtweg es gehen keine Daten raus.

Ohne Firewall funktioniert alles.

Was könnte das Problem sein, welche Ports müssen offen sein?

Gruß
Moogli

SeeksTheMoon
12.06.02, 21:01
in der /etc/services stehen die Ports, die zu den Diensten gehören.
FTP hat standardmäßig Port 21.
Wenn Du den FTP-Server über den inetd oder xinetd betreibst, dann gibts noch die Dateien /etc/hosts.allow und /etc/hosts.deny (dann wird zusätzlich ein TCP-Wrapper zwischengeschaltet, der den Verkehr prüft)

mdkuser
04.12.03, 09:31
Das gleiche Problem habe ich auch, bei mir im LAN liegt wohl an dem vsftpd.
siehe hier:

http://www.linuxforen.de/forums/showthread.php?threadid=112219

Weiss den niemand eine Lösung? (nach oben schieb)

mdkuser
04.12.03, 10:05
Also ich probiers jetzt nochmal mit active mode und gebe auf der Firewall noch port 20 frei. Für den passiv mode müssen alle ports >1024 offen sein, das ist mir zu unsicher.

snowbear
04.12.03, 13:41
Koenntet ihr beide mal eure vsftpd.conf hier Posten ?
Also bei mir geht das ohne Probleme mit Linux clients und mit Windows clients .... und ich habe auch keine Pasive Ports eingetragen :)

mdkuser
04.12.03, 14:34
@snowbear

was hast du denn auf deiner firewall für ports für ftp freigegeben?
P.S. meine config kann ich erst heute arbend posten, weil ich jetzt in der firma bin.

mdkuser
04.12.03, 14:46
@snowbear

poste doch mal bitte deine vsftp.conf
dann kann ich mit meiner vergleichen. :rolleyes:

P.S. ich glaube nicht, das es an der serverconf liegt, denn ohne firewall funzt es ja sowohl mit linux als auch mit windows. nur mit firewall funzt es leider nur mit windows, komischerweise...:mad:

tobip
04.12.03, 14:47
Ich hatte ähnliche Probleme ...


ich mußte in Meinen Firewall den Port 20 in der OUTPUT chain freischalten

momentan habe ich Port 21 in der INPUT chain und port 20 in der OUTPUT chain feigeschalten! du brauchst dann auch gar nicht die oberen Ports über 1024 freischalten ... es funzt trotzdem! allerdings muß dein Firewall "Statefull" arbeiten!!

d.h.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

muß irgendwo vor der DROP oder REJECT regel stehen
;-)

mdkuser
04.12.03, 15:11
@tobip
redest du jetzt von der Firewallkonfiguration auf dem Server oder auf dem Client? Ist vsFTPd bei dir als aktives FTP oder Passives FTP konfiguriert?

P.S. Warum sich die Windows-clients trotzdem connecten können bleibt mir nach wie vor ein Rätsel...
Ich tippe bei unserem Problem mal eher auf ein routing Problem...

snowbear
04.12.03, 15:32
ich habe nur Port 21 frei

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

lonF
04.12.03, 16:31
Als erstes solltest Du nachschauen ob das Kernelmodul connectiontracking geladen ist.
Wenn Du iptables als FW benutzt schau nach ob im Output Chain alle Pakete die zu einer bestehenden Verbindung gehören auch den Rechner verlassen dürfen.

Übrigens ich hab vsftp mit fw laufen und das funzt hervorragend.

MfG lonF

P.S. vsftp.conf und Firewall config posten.

Sollte ungefähr die regel für den Output ausschauen.
P.P.S. iptables -A OUTPUT -o eth0 -m state --state established,related -j ACCEPT

mdkuser
04.12.03, 20:22
Hier die vsftpd-config:



# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=NO
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
ftp_data_port=20
listen_port=21
pasv_enable=YES
port_enable=YES
max_clients=2
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
ftpd_banner=Welcome to my private FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftp
#enable for standalone mode
listen=YES
tcp_wrappers=YES



und hier noch mein Firewall-script:



#!/bin/sh

#simples Firewallscript für Masqerading von von mdkuser
echo "Firewall Ruleset geladen!"

#gebe Pfad fuer iptables an, setze lokales und externes Interface sowie Loopback-interface
IPT=/sbin/iptables
INET=eth0
LOC=eth1 #lokales Interface fuer Intranet
LO_IF=lo #loopback Interface

#aktiviere IPv4 Weiterleitung und Dynamische Adressen
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

#aktivire IP-Spoofing protection
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter

#Default Policy auf alles verbieten setzen
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

#alle Paketfilterketten löschen
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F -t nat
$IPT -X
$IPT -Z

#Regeln fuer Loopback-Interface setzen
$IPT -A OUTPUT -o $LO_IF -j ACCEPT
$IPT -A INPUT -i $LO_IF -j ACCEPT

#Regeln fuer lokales Interface setzen
$IPT -A OUTPUT -o $LOC -j ACCEPT #alles Output zulassen
$IPT -A INPUT -s 192.168.1.252 -i $LOC -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -i $LOC -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -i $LOC -j ACCEPT

#Regeln fuer externes Interface setzen
$IPT -A OUTPUT -o $INET -j ACCEPT #alles Output zulassen
$IPT -A INPUT -p tcp -i $INET --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #FTP auf port 21 erlauben
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 20 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p tcp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 1024 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 27960 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 28765 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.252 -p udp -i $INET --dport 28766 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 20 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p tcp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 1024 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 27960 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 28765 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.233 -p udp -i $INET --dport 28766 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 20 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p tcp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 137 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 139 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 631 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 1024 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 27960 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 28765 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -s 192.168.1.222 -p udp -i $INET --dport 28766 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#weitere Ausnahmen fuer akzeptieres Input von extern zu intern mit State new hier an dieser Stelle setzen
$IPT -A INPUT -i $INET -m state --state RELATED,ESTABLISHED -j ACCEPT

#Regeln für Forwarding und Masquerading (NAT) setzen
$IPT -A FORWARD -i $LOC -o $INET -j ACCEPT
$IPT -A FORWARD -i $INET -o $LOC -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o $INET -s 192.168.1.252 -j MASQUERADE #Maskierung nur für angegebene IP
$IPT -t nat -A POSTROUTING -o $INET -s 192.168.1.233 -j MASQUERADE #Maskierung nur für angegebene IP
$IPT -t nat -A POSTROUTING -o $INET -s 192.168.1.222 -j MASQUERADE #Maskierung nur für angegebene IP

#alle anderen Pakete verwerfen
$IPT -A INPUT -i $INET -m state --state NEW,INVALID -j DROP
$IPT -A FORWARD -i $INET -m state --state NEW,INVALID -j DROP
$IPT -A INPUT -i $INET -j DROP



Wo liegt mein Denkfehler?