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

94 Commentaires

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 vous propose une série de règles classiques pour un serveur web.
  • Fail2ban : c’est un système qui ban automatiquement tous les utilisateurs qui essayent de se connecter plusieurs fois de suites sans succès sur notre serveur. Ça permet d’éviter les attaques de type brute force.
  • Rkhunter : c’est un logiciel qui nous prévient dés que des fichiers sensibles sont modifiés. Autrement dit, un bon détecteur de Backdoor et Rootkit.

Et en bonus, je vous donnerais une astuces pour être prévenue par email dés que quelqu’un se connecte en SSH sur votre serveur. À la fin du tutoriel vous aurez un serveur Web déjà bien sécurisé, mais pas assez à mon goût, d’où la seconde vidéo qui sécurise un peu plus les scripts php avec 2 modules pour apache.

Pour télécharger la vidéo (format mp4), cliquez sur l’image suivante :

Mise en place du Firewall : Iptables

Sans doute la partie la plus importe du tutoriel, la mise en place du Firewall. Normalement il est installé par défaut mais si vous avez des problèmes avec les règles, ça vient sans doute du noyau modifié d’OVH, mais je l’ai déjà expliqué dans la première vidéo.

Fonctionnement de Iptables

Je pense qu’un mini tutoriel sur Iptables, avec les arguments les plus utilisés et ces principes de bases ne fera pas de mal. Je vais faire ça sous forme de liste pour que cela soit plus simple, le but n’étant pas d’être exhaustif.

Si vous faites un iptables -L, vous verez les règles qui définissent votre firewall. En regardant le résultat de plus près, on aperçoit 3 types de chaînes :

  • INPUT : correspond aux règles sur le traffic entrant du serveur
  • OUTPUT : correspond aux règles pour le traffic sortant du serveur
  • FORWARD : les règles permettant de faire des redirections

On constate également que l’on a la politique du firewall sur « ACCEPT » pour toutes les chaînes et ce n’est pas très bon au niveau de la sécurité. Notre démarche va être de tout bloquer (DROP) pour ensuite débloquer petit à petit les ports pour les services que l’on utilise.

Voici une liste des arguments que l’on utilisent fréquemment :

  • -t : préciser sur quel table on travaille, par défaut c’est filter qui contient le input, output et forward
  • -A : ajoute une règles en fin de chaîne
  • -p : précise le protocole de la règle (généralement tcp, udp ou icmp pour le ping)
  • –dport : précise le port de destination
  • -j : précise la politique à appliquer (accept ou drop la plupart du temps)
  • -F : efface toutes les règles (F = Flush)
  • -X : efface la chaîne

Configuration des règles

Pour mettre en place un Firewall sur Linux, la plupart du temps on crée un fichier bash avec toutes les commandes iptables que l’on souhaite mettre. Dans mon cas, je remets Iptables à 0, puis je bloque tout, puis je débloque petit à petit les services que j’utilise. Par conséquent, l’ordre est important ! Voici le fichier utilisé pendant la vidéo, n’oubliez pas de modifier le numéro de port pour ssh ou sinon vous serez bloqué (un reboot hardware fera l’affaire pour vous débloquer).

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Firewall maison
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:
# Default-Stop:
# X-Interactive:     false
# Short-Description: Firewall maison
### 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 1337 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 1337 -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
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"

La partie supérieure (le gros bloque de commentaire, à l’exception du shebang qui est obligatoire) est optionnelle mais ça permet d’éviter des warnings dans les fichiers de logs. Au niveau de la difficulté, une fois qu’on à compris une ligne le reste vient tout seul. N’oubliez pas de donner les droits d’exécutions à ce fichier (chmod +x firewall) et de la placer dans le répertoire /etc/init.d/ et de l’activer au démarrage du serveur avec update-rc.d firewall defaults (mais assurez vous bien que le fichier fonctionne correctement avant !!)

J’en profite au passage pour vous donner mon script qui permet de bien remettre à 0 iptables en cas de soucis :

#!/bin/sh
echo "Flushing iptables rules..."
sleep 1
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

C’est tout du côté du Firewall. Si un jour vous installez des services supplémentaires et que ça ne fonctionne pas, n’oubliez pas de regarder du côté du Firewall, on a tendance à l’oublier lorsque la configuration est finie.

Ban automatique des kikoolol avec fail2ban

La plupart du temps, lorsqu’on essaye de pirater votre serveur, les pirates utilisent la méthode du brute force. C’est-à-dire qu’ils testent tous les mots de passe possible, en partant du plus probable (comme les mots du dictionnaire) au plus improbable (les suites de caractères aléatoires). Avec la puissance de calcul des ordinateurs actuels, ça fonctionne pas trop mal si votre mot de passe est simple. Heureusement on peut facilement le contrer en installant un système qui ban automatiquement les gens qui essayent de se connecter à mainte reprise sans y parvenir.

Configuration simple de fail2ban

Pour commencer, vous devez installer fail2ban avec la ligne de commande apt-get install fail2ban. Ensuite il est recommandé de laisser le fichier de configuration intacte et d’en faire une copie pour le modifier, donc cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.local et puis vi etc/fail2ban/jail.conf.local.

Pour activer un filtre, vous devez placer le champ enabled à true et éventuellement changer le maxretry (nombre de tentative avant le ban) , le bantime (temps de ban) et le port (surtout pour ssh).

