Page 1 sur 2

[IpTables] Avis configuration IpTables (résolu)

Publié : lun. 27 févr. 2012, 09:36
par snoogy
Bonjour tout le monde,

j'aimerai avoir vôtre avis sur ma configuration IpTables.

C'est une configuration "simple" qui normalement refuse tout en entrée et sortie sauf quelques ports spécifiés.
J’espère ne pas avoir fait d'erreur, mon but étant de tout bloquer sauf mes applications qui doivent se connecter sur internet.

Par la suite et après avoir lu toutes les doc sur iptables {c'est trèeees long :s} je compléterai ce fichier.
Je pense que c'est "le minimum" a avoir, certain me diront que ce n'est pas nécessaire de filtrer les sortie mais je préfère l'avoir.

Voici la config:

Code : Tout sélectionner

#!/bin/bash

echo Mes Règles iptables.

# 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
echo - Chargement des modules ip_conntrack : [OK]

# J'efface toutes les règles existantes dans iptables.
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]

# Je mets en place les regles par défaut (on refuse tout).
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion : [OK]

# J'autorise l'interface loopback à dialoguer avec elle-même.
iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
echo - Autoriser loopback : [OK]

# J'interdit les PC de l'exterieur de faire des ping.
iptables -A INPUT -p icmp -j DROP
echo - Interdire le ping entrant : [OK]

# Je refuse certaines requetes.
iptables -N SCANS
iptables -A SCANS -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A SCANS -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A SCANS -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A SCANS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p udp --dport 33434:33523 -j DROP

# Je rejet les paquets bizarres.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
echo - Refus de certaines requetes : [OK]

# Dropper silencieusement tous les paquets broadcastés.
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
echo - Droppe des paquets broadcastés : [OK]

# RFC 1413 - Identification Protocol.
#iptables -A INPUT -p tcp --destination-port auth -j REJECT --reject-with tcp-reset
echo - RFC 1413 : [OK]

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

# J'accepte la sortie de certain protocoles:
iptables -A OUTPUT -p TCP --dport http -j ACCEPT        # Port 80   (Http)
iptables -A OUTPUT -p TCP --dport https -j ACCEPT       # Port 443  (Https)
iptables -A OUTPUT -p TCP --dport pop3 -j ACCEPT        # Port 110  (Pop3)
iptables -A OUTPUT -p TCP --dport smtp -j ACCEPT        # Port 25   (Smtp)
iptables -A OUTPUT -p TCP --dport ftp-data -j ACCEPT    # Port 20   (Ftp Data)
iptables -A OUTPUT -p TCP --dport ftp -j ACCEPT         # Port 21   (Ftp)
iptables -A OUTPUT -p TCP --dport ssh -j ACCEPT         # Port 22   (Ssh)
iptables -A OUTPUT -p TCP --dport 1863 -j ACCEPT        # (Msn Pidgin)
iptables -A OUTPUT -p UDP --dport 53 -j ACCEPT		# (Dns)
iptables -A OUTPUT -p TCP --dport 995 -j ACCEPT		# (Pop3s)
iptables -A OUTPUT -p TCP --dport 993 -j ACCEPT		# (Imaps)
iptables -A OUTPUT -p UDP --dport 465 -j ACCEPT		# (Urd)
iptables -A OUTPUT -p TCP --dport 8000 -j ACCEPT	# (Shoutcast)
iptables -A OUTPUT -p TCP --dport 5222 -j ACCEPT	# (xmpp)
echo - Autorisation protocole de sortie : [OK]

# On log les anomalies et les paquets rejetés.
iptables -A INPUT -m state --state INVALID -m limit --limit 4/s -j LOG --log-prefix "INPUT INVALID"
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state NEW,RELATED -p tcp --tcp-flags ALL SYN -j DROP
iptables -A INPUT -p tcp --destination-port auth -j REJECT --reject-with tcp-reset
iptables -A INPUT -m limit --limit 4/s -j LOG --log-prefix "INPUT bad "
iptables -A INPUT -j DROP
echo - Log des anomalies et des paquets rejetés : [OK]

# MEMO:
#-I = insert rule, on ajoute un règle en tête du filtre.
#-A = append rule, on ajoute une règle à la fin du filtre.
#-D = delete, on efface une règle.
#-R = replace, on remplace un règle.
#-L = list, on liste un chaîne.
#-F = flush, on efface les règle d’une chaîne.
#-P = Policy, réaction par défaut.

#Sauvegarde
rc.d save iptables

