Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
probleme firewall
Envoyé par: Rémi

voila la situation :

j essaie tout simplement de configurer un firewall avec iptable.
J ai lu pas mal de docs j ai recupéré différents scripts sur le net et j ai essayé de créer mon propre script. Pour savoir s'il marche correctement j ai été dans nmap et la je vois un tas de ports ouverts alors quand théorie je n'autorise que les port http https ftp. J'ai même essayé en n'autorisant aucun port et la toujours pas de changement.
Est ce normal quand ayant une politique par defaut qui rejette tous j ai encore une dizaine de ports ouverts ?
Je ne comprend pas trop.

Pour information je suis sur mdk9.2 j ai deux cartes reseaux (une connectée a internet eth0 et l autre au réseau local eth1, je sais ce n'est pas logique mais bon tant pis smiling smiley eth0 est branché a un modem ethernet ppp0

Je joins le script que j ai bidouillé au cas ou, pour que vous puissiez me dire ce qui ne va pas.

Merci de vos réponses




#!/bin/sh
#
###############################################################################
# NOM: iptable-basic-1.sh
#
# COMMENTAIRE : Un premier exemple de script iptable
#
# Ce script fait partie du document :
# "Firewall et sécurité d'un réseau personnel sous Linux"
# [olivieraj.free.fr]
#
# Auteur: Olivier ALLARD-JACQUIN (http://olivieraj.free.fr/)
# Créé le: 2003/07/01 Dernière modification le : 2003/07/09
###############################################################################
firewall_start() {
# Chargement des modules du suivi de connexion
#modprobe ip_conntrack ; # Module principal du suivi de connexion
#modprobe ip_conntrack_ftp ; # Module du suivi de connexion FTP
#modprobe ip_conntrack_irc ; # Module du suivi de connexion IRC


# Suppression de toutes les chaînes pré-définies de la table FILTER
iptables -t filter -F

# Suppression de toutes les chaînes utilisateur de la table FILTER
iptables -t filter -X

# Par defaut, toute les paquets sont détruits
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Autorise l'interface loopback à dialoguer avec elle-même
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Autorise les connexions avec le réseau 192.168.0.0/24 connecté à l'interface eth1
iptables -t filter -A OUTPUT -o eth1 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT

iptables -t filter -A OUTPUT -o ppp0 -p all -m state --state ! INVALID -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT

############################ Fonctionnalités serveurs #####################################

iptables -t filter -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o ppp0 -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --sport 443 -j ACCEPT



################################################################################
# IP masquerading
################################################################################

# Chargement des modules du NAT
modprobe iptable_nat ; # Module principal du NAT
modprobe ip_nat_ftp ; # Module du NAT FTP
modprobe ip_nat_irc ; # Module du NAT IRC

# Suppression de toutes les chaînes pré-définies de la table NAT
iptables -t nat -F

# Suppression de toutes les chaînes utilisateur de la table NAT
iptables -t nat -X

# Par defaut, toute les paquets de la table NAT sont ACCEPTES
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# Autorise les paquet à aller d'une interface réseau à l'autre
iptables -t filter -A FORWARD -i eth1 -o ppp0 -s 192.168.0.0/24 -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i ppp0 -o eth1 -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Demande à la table NAT de modifier les paquets sortants
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE

# Activation du NAT dans le kernel
echo 1 > /proc/sys/net/ipv4/ip_forward

}

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

echo " [firewall descativé! ]"
}

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

Poste le Saturday 24 January 2004 22:48:46
Répondre     Citer    
Re: probleme firewall
Envoyé par: alveric

Tu as fait ton scan depuis quelle machine ? Tel que tu as ordonné les règles, toute connexion depuis localhost ou le réseau local passe sans problème. Si tu as fait le scan nmap depuis une de ces machines, il est normal qu'il puisse voir tous les ports effectivement ouverts et fermés sur ton routeur. Et si tu as lancé depuis le net, l'explication est que ton filtre est en fait peu efficace contre des outils tels nmap (voir plus bas).

---
Pour mieux débugger un script iptables, il est utile d'utiliser des tables 'log et accept' ou 'log et drop' (idée que j'ai reprise d'un commentaire de JF sur les articles de ce même site).

Chez moi, tous les paquets qui initient une connexion (état NEW) sont loggés, avec des préfixes du type "iptables:accept-in:' ou "iptables:accept-out", suivant la table où ils arrivent (input/output/forward). De même, tous les paquets rejetés sont loggés. ("drop-in", "drop-out"..)

Création d'une telle table:
iptables -N accept-in
iptables -A accept-in -j LOG --log-prefix 'iptables:accept-in:'
iptables -A accpet-in -j ACCEPT

ensuite, il suffit de remplacer les "-j ACCEPT" par des "-j accept-in" et autres. Ainsi, il sera possible d'utiliser les logs système (/var/log/message) pour voir ce qui se passe.

---
Les lignes suivantes sont dangereuses, car inefficaces:
iptables -t filter -A INPUT -i ppp0 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --sport 443 -j ACCEPT

