machines:grifon:lg
no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | machines:grifon:lg [2019/03/18 19:51] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== lg - looking glass ====== | ||
+ | |||
+ | lg est une machine virtuelle sous OpenBSD et met à disposition des administrateurs réseau et curieux un looking-glass bgp qui permet de consulter la table de routage internet vue par le réseau de grifon. | ||
+ | |||
+ | Le looking-glass est disponible en web sur https:// | ||
+ | |||
+ | ===== Administrateurs ===== | ||
+ | |||
+ | * alarig | ||
+ | * gizmo | ||
+ | * nemo | ||
+ | * petrus | ||
+ | |||
+ | ===== Services ===== | ||
+ | |||
+ | * bgpd : 2x full view IPv4 + IPv6 de chacun des asbr | ||
+ | * httpd : pour l' | ||
+ | * sshd : interne + public | ||
+ | |||
+ | ===== Setup ===== | ||
+ | |||
+ | lg doit récupérer une full view bgp des deux ASBR grifon, et les fournir à [[https:// | ||
+ | |||
+ | bgplg peut ensuite être utilisé en tant que cgi sur [[https:// | ||
+ | |||
+ | Les pages de man de [[https:// | ||
+ | |||
+ | ==== config réseau ==== | ||
+ | |||
+ | em0 est l' | ||
+ | |||
+ | <file | / | ||
+ | rdomain 1 | ||
+ | inet 172.17.0.35/ | ||
+ | inet6 fd00: | ||
+ | </ | ||
+ | |||
+ | <file | / | ||
+ | inet 89.234.186.9/ | ||
+ | inet6 2a00: | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | lg$ ifconfig | ||
+ | em0: flags=8843< | ||
+ | lladdr 8e: | ||
+ | index 1 priority 0 llprio 3 | ||
+ | media: Ethernet autoselect (1000baseT full-duplex) | ||
+ | status: active | ||
+ | inet 172.17.0.35 netmask 0xffffff00 broadcast 172.17.0.255 | ||
+ | inet6 fe80:: | ||
+ | inet6 fd00: | ||
+ | em1: flags=8843< | ||
+ | lladdr d6: | ||
+ | index 2 priority 0 llprio 3 | ||
+ | groups: egress | ||
+ | media: Ethernet autoselect (1000baseT full-duplex) | ||
+ | status: active | ||
+ | inet 89.234.186.9 netmask 0xffffffe0 broadcast 89.234.186.31 | ||
+ | inet6 fe80:: | ||
+ | inet6 2a00: | ||
+ | </ | ||
+ | |||
+ | ==== sshd ==== | ||
+ | |||
+ | Deux daemons ssh tournent sur la machine : un sur em0 dans le rdomain/ | ||
+ | |||
+ | * sshd coté privé (em0) : | ||
+ | < | ||
+ | lg$ doas cp / | ||
+ | lg$ doas cp / | ||
+ | lg$ doas rcctl enable sshd_private | ||
+ | lg$ doas rcctl set sshd_private flags -f / | ||
+ | lg$ doas rcctl set sshd_private rtable 1 | ||
+ | |||
+ | lg$ diff -u / | ||
+ | --- / | ||
+ | +++ / | ||
+ | @@ -10,8 +10,8 @@ | ||
+ | |||
+ | #Port 22 | ||
+ | # | ||
+ | -# | ||
+ | -# | ||
+ | +ListenAddress 172.17.0.35 | ||
+ | +ListenAddress fd00: | ||
+ | |||
+ | # | ||
+ | # | ||
+ | @@ -91,3 +91,6 @@ | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | + | ||
+ | +# config pour verrouillage | ||
+ | +AllowGroups wheel | ||
+ | |||
+ | lg$ doas rcctl start sshd_private | ||
+ | </ | ||
+ | |||
+ | * sshd coté public (em1) : | ||
+ | < | ||
+ | lg$ doas mv / | ||
+ | lg$ doas rcctl enable sshd_public | ||
+ | lg$ doas rcctl disable sshd | ||
+ | |||
+ | lg$ diff -u / | ||
+ | --- / | ||
+ | +++ / | ||
+ | @@ -10,8 +10,8 @@ | ||
+ | |||
+ | #Port 22 | ||
+ | # | ||
+ | -# | ||
+ | -# | ||
+ | +ListenAddress 89.234.186.9 | ||
+ | +ListenAddress 2a00: | ||
+ | |||
+ | # | ||
+ | # | ||
+ | @@ -27,7 +27,7 @@ | ||
+ | # Authentication: | ||
+ | |||
+ | # | ||
+ | -PermitRootLogin prohibit-password | ||
+ | +PermitRootLogin no | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | @@ -52,7 +52,7 @@ | ||
+ | # | ||
+ | |||
+ | # To disable tunneled clear text passwords, change to no here! | ||
+ | -PasswordAuthentication no | ||
+ | +PasswordAuthentication yes | ||
+ | # | ||
+ | |||
+ | # Change to no to disable s/key passwords | ||
+ | @@ -91,3 +91,5 @@ | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | + | ||
+ | +AllowUsers rviews | ||
+ | |||
+ | lg$ doas rcctl start sshd_public | ||
+ | </ | ||
+ | |||
+ | Si l'on se trouve dans le shell lancé depuis le sshd qui tourne dans le rdomain 1 il faut spécifier le rdomain 0 pour le sshd public : | ||
+ | < | ||
+ | lg$ doas route -T0 exec rcctl restart sshd_public | ||
+ | </ | ||
+ | |||
+ | Ainsi deux daemons tournent en parallèle sur la machine : | ||
+ | < | ||
+ | lg$ ps aux | grep /sbin/sshd | ||
+ | root | ||
+ | root | ||
+ | </ | ||
+ | |||
+ | Dans la table de routage par défaut, rdomain 0 : | ||
+ | < | ||
+ | lg$ netstat -nat | grep *.22 | ||
+ | tcp 0 0 *.22 | ||
+ | tcp6 | ||
+ | </ | ||
+ | |||
+ | Et dans le rdomain 1 : | ||
+ | < | ||
+ | lg$ netstat -T1 -nat | grep .22 | ||
+ | tcp 0 0 172.17.0.35.22 | ||
+ | tcp6 | ||
+ | |||
+ | lg$ route -T1 exec netstat -nat | grep .22 | ||
+ | tcp 0 0 172.17.0.35.22 | ||
+ | tcp6 | ||
+ | </ | ||
+ | |||
+ | On voit ici qu'il y a deux méthodes pour spécifier la table de routage dans laquelle on se trouve. Soit l' | ||
+ | |||
+ | ==== bgpd ==== | ||
+ | |||
+ | bgpd doit donc recevoir les full view. Pas de filtrage en in, tout interdit en out. Pas d' | ||
+ | |||
+ | <file | / | ||
+ | router-id 89.234.186.9 | ||
+ | AS 204092 | ||
+ | fib-update no # permet de ne pas installer en table de routage | ||
+ | # (inutile pou un lg) | ||
+ | |||
+ | socket "/ | ||
+ | # le socket est dans le chroot de httpd pour bgplg cgi | ||
+ | # restricted pour interdire les modifs (cf bgplg(8)) | ||
+ | |||
+ | group grifon { | ||
+ | remote-as | ||
+ | |||
+ | neighbor 89.234.186.7 { | ||
+ | descr " | ||
+ | } | ||
+ | |||
+ | neighbor 2a00: | ||
+ | descr " | ||
+ | } | ||
+ | |||
+ | neighbor 89.234.186.6 { | ||
+ | descr " | ||
+ | } | ||
+ | |||
+ | neighbor 2a00: | ||
+ | descr " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | deny to any | ||
+ | allow from group grifon inet | ||
+ | allow from group grifon inet6 | ||
+ | </ | ||
+ | |||
+ | Démarrer ensuite bgpd | ||
+ | |||
+ | ==== httpd ==== | ||
+ | |||
+ | Cf principalement [[https:// | ||
+ | |||
+ | < | ||
+ | lg$ doas chmod 0555 / | ||
+ | lg$ doas chmod 0555 / | ||
+ | |||
+ | lg$ doas mkdir / | ||
+ | lg$ doas cp / | ||
+ | </ | ||
+ | |||
+ | <file | / | ||
+ | logdir "/ | ||
+ | |||
+ | server " | ||
+ | listen on * port 80 | ||
+ | |||
+ | location "/" | ||
+ | block return 301 " | ||
+ | } | ||
+ | |||
+ | location "/ | ||
+ | block return 301 " | ||
+ | root "" | ||
+ | } | ||
+ | |||
+ | location "/ | ||
+ | root "/ | ||
+ | request strip 2 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | server " | ||
+ | listen on * tls port 443 | ||
+ | |||
+ | tls certificate "/ | ||
+ | tls key "/ | ||
+ | |||
+ | location "/" | ||
+ | block return 301 " | ||
+ | } | ||
+ | |||
+ | location "/ | ||
+ | fastcgi | ||
+ | root "" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== let's encrypt - acme-client ==== | ||
+ | |||
+ | Pour l' | ||
+ | |||
+ | <file | / | ||
+ | lg$ cat / | ||
+ | authority letsencrypt { | ||
+ | api url " | ||
+ | account key "/ | ||
+ | } | ||
+ | authority letsencrypt-staging { | ||
+ | api url " | ||
+ | account key "/ | ||
+ | } | ||
+ | domain lg.grifon.fr { | ||
+ | domain key "/ | ||
+ | domain certificate "/ | ||
+ | domain full chain certificate "/ | ||
+ | sign with letsencrypt | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Lors de la première utilisation il faut générer une clé de compte : | ||
+ | |||
+ | < | ||
+ | lg$ doas acme-client -ADv lg.grifon.fr | ||
+ | </ | ||
+ | |||
+ | Ensuite pour le renouvellement automatique, | ||
+ | |||
+ | <file | / | ||
+ | for domain in $(awk '/ | ||
+ | acme-client -D $domain && \ | ||
+ | rcctl reload httpd; \ | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | Un peu de customisation pour que ça soit plus joli : | ||
+ | <file | / | ||
+ | </ | ||
+ | <body style=" | ||
+ | <div style=" | ||
+ | <a href=" | ||
+ | <img style=" | ||
+ | </a> | ||
+ | </ | ||
+ | |||
+ | ==== bgplg ==== | ||
+ | |||
+ | Une fois le looking-glass fonctionnel en web, on passer à la partie purement route-server / cli. | ||
+ | |||
+ | Ici c'est [[https:// | ||
+ | |||
+ | < | ||
machines/grifon/lg.txt · Dernière modification : 2019/03/18 19:51 de 127.0.0.1