exit 0
[Script modifier en bas de page]
http://forums.archlinux.fr/post89569.html#p89569

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 09:50
par benjarobin
Toutes les règles d'interdictions ne servent à rien, car tu interdit déjà tout dès le début :-)
Ou alors tu déplaces toutes les autorisations juste après "- Interdire toute connexion : [OK]"
Comme ceci les règles d'interdictions seront fonctionnelles, en effet l'ordre est très important

De plus as tu penser à filtrer IPv6 ?

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 10:08
par snoogy
Merci pour ta réponse,

donc si j’interdis tout au début avec:

Code : Tout sélectionner

# Je mets en place les regles par défaut (on refuse tout).
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion : [OK]
je peut enlever la partie "# Je refuse certaines requêtes", "# Je rejet les paquets bizarres.", etc..

mais est ce que je dois laisser "# Dropper silencieusement tous les paquets broadcastés.", "# RFC 1413 - Identification Protocole." ou je peut aussi les enlever ?

Pour l'IPv6 je ne l'utilise pas, faut t'il tout de même mettre des règles de filtrage IPv6 sachant que ce n'est pas activer ?

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 10:16
par benjarobin
Ta configuration est en faite une vrai passoire, je te laisse lire ceci http://olivieraj.free.fr/fr/linux/infor ... index.html
En gros tu ne devrait avoir que ceci pour autorisé du traffic, à moins d'avoir un serveur Web, ou Ssh que tu voudrais pouvoir accéder depuis l'extérieur (A adapter bien sûre)

Code : Tout sélectionner

iptables -A OUTPUT -o eth1 -s 10.0.0.1  -d 0.0.0.0/0 -p all -m state --state ! INVALID           -j ACCEPT
iptables -A INPUT  -i eth1 -s 0.0.0.0/0 -d 10.0.0.1 -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
Il faut donc bien penser à tout interdire, d'autoriser loop et puis c'est tout :D

Pour IPv6 il faut au moins les règles qui bloque le trafic (En autorisant loop encore une fois), sinon tu es complètement ouvert

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 10:34
par snoogy
Ok merci beaucoup, je vais faire les modifications et poster mon fichier cette après-midi.

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 20:37
par snoogy
re, je suis bloquer sur l'adresse ip 10.0.0.1. Elle correspond a quoi en faite ?
Je pense a l'adresse ip de mon poste (192.168.1.xx) mais:

Code : Tout sélectionner

iptables -A OUTPUT -o eth1 -s 10.0.0.1  -d 0.0.0.0/0 -p all -m state --state ! INVALID           -j ACCEPT
j'ai le message d'erreur : iptables v1.4.12.2: Bad state "!"

et plus de connexion internet..

Re: [IpTables] Avis configuration IpTables

Publié : lun. 27 févr. 2012, 21:11
par benjarobin
As ru lu entièrement le lien que je t'ai donné ?

Code : Tout sélectionner

#!/bin/bash

# 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

# 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 

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

# Suppression de toutes les chaînes utilisateur de la table Mangle
iptables -t mangle -X 

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

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

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

iptables -A OUTPUT -o eth0 -s 192.168.0.9  -d 0.0.0.0/0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i eth0 -s 0.0.0.0/0 -d 192.168.0.9  -p all -m state --state RELATED,ESTABLISHED -j ACCEPT


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

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

# Par defaut, toute les paquets de la table FILTER sont détruits
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT DROP
ip6tables -t filter -P FORWARD DROP

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 01:14
par snoogy
ah oui, "! INVALID" est uniquement une manière plus rapide d'écrire qu'il faut que les connexions soient d'un des 3 états "NEW, ESTABLISHED, RELATED".

Merci pour les règles iptables, sachant que mon pc ne sert pas de passerelle j'ai supprimer ceci:

Code : Tout sélectionner

# Par defaut, toute les paquets de la table NAT sont DROP
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT
Je sais que la règle "iptables -t filter -P FORWARD DROP" détruit les paquets de la table Nat mais est-ce vraiment nécessaire de laisser le code au dessus ?

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 01:26
par snoogy
Ce qui donne ceci:

Code : Tout sélectionner

#!/bin/bash

# J'efface toutes les règles existantes dans iptables.
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
echo - Vidage : [OK]

# Je mets en place les regles par défaut (on refuse tout).
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion : [OK]

# J'autorise l'interface loopback à dialoguer avec elle-même.
iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
echo - Autoriser loopback : [OK]

# Autorise les connexions avec internet uniquement si elles sont initialisées par
# les processus locaux
iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
echo - Autorisation processus locaux : [OK]

# Suppression des règles IPv6
ip6tables -t filter -F
ip6tables -t filter -X
echo - Vidage IPv6 : [OK]

# Par defaut, toute les paquets de la table FILTER sont détruits
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P OUTPUT DROP
ip6tables -t filter -P FORWARD DROP
echo - Interdire connexion IPv6 : [OK]

