====== une box avec debian ====== * Objet : Faire une box maison avec sa distribution. * Niveau requis :{{tag>débutant}} * Commentaires : //Une box maison, avec unbound , isc-dhcp-server, isc-dhcp-client, iptables et surtout votre debian// * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) * Suivi : {{tag>en-chantier}} * Création par [[user>LaFouine]] 27/11/2018 * Testé par <...> le <...> FIXME * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=284468#p284468 | en cours de redaction ]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) FIXME **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! ===== Introduction ===== L’objectif de ce tutoriel est de combler un vide qui est le suivant : \\ Les tutoriels pour * unbound, * isc-dhcp-server, * isc-dhcp-client, * iptables, * hostapd sont souvent là, mais isolés, pour un débutant c'est difficile de savoir par quoi commencer. l'idée de ce tuto c'est d'avoir quelque chose de fonctionnel pour démarrer et donc de savoir par quoi commencer. \\ Les conseils [conseil] sous cette clause sont facultatifs mais peuvent faire gagner du temps. ===== Installation ===== - isc-dhcp-client et iptable sont en principe installés par défaut. - kernel: :quand vous voulez mais sans cela ça ne marchera pas ;) - iptables :en premier - isc-dhcp-server :en second - unbound :en troisième - hostapd :en quatrième - net-tools :quand vous voulez - ulogd2 :je l'utilise, mais ce n'est pas indispensable - matériel possédant aux moins 2 prises rj45 et du wifi. === kernel ==== nano /etc/sysctl.conf net.ipv4.ip_forward=1 mettre a jour avec un sysctl -p === Iptables === __Note, ce tutoriel est en cours de rédaction donc ne pas s'en servir pour le moment.__ J'ai tenu à ce que ce soit fait avec debian , plutôt que d'autres distributions, les raisons sont multiples, mais en voici quelques-unes. Une distribution que je connais bien et donc les outils. Un deuxième pc qui peut dépanner. Apprendre, et pouvoir contrôler son réseau chez soi. etc etc. Le schéma est le suivant: [la box du FAI] <-> [la box maison] <-> vos machines on ne s'ocuppe pas de l'ipv6, j'ai malheureusement un FAI qui ne fournit pas ce type de prestation :( la configuration ipv6 n'est pas abordée, je vous recommande de fermer ipv6 si comme moi rien ne peux passer, l'ipv6 est en principe une norme qui devrait être acceptée. iptables en premier pourquoi ? Parce que c'est aussi la sécurité, ensuite parce que cela peut loguer, les lignes suivantes sont à adapter, car le nom de l'interface peut changer. la cible MASQUERADE indique de faire du nat, ce qui sera utilisé dans ce tutoriel, il est possible de faire autrement avec un pont/bridge Requis : iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE iptables -A FORWARD -i enp1s0 -o wlanwifi -j ACCEPT iptables -A FORWARD -i wlanwifi -o enp1s0 -j ACCEPT Facultatif : Limit=30 Burst=10 iptables -t nat -A POSTROUTING -m limit --limit $Limit/h --limit-burst $Burst -j NFLOG --nflog-group 0 --nflog-prefix NAT_POSTROUTING iptables -t nat -A PREROUTING -m limit --limit $Limit/h --limit-burst $Burst -j NFLOG --nflog-group 0 --nflog-prefix NAT_PREROUTING iptables -t nat -A INPUT -m limit --limit $Limit/h --limit-burst $Burst -j NFLOG --nflog-group 0 --nflog-prefix NAT_INPUT iptables -t nat -A OUTPUT -m limit --limit $Limit/h --limit-burst $Burst -j NFLOG --nflog-group 0 --nflog-prefix "NAT_OUTPUT Note : Il faut savoir que ces règles disparaissent au reboot. Comme il y beaucoup de tutoriels sur iptables. je vais plutôt vous donner les liens sur la documentation (ça chargerait trop le tutoriel). Sur Debian-Facile[[https://debian-facile.org/doc:reseau:iptables-pare-feu-pour-une-passerelle]] Lien externe plus complet: [[https://www.inetdoc.net/guides/iptables-tutorial/]] === isc-dhcp-server === isc-dhcp-server. Important.! Ne démarre pas si le fichier /etc/network/interfaces n'est pas en relation parfaite, j'explique: Il faut que l'interface soit opérationnelle/active et donc bien paramétrée , sinon isc-dhcp-server ne démarrera pas . si ce dernier ne démarre pas unbound en fera de même. Si vous utilisez un client windows pour tester, je vous recommande de le redémarrer, Windows à du mal avec le réseau à se mettre à jour correctement avec une reconnexion >--> reconnexion, de même pour la box, certains paramètres peuvent changer, /etc/resolv.conf est un classique. Parfois ce sont certaines interfaces qui ne s'activent pas. L'ordre de démarrage peut jouer un rôle, je vous conseille de faire votre propre service ou de modifier la configuration de Debian pour que cela démarre comme cité plus haut. Petite parenthèse pour les débutants et aussi facultative : Je conseille d'utiliser les alias pour éditer les fichiers cela va grandement vous faciliter la tâche, comme cela se passe sous root. Soyez vigilants à ne pas faire n'importe quoi sous Debian. Si vous voulez que cela soit pour tous les utilisateurs ça ce passe dans ce fichier : /etc/bash.bashrc Editeur="nano" alias ndhcp=$Editeur' /etc/dhcp/dhcpd.conf' alias ndhcps=$Editeur' /etc/default/isc-dhcp-server' alias ndhcp=$Editeur' /etc/dhcp/dhcpd.conf' Ce fichier est en root mais vous pouvez aussi le placer au niveau utilisateur. Cela va vous éviter de taper chaque fois le chemin et de devoir en plus savoir où il se trouve: un oubli ? : **alias** vous le montrera. === isc-dhcp-server choisir les interfaces === Ces fichiers sont sous **root** Donc penser à faire une sauvegarde avant toute chose ! éditer le fichier **/etc/default/isc-dhcp-server** #ipv4 INTERFACESv4="enp2s0 enp3s0 enp4s0 wlx64f06d883452" #ipv6 si vide pas d'interface donc pas d'ipv6 INTERFACESv6="" Vous remarquez qu'il manque l'interface enp1s0, car c'est celle qui a un câble relié à la box du FAI , donc en dhcp ou en static, regardez dans la doc de votre box du fournisseur pour y mettre une ip fixe c'est quand même plus pratique. === isc-dhcp-server configuration dhcp === éditer le fichier : **/etc/dhcp/dhcpd.conf** authoritative; option domain-name "domroxlan.dom"; default-lease-time 600; max-lease-time 7200; ddns-update-style none; log-facility local7; option subnet-mask 255.255.255.0; subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.20 192.168.2.29; option routers 192.168.2.21; option broadcast-address 192.168.2.255; option domain-name-servers 192.168.2.21; } subnet 192.168.3.0 netmask 255.255.255.0 { range 192.168.3.20 192.168.3.29; option routers 192.168.3.21; option broadcast-address 192.168.3.255; option domain-name-servers 192.168.3.21; } subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.20 192.168.4.29; option routers 192.168.4.21; option broadcast-address 192.168.4.255; option domain-name-servers 192.168.4.21; } subnet 192.168.50.0 netmask 255.255.255.0 { range 192.168.50.50 192.168.50.60; option routers 192.168.50.51; option broadcast-address 192.168.50.255; option domain-name-servers 192.168.50.51; } Ici soyez précis dans la syntaxe car si vous vous trompez d'un chiffre cela ne vous donnera pas la moindre info. **IMPORTANT**: une fois que tout fonctionne changer ces valeurs pour des raison de sécurité évidentes, Pour les raisons qui m'ont poussé à faire cette documentation c'est le manque de wiki à fournir une ip complète... en gros une configuration qui fonctionne . === Configuration des interfaces === sujet : Le fichier /etc/network/interfaces __Conseil__: J'ai rencontré un bug à un moment donné en changeant la configuration de ce fichier. Je recommande donc d’arrêter le service AVANT de le modifier! Profitez de faire de même, et donc ce qui l'utilise. Pas la peine de dire que la connexion est coupée si vous faites cela :) source /etc/network/interfaces.d/* auto lo iface lo inet loopback #============== wifi ============= allow-hotplug wlx234f0432556912 iface wlx234f0432556912inet static address 192.168.50.51 netmask 255.255.255.0 network 192.168.50.0 wireless-power off #============= rj45 ============== allow-hotplug enp1s0 iface enp1s0 inet static address 192.168.0.11/24 gateway 192.168.0.1 # dns-* options are implemented by the resolvconf package, if installed #dpkg -l |grep resolvconf = null #dns-nameservers 192.168.0.1 # dns-search domroxlan.dom allow-hotplug enp2s0 iface enp2s0 inet static address 192.168.2.21 netmask 255.255.255.0 network 192.168.2.0 allow-hotplug enp3s0 iface enp3s0 inet static address 192.168.3.21 netmask 255.255.255.0 network 192.168.3.0 allow-hotplug enp4s0 iface enp4s0 inet static address 192.168.4.21 netmask 255.255.255.0 network 192.168.4.0 À ce stade les connexions filaires ne marcheront pas car unbound n'est pas présent donc il faut faire la suite si vous voulez que cela marche ainsi utilisez le dns de la box à ce moment là :) Je remercie Mikl et raleur dans cette démarche car sans leur aide j'aurais bien plus galéré ===== Serveur Unbound pour un dns local ===== Soyez particulièrement prudent car ce service est sensible aux vulnérabilités. Note. Je ne suis pas parvenu a trouver une traduction en français des paramètres, les valeurs sont à adapter selon vos besoins. j'ai donc juste indiqué les valeurs que j'utilise. nano /etc/unbound/unbound.conf cat /etc/unbound/unbound.conf # Unbound configuration file for Debian. # # See the unbound.conf(5) man page. # # See /usr/share/doc/unbound/examples/unbound.conf for a commented # reference config file. # # The following line includes additional configuration files from the # /etc/unbound/unbound.conf.d directory. include: "/etc/unbound/unbound.conf.d/*.conf" #server: port: 53 #port d'écoute do-ip4: yes # do-ip6: yes # do-udp: yes #protocole autorisé do-tcp: yes #indique de communiquer sur le protocole TCP #interface: 0.0.0.0 access-control: 192.168.50.0/24 allow interface: 192.168.50.51 #requis wifi interface: 192.168.4.21 #requis rj45 interface: 192.168.3.21 #requis rj45 interface: 192.168.2.21 #requis rj45 interface: 127.0.0.1 #? access-control: 127.0.0.1 allow #? access-control: 192.168.0.0/24 allow #requis rj45 access-control: 192.168.2.0/24 allow #requis rj45 access-control: 192.168.3.0/24 allow #requis rj45 access-control: 192.168.4.0/24 allow #requis rj45 access-control: 192.168.50.0/24 allow #requis wifi (pas en service) private-address: 192.168.0.0/24 #renforce le coté privé et protège de la technique des "Relais DNS" unwanted-reply-threshold: 10000000 #eviter l'empoisonnement DNS aggressive-nsec: yes harden-algo-downgrade: no #l algorithme le plus faible est exclut no hide-identity: yes # hide-version: yes harden-glue: yes #ssl-upstream: yes # oblige à communiquer sur le protocole TLS. :yes:erreur :debug: tcp error for address 8.8.8.8 port 53 #ssl-port: 853 prefetch: yes # garde en cache les bons résultats prefetch-key: yes # cache-min-ttl: 100000 #durée minimale cache-max-ttl: 200000 #durée max key-cache-size: 50m infra-cache-numhosts: 1000000 #nombre d'hôtes qui peuvent être mis en cache do-ip6: no #desactive les requêtes ipv6 tcp-idle-timeout: 15000 #delai avant de signaler un timeout sur la connextion harden-below-nxdomain: yes harden-dnssec-stripped: yes #DNSSEC pour les zones de confiance val-clean-additional: no #toutes les données DNS non sécurisées son effacées do-not-query-localhost: yes #permet d'interroger localhost so-reuseport: yes #{linux seulement} améliore les performance udp #serve-expired: # tester num-threads: 4 key-cache-slabs: 8 infra-cache-slabs: 8 msg-cache-slabs: 8 rrset-cache-slabs: 8 key-cache-size: 100m key-cache-slabs: 2m harden-short-bufsize: yes #contre les très petites tailles de mémoire tampon EDNS. harden-large-queries: yes #contre les requêtes volumineuses num-queries-per-thread: 100 val-log-level: 2 #log verbosity: 5 #plage de 1 à 5 , 5 permet le plus parlant log-time-ascii: yes #valable sur un autre fichier que syslog log-queries: yes #affiche une ligne par requête log-replies: yes #affiche une ligne par requête,(réponse) log-local-actions: yes #affiche les info de la zone local log-servfail: yes #afficher pourquoi les requêtes renvoient SERVFAIL Ref doc logfile: /var/log/unbound.log #chemin d'accès #private-domain: "domroxlan.dom" #domaine local forward-zone: name: "." #forward-addr: 192.168.0.1@53 forward-addr: 1.1.1.1@53 forward-addr: 1.0.0.1@53 forward-addr: 65.2.17.60@53 forward-addr: 65.2.17.61@53 forward-addr: 66.2.24.158@53 forward-addr: 67.2.24.162@53 forward-addr: 8.8.8.8@53 Bug connu : Si dans le fichier /var/log/syslog vous avez ceci Jan 16 14:10:11 box kernel: [ 1352.364742] audit: type=1400 audit(1579180211.005:13): apparmor="DENIED" operation="open" profile="/usr/sbin/unbound" name="/var/log/unbound/unbound.log" pid=1000 comm="unbound" requested_mask="ac" denied_mask="ac" fsuid=106 ouid=0 Jan 16 14:10:11 box unbound[1000]: Jan 16 14:10:11 unbound[1000:0] debug: switching log to /var/log/unbound/unbound.log Jan 16 14:10:11 box unbound[1000]: Jan 16 14:10:11 unbound[1000:0] error: Could not open logfile /var/log/unbound/unbound.log: Permission denied unbound ne peux pas écrire dans le log que vous lui avez fourni, cela est lié à apparmor il y a peu de documentation en français: la solution est celle-ci Mettre ceci /{,var/}run/systemd/notify w, Dans le fichier /etc/apparmor.d/usr.sbin.unbound Ensuite ceci ne devrai rien renvoyer (donc tout va bien) apparmor_parser -r /etc/apparmor.d/usr.sbin.unbound Vérifier les droits sur le fichier au besoin pour tester 0777 mais en principe un 0770 devrai suffire. Relancer le service unbound et regarder si le log est pris en compte il peux être nécessaire de changer le fichier /etc/resolv.conf de façon à ce qu'il contienne : nameserver 127.0.0.1 Rappelle: Ce fichier a la fâcheuse tendance à se modifier. Vous pouvez donc le verrouiller avec la commande **chattr**, **Attention** c'est pas anodin car le système ne peux plus mettre a jour le fichier. Par exemple, si vous supprimez le paquet unbound, l'ip ne pourra plus se mettre à jour. (c'est un exemple parmi les nombreuse autres mauvaises surprises qui en découlent.) Attention l'utilisation peut empêcher le système d'écrire du coup le répertoire **/etc** est utiliseé à la place. vous aurez alors quelque chose de semblable ls /etc |grep resolv.conf.dhclient -rw-r--r-- 1 root root 47 mai 25 03:31 resolv.conf.dhclient-new.12784 -rw-r--r-- 1 root root 47 mai 25 12:06 resolv.conf.dhclient-new.13099 -rw-r--r-- 1 root root 47 mai 25 20:57 resolv.conf.dhclient-new.13271 il est peut être possible de passer par le fichier /etc/dhcp/dhclient.conf en modifiant ou en l'ajoutant avec supersede domain-name-servers 127.0.0.1; En redémarrant (le service ou la machine) cela devrait au moins vous garder la ligne concernée, mais comme ça boxe a fond dans ce fichier il est possible qu'autre chose vienne le modifier après... bref c'est bien relou pour pas grand chose et impossible d'être certain de ne pas avoir une modification suite à une installation d'un autre logiciel etc etc. je n’apprécie pas ce type de comportement de la part des développeurs, pour la simple et bonne raison que si un fichier est modifié par l'utilisateur on a plus le droit de le modifier sans son accord, particulièrement quand il s'agit de la configuration du système. car en cas de problème qui est responsable, la dernière valeur ou l'utilisateur,surtout que ça peut en plus venir, aux moment du renouvellement du bail de la box du FAI ! Pour tester utiliser la commande: **dig** Si vous êtes sur un O.S propriétaire il peux s'avérer utile d'y effacer le cache dns sur un client windows on utilisera: ipconfig /flushdns A partir de là cela devrait suffire pour une connexion filaire et être fonctionnel, ===== Le point d'accès wifi ===== l'installation est assez simple. aptitude install hostapd fichier de configuration: **/etc/hostapd/hostapd.conf** interface=wlx #interface=wlan0 driver=nl80211 # Nom du spot Wi-Fi ssid=Rox country_code=Ch #hw_mode=g channel=7 macaddr_acl=0 #wifi fermer = 1 ouver 0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=15carracteconseillier:D wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP wpa_group_rekey=86400 ieee80211n=1 # Beacon interval in kus (1.024 ms) beacon_int=100 # mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g) hw_mode=g wme_enabled=1 # DTIM (delivery trafic information message) dtim_period=2 # Maximum number of stations allowed in station table max_num_sta=10 # Fragmentation threshold; 2346 = disabled (default) fragm_threshold=2346 j'ai pas trouvé de documentation en français mais, il faut chercher a savoir 2 choses Si la carte/clé wifi est bien reconnue par le kernel. Le nom qui est retenu ou plutôt attribué à cette carte ici : **wlx** Note avec iptables je vous conseille de filtrer les adresse mac, c'est pas infaillible mais ça va laisser des traces dans les logs et de compliquer la tache du pirate. Dans le cas où la clef serait craquée. vous devriez à ce stade avoir une machine qui sert donc de "pc/box" transportable n'importe où, avec votre distribution ,un serveur dns,un point d'accès wifi. Je remercie tous ceux qui m'ont apporté de l'aide grâce au forum.:-O