Merci beaucoup à Eric Schenk pour le super outil qu'est diald.
#! /bin/sh # Mettez ici toutes les commandes de configuration locale # On lance gpm echo "Lancement de gpm..." gpm -t ms & # démarrage d'innd /etc/rc.d/rc.news # démarrage du démon httpd du CERN echo "Démarrage de CERN httpd avec proxy et cache." /usr/local/bin/httpd # chargement des modules nécessaires /etc/rc.d/rc.modules # démarrage de diald echo "Démarrage du démon diald pour Pacific Internet ..." cd /usr/lib/ppp /usr/lib/ppp/diald.pacific.internet /usr/lib/ppp/diald.pacific.internet /usr/sbin/diald /dev/ttyS1 /dev/ttyS1 lock debug 20 -m ppp local 127.0.0.2 \ remote 127.0.0.3 defaultroute modem crtscts \ connect "chat -v -f /usr/lib/ppp/pppchat.pi" \ dynamic -- debug noipdefault /usr/lib/ppp/pppchat.pi ABORT "NO CARRIER" ABORT BUSY "" ATZ OK ATm1s50=255s111=0DT1-800-555-1212 CONNECT "" login MONNOMDELOGIN ssword MOMMOTDEPASSE
#!/bin/sh # Mise en place d'une liaison PPP à l'aveuglette - script appelé blind.ppp DEVICE=ttyS1 ( stty 38400 -tostop pppd -detach debug noipdefault defaultroute mru 1500 /dev/$DEVICE & exit 0 ) /dev/$DEVICE
Mon fichier /etc/diald.conf (inchangé par rapport à la distribution originale) :
# Voici un ensemble de règles de filtrages assez compliquées # (Ce sont les règles que j'utilise.) # # J'ai décomposé les règles en quatre sections. # Les trames TCP, les trames UDP, les trames ICMP et enfin une règle # générale pour tout le reste. #------------------------------------------------------------------------------ # Règles pour les trames TCP. #------------------------------------------------------------------------------ # Commentaires généraux sur cet ensemble de règles : # # En général nous n'aimerions traiter que les données d'une liaison TCP # ayant un sens pour le temps de déconnexion. Cependant, nous essayons # d'ignorer les trames sans donnée. # Puisque la taille minimale d'un en-tête dans une trame TCP est de 40 octets, # toutes les trames d'une longueur de 40 ne devraient pas contenir de donnée. # De cette manière il est possible de manquer des trames vides (des informations # optionnelles de routage et d'autres choses supplémentaires peuvent être # présentes dans un en-tête IP), mais nous devrions en capter la majorité. # Remarquez que nous ne voulons pas rejetter les trames avec un champ tcp.live # vide puisque nous les utiliserons plus tard pour accélérer la déconnexion de # certaines liaisons TCP. # # Nous voulons également nous assurer que les trames WWW restent en vie même # si la socket TCP est arrétée. Nous faisons cela parce que WWW ne garde pas la # connexion une fois que les données ont-été transférées, et il serait # génant d'avoir la liaison qui se créee et se coupe à chaque document. # # En dehors de WWW l'utilisation la plus courante de TCP est pour les # connexions de longues durées dont la coupure signifie que vous n'allez plus # avoir besoin du réseau. # Nous ne voulons pas nécessairement avoir à attendre 10 minutes que la # connexion se termine alors que nous n'avons ni telnet ni rlogin en cours, donc # nous voulons accélérer le délai de déconnexion sur les liaisons TCP qui sont # terminées. Ceci est réalisé en mettant dans un cache les trames qui n'ont pas l'indicateur # live positionné. # --- début proprement dit de l'ensemble de règles --- # Quand on débute une connexion on ne donne tout d'abord au lien que 15 # secondes. L'idée ici est de pouvoir éventuellement se rendre compte que le # réseau de l'autre côté de la connexion n'est pas accessible. Dans ce cas # il n'est pas nécessaire de donner un temps de vie de 10 minutes au lien. # Avec la règle ci-dessous nous ne lui donnons initialement que 15 secondes. # Si le réseau est accessible alors nous devrions normalement recevoir une # réponse contenant des données dans les 15 secondes. Si cela pose un problème # parce que vous avez des réponses lentes de la part de certains sites que vous # visitez régulièrement, vous pouvez augmenter le temps avant déconnexion ou # bien supprimer cette règle. accept tcp 15 tcp.syn # Empécher named de garder la connexion active. ignore tcp tcp.dest=tcp.domain ignore tcp tcp.source=tcp.domain # (Argh! Le telnet de SCO commence par envoyer des SNY vides et n'initie la # connexion que s'il obtient une réponse. Pfuuutt... accept tcp 5 ip.tot_len=40,tcp.syn # Empécher les trames vides de maintenir le lien actif (autres que les trames # vides SNY). ignore tcp ip.tot_len=40,tcp.live # On s'assure que le transfert http maintient la ligne active pendant 2 # minutes, même après que ce soit terminé. # REMARQUE : votre fichier /etc/services ne devrait pas définir le service tcp # www, auquel cas vous devez commenter les deux lignes suivantes et vous # procurer un fichier /etc/services plus récent. Lisez la FAQ pour savoir # comment obtenir un nouveau fichier /etc/services. accept tcp 120 tcp.dest=tcp.www accept tcp 120 tcp.source=tcp.www # Une fois que le lien n'est plus actif, nous tentons de stopper la connexion # rapidement. Remarquez que si le lien est déjà arrété, un changement d'état # ne le ramènera pas à l'état actif. keepup tcp 5 !tcp.live ignore tcp !tcp.live # une donnée ftp ou une connexion ftp peut être attendue pour rendre compte # du trafic relativement fréquent. accept tcp 120 tcp.dest=tcp.ftp accept tcp 120 tcp.source=tcp.ftp # REMARQUE : les données ftp ne sont pas définies dans le fichier /etc/services # distribué dans les dernières versions de NETKIT, donc j'ai commenté ce # passage. # Si vous désirez le définir, ajoutez la ligne suivante à votre fichier # /etc/services : # ftp-data 20/tcp # et décommentez les deux règles suivantes #accept tcp 120 tcp.dest=tcp.ftp-data #accept tcp 120 tcp.source=tcp.ftp-data # Si nous n'avons pas réussi à l'avoir avec les règles au dessus, donnons au # lien 10 minutes de plus. accept tcp 600 any # Règles pour les trames UDP. # # Nous donnons dès à présent un temps limite aux requettes de domaine puisque # nous voulons juste qu'elles établissent le lien, pas qu'elles le maintiennent # pour un long moment. # Ceci parce que le réseau sera généralement établi par un appel de la # bibliothèque de résolution de nom (à moins que vous n'ayez mis toutes les # adresses que vous utilisez fréquemment dans /etc/hosts, auquel cas vous # découvrirez d'autres problèmes.) # Remarquez que vous ne devez pas donner une valeur de temps limite de # déconnexion plus courte que le temps supposé que va mettre votre DNS pour # répondre. Sinon quand le lien original s'établit, il risque d'y avoir # une attente supérieure à celle qu'il y a entre les séries de trames initiales # avant qu'une trame destinée à maintenir le lien passe par ce dernier. # Ne pas activer le lien pour rwho. ignore udp udp.dest=udp.who ignore udp udp.source=udp.who # Ne pas activer le lien pour RIP. ignore udp udp.dest=udp.route ignore udp udp.source=udp.route # Ne pas activer le lien pour NTP ou pour timed. ignore udp udp.dest=udp.ntp ignore udp udp.source=udp.ntp ignore udp udp.dest=udp.timed ignore udp udp.source=udp.timed # Ne pas activer les requètes de nom de domaine entre deux exécutions de named. ignore udp udp.dest=udp.domain,udp.source=udp.domain # Activer le réseau pour les requètes de domaine qui ne viennent pas de # named. accept udp 30 udp.dest=udp.domain accept udp 30 udp.source=udp.domain # Faire la même chose pour les diffusions de netbios-ns # REMARQUE : votre fichier /etc/services peut ne pas définir le service # netbios-ns, auquel cas vous devez commenter les trois lignes suivantes. ignore udp udp.source=udp.netbios-ns,udp.dest=udp.netbios-ns accept udp 30 udp.dest=udp.netbios-ns accept udp 30 udp.source=udp.netbios-ns # empécher les transferts de routed et gated de maintenir le lien actif ignore udp tcp.dest=udp.route ignore udp tcp.source=udp.route # Le reste a droit à 2 minutes. accept udp 120 any # Récupérer toutes trames que nous n'avons pas traitées auparavant et donner 30 # secondes de durée de vie à la connexion. accept any 30 any
Mon fichier diald.defs (inchangé par rapport à la distribution originale) :
# Définition des règles de protocole par défaut prule tcp tcp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9 prule udp udp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9 prule icmp icmp 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9 prule any any 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9 # Définition des en-têtes des trames internet. var ip.ihl 0(24)&0xf var ip.version 0(28)&0xf var ip.tos 1(24)&0xff var ip.tot_len 2(16)&0xffff var ip.id 4(16)&0xffff var ip.frag_off 6(16)&0x3fff var ip.ttl 8(24)&0xff var ip.protocol 9(24)&0xff var ip.check 10(16)&0xffff var ip.saddr 12 var ip.daddr 16 # Définition des en-têtes des trames TCP. var tcp.source +0(16)&0xffff var tcp.dest +2(16)&0xffff var tcp.seq +4 var tcp.ack_seq +8 var tcp.doff +12(28)&0xf var tcp.fin +13(24)&0x1 var tcp.syn +13(25)&0x1 var tcp.rst +13(26)&0x1 var tcp.psh +13(27)&0x1 var tcp.ack +13(28)&0x1 var tcp.urg +13(29)&0x1 var tcp.live +127 # Définition de en-têtes des trames UDP. var udp.source +0(16)&0xffff var udp.dest +2(16)&0xffff var udp.len +4(16)&0xffff var udp.check +6(16)&0xffff # Définition des en-têtes des trames ICMP. var icmp.type +0(24)&0xff var icmp.code +1(24)&0xff var icmp.checksum +2(16)&0xffff var icmp.echo.id +4(16)&0xffff var icmp.echo.sequence +6(16)&0xffff var icmp.gateway +4