Je vous recommande d’activer les filtres suivants : [ssh], [ssh-dos], [apache], [apache-multiport], [apache-noscript], [apache-overflows], [proftpd], [postfix], [couriersmtp] et [courierauth]. Ces filtres sont activés par défaut, vous n’avez rien d’autre à faire à par changer le enabled = false à true.

Ajouter des filtres personnalisés

Les filtres par défaut sont très bien, mais voici quelques filtres personnalisés que vous pouvez retrouver sur internet. Vous n’êtes pas obligé de les activer, c’est du bonus.

Le filtre « apache-404″ permet de bannir les utilisateurs qui font trop d’erreurs 404. Généralement ce sont ceux qui recherchent des pages d’administration à l’arrache en modifiant l’url. En revanche, faites très attention ! Si il manque un élement sur votre site, comme par exemple une image, ça va générer une erreur 404 et ça risque de bannir vos visiteurs.

Le filtre « apache-admin » permet de protéger votre espace d’administration si vous en avez un. Dans mon cas non mais je préfère vous le donner quand même.

Et le dernier, « apache-w00tw00t » permet de bannir un scanner de faille « w00tw00t » fréquemment utilisé, on en retrouve la trace dans les logs.

À ajouter dans le fichier /etc/fail2ban/jail.conf.local :

[apache-404]
enabled = true
port = http
filter = apache-404
logpath = /var/log/apache*/error*.log
maxretry = 10

[apache-admin]
enabled = true
port = http
filter = apache-admin
logpath = /var/log/apache*/error*.log
maxretry = 6

