Mon firewall : Qu'en pensez vous ?

Bonjour, je viens de mettre en place mon firewall pour ma passerrelle (qui fonctionne a merveille), et j’aurais voulu avoir l’avis d’experts (comme j’ai piqué a gauche et a droite)…
Alors, qu’en pensez vous ?
ps : - wlan0 -> interface connecté a ma livebox
- eth0 -> mon reseau local
- Mes services mis en place sur ma passerelle sont apache 2 (avec ssl), mysql, vsftp (avec ssl).

[code]

************************************************

** Script de configuration d’iptables **

** Cree par Ced le 22/06/2007 **

************************************************

#******************

Mise a zero **

#******************

    # Supprime les chaînes de la table filter (INPUT, FORWARD et OUTPUT)
            iptables -F

    # Supprime les chaînes personnelles de la table filter
            iptables -X

    #Compteur de Paquets
            iptables -Z

    # Supprime les chaînes de la table nat (PREROUTING, OUTPUT et POSTROUTI NG)
            iptables -t nat -F

    # Supprime les chaînes personnelles de la table nat
            iptables -t nat -X

    # Supprime les chaînes personnelles de la table nat
            iptables -t nat -Z

    # Supprime les chaînes de la table mangle      # -> PREROUTING, OUTPUT,  INPUT,$
            iptables -t mangle -F

    # Supprime les chaînes personnelles de la table mangle
            iptables -t mangle -X

    #Compteur de Paquets
           iptables -t mangle -Z

    echo - Vidage : [OK]

#**********************

Regles par default **

#**********************

    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    echo - Default : [OK]

#**************

Regles 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

    echo - Accept Nat : [OK]

#*****************

Regles 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

    echo - Accept Mangle : [OK]

#********************

Regles localhost **

#********************

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT
    echo - Accept lo :              [OK]

#**************

Regles Lan **

#**************

    iptables -A INPUT -i eth0 -j ACCEPT
    iptables -A OUTPUT -o eth0 -j ACCEPT
    echo - Accept Lan : [OK]

#**************

Regles Nat **

#**************

    iptables -t nat -A POSTROUTING -s 192.169.0.0/255.255.255.0 -o wlan0 -j MASQUERADE

    # Lan -> Net ACCEPTED
    iptables -A FORWARD -i eth0 -o wlan0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    # Net -> Lan ACCEPTED si ESTABLISHED
    iptables -A FORWARD -i wlan0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

    echo - Accept Nat 169 :         [OK]

#**************

Regles ssh **

#**************

    iptables -A INPUT -p tcp --dport ssh -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport ssh -o wlan0 -j ACCEPT
    echo - Accept ssh :             [OK]

#***************

Regles icmp **

#***************

    iptables -A INPUT -p icmp  -m state --state RELATED -j ACCEPT
    echo - Accept icmp :            [OK]

#****************

Regles https **

#****************

    iptables -A INPUT -p tcp --dport https -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport https -o wlan0 -j ACCEPT
    echo - Accept https :           [OK]

#***************

Regles http **

#***************

    iptables -A INPUT -p tcp --dport http -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport http -o wlan0 -j ACCEPT
    echo - Accept http :            [OK]

#***************

DNS Local **

#***************

    iptables -A OUTPUT -o wlan0 -p udp --dport 53 -m state --state ! INVALID  -j ACCEPT
    iptables -A INPUT -i wlan0 -p udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
    echo - Accept dns :    [OK]

#***************

Regles ftp **

#***************

    iptables -A INPUT -p tcp --dport 20 -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 20 -o wlan0 -j ACCEPT
    echo - Accept ftp :             [OK]

    iptables -A INPUT -p tcp --dport 21 -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 21 -o wlan0 -j ACCEPT
    echo - Accept ftp_data :        [OK]

    iptables -A INPUT -i wlan0 -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
    iptables -A OUTPUT -o wlan0 -p tcp --sport 1024:65535 --dport 1024:65535  -j ACCEPT

#********************

Accept emule **

#********************

    iptables -A INPUT -p tcp --dport 4662 -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 4662 -o wlan0 -j ACCEPT
    echo - Accept emule-tcp :       [OK]

    iptables -A INPUT -p tcp --dport 4672 -i wlan0 -j ACCEPT
    iptables -A OUTPUT -p tcp --sport 4672 -o wlan0 -j ACCEPT
    echo - Accept emule-udp :       [OK]

#******************

AntiScanPort **

#******************

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    echo - Limit antiscanport :     [OK]

#******************

AntiPingDead **

#******************

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    echo - Accept antipingdead :    [OK]

#*********

Log **

#*********

    iptables -t filter -A INPUT -j LOG
    echo - Accept Log :    [OK][/code]

Voili voila voilou, lachez vous, je prendrais toutes idées et modifications en compte… :smiley:

Merci
ced

Ah oui, et le resultat d’un iptables -L -v -n si ca peux aider a mieux voir :

