[iptables] aidez moi pour un firewall [Fermé]

fabrice11901 790 Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention - 6 oct. 2006 à 16:37 - Dernière réponse : fabrice11901 790 Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention
- 7 oct. 2006 à 07:32
Bonjour
Y a un mois à peu près, une personne de ce forum m'avait aider pour un firewall iptables pour mon serveur web sous ubuntu v5.10
En autorisant le port 22 (ssh) 80, 53, 25, 110, 21, 20
A ce jour le firewall ne fonctionne pas bien il me bloque à moitier le port 80 alors qu'il devrait laisser passer, le 110 ne fonctionne pas etc (alors qu'il a marché)
voici ce firewall :
iptables_start :
#! /bin/sh
#
# Description: configuration de firewall netfilter/iptables
#
# Initialization de la table FILTER
#
iptables -F
iptables -X
iptables -P INPUT   DROP 
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP # les 3 cmd = debranchement des cables

# Initialization de la table NAT
#
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
#
# Initialisation de la table MANGLE
#
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING    ACCEPT
iptables -t mangle -P INPUT         ACCEPT
iptables -t mangle -P OUTPUT        ACCEPT
iptables -t mangle -P FORWARD       ACCEPT
iptables -t mangle -P POSTROUTING   ACCEPT

# interface lo
iptables -A INPUT -i lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT
iptables -A OUTPUT -o lo -s '0.0.0.0/0' -d '0.0.0.0/0' -j ACCEPT

#                            table FILTER
#
# chaque commande est sur une seule ligne
#
# remplace eth0 avec ton interface
# et xxx.xxx.xxx.xxx avec IP de ton serveur
iptables -A INPUT -i eth0 -d 88.191.27.74 -m state --state ESTABLISHED,RELATED -j ACCEPT

#on accepte ici les ports 20 21 22 23 25 80 110 
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 20:21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 23 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d 88.191.27.74 --dport 110 -j ACCEPT
#
iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT


iptables_stop :

#! /bin/sh
#
# Description:  firewall netfilter/iptables est maintenant ouvert
#
# Initialization de la table FILTER
#
iptables -F
iptables -X
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

# Initialization de la table NAT
#
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
#
# Initialisation de la table MANGLE
#
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING    ACCEPT
iptables -t mangle -P INPUT         ACCEPT
iptables -t mangle -P OUTPUT        ACCEPT
iptables -t mangle -P FORWARD       ACCEPT
iptables -t mangle -P POSTROUTING   ACCEPT

iptables ce trouvant dans /etc/init.d :

#! /bin/sh

case $1 in

'start')
           /etc/iptables_start
          ;;
'stop')
          /etc/iptables_stop
          ;;
'*')
          echo "Usage : /etc/init.d/iptables {start|stop}"
          ;;
esac

voila ce script ne marche plus on m'en a passé un autre (pas encore testé, mais je ne peux pas l'arrêter moi même en faisant /etc/init.d/firewall stop par exemple :
#!/bin/bash
#
# config de base
#
# Vider les tables actuelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]

# Autoriser SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
echo - Autoriser SSH : [OK]

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Ne pas casser les connexions établies : [OK]

# Interdire toute connexion entrante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion entrante : [OK]

# Interdire toute connexion sortante
iptables -t filter -P OUTPUT DROP
echo - Interdire toute connexion sortante : [OK]

# Autoriser les requetes DNS, FTP, HTTP, NTP (pour les mises a jour)
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK]

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - Autoriser loopback : [OK]

# Autoriser ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo - Autoriser ping : [OK]

# Gestion des connexions entrantes autorisées
#
# iptables -t filter -A INPUT -p <tcp|udp> --dport <port> -j ACCEPT

# HTTP
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 - Autoriser serveur Apache : [OK]


# FTP
modprobe ip_conntrack_ftp
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 - Autoriser serveur FTP : [OK]

# Mail
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
echo - Autoriser serveur Mail : [OK]

# Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
echo - Limiter le Syn-Flood : [OK]

# Spoofing
iptables -N SPOOFED
iptables -A SPOOFED -s 127.0.0.0/8 -j DROP
iptables -A SPOOFED -s 169.254.0.0/12 -j DROP
iptables -A SPOOFED -s 172.16.0.0/12 -j DROP
iptables -A SPOOFED -s 192.168.0.0/16 -j DROP
iptables -A SPOOFED -s 10.0.0.0/8 -j DROP
echo - Bloquer le Spoofing : [OK]


que faire?$
merci
-
C'est bizarre, on en apprend tous les jours même quand on ne s'informe pas !!!!
Afficher la suite 

5 réponses

lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionContributeur sécuritéStatut 8 octobre 2012 Dernière intervention - 6 oct. 2006 à 18:49
0
Utile
Salut,

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

en OUTPUT tu ne doit pas avoir une chose pareil

essaie avec ça
iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT


mais je ne peux pas l'arrêter moi même en faisant /etc/init.d/firewall stop par exemple :

Oui tu peux mais il faut construire les scripts nécessaires. Mais tu les à dans le message qui t'as donné la personne de ce forum.
iptables_stop :

#! /bin/sh
#
# Description:  firewall netfilter/iptables est maintenant ouvert
#
# Initialization de la table FILTER
#
iptables -F
iptables -X
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

