OVH Cloud OVH Cloud

IPtable, vos conseils?

36 réponses
Avatar
Juv
Voici mon fichier iptable,

Je suis preneur de vos avis.

En gros il me faut le http,ftp,ssh,directadmin(2222),smtp,pop,dns

Je veux autoriser le ping mais sans prendre trop de risques, j'en suis à la:


#!/bin/sh
iptables -F
PATH=/sbin:/bin:/usr/bin:/usr/sbin
/sbin/modprobe ip_conntrack_ftp ports=21,6438

# default policy : DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# on accepte les paquets relatifs aux connexions deja ouvertes
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# j'accepte le ping (mais ne sais pas comment en limiter le nombre)
iptables -p icmp --icmp-type <ping> -j ACCEPT

# accepte tout ce qui concerne l'interface loopback
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT

# accepte tout ce qui provient de l'adresse xx.xx.xx.xx
#iptables -A INPUT -i eth0 -s xx.xx.xx.xx -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 22 -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 2222 -j ACCEPT
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 21 -j ACCEPT

# autoriser les requetes DNS, FTP, HTTP (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 tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

10 réponses

1 2 3 4
Avatar
Juv
Le dns reste par terre, alors qu'il fonctionne parfaitement sans le
firewall, les regles sont les suivantes:

iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A OUTPUT -p udp --dport 53 --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 --state NEW -j ACCEPT

Une idée?


"Pascal Hambourg" a écrit dans le message de
news: efhi3c$rsp$
Non en fait je ne savais pas si il fallait des regles en input ou output
pour le DNS.


C'est comme pour les autres services. Il faut des règles en INPUT si la
machine héberge un serveur DNS recevant des requêtes de l'extérieur. Il
faut des règles en OUTPUT si la machine doit envoyer des requêtes à des
serveurs DNS extérieurs.

Mon serveur heberge un serveur DNS, quelles sont donc les regles idéales?


Celles que tu as proposées vont très bien :

iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT








Avatar
Juv
Voici le fichier en l'état:

#!/bin/sh
PATH=/sbin:/bin:/usr/bin:/usr/sbin
/sbin/modprobe ip_conntrack_ftp ports!,6438

# vidage des chaînes (deplacé après la définition du PATH)
iptables -F

# suppression des chaines utilisateur
iptables -X

# default policy : DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# on accepte les paquets relatifs aux connexions déjà ouvertes
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# accepte tout ce qui concerne l'interface loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# accepte tout ce qui provient de l'adresse xx.xx.xx.xx
#iptables -A INPUT -i eth0 -s xx.xx.xx.xx -j ACCEPT

# connexions acceptées en entrée (à adapter aux besoins)

# si la machine a un serveur SSH accessible de l'extérieur
iptables -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

# si la machine a un serveur web HTTP/HTTPS accessible de l'extérieur
iptables -A INPUT -p tcp --syn -m multiport --dports 80,443
-m state --state NEW -j ACCEPT

# si la machine a un serveur sur 2222/TCP accessible de l'extérieur
iptables -A INPUT -p tcp --dport 2222 --syn -m state --state NEW
-j ACCEPT

# si la machine a un serveur SMTP accessible de l'extérieur pour
# recevoir du courrier
iptables -A INPUT -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT

# si la machine a un serveur POP3 accessible de l'extérieur pour relever
# du courrier
iptables -A INPUT -p tcp --dport 110 --syn -m state --state NEW
-j ACCEPT

# si la machine a un serveur FTP accessible de l'extérieur
iptables -A INPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT

# si la machine a un serveur FTP sur le port 6438 accessible de
# l'extérieur
iptables -A INPUT -p tcp --dport 6438 --syn -m state --state NEW
-j ACCEPT

# j'accepte le ping en entrée limité à 10/s et à 100 octets (à ajuster)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/s
-m length --length 28:100 -j ACCEPT

# on rejette "proprement" les paquets TCP indésirables en entrée
# en plus d'être plus poli que DROP, cela évite le délai d'expiration
# des requêtes IDENT entrantes émises par certains serveurs contactés
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

# j'ai un doute : vaut-il mieux traiter les paquets TCP dans l'état
# INVALID avec DROP ou REJECT ?

# on rejette "proprement" les paquets UDP indésirables en entrée
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable

# on rejette "proprement" les paquets non ICMP indésirables en entrée
# (les paquets ICMP indésirables sont bloqués silencieusement)
iptables -A INPUT -p ! icmp
-j REJECT --reject-with icmp-proto-unreachable

# connexions acceptées en sortie (à adapter aux besoins)

# autoriser les requêtes FTP en sortie (pour les mises à jour)
iptables -A OUTPUT -p tcp --dport 21 --syn -m state --state NEW
-j ACCEPT

# autoriser les requêtes FTP en sortie sur le port 6438
iptables -A OUTPUT -p tcp --dport 6438 --syn -m state --state NEW
-j ACCEPT