[code]Chain INPUT (policy DROP 4 packets, 160 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 – lo * 0.0.0.0/0 0.0.0.0/0
2 473 ACCEPT 0 – eth0 * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
1 576 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0 state RELATED
82 7188 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT udp – wlan0 * 0.0.0.0/0 0.0.0.0/0 udp spt:53 state RELATED,ESTABLISHED
0 0 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
111 7868 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
12757 557K ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpts:1024:65535
0 0 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4662
0 0 ACCEPT tcp – wlan0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4672
0 0 LOG 0 – * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 – eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
0 0 ACCEPT 0 – wlan0 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x04 limit: avg 1/sec burst 5
0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 limit: avg 1/sec burst 5

Chain OUTPUT (policy DROP 8 packets, 2768 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 – * lo 0.0.0.0/0 0.0.0.0/0
2 473 ACCEPT 0 – * eth0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:22
75 22224 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:443
0 0 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:80
0 0 ACCEPT udp – * wlan0 0.0.0.0/0 0.0.0.0/0 udp dpt:53 state NEW,RELATED,ESTABLISHED,UNTRACKED
0 0 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:20
114 14773 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:21
18354 27M ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spts:1024:65535 dpts:1024:65535
0 0 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:4662
0 0 ACCEPT tcp – * wlan0 0.0.0.0/0 0.0.0.0/0 tcp spt:4672[/code]

pour mieux voir, tu donnes un iptables-save, parceque là, on a pas la table nat.
J’ai pas épluché, mais déjà, tu vides plusieurs fois les mêmes tables, tu peux peut être simplifier.
ensuite, sur le nat et le mangle, tu mets de l’accept partout, mais par défaut, c’est déjà le cas, c’est inutile. En plus, le fait de mettre de l’accept partout sur le nat rend inutile toutes les autres règles accept que tu mets dessus puisque tu ne reject rien.
Sauf qu’il faudrait mettre du drop sur le nat/forward et affiner ce que tu accept en forward, si tu veux verrouiller (puisque tu es suffisament parano pour filtrer l’output, autant aller jusqu’au bout).
le ssh, quitte à l’ouvrir sur le net, autant l’ouvrir partout.
l’icmp est trop filtré, il faudrait ouvrir à un peu plus de paquets de service:

-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
on ne sait pas si tu as un serveur http, https, ni dns, ni ftp, donc pas facile de juger de l’utilité de tes règles.

fin voilà un premier jet.

Merci de ta réponse mattotop.

Voila le resultat de iptables-save (je ne connaisais pas la commande :slightly_smiling:, elle a l’air sympa et utile) :

[code]# Generated by iptables-save v1.3.6 on Mon Jul 16 11:46:57 2007
*mangle
:PREROUTING ACCEPT [428:37611]
:INPUT ACCEPT [428:37611]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [396:79903]
:POSTROUTING ACCEPT [400:79784]
COMMIT

Completed on Mon Jul 16 11:46:57 2007

Generated by iptables-save v1.3.6 on Mon Jul 16 11:46:57 2007

*nat
:PREROUTING ACCEPT [2:96]
:POSTROUTING ACCEPT [8:1397]
:OUTPUT ACCEPT [8:1397]
-A POSTROUTING -s 192.169.0.0/255.255.255.0 -o wlan0 -j MASQUERADE
COMMIT

Completed on Mon Jul 16 11:46:57 2007

Generated by iptables-save v1.3.6 on Mon Jul 16 11:46:57 2007

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [8:2768]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m state --state RELATED -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i wlan0 -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 4662 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 4672 -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -o wlan0 -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 20 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 21 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 4662 -j ACCEPT
-A OUTPUT -o wlan0 -p tcp -m tcp --sport 4672 -j ACCEPT
COMMIT

Completed on Mon Jul 16 11:46:57 2007[/code]

Pour mes services, je l’ai dis dans le 1er post, ma passerelle heberge un service vsftp, un service web (https) et un service ssh (port modifié).

En ce qui concerne le vidage, le mangle et le nat, c’est vrai, j’ai un peu baclé ces points. Je vais revoir ça et faire de tests pour mieux percevoir le fonctionnement.

Pour le ssh, je ne comprends pas trop ce que tu veux dire, il est bien ouvert sur les deux interfaces pourtant …

Merci, et dsl du retard :slightly_smiling:

à la grosse, pas de nouvelle remarque qui me saute aux yeux.
sais tu que tu as la commande iptables-restore, qui t’applique le contenu de ce que tu as pu sauvegarder dans un fichier (et éventuellement retoucher) par iptables-save ?
Personnellement je préfère me faire une config “à la mano” en sculptant pour obtenir ce que je veux avec les commandes iptables une à une, puis ensuite, je sauve ma config dans un fichier, et je mets juste comme script init un rechargement de ce fichier par iptables-restore.
Sur les grosses configs iptables, c’est bien plus rapide à charger qu’une serie d’instructions iptables faites une à unes.
Un exemple d’utilisation:
forum.debian-fr.org/viewtopic.php?t=1901