Forum Linux.redhat Serveur FTP VsFTP et Configuration de iptables

Posté par  .
Étiquettes :
0
21
fév.
2009
Salut à tous!

Je dispose d'une machine sous fedora 8 qui me sert de passerelle vers internet pour mon réseau local. Je voudrais que les clients de mon LAN puissent uploader des fichiers sur la passerelle via ftp.

Sur le serveur il ya apache php mysql, ssh et FTP (VSFTPD).

Toutes les règles de iptables marchent sauf celle du FTP, lorsque j'essaie de me connecter avec FileZilla j'arrive à me connecter avec un utilisateur du système mais je n'arrive pas à lister le contenu du repertoire et j'obtiens l'Erreur 425. je signale au passage qu'avant l'établissement des règles de iptables VSFTPD marchait parfaitement

voici la règle pour iptables :
iptables -A INPUT -i eth1 -p TCP --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


Certains tutos conseillent l'activation du module ip_conntrack_ftp mais je n'arrive pas a charger ce module, de plus il semble que ce module a été remplacé par nf_conntrack_ftp qui lui est chargé.

Veuillez m'aider à résoudre ce problème.
  • # Mon script

    Posté par  (site web personnel) . Évalué à 0.

    Salut,

    J'ai également mon propre serveur ftp/web... et j'ai un script qui s'occupe des règles du firewall. Je n'explique pas trop car j'ai du mal avec iptables et les firewall.

    Voici mon script :


    #!/bin/sh

    WAN="eth1"
    LAN="eth0"
    IP_LAN="192.168.0.0/24"

    firewall_start() {
    # Initialisation de la table filter
    iptables -F
    iptables -X

    # Politique par défaut de la table filter
    # On ignore tout ce qui entre ou transite par la passerelle
    iptables -P INPUT DROP
    iptables -P FORWARD DROP

    # On accepte, ce qui sort
    iptables -P OUTPUT ACCEPT

    # Pour éviter les mauvaises suprises, on va
    # autoriser l'accès à la loopback, c'est vital !
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT


    # On autorise les clients à accéder à internet

    # On créé une nouvelle chaîne, le nom est indifférent
    # appelons-la "local-internet"
    iptables -N local-internet

    # On définit le profil de ceux qui appartiendront à "local-internet"
    # "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)
    # En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.
    # Pas de panique, certains serveurs seront autorisés explicitement dans la suite.
    iptables -A local-internet -m state --state NEW -i ! $WAN -j ACCEPT

    # Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer
    # et faire des petits :-)
    iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT

    # On termine en indiquant que les connections appartenant à "local-internet"
    # accèdent à internet de manière transparente.
    iptables -A INPUT -j local-internet
    iptables -A FORWARD -j local-internet

    # Initialisation des tables nat et mangle
    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT

    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT

    # Mise en place du masquerading
    iptables -t nat -A POSTROUTING -s $IP_LAN -o $WAN -j MASQUERADE

    # Activation de la passerelle
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Pas de spoofing
    if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then
    for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
    do
    echo 1 > $filtre
    done
    fi

    # Pas de synflood
    if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    fi

    # Pas ping
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    fi

    # Proxy Transparent
    #iptables -t nat -A PREROUTING -i $IP_LAN -p tcp --dport 80 -j REDIRECT --to-port 3128


    # A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,
    # vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne
    # depuis internet ne peux accéder à l'un des serveurs que vous hébergés.

    # Il est bien-sûr possible de déverrouiller pontuellement l'accès à un serveur depuis internet,
    # en décommentant les 2 ou 3 lignes correspondantes.

    ########### ACTIVATION DES SERVEURS SUR INTERNET ##############

    # autorisation du serveur ftp(20 et 21) ...
    #iptables -A INPUT -p tcp --dport ftp-data -j ACCEPT
    iptables -A INPUT -p tcp --dport ftp -j ACCEPT

    # autorisation du serveur ssh(22) ...
    iptables -A INPUT -p tcp --dport ssh -j ACCEPT

    # autorisation du serveur smtp(25) ...
    #iptables -A INPUT -p tcp --dport smtp -j ACCEPT

    # autorisation du serveur http(80) ...
    iptables -A INPUT -p tcp --dport www -j ACCEPT

    # autorisation du serveur ntp(123) ...
    #iptables -A INPUT -p tcp --dport 123 -j ACCEPT

    # autorisation du serveur https(443) ...
    #iptables -A INPUT -p tcp --dport https -j ACCEPT

    # autorisation du serveur DNS(53) ...
    #iptables -A INPUT -p udp --dport domain -j ACCEPT
    #iptables -A INPUT -p tcp --dport domain -j ACCEPT

    # autorisation du serveur irc(6667) ...
    #iptables -A INPUT -p tcp --dport ircd -j ACCEPT

    # autorisation du serveur cvs (2401) ...
    #iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT

    # autorisation du serveur tor (9001)...
    #iptables -A INPUT -p tcp --dport 9001 -j ACCEPT
    }

    firewall_stop() {
    iptables -F
    iptables -X
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT

    iptables -t nat -F
    iptables -t nat -X
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P OUTPUT ACCEPT

    iptables -t mangle -F
    iptables -t mangle -X
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT
    }

    firewall_restart() {
    firewall_stop;
    sleep 2;
    firewall_start;
    }

    case "$1" in
    'start')
    firewall_start
    ;;
    'stop')
    firewall_stop
    ;;
    'restart')
    firewall_restart
    ;;
    'status')
    iptables -L
    iptables -t nat -L
    iptables -t mangle -L
    ;;
    *)
    echo "Usage: firewall {start|stop|restart|status}"
    esac
  • # Passer en mode passif

    Posté par  (site web personnel) . Évalué à 1.

    Bonjour,

    Si tu n'arrives pas à charger les modules de tracking de connexion ftp, tu t'amputes des connexion "actives" si je me souviens bien.
    Cependant il te reste le mode de connexion passif qui est d'ailleurs préférable voir obligatoire lorsque l'on traverse un firewall.

    Pour configurer celui-ci, tu dois sélectionner un range de ports passifs ouvert aux utilisateurs.
    Ce range servira à recevoir les connexions "data" (listing du répertoire entre autres).
    Le nombre de port correspond aux nombres de connexions simultanées que ton serveur ftp devra accepter.

    Si on part sur 3 port par ex, tu ouvres en permanence sur ton firewall les ports 65001 à 65003 en provenance de tes utilisateurs.

    Puis tu configures dans ton vsftpd.conf ces quelques paramètres :

    #

    pasv_address — Specifies the IP address for the public facing IP address of the server for servers behind Network Address Translation (NAT) firewalls. This enables vsftpd to hand out the correct return address for passive mode connections.

    There is no default value for this directive.
    #

    pasv_enable — When enabled, passive mode connects are allowed.

    The default value is YES.
    #

    pasv_max_port — Specifies the highest possible port sent to the FTP clients for passive mode connections. This setting is used to limit the port range so that firewall rules are easier to create.

    The default value is 0, which does not limit the highest passive port range. The value must not exceed 65535.
    #

    pasv_min_port — Specifies the lowest possible port sent to the FTP clients for passive mode connections. This setting is used to limit the port range so that firewall rules are easier to create.

    The default value is 0, which does not limit the lowest passive port range. The value must not be lower 1024.
    #

    pasv_promiscuous — When enabled, data connections are not checked to make sure they are originating from the same IP address. This setting is only useful for certain types of tunneling

    Bonne continuation ...
  • # Ouvre aussi les autres ports pour le suivi de connexion...

    Posté par  (site web personnel) . Évalué à 4.

    Une fois la connexion FTP établie, les données passent par un autre port,
    donc ajoute la règle générale
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    (ou sinon, ouvre aussi le port 20 vers le réseau local...).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.