31/12/2009

EeeGW : Créer soi-même une passerelle réseau

Firewalling

/etc/eeegw/firewall.sh
#!/bin/bash
# REMISE à ZERO des règles de filtrage
iptables -F
iptables -t nat -F

# DEBUT des "politiques par défaut"
# Je veux que les connexions entrantes soient bloquées par défaut
iptables -P INPUT DROP

# Je veux que les connexions destinées à être forwardées soient acceptées par défaut
iptables -P FORWARD ACCEPT

# Je veux que les connexions sortantes soient acceptées par défaut
iptables -P OUTPUT ACCEPT

# FIN des "politiques par défaut"
# Pas de filtrage sur l'interface de "loopback"
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT

#on ne filtre pas les vpn
iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i tap1 -j ACCEPT
iptables -A INPUT -i ethylix0 -j ACCEPT

# J'accepte le protocole ICMP (i.e. le "ping")
iptables -A INPUT -p icmp -j ACCEPT

# J'accepte le protocole IGMP (pour le multicast)
iptables -A INPUT -p igmp -j ACCEPT

# J'accepte les packets entrants relatifs ? des connexions d?j? ?tablies                                      
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2605 -j ACCEPT

#apache
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#tftp
iptables -A INPUT -p udp --dport 69 -j ACCEPT

#mon smtp
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#vpn
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT

# voip
#iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
#iptables -A INPUT -p tcp --dport 5061 -j ACCEPT

# supervision zabbix

iptables -A INPUT -p tcp --dport 10050 -j ACCEPT
iptables -A INPUT -p tcp --dport 10051 -j ACCEPT

#Munin
iptables -A INPUT -p tcp --dport 4949 -j ACCEPT


# La règle par défaut pour la chaine INPUT devient "REJECT" (il n'est pas possible de mettre REJECT comme politique par défaut)
#iptables -A INPUT -j REJECT

#forward de la connection
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tap1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ethylix0 -j MASQUERADE

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu

Le but du script de firewall est d’être lancé une première fois, puis d’être sauvegardé comme la Debian-Way le suggère. Pocédons donc comme suit :

# sh /etc/eeegw/firewall.sh
# iptables-save > /etc/network/firewall

Ainsi au boot des interfaces la machine lancera les règles iptables sauvegardées.

Firewall en sortie

NB : Dans cette exemple le firewall n’agit qu’en entrée, c’est à dire que par defaut nous laissons tout sortir sur le réseau. Vous pourriez sans aucun soucis filtrer en sortie.

Exemple de regles de filtrage en sortie :

# A mettre en début de script pour n'accepter explicitement QUE ce qui est autorisé.
iptables -P OUTPUT DROP

# Règles output fonctionnement de base
iptables -A OUTPUT -p tcp -o eth0 --dport domain -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport domain -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport ntp -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport ntp -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport rsync -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 --dport rsync -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport http -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport smtp -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport ssh -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport ftp -j ACCEPT

Explication fonctionnement du NAT

Imaginons que vous ayez un serveur FTP sur la machine A.
Imaginons que vous ayez un serveur Web sur la machine B.
Afin qu’un client puisse s’y connecter en venant de l’internet vous ne pouvez pas lui donner comme adresse afin de s’y connecter une des ip de votre LAN, mais l’ip que vous a attribué le FAI lors de votre connexion à celui-ci.
Le NAT est le fait que la eeegw sache vers quelle machine transmettre le traffic de tel ou tel service.
Ainsi le client établi une connexion FTP vers votre IP publique, la connexion FTP arrive sur votre eeegw qui va savoir qu’il faut qu’elle transmette ce traffic vers la machine A.

Pour plus d’explication sur comment faire ça, allez voir la partie firewall de la documentation.
Pour plus d’explication n’hésitez pas à aller lire la documentation Wikipédia sur le sujet.

Régles de NAT

Vous avez besoin d’ouvrir un port sur votre eeegw qui redirige sur une des machines de votre lan ?
Rien de plus simple. Procédez comme suit si vous avez par exemple un serveur web derrière 10.0.69.1 :

# iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 10.0.69.1:80

Ensuite on save la nouvelle régle dans les régles devant se lancer au boot :

# iptables-save > /etc/network/firewall

Votre nouvelle règle de NAT/Firewall est donc automatiquement activée sans avoir à faire quoi que ce soit de plus sur votre eeegw.

  1. Jamesb
    | #1

    Salut.
    Comment est-ce que t’es branché au niveau des câbles (RJ45?) pour le FAI Narim ? Passes-tu par l’ancien modem-routeur ou est-ce que tu te branches à la place de celui-ci ? Est-ce qu’un pc faisant du PPPoP par RJ45 suffit à se passer physiquement et logiciellement d’un routeur ?
    Merci d’avance.

  2. | #2

    Salut.

    J’ai un modem ethernet.
    Ce modem ethernet (qui fonctionne CONNEMENT en mode “bridge” ) ne s’occupe que de faire la modulation ADSL sur ma ligne téléphonique.

    Les identifiants/mdp pour se connecter au FAI sont fait via la eeegw.
    Le modem sert juste à se synchroniser à l’adsl.

    Pour info j’utilise un : Linksys AM200

    En espérant avoir répondu à ta question.

  3. | #3

    Super article !
    Je vais tester et je te spammerais surement si je rencontre un problème 😉

  4. nzo
    | #4

    Il va chauffer beaucoup trop l’eeepc et son alim avec pour du 24/24.

  5. | #5

    @nzo Le CPU ne dépasse jamais les 50° et est stable en étant allumé 24/24
    Je peux te montrer les graph si tu veux car je monitore la T° CPU du eeegw.

    @akiri n’hésites pas.

  6. | #6

    La T° du CPU est désormais disponible dans l’article consacré à Munin.

  1. | #1
  2. | #2