[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1

Maintenant vous devez créer 3 fichiers, qui sont des filtres à base d’expression régulière (Regex), dans /etc/fail2ban/filter.d/ :

(Apparement dans la vidéo, j’ai oublié les « .conf » à la fin des fichiers, pensez y donc)
apache-404.conf

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*
#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

apache-admin.conf

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*admin|PMA|mysql

#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

apache-w00tw00t.conf

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 471 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT
# [client x.x.x.x] File does not exist: /home/www/admin/admin,
failregex = [[]client []] File does not exist: .*admin|PMA|mysql

#
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
root@ks367082:/etc/fail2ban/filter.d# cat apache-w00tw00t.conf
[Definition]

failregex = ^ -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*

ignoreregex =

Ensuite, vous pouvez faire un restart de fail2ban avec /etc/init.d/fail2ban restart et c’est terminé.

Détecteur de backdoor

Le dernier logiciel à installer est un détecteur de Backdoor. Pour l’installer, faites un apt-get install rkhunter et vérifier dans son fichier de configuration /etc/default/rkhunter que report_email est sur root et cron_daily_run à yes.

Vous recevrez des emails en cas si des fichiers sensibles sont modifiées. Attention toutefois, car il peut générer des faux positifs.

Recevoir un email lors d’une connexion ssh

Cette fois-ci c’est plus une astuce qu’un logiciel. Si vous souhaitez recevoir un email dés que quelqu’un se connecte sur un compte d’un utilisateurs système, vous pouvez modifier son fichier ~user/.bashrc et ajouter la ligne suivante : echo ‘Acces SheLL Root’ `who` `date` | mail -s `hostname` Shell Root email@domaine.tld

À chaque connexion, ce bout de code sera exécuté et vous serez avertie. Plutôt pratique si vous êtes parano et souhaitez détecter des intrusions facilement.

En conclusion, avec ces quelques principes de bases vous devriez avoir un serveur sécurisé. N’oubliez pas qu’aucun serveur n’est infaillible et gardez toujours un système à jour pour limiter les risques. Dans la prochaine vidéo, nous verrons comment augmenter la sécurité d’apache et dans une autre vidéo comment mettre en place un système de backup.

Si vous voulez en apprendre plus sur Iptables, je vous recommande ce tutoriel sur le site du zéro.

Si vous avez aimé l’article, n’hésitez pas à le diffuser sur Facebook/Twitter via les boutons ci-dessous. Je vous invite également sur la page facebook du blog (merci d’avance).

Publié le 23 août 2011 par Madrzejewski Alexis dans Serveur Dédié

Vous avez aimé ce billet ?

Inscrivez-vous au Flux RSS du blog, suivez-moi sur Twitter ou partager simplement cet article avec vos amis sur Twitter ou Facebook

Inscrivez-vous à la newsletter

Inscrivez-vous à la newsletter en précisant votre prénom et votre adresse email pour recevoir les dernières mises à jour du blog et des tutoriels exclusif par email (En savoir plus)

94 commentaires

Ajouter un commentaire

  1. Pingback: Installation et configuration d’un serveur dédié | Tutoriels-Video

  2. Bonjour tout le monde !

    Tout d’abord j’aimerais te remercier,
    Alexis, pour tes vidéos très intéressantes.

    J’ai fait le fichier firewall avec le même
    contenu que toi, j’ai aussi exécuté la commande
    update-rc.d firewall defaults, après l’avoir
    copier au bon endroit, mais le problème c’est
    qu’il ne s’exécute pas au démarrage, j’ai donc
    chercher un peu et j’ai trouver un autre moyen
    d’activer le script au démarrage, voici ce que
    j’ai fait :

    dans /etc/rc.local j’ai rajouter, à la fin du fichier,
    le chemin de mon script, /root/firewall et au
    redémarrage un iptables -L m’indique que le
    script s’est exécuter.

    Voilà, si ça peu servir à d’autre !

    PS : impatient de voir les prochaines vidéos…

    Cordialement,
    Guillaume.

    Répondre
    • Merci d’avoir partager ta découverte, je suis certain que ça en aidera plus d’uns !

      Répondre
    • Hoki

      Effectivement, le script ne s’exécutait pas automatiquement également. Merci donc pour la solution.

      Répondre
    • Rha oui merci ! Je cherchais le pourquoi du comment depuis quelques heures ^^ et encore merci alexis pour tout ça !

      Répondre
    • Bonsoir,

      Si « update-rc.d firewall defaults » ne fonctionne pas (règles non appliquées après reboot) c’est à cause des premières lignes du fichier firewall, il faut les remplacer par :

      ### 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

      Répondre
  3. Job

    Hello,

    J’ai un petit problème, alors que tout fonctionnait à merveille, je n’arrive subitement plus à me connecter à l’un de mes sites via FileZilla, le logiciel reste bloqué à ce stade de la connexion:
    « Commande : MLSD »

    Après qq recherches, il semble que ça soit lié au Firewall, mais je n’ai pas réussi à trouver de solutions. J’ai également testé la connexion en mode actif, passif, etc sur FileZilla, en vain.

    Merci

    Répondre
    • Arf, une fois j’ai eu un bug à la con dans le même style. J’ai longtemps cherché, pensant que ça venait du Firewall et un simple reboot du serveur à réglé le problème pour moi ^^.
      Essaye de voir si ça suffit, sinon bah je vais faire quelques recherches pour voir ce que je peux trouver.

      Répondre
      • job

        Effectivement, un reboot et ça repart :) Tout est OK mnt, je vais tester l’install d’un wordpress, merci mille fois !

    • voilà la solution pour ftp avec ovh

      # FTP Out
      iptables -t filter -A OUTPUT -p tcp –dport 20:21 -j ACCEPT

      # FTP In
      modprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH

      iptables -t filter -A INPUT -p tcp –dport 20:21 -j ACCEPT
      iptables -t filter -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

      Répondre
  4. Et bien merci pour ce tutoriel qui pose les bases d’iptables. Très utile car si il est possible de se référer au man, avoir des bases expliquées clairement ne fait pas de mal!

    Répondre
  5. Serda

    la meme pour le FTP je peux plus m’y connecter …

    Échec de la tentative de connexion avec « ECONNREFUSED

    jai essayer de tout supprimer les fichier du firewall mais rien i fait ><

    Répondre
    • Serda

      Bon tu doit surement etre occuper mais je peux me co en sftp xD mais la on voit toute l’arborescence … bref jcomprend plus rien la ><

      Répondre
      • Bonjour Serda,

        Par défaut, c’est normal. Chaque utilisateur peut remonter jusqu’à la racine du serveur, ce qui représente évidemment une faille de sécurité.
        Pour palier à ce problème, il suffit d’ajouter cette ligne dans le fichier de configuration de proftpd (/etc/proftpd/proftpd.conf) : DefaultRoot ~/www

        Ça permet « d’emprisonner » les utilisateurs dans leurs répertoires home/www sans qu’il puisse remonter au dessus.

  6. stéphane

    Bonjour, voilà j’ai modifié un peu le script pour une utilisation sans serveur ovh tous se qui sort est autorisé mais tous se qui entre est bloqué sauf les ports autorisé! attention si c’est pour un serveur ovh n’oubliez pas de modifier le OUTPUT par sécurité c’est mieux mais sur un pc distant ou vous activez un a un les port ou vous activez tous le fichier est pas complètement terminé mais j’espère que ca pourra vous aidez 😉

    #!/bin/sh

    # Mise à Zero
    echo « Mise à zero… »
    sleep 1
    iptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -P OUTPUT ACCEPT

    # On bloque tout
    iptables -P INPUT DROP
    # iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    echo « ————- ON INTERDIT TOUS ———— »
    echo « ————- INPUT AUTORISER ————- »

    # modprobe ip_conntrack_ftp

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

    # Autorise le loopback (127.0.0.1)
    # iptables -A INPUT -i lo -j ACCEPT

    # ICMP (le ping)
    # iptables -A INPUT -p icmp -j ACCEPT; echo « Ping \ »ICMP\ » »

    # FTP Input
    # iptables -A INPUT -p tcp –dport 20 -j ACCEPT; echo « FTP tcp »

    # FTP Input
    # iptables -A INPUT -p tcp –dport 21 -j ACCEPT; echo « FTP udp »

    # SSH Input
    # iptables -A INPUT -p tcp –dport 22 -j ACCEPT; echo « SSH tcp »

    # TELNET Input
    # iptables -A INPUT -p tcp –dport 23 -j ACCEPT; echo « TELNET tcp »

    # SMTP Input
    # iptables -A INPUT -p tcp –dport 25 -j ACCEPT; echo « SMTP tcp »

    # DNS Input
    # iptables -A INPUT -p tcp –dport 53 -j ACCEPT; echo « DNS tcp »
    # iptables -A INPUT -p udp –dport 53 -j ACCEPT; echo « DNS udp »

    # DHCP Input
    # iptables -A INPUT -p tcp –dport 67 -j ACCEPT; echo « DHCP tcp »
    # iptables -A INPUT -p udp –dport 67 -j ACCEPT; echo « DHCP udp »

    # HTTP Input
    iptables -A INPUT -p tcp –dport 80 -j ACCEPT; echo « HTTP tcp »
    # iptables -A INPUT -p udp –dport 80 -j ACCEPT; echo « HTTP udp »

    # POP3 Input
    # iptables -A INPUT -p tcp –dport 110 -j ACCEPT; echo « POP3 tcp »
    # iptables -A INPUT -p udp –dport 110 -j ACCEPT; echo « POP3 udp »

    # NNTP Input
    # iptables -A INPUT -p tcp –dport 119 -j ACCEPT; echo « NNTP tcp »

    # NTP Input
    # iptables -A INPUT -p tcp –dport 123 -j ACCEPT; echo « NTP tcp »
    # iptables -A INPUT -p udp –dport 123 -j ACCEPT; echo « NTP udp »

    # IMAP Input
    # iptables -A INPUT -p tcp –dport 143 -j ACCEPT; echo « IMAP tcp »

    # HTTPS Input
    # iptables -A INPUT -p tcp –dport 443 -j ACCEPT; echo « HTTPS tcp »

    # IMAPS Input
    # iptables -A INPUT -p tcp –dport 993 -j ACCEPT; echo « IMAPS tcp »

    # POP3S Input:
    # iptables -A INPUT -p tcp –dport 995 -j ACCEPT; echo « IMAPS tcp »

    # MSN Input
    iptables -A INPUT -p tcp –dport 1863 -j ACCEPT; echo « MSN tcp »

    # MYSQL Input
    # iptables -A INPUT -p tcp –dport 3306 -j ACCEPT; echo « MYSQL tcp »

    # FACEBOOK Input
    iptables -A INPUT -p tcp –dport 5050 -j ACCEPT; echo « FACEBOOK tcp »

    # ICQ AIM Input
    iptables -A INPUT -p tcp –dport 5190 -j ACCEPT; echo « ICQ AIM tcp »

    # YAHOO Input
    iptables -A INPUT -p tcp –dport 5222 -j ACCEPT; echo « YAHOO tcp »

    # IRC Input
    iptables -A INPUT -p tcp –dport 6667 -j ACCEPT; echo « IRC tcp »

    # SKYPE Input
    iptables -A INPUT -p tcp –dport 61578 -j ACCEPT; echo « SKYPE tcp »

    # HTTP-ALT Input
    iptables -A INPUT -p tcp –dport 8080 -j ACCEPT; echo « HTTP-ALT tcp »
    # iptables -A INPUT -p udp –dport 8080 -j ACCEPT; echo « HTTP-ALT udp »

    echo « ——————————————-« 

    Répondre
  7. Snif

    Bonjour,

    Pour commencer, merci à toi pour cette série de tutoriels. Ils sont très appréciables.

    Je me permet d’intervenir car j’utilise VSFTPD comme serveur FTP et celui-ci se connecte au serveur avec TLS/SSL.
    Pour pouvoir le faire fonctionner correctement, il ne faut pas oublier d’ouvrir quelques ports supplémentaires. Voici les lignes que j’ai du ajouter à ton fichier ‘firewall’ :
    iptables -A INPUT -p tcp -i eth0 –dport 40000:40100 -j ACCEPT
    iptables -A OUTPUT -p tcp -o eth0 –sport 40000:40100 -j ACCEPT

    D’autre part, j’utilise aussi Rsync pour backuper certains répertoires de ma machine sur mon serveur. Rsync utilise le port 873 en TCP par défaut. Il faut donc ouvrir ce port avec ces lignes :
    iptables -t filter -A INPUT -p tcp –dport 873 -j ACCEPT
    iptables -t filter -A OUTPUT -p tcp –dport 873 -j ACCEPT

    Répondre
  8. Bonjour,

    super utile le tutoriel, mais je bloque à la fin justement pour l’email lorsque l’on se connecte.

    j’ai testé la ligne de commande,mais j’ai l’erreur :

    bash : mail : commande introuvable

    Je crois qu’il faut installer un paquet pour les mails.. mais je sais pas lequel

    merci d’avance

    Répondre
  9. Insidecode

    je cherche a banner les robots de download. a tu une failregex pour ca?

    Répondre
    • Bonjour,

      Personnellement je ne connais pas de règle pour bloquer ce genre de robot. Cependant, je me demande si c’est réellement à ce niveau là qu’il faut agir, car un robot de download fera les mêmes logs qu’un utilisateur normal (sauf si on se base par rapport à la quantité, mais c’est difficile de choisir un seuil).

      Je commencerais par agir au niveau du fichier robot.txt, et ensuite voir les fichiers de log avec les user-agent renvoyés (et dans ce cas c’est facile de cibler un robot particulier). Cependant, les user-agents ne sont pas fiables et sont facilement falsifiable.

      Répondre
  10. th0ny

    Salut Alexis !
    Je suis actuellement en train de reconfigurer mon serveur à 0 (formatage du DD,…)
    J’ai donc suivi une nouvelle fois un peu des tutos, par contre je me retrouve avec une belle erreur au niveau de Iptable.

    Lorsque le script est lancé, je n’ai plus de connexion sur le port 80 !
    Donc plus de surf, ni de apt-get :(

    Je ne trouve pas d’où viens le problème. Le script ne présente pas d’erreur.

    Répondre
    • Salut !

      Alors, petite question bête de ma part : est-ce que t’as bien une ligne qui débloque le port 80 dans ton Firewall ?

      Ensuite, es-tu certains que ton script fonctionne correctement ? Ce que je veux dire, c’est que parfois au milieu du script, une règle foire à cause d’une erreur de syntaxe et donc la suite du script n’est pas exécuté. Suffit qu’une de ces règles foire avant ton déblocage de port 80 pour que se soit bloqué vue que la politique par défaut est de tout DROP.

      Je te recommande mettre des « echo » un peu partout pour suivre visuellement ton script en cours d’exécution.

      Après, tu peut toujours faire un coup de « iptables -L » pour voir si le port 80 est bien débloqué mais je soupçonne une des erreurs évoqué plus haut.

      Répondre
      • th0ny

        Hum !!
        J’ai honte…
        J’avais oublié d’ajouter les règles du DNS …
        Je l’ai su quand j’ai voulu faire un ping, il n’as pas trouvé l’hote google.fr ^^
        Merci de ton attention !

        Continue comme ça !

  11. Bobo

    Pour activer le script au démarrage avec la méthode « update-rc.d firewall defaults » il faut simplement changer l’entête du fichier (il doit avoir un soucis) :

    #!/bin/bash
    #
    ### BEGIN INIT INFO
    # Provides: lsb-demarrage
    # Required-Start: $syslog $local_fs $remote_fs
    # Required-Stop: $syslog $local_fs $remote_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Open terminal
    # Description: Open terminal
    ### END INIT INFO

    remplacé le par celui ci.

    Merci pour tes tutos c’est sympa !

    Répondre
  12. manhphong

    Bonjour Alexis

    J’ai un serveur dédié d’OVH OS fedora 15. j’ai installé fail2ban en ajoutant le filtre personnalisé, j’ai creé 3 fichiers ( apache-404.conf , apache-w00tw00t.conf,
    apache-admin.conf ) dans /etc/fail2ban/filter.d/
    j’ai redémaré le serveur fail2ban /etc/init.d/fail2ban restart

    erreur : Restarting fail2ban (via systemctl): Job failed. See system logs and ‘systemctl status’ for details. échoué

    si j’ai enlevé le filtre personnalisé [apache-admin], je n’ai plus erreur ?

    J’ai ainsi installé rkhunter , mais je n’ai pas trouvé le fichier rkhunter pour
    voir s’il est bien configuré.

    Merci

    Répondre
  13. Un grand merci Alexis pour ce tuto, bien utile!

    Répondre
  14. Bonjour,

    Merci pour ce tuto.

    Avant l’application des règles iptables que tu indiques j’avais de règles liées à fail2ban :

    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    fail2ban-ssh tcp — anywhere anywhere multiport dports ssh

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    Chain fail2ban-ssh (1 references)
    target prot opt source destination
    RETURN all — anywhere anywhere

    Sont-elles nécessaires ? Comment les ré-appliquer ?

    Merci, Nicolas.

    Répondre
    • Bon, après avoir corrigé le problème de « update-rc.d firewall defaults » qui ne permettait pas d’appliquer les règles après reboot (voir commentaire plus haut), j’ai pu constater que les règles concernant fail2ban étaient automatiquement ajoutées à iptables.
      Nicolas.

      Répondre
  15. seb

    Bonjour,
    Merci pour ce tuto.

    Je rencontre un problème avec iptables et mon ftp.
    Mon proftpd est configuré en mode passif, mais je n’arrive pas à accéder à mon répertoire. Mon client ftp me donne cette le message d’erreur suivant :

    [R] 227 Entering Passive Mode (192,168,1,22,186,206).
    [R] Opening data connection IP: 192.168.1.22 PORT: 47822
    [R] Data Socket Error: Connection timed out
    [R] List Error

    J’ai pu voir qu’il fallait configuré une plage de ports dans le proftpd.conf avec :
    PassivePorts 5000 5100 (ma plage de port)

    Mais rien a faire je n’arrive pas à me connecter au ftp

    Répondre
  16. mike02

    bonjour alexis,

    je voulais te dire que j’ai effectué ce tuto dans son intégralité. Cependant j’ai un problème avec mon FTP à savoir que lorsque j’accède à mon répertoire depuis filezilla mais impossible pour moi de récupérer le contenu du dossier.

    je ne sais pas d’ou pourrait venir le problème, c’est pourquoi je faisais appel à toi pour savoir si tu n’avais pas déjà rencontré ce problème

    merci

    mikael

    Répondre
    • Bonjour Mikael,

      Par défaut, le FTP utilise 2 ports distincts. Un port pour envoyer les commandes (ls, put, get par exemple) et un port pour envoyer/recevoir les fichiers.
      Ce sont les ports 20 et 21 (lequel fait quoi, j’ai un doute mais une recherche sur wikipédia donnera la réponse).

      Au vu du problème, je pense que tu as débloqué qu’un seul des 2 ports, celui pour envoyer les commandes. Il faut donc débloquer le second.

      Répondre
  17. URT

    Bonjour,
    merci pour ces tuto videos très intéressantes !joli travail !
    j ai une petite question de débutant, vraiment très débutant :)
    je souhaite me prendre un kimsufi, et évidement le sécuriser un mimimum.
    Ma question est juste de savoir si les manips et lignes de code et les commandes sont valables aussi sur un serveur sous ubuntu 10.04?

    Merci !

    Répondre
    • Bonjour URT,

      Ubuntu étant basé du la distribution Debian, il y a beaucoup d’éléments communs. Donc oui, les tutoriels sont valables pour Ubuntu 10.04, il y aura juste quelques petites différences mais globalement c’est le même principe.

      Répondre
  18. URT

    Merci Alexis, je vais donc me lancer, grave a tes vidéos, ça m a enlevé les quelques craintes que j avais
    encore bravo merci !

    Mr URT

    Répondre
  19. toto

    ça marche pas le fail2ban bizarre j’ai essayé les mêmes configurations
    le seul différence c’est que j’utilise des machines virtuels sous virtualbox

    Répondre
  20. toto

    désolé j’ai oublié de dire merci pour ce vidéo qui m’a vraiment aidé le seul qui me pose probléme c’est fail2ban

    Répondre
  21. didif

    Salut Madrzejewski Alexis et merci pour les tutos grâce aux quels ont apprend jour après jour.

    J’ai essayé la config iptables mais le problème c’est OpenVZ car je voudrais sécurisé mon dédié mais quand j’active les restrictions aucun VPS ne répond ni par http ni SSH, donc si tu as une solution elle sera la bienvenue 😉

    Merci à toi et à bientôt

    Répondre
  22. didif

    Encore une chose SVP, je n’arrive pas a trouver le filtre 404 pour lighttpd.

    Merci à tous.

    Répondre
  23. didir

    Salut,

    J’ai deux question:

    1- J’utilise Openvz et quand j’applique les règles iptables aucun vps ne répond ni par HTTP ni SSH. Est ce que je dois mettre d’autres ports ?

    2- Avez vous un filtre 404 pour Lighttpd ?

    Merci pour les très bon travail et les tutos avec les quels on apprend jour après jour.

    Merci et à bientôt.

    Répondre
    • Bonjour Didir

      Pour le Firewall, il faut probablement activer les règles de Forwarding et ajouter des règles personnalisé pour faire du Pat. C’est ce que j’avais mis en place pour pouvoir pinguer mes VM sur Proxmox (donc openvz) à partir du réseau.

      J’ai prévu de faire un tutoriel à ce sujet, mais en attendant voici le script bash que j’utilisais pour mes tests. J’ai mis en place un système de boucle pour que se soit à peu près dynamique mais pour s’inspirer ça ira je pense :)

      http://pastebin.com/sehs443p

      Et pour le filtre 404 sur Lighttpd, je supose qu’une personne à déjà fait un script similaire. De toute manière, ce n’est pas vraiment une bonne idée d’appliquer ce filtre, car si le filtre contient un fichier manquant ça ban tout le monde. Donc au pire, c’est pas une grande perte, il faut faire super attention avec ce filtre.

      Répondre
  24. Bonjour Alexis, j’aimerais te remercier, pour tes vidéos très intéressantes.
    je me débute avec les serveur dédié , et j’ai un souci , quand je consulte les fichiers log syslog et error.log j’ai cette erreur , j’arrive pas a comprendre comment banire ces site.

    named[845]: client 69.162.74.235#6364: query (cache) ‘damedepique.net/ANY/IN’ denied
    named[845]: client 74.125.186.19#43226: query (cache) ‘www.bingogratuit.com/A/IN’ denied

    merci .

    Répondre
  25. max

    Super ton tuto
    Apparemment tout fonctionne merveilleusement sur ma machine. Par contre je n’ai pas bien pigé au niveau de fail2ban pour les 404 … il y a forcément sur un site des erreurs 404 (enfin ça peut arriver) et en mettant à 10 le retry je suppose que le risque de bannir tout le monde est faible non?
    Merci à toi

    Répondre
    • Bonjour Max,

      C’est vrai, il faut que le site ne contienne vraiment aucune erreur 404, ce qui est difficile. J’avais mis en place ce système sur mon serveur et tout le monde était ban à cause d’une image manquante ^^.

      C’est d’autant plus vrai pour les ipod/ipad qui demandent des fichiers spécifique pour avoir le logo/aperçu du site, un peu comme les favicon. Si on à pas prévue ça, ça les ban au bout de 10 pages.

      Répondre
      • max

        Ok alexis
        Alors si je règle à 20 il faudra que le visiteur génère 20 404 avant d’être ban?
        Faut vraiment le vouloir non?

      • Exact, mais il ne faut pas forcement « le vouloir ». Je pensais ça aussi, mais j’avais oublié de mettre une image sur mon site (de mémoire c’était dans le header je crois) qui était sur toutes les pages. Du coup, à chaque changement de page ça faisait une erreur 404 et donc au bout de 20 pages ça les utilisateurs étaient bannis.

      • max

        Salut alexis
        En effet dans ce cas de figure je comprends mieux, je n’y avais pas pensé.
        Merci encore pour ton tuto

      • Bonjour ,
        je vous re merci Alexi vous m’avez bien aidé , j’ai un petit souci, Hum, si je dis pas de bêtise , après l’installation de fail2ban j’ai voulu me bannir moi même donc j’ai générer les pages 404 , dans le error.log ces erreurs affiche correctement par contre je fait plus de max d’erreur autorisé et j’accède toujours au site .
        Merci à toi je partage :)

  26. didir

    Salut à tous et merci à toi Alexis,

    D’après ce que tu dis c’est vraiment pas facile de mettre en place une config Iptables avec des VM mais je vais revoir tout cela tout doucement 😉

    Si tu pouvais poster le filtre 404 pour lighttpd car j’ai fais pas mal de recherche sur google et je n’ai rien trouvé.

    Merci à toi pour tout se travail et à bientôt.

    Répondre
  27. bonjour,
    merci de tout ces tuto vidéo super
    je cherche a métré des drop dans le firewall sur des nom de domaine IP
    mais je seiche
    iptables -I INPUT -s 88.191.1.1 -j DROP
    ou
    iptables -A OUTPUT -s 192.168.1.200 -j DROP
    Alexis si tu passe dans le coin merci ^^

    Répondre
    • Bonjour chatonhub,

      Pour bloquer l’adresse IP 1.2.3.4 : iptables -A INPUT -s 1.2.3.4 -j DROP

      On peut également bloquer un sous-réseau, par exemple le 10.0.0.0/8 avec : iptables -A INPUT -s 10.0.0.0/8 -j DROP

      Ensuite, l’inverse est également intéressant, c’est à dire débloquer une IP. Pour cela, il faut faire un : iptables -L INPUT -n –line-numbers | grep 1.2.3.4 pour repérer le numéro de ligne dans la table des règles.
      Ensuite, si la ligne est la numéro 3, il faut faire : iptables -D INPUT 3

      J’espère que ça répond à ta question.

      Répondre
  28. merci de ta réponse
    enfaite l’idée serais de bloquer un nom de domaine une ip fix

    iptables -A INPUT -s 88.191.117.111 -j DROP « exemple d’ip de dedibox au pif

    iptables -A INPUT -s exemple.no-ip.info -j DROP nom de domaine dns au pif

    zapto.org
    dyndns.info
    de bloquer se genre de domaine dns
    serais se la bonne façon
    et encore un énorme merci

    Répondre
    • Personellement, je pinguerais tous les sites que je veux bloquer pour récupérer l’ip et les bloquer après.

      Le problème, c’est qu’un site comme dynDNS possède plusieurs serveurs et il faut faire le listing des ip qu’il utilise. Je me demande si bloquer juste l’ip principale suffit en fait.

      En premier lieu, essaye de bloquer les IP ou sont hébergés les sites principaux (que tu trouves avec un ping donc, même si tu dois pouvoir mettre un nom de domaine dans les règles iptables).

      Regarde si ça bloque suffisamment et si non, d’après mes recherches, j’ai trouvé ça qui peut être intéressant :
      iptables -A FORWARD -p tcp –dport 53 -m string –algo kmp –string « domain.com » -j DROP
      iptables -A FORWARD -p udp –dport 53 -m string –algo kmp –string « domain.com » -j DROP
      http://www.linuxquestions.org/questions/linux-networking-3/iptables-block-subdomains-a-domain-com-b-domain-com-c-domain-com-732457/

      Répondre
  29. Re,
    merci
    je vais tester tout cela je suppose qu’un drop juste le nom adresse
    exemple
    iptables -A INPUT -s exemple.no-ip.info -j DROP
    devrais bloquer l’ip vu que on se serre de dns pour justement évité le changement d’ip
    enfin je crois lol
    en tout cas merci de toute tais infos qui sont très pratique je teste donc tout cela et merci

    Répondre
  30. bonjour,
    j’ai testé donc la règle iptables -A INPUT -s exemple.no-ip.info -j DROP
    je la vois en drop dans ma configure iptables -L
    mais la personne se connecte a mon serveur de t chat (pour des test je prend un collègue c mieux )
    je vais testé la dernier règle
    iptables -A FORWARD -p udp –dport 53 -m string –algo kmp –string « domain.com » -j DROP

    Question les « » sont a mettre ou Juste factice??
    bon dimanche a tous

    Répondre
  31. Bonjour,

    depuis que j’ai exécuté le script shell firewall plus moyen d’uploader quoi que se soit sur mon ftp , sauf si je reboot et que le shell firewall n’est plus actif.

    Ne manquerait-il pas quelque chose dans votre fichier iptables de votre tutoriel concernant proftpd ??

    En vous remerciant.

    Cordialement.

    Répondre
    • Bonjour Tchupa,

      Je pense que c’est Iptables qui bloque les ports FTP. Regarde si tu n’utilises pas les ports passifs, qui sont assez difficile à configurer puisque c’est une selection de port aléatoire.
      Sinon pour du FTP classique, c’est bien 20 et 21, un port pour envoyer les commandes et l’autre pour les données.
      Autre piste, essaye d’activer le mod conntrack_ftp avec la commande « modprobe ip_conntrack_ftp ». Si ça règle ton problème, tu peux le mettre dans ton fichier de configuration Firewall :)

      Répondre
  32. ### 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

    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 »

    # Radio IN/OUT

    iptables -t filter -A OUTPUT -p tcp –dport 8000 -j ACCEPT

    iptables -t filter -A INPUT -p tcp –dport 8000 -j ACCEPT

    echo « Radio 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 »

    ton firewall devrai ressembler a peu prés a cela je suppose

    Répondre
  33. Niko

    Salut alexis, j’ai suivi tout tes tutos. Actuellement tout fonctionne. J’ai juste une attaque brute force sur le pop3 tous les 2,3 jours que je relève avec logwatch :

    ——————— POP-3 Begin ————————

    **Unmatched Entries**
    Disconnected, ip=[::ffff:58.247.84.219]: 1920 Time(s)
    LOGIN FAILED, user=!@#$%, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$%^&*(), ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$%^&*(, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$%^&*, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$%^&, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$%^, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=!@#$, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=%null%, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=%username%!@#$, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=%username%, ip=[::ffff:58.247.84.219]: 1 Time(s)
    LOGIN FAILED, user=000000, ip=[::ffff:58.247.84.219]: 1 Time(s)

    et je ne vois pas comment les bannir avec fail2ban. Tu peux m’éclairer ? si possible pas en relevant l’adresse ip merci

    Répondre
  34. Sa ressemble beaucoup a celui du tutoriel , c’est quoi la différence avec le tiens ?

    Je suis un peu perdu dans tout ça.

    concernant fail2ban j’en ai aucune idée, a savoir que ma configuration est identique a celle du tuto puisque j’ai configuré mon serveur en suivant les différentes vidéos mise a disposition.

    Merci.

    Tchupa.

    Répondre
  35. Tarok

    Bonsoir,

    Juste une info qui me semble indispensable :

    Ceci est vraiment à éviter :
    iptables -t filter -P INPUT DROP
    iptables -t filter -P FORWARD DROP
    iptables -t filter -P OUTPUT DROP

    Car si il y la moindre erreur dans iptables, le serveur n’est plus dispo

    Répondre
    • Bonjour Tarok,

      C’est évident mais pourtant c’est une technique très largement utilisé. Il faut juste faire très attention à bien tester SSH et si ce dernier fonctionne on peut toujours rectifier le firewall par la suite.

      Personnellement, quand je teste un script iptable, j’ajoute toujours une règle qui autorise tout à la fin de mon fichier après un ‘sleep 10′ par exemple, pour voir si j’ai toujours la main sur le serveur et le cas échéant remettre les règles à 0.

      Puis en cas de problème, on peut toujours démarrer le serveur en mode rescue pour enlever le firewall :) la plupart des hébergeurs le propose et certains propose même du KVM sur IP comme Online par exemple.

      Répondre
  36. Zicguy

    Salut Alexis,
    Il me semble qu’au niveau de la création des filtres personnalisés de fail2ban, il y a une erreur dans le fichier apache-w00tw00t.conf.
    A mon sens, celui-ci devrait plus ressembler à :

    [Definition]
    failregex = ^ -.* »GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).* ».*
    ignoreregex =

    Répondre
  37. Salut à tous, très simpat le tutoriel ainsi que les postes, néanmoins j’ai un petit problème avec firwall il me met « BAD ARGUMENT ‘ACCEPT' » pendant l’exécution de firewall, merci d’aider.

    Répondre
  38. dotMastaz

    Qui utilise cette règle « [apache-404] » ?
    Super dangereuse non ? Je sais qu’Alexis en parle, mais faut vraiment que tout roule sinon…!

    Répondre
  39. GergE

    Une information pour ceux qui parametrent fail2ban.
    Si vous souhaitez y mettre votre adresse IP, ne remplacez pas adresse locale (127.0.0.1) par la votre.
    Il faut l’ajouter derrière en séparant par un espace, ce qui donne donc :

    ignoreip = 127.0.0.1 88.88.88.88

    Cela pourra peut-être s’avérer utile pour éviter que votre serveur s’autobanisse tout seul (ce qui m’est arrivé).

    Bonne journée.

    Répondre
  40. Merci pour ce tuto génial et bien expliqué.

    Sauf erreur de ma part, les règles de fail2ban doivent être copier et modifier seulement sur un fichier nommé jail.local et non sur jail.conf.local à partir du fichier jail.conf
    la commande : cp jail.conf jail.local

    Egalement on peut vérifier les logs avec la commande : cat /var/log/fail2ban.log

    Si fail2ban fonctionne correctement, en retour, on aura le message suivant :
    Restarting authentication failure monitor: fail2ban.

    Cordialement,

    Répondre
  41. 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 »

    Répondre
  42. 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.

    Répondre
    • 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.

      Répondre
  43. 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 ?

    Répondre
  44. 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 :)

    Répondre
  45. 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. »

    Répondre
  46. 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*

    Répondre
  47. 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 ))

    Répondre
  48. 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.

    Répondre
    • 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

      Répondre
  49. 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

    Répondre
  50. 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) ?

    Répondre

Ajouter un commentaire


Ici les commentaires sont en DoFollow, profitez-en mais en abusez pas !
Veuillez ne pas poster de code (php, html ou autre) car il sera bloqué par le site.
Les commentaires ne sont pas immédiatement validés.
Merci de faire une recherche sur Google avant de poser une question.