Sécuriser son serveur dédié avec Iptables, fail2ban et Rkhunter

parefeu serveur

Dans ce tutoriel vidéo, nous allons voir comment sécuriser son serveur dédié (sommaire des tutos ici) en configurant 3 logiciels incontournables : Iptables : c’est le Firewall des systèmes Linux, il est difficile à manier la première fois mais on peut faire des réglages très fin. Dans ce tutoriel je…

95 commentaires ont été ajoutés, ajoutez le vôtre.

Vous pouvez laisser un commentaire, cependant je ne peux pas vous garantir qu'il sera modéré rapidement ou qu'il aura une réponse, faute de temps pour m'occuper du site.

  1. prestarocket

    Hello,

    merci pour ton super tuto.
    que faire si on a une connexion ssh non autorisée (detectee grace a ton systeme d alerte email) ?

    • Madrzejewski Alexis

      Bonjour prestarocket,

      Normalement des systèmes comme fail2ban empêche ce genre de chose, sinon le plus simple est de récupérer l’IP et la bannir du serveur avec iptables pendant longtemps ou définitivement.

  2. Klyk777

    Pour faire fonctionner le ftp avec iptables j’ai du activer certain modules,
    voici ce que j’ai ajouté à mon fichier firewall

    # * Modules *
    modprobe ip_tables
    modprobe ip_conntrack
    modprobe ip_conntrack_ftp
    modprobe ip_conntrack_irc
    modprobe ipt_limit
    modprobe ipt_state
    modprobe ipt_multiport
    modprobe iptable_filter
    modprobe iptable_mangle
    modprobe iptable_nat

    echo « Chargement des modules ……………………. [Ok] »
    Depuis ça fonctionne aussi

  3. Sora

    Bonjour,
    Sur mon dédié, j’ai teamspeak3, avec le tuto j’ai monté un firewall et depuis impossible de connecter teamspeak? pourriez vous m’aider?
    J’ai mis :
    # Teamspeak:9987
    iptables -t filter -A INPUT -p udp –dport 9987 -j ACCEPT
    iptables -t filter -A OUTPUT -p udp –dport 9987 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 10011 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 30033 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 10011 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 30033 -j ACCEPT

    Sachant que les ports TS sont :

    port 9987 (udp) : port par defaut de connexion au serveur voix.
    port 10011 (tcp) : connexion ServerQuery
    port 30033 (tcp) : pour le transfert de fichier

    Est ce que c’est bon?

    Merci.

    • Madrzejewski Alexis

      Bonjour Sora,

      Cela me semble incomplet mais comme Teamspeak est un logiciel extrément utilisés, le plus simple est de rechercher des configurations déjà faites et testés. Après quelques recherches j’ai trouvés ça :

      # UDP Teamspeak Voice Port
      iptables -A INPUT -p udp -m udp –dport 9987 -j ACCEPT
      # TCP Teamspeak File Transfer
      iptables -A INPUT -p tcp -m tcp –dport 30033 -j ACCEPT
      # TCP Query Port
      iptables -A INPUT -p tcp -m tcp –dport 10011 -j ACCEPT

      Généralement j’ajoute ça avant aussi :

      iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

  4. marco

    très bon tutoriels je les suis 1 par 1

    juste un complément après quelques jours

    j’ai pas mal d’entrée j’en laisse que 3 sur l’ensemble des lignes
    sshd:
    Authentication Failures:
    unknown (115.85.194.82): 249 Time(s)
    unknown (223.4.89.116): 30 Time(s)
    root (223.4.3.42): 24 Time(s)
    Invalid Users:
    Unknown Account: 285 Time(s)

    j’ai donc cherché une méthode plus violent de bannissement

    j’ai donc mis en place ceci en plus
    http://doc.ubuntu-fr.org/denyhosts

    depuis :
    logwatch jours 1
    ——————— Denyhosts Begin ————————

    new denied hosts:
    184.106.213.105
    115.85.194.82
    82.146.42.175
    160.80.34.123

    ———————- Denyhosts End ————————-
    ——————— pam_unix Begin ————————

    sshd:
    Authentication Failures:
    unknown (115.85.194.82): 116 Time(s)
    unknown (223.4.89.116): 15 Time(s)

    logwatch jours 2
    sshd:
    Plus rien a signaler ))

  5. infojmb

    Gros bug…

    Mon apt-get et mon ftp ne fonctionne plus.. C’est définitivement le iptables qui ne fait pas son travail comme il le devrait… une journée de galère…

    Si je réinitialise le firewall, 1 seul connection m’est possible en ftp. Le apt-get ne fonctionne toujours pas.

    *CRYING*

    • infojmb

      J’ai trouvé la solution, j’ai tout simplement remplacé les lignes 12 à 18 par le echo « Flushing iptables rules… » D’Alexis

  6. infojmb

    Merci Alexis.

    Moi personnellement j’ai du reconstruire 3 fois mon iptables pour cause diverses et finalement, je n’ai mis que le nécessaire avec le moins de comment possible et un petit echo pour m’y retrouver.. xD

    Est-ce qu’on peut mettre des if dans un #!/bin/sh ? ou des conditions?

    J’ai aussi trouvé une site web de wiki très sympa.
    http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

    Le voici

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: firewall
    # Required-Start: $remote_fs $syslog
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Démarre les règles iptables
    # Description: Charge la configuration du pare-feu iptables
    ### END INIT INFO

    ### Reeinitilisation
    echo « Configuration du firewall. »
    echo « Nettoyage des filtres. »
    iptables -t filter -F
    iptables -t filter -X

    iptables -t filter -P INPUT DROP
    iptables -t filter -P FORWARD DROP
    iptables -t filter -P OUTPUT DROP

    iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    iptables -t filter -A INPUT -i lo -j ACCEPT

    iptables -t filter -A OUTPUT -o lo -j ACCEPT
    echo « Nettoyage…Done. »

    ### DEBUT DES ENTREES
    iptables -t filter -A INPUT -p icmp -j ACCEPT
    iptables -t filter -A OUTPUT -p icmp -j ACCEPT
    echo « Ping…Done. »

    iptables -t filter -A INPUT -p tcp –dport 1827 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 1827 -j ACCEPT
    echo « SSH…Done. »

    iptables -t filter -A OUTPUT -p tcp –dport 80 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 443 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 80 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 443 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 8443 -j ACCEPT
    echo « HTTP/HTTPS…Done. »

    iptables -t filter -A OUTPUT -p tcp –dport 20 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 20 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    echo « FTP…Done. »

    echo « Loading complete. »

  7. inox3

    Si jamais sa peut servir à ceux qui ont et le bug du FTP, je l’ai eu, et je l’ai résolue en modifiant un petit peut les règles :

    # FTP In
    iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 20 -j ACCEPT
    # FTP Out
    iptables -t filter -A OUTPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 20 -j ACCEPT

    En gros pour faire simple j’ai inversé les règles entrantes et sortantes et autoriser les connexions déjà établies en premier.

    Voila sa à marcher pour moi 😉 Bonne chance à vous 🙂

    • inox3

      Et au faite, il déchire ton blog Alexis ! Continue car c’est super, bon courage pour la suite 😉

  8. hallowman

    j’ai un probleme avec iptable
    quand je lance la commande update-rc.d firewall defaults

    j’ai ce message d’erreur :

    update-rc.d: using dependency based boot sequencing
    insserv: warning: current start runlevel(s) (empty) of script `firewall’ overwrites defaults (2 3 4 5).

    que dois je faire ?

  9. dztoar

    Salut,
    Merci pour tes conseils qui sont bien utiles, mais j’ai une question j’ai fais un echo (dans mon .bshrc) comme tu cites à la fin de ton tuto pour recevoir un mail à chaque connexion, mais je reçois le mail dans /var/mail/utilisateur et non sur ma boite mail ? Comment faire pour modifier cela ?
    Encore une fois merci des tes tutos et Joyeux Noël 😀
    Cordialement.

    • Madrzejewski Alexis

      Bonjour dztoar,

      Il faut installer un serveur de mail sur le serveur dédié pour au moins pouvoir envoyer des emails. Après, c’est possible que se soit une erreur dans la ligne que j’ai donnée car les utilisateurs ne devraient rien recevoir du tout … il faut vérifier les « quotes », vous s’il en manque pas une quelques part.

  10. hallowman

    voici le code pour le firewall
    j’ai eut du mal mais tout fonctionne comme ca
    pensez à modifier le range dans la ligne passiveport du fichier conf de proftpd en mettant 1024 1024 (par exemple )

    le fichier firewall :
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: firewall
    # Required-Start: $remote_fs $syslog
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Démarre les règles iptables
    # Description: Charge la configuration du pare-feu iptables
    ### END INIT INFO
    # Mise à 0
    iptables -t filter -F
    iptables -t filter -X
    echo « Mise à 0 »
    # On bloque tout
    iptables -t filter -P INPUT DROP
    iptables -t filter -P FORWARD DROP
    iptables -t filter -P OUTPUT DROP
    echo « Interdiction »
    # Ne pas casser les connexions établies
    iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    # Autorise le loopback (127.0.0.1)
    iptables -t filter -A INPUT -i lo -j ACCEPT
    iptables -t filter -A OUTPUT -o lo -j ACCEPT
    echo « Loopback »
    # ICMP (le ping)
    iptables -t filter -A INPUT -p icmp -j ACCEPT
    iptables -t filter -A OUTPUT -p icmp -j ACCEPT
    echo « Ping ok »
    # SSH IN/OUT
    iptables -t filter -A INPUT -p tcp –dport 22 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 22 -j ACCEPT
    echo « SSH ok »
    # DNS In/Out
    iptables -t filter -A OUTPUT -p tcp –dport 53 -j ACCEPT
    iptables -t filter -A OUTPUT -p udp –dport 53 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 53 -j ACCEPT
    iptables -t filter -A INPUT -p udp –dport 53 -j ACCEPT
    echo « dns ok »
    # NTP Out
    iptables -t filter -A OUTPUT -p udp –dport 123 -j ACCEPT
    echo « ntp ok »
    # HTTP + HTTPS Out
    iptables -t filter -A OUTPUT -p tcp –dport 80 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 443 -j ACCEPT
    # HTTP + HTTPS In
    iptables -t filter -A INPUT -p tcp –dport 80 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 443 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 8443 -j ACCEPT
    echo « http ok »
    # FTP Out
    iptables -t filter -A OUTPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 20 -j ACCEPT
    # FTP In
    # imodprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
    iptables -t filter -A INPUT -p tcp –dport 20 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 21 -j ACCEPT
    iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
    iptables -t filter -A INPUT -p tcp –dport 1024 -j ACCEPT
    iptables -t filter -A INPUT -p tcp –sport 1024 -j ACCEPT
    echo « ftp ok »
    # Mail SMTP:25
    iptables -t filter -A INPUT -p tcp –dport 25 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 25 -j ACCEPT
    # Mail POP3:110
    iptables -t filter -A INPUT -p tcp –dport 110 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 110 -j ACCEPT
    # Mail IMAP:143
    iptables -t filter -A INPUT -p tcp –dport 143 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 143 -j ACCEPT
    # Mail POP3S:995
    iptables -t filter -A INPUT -p tcp –dport 995 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 995 -j ACCEPT
    echo « mail ok »
    # Monit
    iptables -t filter -A INPUT -p tcp –dport 4598 -j ACCEPT
    # Webmin
    iptables -t filter -A INPUT -p tcp –dport 10000 -j ACCEPT
    echo « monitoring ok »