Le Mercredi 17 Septembre 2003 09:02, Jerome SOUCANY a écrit :
> Qu'avez vous comme config iptables pour l'ADSL ?
> J'ai fait quelques éssais mais plus rien ne marche (je suis sous
> mandrake 9.0)  :(
>
> J'aimerais pouvoir :
> - surfer sur des site
> - faire du FTP sortant
> - xmule/mldonkey
> - irc
> - icq
> - faire du ssh entrant a partir d'une IP connue

Moi, j'ai un truc qui ressemble à ça dans /var/lip/iptables/active (sur
une Mdk, il faudrait coller ça dans /etc/sysconfig/iptables). J'ai
adapté les règles à la config' que tu veux, les commentaires débutant
par ### sont de mon cru :

# Generated by iptables-save v1.2.8 on Wed Jul  9 17:06:02 2003
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# ### Masquerading du réseau interne (10.0.0.0/24). Inutile si tu n'as
# ### pas d'autres machines, of course.
[0:0] -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o ppp0 -j MASQUERADE
COMMIT
# Completed on Wed Jul  9 17:06:02 2003
# Generated by iptables-save v1.2.8 on Wed Jul  9 17:06:02 2003
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:LOGDROPM - [0:0]
# ### Plages IP non routables -> rien à faire sur l'interface externe ->
# ### poubelle direct
[0:0] -A PREROUTING -s 0.0.0.0/255.0.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 10.0.0.0/255.0.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 127.0.0.0/255.0.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 169.254.0.0/255.255.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 172.16.0.0/255.240.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 192.0.2.0/255.255.255.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 192.168.0.0/255.255.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 198.18.0.0/255.254.0.0 -i ppp0 -j LOGDROPM
[0:0] -A PREROUTING -s 224.0.0.0/224.0.0.0 -i ppp0 -j LOGDROPM
# ### On journalise puis on vire.
[0:0] -A LOGDROPM -j LOG
[0:0] -A LOGDROPM -j DROP
COMMIT
# Completed on Wed Jul  9 17:06:02 2003
# Generated by iptables-save v1.2.8 on Wed Jul  9 17:06:02 2003
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOGDROP - [0:0]
# ### Bon, logique, ces interfaces n'ont pas à être contrôlées a priori
[0:0] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -s 10.0.0.0/255.255.255.0 -i eth0 -j ACCEPT
# ### La commande magique qui permet de s'éviter de dupliquer plein de
# ### règles. Merci le stateful filtering :-)
[0:0] -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# ### ICMP -> j'accepte tout
[0:0] -A INPUT -i ppp0 -p icmp -j ACCEPT
# ### SSH depuis 172.16.124.45 (à adapter, évidemment)
[0:0] -A INPUT -s 172.16.124.45/255.255.255.255 -i ppp0 -p tcp -m tcp --dport 
22 -j ACCEPT
# ### eDonkey/eMule
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 4662 -j ACCEPT
[0:0] -A INPUT -i ppp0 -p udp -m udp --dport 4672 -j ACCEPT
# ### ICQ (voir plus bas pour plus d'infos)
[0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 20000:20019 -j ACCEPT
# ### Traceroute -> j'accepte aussi
[0:0] -A INPUT -i ppp0 -p udp -m udp --dport 33434:33600 -j ACCEPT
# Le reste -> journalisé puis poubellisé
[0:0] -A INPUT -j LOGDROP
# ### Forwarding des paquets depuis le réseau interne mais uniquement
# ### celui-là. Une solution plus simple consiste à laisser la policy de
# ### FORWARD à ACCEPT et ne mettre aucune règle, mais ça me plaît pas.
# ### Ceci est bien sûr futile s'il n'y a pas de rézal...
[0:0] -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A FORWARD -s 10.0.0.0/255.255.255.0 -i eth1 -o ppp0 -j ACCEPT
[0:0] -A FORWARD -j LOGDROP
# ### Les interfaces locales (entre autres pour pouvoir communiquer avec
# ### ton modem ADSL)
[0:0] -A OUTPUT -o lo -j ACCEPT
[0:0] -A OUTPUT -d 10.0.0.0/255.255.255.0 -o eth0 -j ACCEPT
# ### Ici, deux solutions : la plus simple est d'accepter tout en
# ### sortie, mais ça peut faire peur aux paranos, donc je la laisse en
# ### commentaire
#[0:0] -A OUTPUT -o ppp0 -j ACCEPT
# ### Autrement, on met des règles pour tout ce qu'on autorise
# ### ICMP
[0:0] -A OUTPUT -o ppp0 -p icmp -j ACCEPT
# ### FTP passif
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 21 -j ACCEPT
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 1024:65535 -j ACCEPT
# ### DNS (ça peut aider)
[0:0] -A OUTPUT -o ppp0 -p udp -m udp --dport 53 -j ACCEPT
# ### HTTP
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 80 -j ACCEPT
# ### HTTPS
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 443 -j ACCEPT
# ### eDonkey/eMule
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 4662 -j ACCEPT
[0:0] -A OUTPUT -o ppp0 -p udp -m udp --dport 4672 -j ACCEPT
# ### IRC (voir plus bas pour plus d'infos)
[0:0] -A OUTPUT -o ppp0 -p tcp -m tcp --dport 6667 -j ACCEPT
# ### ICQ
[0:0] -A OUTPUT -o ppp0 -p udp -m udp --dport 4000 -j ACCEPT
# ### Traceroute (pour déboguer)
[0:0] -A OUTPUT -o ppp0 -p udp -m udp --dport 33434:33600 -j ACCEPT
# Enfin, le reste à la poubelle
[0:0] -A OUTPUT -j LOGDROP
# Completed on Wed Jul  9 17:06:02 2003

Une fois ceci placé dans /etc/sysconfig/iptables, et adapté à tes
besoins, il te suffit de taper '/etc/init.d/iptables start' pour activer
le pare-feu. Si tu as un réseau interne, il te faudra aussi ajouter la
ligne FORWARD_IPV4=yes à /etc/sysconfig/network pour leur donner accès
au Grand Ternet. Si tu veux que le pare-feu se lance au démarrage,
utilise ntsysv et sélectionne iptables.

Quelques notes :

* Pour le DNS, tu peux restreindre ça aux serveurs DNS de ton FAI, en
  rajoutant -d et l'adresse IP de ton serveur DNS. D'un autre côté, ça
  t'empêche de déboguer correctement un problème DNS sans changer les
  règles (impossible d'interroger les serveurs racine, par exemple).
* Pour ICQ, il faut (d'après ce que j'ai lu) 20 ports entrants par
  utilisateur. Donc, pour un second utilisateur, il faudrait aussi
  ouvrir les ports 20020:20039. Mais comme cet utilisateur a toutes les
  chances d'être sur une autre machine de ton réseau (à moins que tu
  aies des terminaux connectés à ta machine), il faudra utiliser la
  cible DNAT (dans la table 'nat', of course) :

  [0:0] -A PREROUTING -i ppp0 -p tcp -m tcp --dport 20020:20039 -j DNAT 
--to-destination 10.0.0.2

  À noter que ceci n'est utile à ma connaissance que pour les transferts
  de fichiers /via/ ICQ... Je ne suis pas non plus certain qu'il ne
  faille pas aussi le 4000/tcp en sortie, mais je pense que tu t'en
  rendras compte assez vite s'il le faut :-)

* Pour IRC, j'ai choisi le 6667 car c'est le plus utilisé. Néanmoins, ça
  dépend beaucoup de ton serveur. Certains proposeront/exigeront des
  ports différents. D'autres vont aussi demander des règles spéciales,
  par exemple certains veulent à tout prix faire une requête ident et ne
  te connectent pas tant qu'ils n'ont pas eu un paquet en retour de ta
  machine. Il faut donc, soit installer un serveur ident et ouvrir le
  port 113, soit utiliser la cible REJECT pour renvoyer un RST :

  [0:0] -A INPUT -i ppp0 -p tcp -m tcp --dport 113 -j REJECT

  Tu peux limiter la portée d'une telle commande avec un
  -s sur l'adresse IP du serveur IRC (les autres venant sur ce port se
  prendront donc les pieds dans la chaîne LOGDROP à la fin =)

Voilà, je pense à rien d'autre pour le moment. Ah quoique si, comme mon
distingué co-posteur a pensé à le mettre dans ses règles, il est pas mal
de virer les paquets qui arrivent sans dire bonjour. Ça se fait comme
ça (au début de la chaîne, pour éviter que les ACCEPT prennent le pas
dessus) :

[0:0] -A INPUT -p tcp -m state --state NEW -m tcp ! --syn -j LOGDROP

HTH !

+++
-- 
[ Jacques Caruso <[EMAIL PROTECTED]>                  Développeur PHP ]
[ Monaco Internet                           http://monaco-internet.mc/ ]
[ Tél : (+377) 93 10 00 43                        Clé PGP : 0x41F5C63D ]
[ * Smith & Wesson -- The Ultimate ``Point & Click'' User interface. * ]

Linux-Azur :      http://www.linux-azur.org
Désinscriptions: http://www.linux-azur.org/liste.php3
**** Pas de message au format HTML, SVP ****

Répondre à