Voilà la version courte (mon rapport de projet remis au prof, qui est
beaucoup plus light que mon rapport version complète, que je termine).
Ainsi que le lien vers un script d'exemple de configuration de firewall.
perso.wanadoo.fr/-marmotte-/tutoriel/Rapport_TER_2004_court.pdf
perso.wanadoo.fr/-marmotte-/tutoriel/firewall.sh
Bonne lecture, je suis ouvert à toute modification (que j'effectuerai
fin mai, car j'ai mes partiels)
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
################################################
## définit les polices par défaut des tables ##
################################################
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Voilà la version courte (mon rapport de projet remis au prof, qui est
beaucoup plus light que mon rapport version complète, que je termine).
Ainsi que le lien vers un script d'exemple de configuration de firewall.
perso.wanadoo.fr/-marmotte-/tutoriel/Rapport_TER_2004_court.pdf
perso.wanadoo.fr/-marmotte-/tutoriel/firewall.sh
Bonne lecture, je suis ouvert à toute modification (que j'effectuerai
fin mai, car j'ai mes partiels)
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
################################################
## définit les polices par défaut des tables ##
################################################
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Voilà la version courte (mon rapport de projet remis au prof, qui est
beaucoup plus light que mon rapport version complète, que je termine).
Ainsi que le lien vers un script d'exemple de configuration de firewall.
perso.wanadoo.fr/-marmotte-/tutoriel/Rapport_TER_2004_court.pdf
perso.wanadoo.fr/-marmotte-/tutoriel/firewall.sh
Bonne lecture, je suis ouvert à toute modification (que j'effectuerai
fin mai, car j'ai mes partiels)
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
################################################
## définit les polices par défaut des tables ##
################################################
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Dans le message <news:c7lh3c$9nf$,
*marmotte* tapota sur f.c.o.l.configuration :# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
################################################
## définit les polices par défaut des tables ##
################################################
Les puristes que nous sommes vous diront de définir votre politique par
défaut au tout début de votre script afin d'empêcher tout éventuel paquet de
traverser votre firewall avant que celui-ci soit complètement défini.
Exact, je crée mes tables avant la politique par défaut, il faudrait
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
Idem, on pourrait limiter aux adresses IP du réseau LAN.
Effectivement oui, pour une plus grande sécurité de son réseau local.
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
D'une manière générale, il n'est utile de logger que les nouvelles
connexions, donc les paquets qui ont l'état NEW. Logger les autres types de
paquets n'a pas vraiment d'intérêt et de plus, comme ils représentent la
majorité des paquets du trafic d'une connexion, ils vont saturer le système
de log le rendant difficilement exploitable.
C'est vrai, mais c'était dans le cadre de le but de montrer tout le
[1] De même :
Idem
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p udp --sport 1024: --dport 53
-m state --state NEW -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53
--syn -m state --state NEW -j DNS_LOG_ACCEPT
A noter l'option '--syn' sur les connexions TCP.
Pas mal le coup de l'option --syn, j'y ai pas pensé (manque d'habitude
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: -d 193.252.22.109
--dport 25 --syn -m state --state NEW -j SMTP_LOG_ACCEPT$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
Idem, règle redondante avec [1]. A supprimer donc.
Je déplacerai, pour éviter la redondance.
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -i $NET -p tcp --dport 22
--syn -m match --state NEW -j SSH_LOG_ACCEPT$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
Règle redondante avec [1]. A supprimer donc.
J'ai dans mes log des SSH_LOG_ACCEPT, mais j'ais pas fait gaffe à
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
De même, ces deux règles se résument en cette seule règle :
iptables -A INPUT -i $NET -p tcp --dport 80
--syn -m match --state NEW -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
[2] De nouveau règle redondante et qui ne sera donc jamais traversée. La
règle ne loggera donc jamais les paquets quelle cible. Il serait alors
judicieux de placer cette règle juste avant les règles [1] si vous souhaitez
garder une trace dans vos logs des messages icmp « utiles ».
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
Deux choses.
Vous ne précisez pas dans votre règle le type de message icmp qu'il faut
cibler, ici l'icmp echo (ping) et donc vous ciblez tous les types d'icmp.
Ensuite bloquer l'icmp echo c'est « mal ©® » et inutile. Ce n'est pas
respecter les RFC, c'est contraignant pour les administrateurs réseaux et
surtout ce n'est pas ça qui vous permettra de vous cacher sur Internet.
J'avais pris pour exemple l'admin de la fac qui interdit tout (même SSH).
Par contre limiter le nombre de requête icmp echo est effectivement une
bonne chose pour se prémunir des dénis de service auxquels l'icmp est
sensible. On peut aussi jouer sur la taille des requêtes.
En résumé je préconise la règle suivante :
iptables -A INPUT -i $NET -p icmp --icmp-type echo-request
-m length --length 0:92
-m limit --limit 60/minute -j PING_LOG_ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j PING_LOG_DROP$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
Les icmp RELATED ont déjà été traités par [2] il est donc inutile de cibler
la règle en fonction de l'état RELATED.
iptables -A INPUT -p icmp -j ICMP_LOG_DROP$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou RELATED
ont été traités par les règles [1], ils ne peut donc rester que les paquets
NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
Et concernant vos logs, il serait utile aussi de les limiter afin d'éviter,
en cas de déni de service, que le système de log sollicite fortement les
ressources machines et que le déni de service visant généralement la bande
passante de la machine se transforme en déni de service général de la
machine.
En espérant que mes commentaires vous seront utiles et en espérant aussi que
je n'aurais commis aucune erreur de syntaxe ou d'appréciation.
Vos commentaires sont d'une très grande utilité.
Dans le message <news:c7lh3c$9nf$1@news-reader4.wanadoo.fr>,
*marmotte* tapota sur f.c.o.l.configuration :
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
################################################
## définit les polices par défaut des tables ##
################################################
Les puristes que nous sommes vous diront de définir votre politique par
défaut au tout début de votre script afin d'empêcher tout éventuel paquet de
traverser votre firewall avant que celui-ci soit complètement défini.
Exact, je crée mes tables avant la politique par défaut, il faudrait
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
Idem, on pourrait limiter aux adresses IP du réseau LAN.
Effectivement oui, pour une plus grande sécurité de son réseau local.
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
D'une manière générale, il n'est utile de logger que les nouvelles
connexions, donc les paquets qui ont l'état NEW. Logger les autres types de
paquets n'a pas vraiment d'intérêt et de plus, comme ils représentent la
majorité des paquets du trafic d'une connexion, ils vont saturer le système
de log le rendant difficilement exploitable.
C'est vrai, mais c'était dans le cadre de le but de montrer tout le
[1] De même :
Idem
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p udp --sport 1024: --dport 53
-m state --state NEW -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53
--syn -m state --state NEW -j DNS_LOG_ACCEPT
A noter l'option '--syn' sur les connexions TCP.
Pas mal le coup de l'option --syn, j'y ai pas pensé (manque d'habitude
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: -d 193.252.22.109
--dport 25 --syn -m state --state NEW -j SMTP_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
Idem, règle redondante avec [1]. A supprimer donc.
Je déplacerai, pour éviter la redondance.
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -i $NET -p tcp --dport 22
--syn -m match --state NEW -j SSH_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
Règle redondante avec [1]. A supprimer donc.
J'ai dans mes log des SSH_LOG_ACCEPT, mais j'ais pas fait gaffe à
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
De même, ces deux règles se résument en cette seule règle :
iptables -A INPUT -i $NET -p tcp --dport 80
--syn -m match --state NEW -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
[2] De nouveau règle redondante et qui ne sera donc jamais traversée. La
règle ne loggera donc jamais les paquets quelle cible. Il serait alors
judicieux de placer cette règle juste avant les règles [1] si vous souhaitez
garder une trace dans vos logs des messages icmp « utiles ».
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
Deux choses.
Vous ne précisez pas dans votre règle le type de message icmp qu'il faut
cibler, ici l'icmp echo (ping) et donc vous ciblez tous les types d'icmp.
Ensuite bloquer l'icmp echo c'est « mal ©® » et inutile. Ce n'est pas
respecter les RFC, c'est contraignant pour les administrateurs réseaux et
surtout ce n'est pas ça qui vous permettra de vous cacher sur Internet.
J'avais pris pour exemple l'admin de la fac qui interdit tout (même SSH).
Par contre limiter le nombre de requête icmp echo est effectivement une
bonne chose pour se prémunir des dénis de service auxquels l'icmp est
sensible. On peut aussi jouer sur la taille des requêtes.
En résumé je préconise la règle suivante :
iptables -A INPUT -i $NET -p icmp --icmp-type echo-request
-m length --length 0:92
-m limit --limit 60/minute -j PING_LOG_ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j PING_LOG_DROP
$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
Les icmp RELATED ont déjà été traités par [2] il est donc inutile de cibler
la règle en fonction de l'état RELATED.
iptables -A INPUT -p icmp -j ICMP_LOG_DROP
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou RELATED
ont été traités par les règles [1], ils ne peut donc rester que les paquets
NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
Et concernant vos logs, il serait utile aussi de les limiter afin d'éviter,
en cas de déni de service, que le système de log sollicite fortement les
ressources machines et que le déni de service visant généralement la bande
passante de la machine se transforme en déni de service général de la
machine.
En espérant que mes commentaires vous seront utiles et en espérant aussi que
je n'aurais commis aucune erreur de syntaxe ou d'appréciation.
Vos commentaires sont d'une très grande utilité.
Dans le message <news:c7lh3c$9nf$,
*marmotte* tapota sur f.c.o.l.configuration :# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
################################################
## définit les polices par défaut des tables ##
################################################
Les puristes que nous sommes vous diront de définir votre politique par
défaut au tout début de votre script afin d'empêcher tout éventuel paquet de
traverser votre firewall avant que celui-ci soit complètement défini.
Exact, je crée mes tables avant la politique par défaut, il faudrait
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
$IPTABLES -t filter -A INPUT -i $LAN -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LAN -j ACCEPT
Idem, on pourrait limiter aux adresses IP du réseau LAN.
Effectivement oui, pour une plus grande sécurité de son réseau local.
$IPTABLES -t filter -A FORWARD -i $LAN -o $NET -m state --state
NEW,ESTABLISHED,RELATED -j LOG_ACCEPT
$IPTABLES -t filter -A FORWARD -i $NET -o $LAN -m state --state
ESTABLISHED,RELATED -j LOG_ACCEPT
D'une manière générale, il n'est utile de logger que les nouvelles
connexions, donc les paquets qui ont l'état NEW. Logger les autres types de
paquets n'a pas vraiment d'intérêt et de plus, comme ils représentent la
majorité des paquets du trafic d'une connexion, ils vont saturer le système
de log le rendant difficilement exploitable.
C'est vrai, mais c'était dans le cadre de le but de montrer tout le
[1] De même :
Idem
$IPTABLES -t filter -A OUTPUT -o $NET -p udp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53 -m
state --state ! INVALID -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p udp --sport 1024: --dport 53
-m state --state NEW -j DNS_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: --dport 53
--syn -m state --state NEW -j DNS_LOG_ACCEPT
A noter l'option '--syn' sur les connexions TCP.
Pas mal le coup de l'option --syn, j'y ai pas pensé (manque d'habitude
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A OUTPUT -o $NET -p tcp --sport 1024:
--destination 193.252.22.109 --dport 25 -m state --state ! INVALID
-j SMTP_LOG_ACCEPT
iptables -A OUTPUT -o $NET -p tcp --sport 1024: -d 193.252.22.109
--dport 25 --syn -m state --state NEW -j SMTP_LOG_ACCEPT$IPTABLES -t filter -A INPUT -i $NET -p tcp -s 193.252.22.109 --sport 25
--dport 1024: -m state --state RELATED,ESTABLISHED -j SMTP_LOG_ACCEPT
Idem, règle redondante avec [1]. A supprimer donc.
Je déplacerai, pour éviter la redondance.
$IPTABLES -t filter -A INPUT -p tcp --dport 22 -i $NET -j SSH_LOG_ACCEPT
iptables -A INPUT -i $NET -p tcp --dport 22
--syn -m match --state NEW -j SSH_LOG_ACCEPT$IPTABLES -t filter -A OUTPUT -p tcp --sport 22 -o $NET -j SSH_LOG_ACCEPT
Règle redondante avec [1]. A supprimer donc.
J'ai dans mes log des SSH_LOG_ACCEPT, mais j'ais pas fait gaffe à
iptables -A INPUT -p tcp --dport 80 -j HTTP_LOG_ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j HTTP_LOG_ACCEPT
De même, ces deux règles se résument en cette seule règle :
iptables -A INPUT -i $NET -p tcp --dport 80
--syn -m match --state NEW -j HTTP_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state RELATED -j ICMP_LOG_ACCEPT
[2] De nouveau règle redondante et qui ne sera donc jamais traversée. La
règle ne loggera donc jamais les paquets quelle cible. Il serait alors
judicieux de placer cette règle juste avant les règles [1] si vous souhaitez
garder une trace dans vos logs des messages icmp « utiles ».
# on enregistre aussi les tentatives de PING
# si on veut limiter le nombre de PING à 6 minutes,on active l'option
ci-dessous
#$IPTABLES -A INPUT -p icmp -m state --state NEW -m limit
--limit 6/min -j PING_LOG_ACCEPT
$IPTABLES -A INPUT -p icmp -m state --state NEW -j PING_LOG_DROP
Deux choses.
Vous ne précisez pas dans votre règle le type de message icmp qu'il faut
cibler, ici l'icmp echo (ping) et donc vous ciblez tous les types d'icmp.
Ensuite bloquer l'icmp echo c'est « mal ©® » et inutile. Ce n'est pas
respecter les RFC, c'est contraignant pour les administrateurs réseaux et
surtout ce n'est pas ça qui vous permettra de vous cacher sur Internet.
J'avais pris pour exemple l'admin de la fac qui interdit tout (même SSH).
Par contre limiter le nombre de requête icmp echo est effectivement une
bonne chose pour se prémunir des dénis de service auxquels l'icmp est
sensible. On peut aussi jouer sur la taille des requêtes.
En résumé je préconise la règle suivante :
iptables -A INPUT -i $NET -p icmp --icmp-type echo-request
-m length --length 0:92
-m limit --limit 60/minute -j PING_LOG_ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j PING_LOG_DROP$IPTABLES -A INPUT -p icmp -m state --state ! RELATED -j ICMP_LOG_DROP
Les icmp RELATED ont déjà été traités par [2] il est donc inutile de cibler
la règle en fonction de l'état RELATED.
iptables -A INPUT -p icmp -j ICMP_LOG_DROP$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou RELATED
ont été traités par les règles [1], ils ne peut donc rester que les paquets
NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
Et concernant vos logs, il serait utile aussi de les limiter afin d'éviter,
en cas de déni de service, que le système de log sollicite fortement les
ressources machines et que le déni de service visant généralement la bande
passante de la machine se transforme en déni de service général de la
machine.
En espérant que mes commentaires vous seront utiles et en espérant aussi que
je n'aurais commis aucune erreur de syntaxe ou d'appréciation.
Vos commentaires sont d'une très grande utilité.
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
pas le but recherché.
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
127.x.y.z,
donc ta restriction à la source 127.0.0.0/8 me paraît redondante.
J'aimerais bien plus d'explication quand à l'utilité de cette
méthode.
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou
RELATED ont été traités par les règles [1], ils ne peut donc rester que
les paquets NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
gêne en rien le filtrage, donc je laisserai.
Je rappelle que mon but est que le fichier soit accessible par un
débutant.
Un grand merci à vous !
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
pas le but recherché.
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
127.x.y.z,
donc ta restriction à la source 127.0.0.0/8 me paraît redondante.
J'aimerais bien plus d'explication quand à l'utilité de cette
méthode.
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou
RELATED ont été traités par les règles [1], ils ne peut donc rester que
les paquets NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
gêne en rien le filtrage, donc je laisserai.
Je rappelle que mon but est que le fichier soit accessible par un
débutant.
Un grand merci à vous !
# activation de l'anti-spoofing d'IP
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $f
done
fi
La « ligne » suivante suffit :
[ -f /proc/sys/net/ipv4/conf/all/rp_filter ]
&& echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
Oui, mais avouez que pour un débutant, il ne pigera rien. Et ce n'est
pas le but recherché.
$IPTABLES -t filter -A INPUT -i $LOOP -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $LOOP -j ACCEPT
<mode puriste>
iptables -t filter -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -t filter -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
</mode>
Là j'avoue que je ne comprends pas. Tout ce qui sort de lo a pour ip
127.x.y.z,
donc ta restriction à la source 127.0.0.0/8 me paraît redondante.
J'aimerais bien plus d'explication quand à l'utilité de cette
méthode.
$IPTABLES -t filter -A INPUT -i $NET -p udp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
$IPTABLES -t filter -A INPUT -i $NET -p tcp --sport 53 --dport 1024:
-m state --state RELATED,ESTABLISHED -j DNS_LOG_ACCEPT
Ces règles sont redondantes avec vos précédentes règles (voir [1] plus
haut), ne seront jamais traversées par un paquet et sont inutiles. A
supprimer donc.
Exact encore une fois, elles doivent venir avant [1], je modifierai donc.
$IPTABLES -t filter -A INPUT -i $NET -m state --state NEW,INVALID
-j LOG_DROP
Même remarque, à ce stade tous les paquets à l'état ESTABLISHED ou
RELATED ont été traités par les règles [1], ils ne peut donc rester que
les paquets NEW non autorisés ou les paquets INVALID.
iptables -A INPUT -i $NET -j LOG_DROP
je préfère me répéter pour une question de compéhension. De plus, ça ne
gêne en rien le filtrage, donc je laisserai.
Je rappelle que mon but est que le fichier soit accessible par un
débutant.
Un grand merci à vous !