# Log.
iptables -t filter -A INPUT -p all -j LOG --log-prefix=DefaultDrop
echo - Log : [OK]

#Sauvegarde
rc.d save iptables

exit 0

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 08:59
par snoogy
Comment faire pour autoriser seulement les processus locaux de certain port ? (ex: 80,443..)

J'ai essayer d’éditer la chaîne :

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
avec les options -dport et -sport (+le numéro de port) mais j'obtiens que des messages d'erreur :/

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 09:18
par benjarobin
Pour autorisé des processus locaux de certain port, il suffit de rajouter une règle après celle-ci, l'ordre est très important !
Cette règle autorisera le trafic sur le port que tu lui désignera, mais je te conseil sérieusement la lecture du lien que je t'ai donné, car apparemment tu ne l'as pas entièrement lu

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 09:39
par snoogy
hmmm, je crois que je me suis mal exprimer.

Je n'ai aucun serveur Web ou Ssh, donc pas l'utilité d'autoriser des accès venant de l’extérieur.

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
cette règle autorise toute les connexions que j’aurai initialiser mais j'aimerai laisser passer que le web et les mails.
Si je lance un client P2P il va se connecter et c'est justement le problème.

Je pourrai mettre des règles d'interdiction mais il y en aurai beaucoup trop.

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 10:04
par benjarobin
Voici un exemple qui autorise uniquement les ports Web de navigation utilisant TCP; Tout l'UDP est bloqué.

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p tcp --ports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p tcp --ports 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT
Je ne l'ai pas testé mais cela devrait fonctionner
Attention, on ne peut spécifier que 15 ports avec --ports
Si tu veux ouvrir d'autre port il suffit de créer un nouvelle règle

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 10:23
par snoogy
Oui c'est exactement ceci, j'avais essayer avec --dport et --sport

mais même avec --ports j'ai un message d'erreur : "iptables: unknown option "--ports"

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 10:45
par benjarobin
Pour le port 80

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p tcp --dport 80 -m state ! --state INVALID -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
En faite la notation multiport (--dports, --sports, --ports) s'utilise avec le module multiport, or on utilise déjà le module state :D

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 11:44
par snoogy
Oui c'est bien ça :merci:

Maintenant me reste plus qu'a trouver pourquoi ça me bloque la connexion :bravo:

Code : Tout sélectionner

Adresse introuvable        
          Firefox ne peut trouver le serveur à l'adresse www.owni.fr
Sûrement parce que Firefox utilise le port 80 pour la réception et un autre port aléatoire pour l'envoi :/

Donc logiquement je me dit que ca devrai fonctionner avec:

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -s 192.168.1.222  -d 0.0.0.0/0 -p tcp --dport 80 --sport 80 -m state ! --state INVALID -j ACCEPT
iptables -A INPUT  -i wlan0 -s 0.0.0.0/0 -d 192.168.1.222  -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
mais trop facile pour que ça fonctionne :( surement le module multiport.

Edit: a oui le Dns, je lui mets une règle aussi.

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 12:00
par benjarobin
Non c'est plus compliqué que cela, de plus tu bloque le port du DNS

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 18:19
par widapit
Salut !
benjarobin a écrit :...s'utilise avec le module multiport,or on utilise déjà le module state
pourquoi est-ce que tu dis ça ? rien n'empêche d'avoir une ligne comme ça, par exemple:

Code : Tout sélectionner

-A INPUT -i wlan0 -p tcp -m multiport --sports 22,80,443,8000,8080 -m state --state RELATED,ESTABLISHED -j ACCEPT 
.En tous cas, ça marche chez moi... !!

Sinon, oui pour le DNS il te faut au minima ceci :

Code : Tout sélectionner

-A INPUT -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 18:28
par benjarobin
Pourquoi ? Car je ne savais pas que c'était possible :-)

Re: [IpTables] Avis configuration IpTables

Publié : mar. 28 févr. 2012, 19:58
par snoogy
Merci,

donc ça devrai être comme ceci:

Code : Tout sélectionner

iptables -A OUTPUT -o wlan0 -p udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i wlan0 -p udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wlan0 -p tcp -m multiport --sports 22,53,80,443,1863,8000,8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i wlan0 -p tcp -m multiport --sports 22,53,80,443,1863,8000,8080 -m state --state RELATED,ESTABLISHED -j ACCEPT 
mais aucune application n'arrive a ce connecter, ça me fait connexion en cours puis Le délai d'attente est dépassé

Si je mets "iptables -A OUTPUT -o wlan0 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT" ça fonctionne mais c'est pas mon but :?