# Initialization de la table NAT
#
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
#
# Initialisation de la table MANGLE
#
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING    ACCEPT
iptables -t mangle -P INPUT         ACCEPT
iptables -t mangle -P OUTPUT        ACCEPT
iptables -t mangle -P FORWARD       ACCEPT
iptables -t mangle -P POSTROUTING   ACCEPT
iptables ce trouvant dans /etc/init.d :
#! /bin/sh

case $1 in

'start')
           /etc/iptables_start
          ;;
'stop')
          /etc/iptables_stop
          ;;
'*')
          echo "Usage : /etc/init.d/iptables {start|stop}"
          ;;
esac
lami20j
fabrice11901 790 Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention - 6 oct. 2006 à 20:16
0
Utile
J'ai modifier la ligne, mais j'ai le même problème avec ce firewall qu'avec l'ancien.
Sur le port 80, je n'ai que quelques sites qui passent. Si je déactive le firewall, tout fonctionne
merci
kmf31 1569 Messages postés mercredi 30 mars 2005Date d'inscriptionContributeurStatut 27 février 2007 Dernière intervention - 6 oct. 2006 à 22:44
0
Utile
1
Si on est trop parano de ne pas simplement ouvrir OUTPUT il faut etre super vigilant pour les requetes DNS. Deja la 1ere version est simplement fausse a cause de la remarque de lami20j.

Donc il faut ouvrir l'OUTPUT de facon inconditionee (sans le baratin RELATE ou ESTABLISHED etc.) sinon on ne peut jamais etablir une 1ere connexion. Ca revient a tout simplement couper l'internet et le reseau.

En plus si on n'ouvre que quelques ports en OUTPUT il ne faut surtout pas oublier le port 53 pour les requetes DNS (d'ouvrir le 80 pour http ne suffit pas, et pas non plus le 113). Pour ca le 2eme script semble mieux et (peut-etre) correcte.

Moi personnellement je conseillerais simplement d'ouvrir OUTPUT completement et pour INPUT il faut par defaut fournir une regle avec acceptation pour RELATED,ESTABLISHED. Cela fait un pare feu correcte pour filtrer la direction entree. Apres on ajoute d'autre regles INPUT pour les ports a ouvrir si on fait serveur (par exemple http, ftp, ssh etc.).
Autre chose: dans les regles INPUT avec "-d 88.191.27.74" c'est bien l'IP du PC concerne ? C'est aussi une option genre overkill/parano. Si on change l'IP du PC pour une raison il ne faut pas non-plus d'oublier de modifier ca. Pour que cette option soit utile il faudrait que quelqu'un contacte ton PC avec une autre IP destination que celle de ton PC mais dans ce cas comment est-ce que ca peut arriver a ton PC ???

Si on veut filtrer ou accepter pour certains IP client (IP de l'autre cote) il faut mettre "-s IP_client". Il n'y a pas confusion entre les deux ???


De controler l'OUTPUT necessitent pas mal de travail et ca peut facilement foirer pour de petits details qu'on oublie. De toute facon ca ne sert uniquement si on ne peut pas faire confiance a son PC ou aux utilisateurs de ce PC.

Si on garde de regles "parano" et ca ne marche pas il faut tester avec de regles LOG, c.-a-d. avant certaines ou chaque regle DROP ou REJECT on fait une 2eme fois la meme regle avec cible LOG (au lieu de "-j DROP" on mettrait "-j LOG --log-level info" pour la 2eme regle avant!!). De cette facon tous les paquets jetes ou rejetes apparaissent dans le log (soit visible avec la commande "dmesg" et/ou dans le fichier /var/log/messages) et on pourra ainsi deboguer et analyser le probleme, eventuellement, modifier les regles pour que ca marche.
lami20j 21513 Messages postés jeudi 4 novembre 2004Date d'inscriptionContributeur sécuritéStatut 8 octobre 2012 Dernière intervention - 6 oct. 2006 à 23:03
Salut kmf31,



Deja la 1ere version est simplement fausse a cause de la remarque de lami20j.

Donc il faut ouvrir l'OUTPUT de facon inconditionee (sans le baratin RELATE ou ESTABLISHED etc.)


C'est exactement ce que j'ai dit ( de façon inconditionée) et ça graçe à ! INVALID


Donc j'ai dit que
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

en OUTPUT tu ne doit pas avoir une chose pareil
- en traduction = de façon conditionée


En revanche ce qui suit est équivalent à de façon inconditionée

essaie avec ça

iptables -A OUTPUT -o eth0 -m state --state ! INVALID -j ACCEPT

Donc accepter tout en OUTPUT

lami20j

P.S. Le 1ère script est classique pour un client qui veut seulement se connecter sur net, sans avoir besoin de configurer un serveur ou un port particulier, et c'est vraiment suffisant. Je n'ai jamais rencontrer le moindre problème.

Bien sûr que si on possède un serveur il faut peaufiner la configuration ce qui semble le cas de fabrice11901.
fabrice11901 790 Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention - 7 oct. 2006 à 07:32
0
Utile
Bonjour
Et merci pour votre aide.
J'ai changé cette ligne, mais le port 80 ne fonctionne qu'à moitier certains sites s'affichent pas d'autre.
C'est un serveur web, donc je dois accepter le http, le ftp, le smtp, le pop, le ssh, les dns, le ping.
Pouvez-vous me coriger mon script entièrement afin qu'il fonctionne comme ça ensuite je verai les différences
merci d'avance de votre aide précieuse