Tout paquet entrant depuis le net, pour peu qu'il soit relié à une connexion établie, sera accepté par la première ligne (normal).
Les deux dernières lignes ne devraient alors plus servir que pour filtrer les paquets NEW venant du net (avec par ex. des jumps vers les tables 'accept-in' ou 'drop-in'), avec une ligne pour chaque port que tu laisses passer (ou pas) (d'ailleurs, tu n'as pas mis de ligne spéciale pour le FTP winking smiley

De plus, tu n'as pas filtré les paquets INVALID entrants... qui actuellement peuvent rentrer, ainsi que des paquets "forgés" spécialement pour les scans de port, tels les SYN-null et autres joyeusetés... donc un attaquant pourra voir ta machine, savoir ce qui tourne dessus, incluant très probablement l'OS. Une vraie passoire, donc.

---
De même:
iptables -t filter -A OUTPUT -o ppp0 -p all -m state --state ! INVALID -j ACCEPT
iptables -t filter -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o ppp0 -p tcp --dport 443 -j ACCEPT

Tout ou presque est accepté dès la première ligne, ce qui fait que les deux lignes suivantes ne filtrent presque rien... à part les paquets INVALID qui sont finalement acceptés (pourvu qu'ils visent les bons ports tcp, i.e. ceux où on s'attend à ce qu'il y ait des serveurs web) !!!
Là aussi, il suffit d'accepter les ESTABLISHED (et les RELATED dans le cas de ftp) en bloc, et de filtrer les paquets NEW port par port, avec log.

---
Pour compléter, il faudrait filtrer aussi certaines classes d'adresses réservées (par ex. 10.0.0.0) venant du net, certains types de paquets forgés... voire certaines adresses répertoriées comme 'inamicales" (j'ai vu des listes traînant sur le net, qui donnent des ip à éviter "absolument"... style ip de major qui scrutent les réseaux p2p, ou ip de machines de l'armée us qu'il vaut mieux éviter de toucher...).

Il faut aussi filtrer le traffic ICMP sortant vers le net. Pour une utilisation client simple, tu peux tout dropper. Il est aussi conseillé de filtrer l'ICMP entrant (mais à ce que j'ai lu il y a débat sur ce qu'il faut bloquer).

C'est moins important dans le cas d'un routeur, mais l'autorisation illimitée du loopback est parfois montrée du doigt: quelqu'un qui obtient un accès sur la machine peut alors faire un nmap + ou - complet (pas besoin d'être root pour un bête scan de port, pour la plupart des distrib)... et savoir comment continuer sa progression. Mais un routeur qui ne fournit *aucun* service ne donnera que difficilement un point d'accès à un attaquant, donc tu peux laisser ce point de côté pour l'instant, considérant les autres problèmes à corriger en priorité.

Poste le Monday 26 January 2004 20:04:39
Répondre     Citer    
Re: probleme firewall
Envoyé par: Rémi

Merci beaucoup d'avoir pris le temps de me faire une réponse aussi complète
et d'avoir décortiqué le script.
Concernant nmap je comprend maintenant pourquoi je voyais tous mes ports ouverts.
Par contre : pourquoi faut il filtrer les adresses du type 10.0.0.0 ?
qu'est ce qu'un paquet forgé et comment filtrer le traffic ICMP ?

Merci encore pour cette réponse

Et merci aussi à toutes les personnes qui font vivre ce site et ce forum qui est vraiment super agréable. Je crois que c'est important de le dire.
Pour la peine je vais adhérer à l'assoce moi !!

Aller @+

Poste le Sunday 1 February 2004 20:11:04
Répondre     Citer    
Re: probleme firewall
Envoyé par: alveric

> pourquoi faut il filtrer les adresses du type 10.0.0.0 ?
Il y a plusieurs catégories d'adresses (au moins 10.x.x.x, 127.0.x.x, 192.168.x.x) qui sont réservées dans les "normes" pour des usages locaux, et n'ont donc aucune raison de venir du net. Un paquet qui vient du net, en utilisant une telle adresse, ne peut être que suspect.

> qu'est ce qu'un paquet forgé
Ce terme désigne un paquet qui a été créé délibérément avec des caractéristiques particulières, le plus souvent pour "tester" une machine. Suivant ce qu'on cherche à provoquer sur la machine cible, on peut modifier les drapeaux IP (SYN, FIN...), les options de routage, l'adresse source...
Ce dernier point répond à la première question: une connexion entrante peut suffire à compromettre un système (le ver SQL/Slammer ne consiste qu'en une trame IP d'environ 440 octets), dans ce cas l'attaquant n'a pas besoin que la machine compromise lui envoie de réponse. De plus, modifier l'adresse source permet de dissimuler la source de l'attaque, et de passer à travers certains pare-feus mal configurés (par ex., qui acceptent le traffic venant de toute machine en 192.168.1.*, sans vérifier que ce traffic vient bien de l'interface locale), alors pourquoi se priver ?

>comment filtrer le traffic ICMP ?
Options "-p icmp" d'iptables. Plus de détails (et d'exemples) dans les doc.

Poste le Monday 2 February 2004 08:48:26
Répondre     Citer    
Re: probleme firewall
Envoyé par: Rémi

Merci pour cette réponse je vais corriger mon firewall en consequence.

@+

Poste le Monday 2 February 2004 09:48:31
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
probleme firewall
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons