• # Mon script

    Posté par . En réponse au message Serveur FTP VsFTP et Configuration de iptables. É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