# autoriser les requêtes HTTP en sortie (pour les mises à jour)
iptables -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW
-j ACCEPT

# autoriser les requêtes DNS TCP et UDP en sortie
iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

# autoriser les requêtes SMTP en sortie pour envoyer du courrier
iptables -A OUTPUT -p tcp --dport 25 --syn -m state --state NEW
-j ACCEPT

# autoriser les requêtes ping en sortie
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
Avatar
Pascal Hambourg
Le dns reste par terre, alors qu'il fonctionne parfaitement sans le
firewall, les regles sont les suivantes:

iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A OUTPUT -p udp --dport 53 --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 --state NEW -j ACCEPT


Il faut placer les règles INPUT ACCEPT avant les règles INPUT REJECT ou
DROP, sinon elles ne seront jamais lues.

Avatar
juv

Le dns reste par terre, alors qu'il fonctionne parfaitement sans le
firewall, les regles sont les suivantes:

iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A OUTPUT -p udp --dport 53 --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 --state NEW -j ACCEPT


Il faut placer les règles INPUT ACCEPT avant les règles INPUT REJECT ou
DROP, sinon elles ne seront jamais lues.


Dans ce cas pourquoi le service FTP fonctionne t il?


Avatar
Pascal Hambourg

Il faut placer les règles INPUT ACCEPT avant les règles INPUT REJECT ou
DROP, sinon elles ne seront jamais lues.


Dans ce cas pourquoi le service FTP fonctionne t il?


Je ne vois pas où est la contradiction, la règle ACCEPT correspondant au
FTP est placée avant les règles REJECT.


Avatar
juv


Il faut placer les règles INPUT ACCEPT avant les règles INPUT REJEC T ou
DROP, sinon elles ne seront jamais lues.


Dans ce cas pourquoi le service FTP fonctionne t il?


Je ne vois pas où est la contradiction, la règle ACCEPT correspondant au
FTP est placée avant les règles REJECT.


Houla je dois avoir un probleme de comprehension alors.

Les regles DNS devraient être placées ou exactement?

Tu peux m'indiquer comment tu vois le fichier finale dans sa
globalité?

Merci



Avatar
juv



Il faut placer les règles INPUT ACCEPT avant les règles INPUT REJ ECT ou
DROP, sinon elles ne seront jamais lues.


Dans ce cas pourquoi le service FTP fonctionne t il?


Je ne vois pas où est la contradiction, la règle ACCEPT corresponda nt au
FTP est placée avant les règles REJECT.


Houla je dois avoir un probleme de comprehension alors.

Les regles DNS devraient être placées ou exactement?

Tu peux m'indiquer comment tu vois le fichier finale dans sa
globalité?

Merci


-> Il n'y a pas de reject ou de drop erntre les regles accept FTP et
DNS, elle se suivent !




Avatar
Pascal Hambourg

-> Il n'y a pas de reject ou de drop erntre les regles accept FTP et
DNS, elle se suivent !


Tu sembles mélanger les chaînes INPUT et OUTPUT. Observe l'ordre des
règles de la chaîne INPUT seulement.

Avatar
Jack H.
Le Fri, 29 Sep 2006 06:54:45 +0200, Juv a écrit:

Voici le fichier en l'état:
[...]

# j'ai un doute : vaut-il mieux traiter les paquets TCP dans l'état
# INVALID avec DROP ou REJECT ?


Je suis un peu parano, je mets DROP sans pitié ni hésitation


# on rejette "proprement" les paquets UDP indésirables en entrée
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable

# on rejette "proprement" les paquets non ICMP indésirables en entrée
# (les paquets ICMP indésirables sont bloqués silencieusement)
iptables -A INPUT -p ! icmp
-j REJECT --reject-with icmp-proto-unreachable
[...]

# autoriser les requêtes DNS TCP et UDP en sortie
iptables -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 --syn -m state --state NEW
-j ACCEPT
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT


Ici la règle INPUT pour le port 53 est placée après une règle REJECT, le
DNS ne passe pas...

donne-nous la sortie de:
iptables -nL INPUT && iptables -nL OUTPUT
après que tes règles soient définies..

--
Jack H.
"Tant que ça aide..."

Avatar
Matthieu Moy
"Jack H." writes:

Je suis un peu parano, je mets DROP sans pitié ni hésitation


Le gain en sécurité est faible, et l'emmerdement des utilisateurs bien
plus grand en DROP-ant les paquets en général. Sur une machine perso,
c'est pas bien grave, mais quand c'est un firewall avec plusieurs
utilisateurs derrière, c'est quand même très chiant d'essayer de se
connecter à quelque chose sans y arriver alors qu'on aurait pu avoir
un message d'erreur clair disant que c'est interdit.

--
Matthieu

1 2 3 4