Afficher/cacher Sommaire
IPV6 Freebox
De plus en plus de réseaux proposent une adresse en IPv6. Je ne détaillerai pas ce qu’est IPv6, le pourquoi et la nécessité de le développer...
Obtenir une IPv6 sur sa machine Yunohost
Dans les prérequis, il y a :
sur la Freebox, dans la partie administration, avoir activé l’IPv6.
avoir IPv6 d’actif sur l’OS sur lequel se trouve Yunohost (Debian Jessie dans mon cas)
Avec l’IPv6, chaque machine se voit attribuer une IP publique, basée sur l’IP principale (celle de la Freebox) et l’adresse MAC de l’équipement concerné (pour faire simple). Une fois IPv6 activée sur la Freebox, la machine Yunohost étant réglée en DHCP (avec comme paramétrage au niveau de la Freebox de toujours associer la même IP), la machine se voit attribuer 2 IPv6.
Une adresse commençant par fe80:: qui est une adresse locale (fonctionnant uniquement sur le sous-réseau physique local : le switch et le wifi de la Freebox). Une adresse commençant par 2a01:exxx:xxxx:xxxx : qui est une adresse publique (La Freebox ayant l’adresse 2a01:exxx:xxxx:xxxx::1)
Pour chaque machine ayant une IPv6, la Freebox ouvre un tunnel vers Internet (indépendamment de la redirection de ports nécessaire pour l’adresse en IPv4 qui n’est que privée, liée au réseau local. Le NAT et la redirection de ports de l’IPv4 publique de la Freebox vers l’IPv4 locale de la machine sous Yunohost n’est utile qu’en IPv4). La redirection n’est donc plus nécessaire puisque la machine peut être attaquée via le tunnel V6. Comme indiqué, l’adresse IPv6 est publique : la machine est donc directement visible et accessible depuis Internet (d’où la nécessité de surveiller les logs, de faire les mises à jour, d’avoir un pare-feu activé, fail2ban... tout ce qui est installé et configuré par défaut dans Yunohost).
On peut voir ces deux adresses via un
sudo ifconfig /all
eth0 Link encap:Ethernet HWaddr 78:xx:xx:xx:xx:xx
inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255.255.0
adr inet6: 2a01:exxx:xxxx:xxxx:b81b/64 Scope:Global
adr inet6: fe80::7a2b:cbff:fea8:b81b/64 Scope:Lien
(...)
Configuration du DNS
Si on a un nom de domaine, par exemple mondomaine.fr, il faut noter l’adresse IPv6 publique de la machine sous Yunohost et dans la configuration des entrées DNS, en plus de l’entrée correspondant à l’association de l’IPv4 publique de la Freebox (ici représentée par XYZ.XYZ.XYZ.XYZ)
Nom Type Valeur
@ A XYZ.XYZ.XYZ.XYZ
On ajoute une entrée AAAA avec l’adresse IPv6 publique de la machine sous Yunohost (ici représentée par 2a01:exxx:xxxx:xxxx:b81b)
Nom Type Valeur
@ A XYZ.XYZ.XYZ.XYZ
@ AAAA 2a01:exxx:xxxx:xxxx:b81b
Validation de l’accessibilité en IPv6
Depuis une autre machine, sur un réseau extérieur et pour lequel on a une adresse IPv6, on peut vérifier qu’un
ping -v6 mondomaine.fr
répond et renvoie bien l’adresse IPv6 de la machine Yunohost.
On peut aussi tester un traceroute, ou encore, depuis un navigateur, saisir dans la barre d’adresse (avec les crochets, contrairement à une IPv4)
http://[2a01:exxx:xxxx:xxxx:b81b]
et ça doit afficher la même page par défaut que si on va sur l’url http://mondomaine.fr1
Conclusion
Si ça marche, votre machine Yunohost est bien accessible en IPv6 de l’extérieur. Pratique quand on souhaite s’y connecter depuis un réseau sur lequel on n’a pas d’IPv4 (seulement de l’IPv6).
2a01:e34:ee6a:b270::/64 fe80::beae:c5ff:fe57:150c
root@yanspm:/home/yann# cat /etc/network/interfaces
This file describes the network interfaces available on your system
and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
The loopback network interface
auto lo iface lo inet loopback
The primary network interface
allow-hotplug eth0 iface eth0 inet dhcp
This is an autoconfigured IPv6 interface
iface eth0 inet6 static address 2a01:e34:ee6a:b270::1 netmask 64 post-up ip -6 route add default via fe80::beae:c5ff:fe57:150c dev eth0
MODIFICATION
root@yanspm:/home/yann# cat /etc/network/interfaces
This file describes the network interfaces available on your system
and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
The loopback network interface
auto lo iface lo inet loopback
The primary network interface
allow-hotplug eth0 iface eth0 inet dhcp
This is an autoconfigured IPv6 interface
iface eth0 inet6 static address 2a01:e34:ee6a:b270::1 netmask 64 post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev eth0
Il faut ensuite installer le paquet “radvd” et le configurer pour qu’il annonce le bon préfixe sur le réseau local. Dans le cas de notre exemple, cela donne les commandes suivantes (pensez a remplacer le préfixe par votre préfixe, celui que vous avez noté) : pi@raspberrypi ~ $ sudo apt-get install radvd
pi@raspberrypi ~ $ sudo cat «EOF >/etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
prefix 2a01:e34:ee6a:b270::/64
{
};
};
EOF
Une fois cela fait, il faut activer le routage des paquets IPv6 dans Linux.
pi@raspberrypi ~ $ sudo echo “net.ipv6.conf.all.forwarding=1” » /etc/sysctl.conf
A partir de maintenant, si on redémarre la Raspberry Pi, elle va agir en tant que routeur IPv6, et l’IPv6 sera fonctionnel sur le réseau LAN, tout comme si on avait tout simplement activé IPv6 sur la Freebox.
Adresse IPV6 lien local : fe80::224:d4ff:fea6:aa20 Délégation de prefixe Attention si vous configurez un Next Hop pour le premier subnet, il ne sera plus annoncé par la Freebox sur votre réseau
Prefixe : 2a01:e34:ee6a:b270::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b271::/64
Next hop : fe80::beae:c5ff:fe57:150c eth0 shuttle
Prefixe : 2a01:e34:ee6a:b272::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b273::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b274::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b275::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b276::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b277::/64
Next hop :
fe80::f:54ff:fe13:2400 wlan0 YanHotSpot
fe80::c2:9ff:fe40:f22b eth0 Olibox
fe80::a00:27ff:fecc:c8ba
fe80::20f:54ff:fe13:24b5
IPV6-free–cubiebox-olibox-shuttle
Paramétrage IPV6 free
Le lien https://utux.fr/index.php?tag/ipv6
La première chose à faire consiste à se rendre dans l’interface de configuration de la freebox grâce à l’adresse
Puis rendez-vous dans : Paramètres de la Freebox, onglet Mode avancé, Configuration IPv6.
Adresse IPV6 lien local : fe80::224:d4ff:fea6:aa20 Délégation de prefixe Attention si vous configurez un Next Hop pour le premier subnet, il ne sera plus annoncé par la Freebox sur votre réseau
Prefixe : 2a01:e34:ee6a:b270::/64
Next hop :
Prefixe : 2a01:e34:ee6a:b271::/64
Next hop : fe80::beae:c5ff:fe57:150c eth0 shuttle
Paraméter le réseau ipv6 sur “shuttle”
This is an autoconfigured IPv6 interface
iface eth0 inet6 static address 2a01:e34:ee6a:b271::1 netmask 64 post-up ip -6 route add default via fe80::beae:c5ff:fe57:150c dev eth0
---
## IPv6 sécurisé sur Freebox Révolution avec une Raspberry Pi
[IPv6 sécurisé sur Freebox Révolution avec une Raspberry Pi](https://www.goudal.net/?p=6)
Posted on October 3, 2015
IPv6 est le protocole du futur Internet. Il existe depuis longtemps, mais la transition massive n’a toujours pas eu lieu, malgré la pénurie d’adresses IPv4.
Free a été le premier FAI grand public à proposer l’IPv6 via leur offre Freebox.
N’importe quel abonné Freebox peut aujourd’hui activer l’IPv6. La Freebox va alors établir un tunnel 6to4rd pour fournir une connectivité IPv6 sur son LAN, et va se mettre a envoyer des paquets **Router Advertisement** pour annoncer le préfixe (un /64) qui a été alloué aux machines sur le LAN qui savent faire de l’IPv6.
Dès lors, toute machine connectée au LAN de la Freebox et sachant parler l’IPv6 va pouvoir s’auto-assigner une IPv6 “publique” (ayant un scope global) et parler en IPv6 avec le reste du monde.
**Problème** : Puisque chaque machine obtient une adresse IPv6 ayant un scope global, n’importe quel autre machine sur l’Internet IPv6 peut communiquer avec tous les devices connectés sur le LAN. La Freebox ne propose strictement aucun moyen de filtrer le traffic IPv6. Il faudrait donc mettre en place un filtrage sur chaque device, sans exception. Sauf qu’installer un firewall sur une machine Windows, Mac ou Linux, c’est facile, mais dans certains autres cas, c’est tout simplement impossible.
Par exemple, une imprimante réseau qui saurait faire de l’IPv6 serait alors potentiellement utilisable par n’importe qui, depuis l’autre bout du monde, et il n’y a aucun moyen d’empêcher cela.
Activer l’IPv6 sur sa Freebox est donc un pari risqué. Le nombre d’adresses disponibles fait qu’il est certes très peu probable qu’on arrive a trouver l’adresse IPv6 de votre imprimante. Mais le risque existe bel et bien, et l’imprimante n’est qu’un exemple pas trop “grave” du problème (au pire, on vous vide le bac de feuilles / la cartouche) car l’accès à d’autres devices pourrait être beaucoup plus compromettant (Camera IP, Serveur NAS, …).
Que faire, alors ?
Plusieurs solutions existent :
* Ne pas activer l’IPv6. Ca peut paraitre bête, mais pour l’instant, le commun des mortels n’a pas vraiment besoin d’IPv6. Donc a moins de savoir vraiment ce que l’on fait, mieux vaut ne pas l’activer tout simplement.
* Utiliser la Freebox comme modem (en mode Bridge) et avoir un routeur/bridge externe. On trouve plusieurs tutos sur Internet pour faire cela, mais cette solution a plusieurs inconvénients, car lorsque la Freebox est en mode Bridge, on perd un certain nombre de fonctionnalités, dont le Wifi, l’UPnP, la Seedbox, la TNT en multiposte, … .(cf: <http://www.free.fr/assistance/5082.html>)
* Conserver la Freebox en mode Routeur, et utiliser un deuxième routeur externe uniquement pour la gestion de l’IPv6. C’est cette solution que je vais décrire ici, et pour ce faire, je vais utiliser une Raspberry Pi, car c’est une solution qui ne coute pas cher, qui consomme peu et qui peut se brancher facilement à la Freebox. On peut cependant faire la meme chose avec n’importe quel device qui fait tourner Linux en adaptant un peu.
Depuis Freebox OS 2.0, la configuration IPv6 permet de configurer des “next hops” pour 8 prefixes /64 (Autrement dit, chaque abonné Freebox dispose d’un /61). De plus, lorsqu’un next hop est configuré sur le premier prefixe, la Freebox n’envoie plus de Router Advertisements sur le LAN.
L’objectif est donc de :
* Mettre une Raspberry Pi sur le LAN, et activer IPv6
* Router le premier préfixe vers la Raspberry Pi
* Configurer une adresse de ce préfixe sur l’interface LAN de la Raspberry Pi
* Faire en sorte que la Raspberry Pi envoie les Router Advertisements pour ce préfixe sur son interface LAN
* Activer le routage des paquets IPv6
* Mettre en place des règles IP6Tables pour filtrer le traffic IPv6
Tout d’abord, il faut donc brancher la Raspberry Pi au LAN de la Freebox. Elle va obtenir une IPv4 automatiquement, grâce au DHCP.
La Raspberry Pi n’a pas IPv6 actif par défaut. Il faut donc l’activer avec les commandes suivantes :
pi@raspberrypi ~ $ sudo modprobe ipv6
pi@raspberrypi ~ $ sudo echo ipv6 >> /etc/modules
Cela aura pour effet de rajouter une adresse IP de type Link-local a l’interface eth0. Cette adresse est automatiquement générée en se basant sur l’adresse MAC, elle sera donc toujours la même. Il faut la noter, on en aura besoin plus tard. Dans l’exemple ci dessous, il s’agit de fe80::ba27:ebff:fe36:cb4e
pi@raspberrypi ~ $ sudo ifconfig eth0
eth0 Link encap:Ethernet HWaddr b8:27:eb:36:cb:4e
inet addr:192.168.42.34 Bcast:192.168.42.255 Mask:255.255.255.0
inet6 addr: fe80::ba27:ebff:fe36:cb4e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:82134 errors:0 dropped:3 overruns:0 frame:0
TX packets:83989 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:31899129 (30.4 MiB) TX bytes:34922782 (33.3 MiB)
* il faut activer IPv6 dans l’interface web de la Freebox, et configurer le Next Hop du premier préfixe avec l’adresse IP Link-local de la Raspberry Pi que l’on a notée plus haut.
* Il faut également noter l’adresse IPv6 lien local de la Freebox (ici fe80::f6ca:e5ff:fe57:1ceb) ainsi que le préfixe (ici 2001:db8:dead:beef::/64). Le préfixe utilisé ici à été modifié pour rédiger ce tutoriel, n’essayez pas d’y accéder, c’est une IP qui n’existe pas vraiment.
![Screen-Shot-2015-09-27-at-23](file://media/1880561980.png)
Il est possible que l’adresse IPv6 lien local ne s’affiche pas, juste après avoir activé l’IPv6. Il suffit de fermer et ouvrir la page de configuration a nouveau pour la voir s’afficher.
Il est bien important que ce soit le premier préfixe pour lequel on spécifie le next hop. Autrement, la Freebox va continuer d’envoyer des Router Advertisements sur le LAN, et le traffic IPv6 risque donc de passer directement par la Freebox, sans passer par la Raspberry Pi, et donc sans filtrage.
A partir de maintenant, on a donc un prefixe IPv6 public qui est routé de la Freebox vers la Raspberry Pi (a travers son IP Link-local sur le LAN).
Passons maintenant a la configuration IPv6 de la Raspberry Pi.
On va assigner la premiere adresse IPv6 du préfixe a l’interface eth0, et rajouter une route par défaut vers l’adresse IPv6 Link-local de la Freebox. Dans le cas de notre exemple, il faut donc executer la commande suivante. Pensez donc a remplacer les deux adresses IPv6 par celles notées à l’étape prédédente (pour construire l’adresse IPv6 de l’interface, il faut simplement retirer le “/64″ a la fin du préfixe, et le remplacer par “1”) :
sudo cat «EOF »/etc/network/interfaces iface eth0 inet6 static address 2001:db8:dead:beef::1 netmask 64 post-up ip -6 route add default via fe80::f6ca:e5ff:fe57:1ceb dev eth0 EOF
Il faut ensuite installer le paquet “radvd” et le configurer pour qu’il annonce le bon préfixe sur le réseau local. Dans le cas de notre exemple, cela donne les commandes suivantes (pensez a remplacer le préfixe par votre préfixe, celui que vous avez noté) :
pi@raspberrypi ~ $ sudo apt-get install radvd
sudo cat «EOF >/etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
prefix 2001:db8:dead:beef::/64
{
};
};
EOF
Une fois cela fait, il faut activer le routage des paquets IPv6 dans Linux.
pi@raspberrypi ~ $ sudo echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
A partir de maintenant, si on redémarre la Raspberry Pi, elle va agir en tant que routeur IPv6, et l’IPv6 sera fonctionnel sur le réseau LAN, tout comme si on avait tout simplement activé IPv6 sur la Freebox. Mais le problème que l’on souhaitait résoudre a la base sera présent, puisqu’aucun filtrage n’est en place. Donc toutes les machines sur le LAN qui savent faire de l’IPv6 seront directement joignables depuis le reste de l’Internet IPv6.
Il nous reste donc a mettre en place un filtrage basique. L’idée est de retomber dans le même genre de protection que celle fournie implicitement en IPv4 par le NAT. A savoir, les machines vers le LAN peuvent accéder a toute machine vers l’Internet, mais l’inverse n’est pas possible. Pour cela, on crée un fichier de configuration pour ip6tables (le firewall IPv6 de Linux) :
sudo cat «EOF >/etc/ip6tables.conf *filter :INPUT ACCEPT [14:960] :FORWARD DROP [34:3344] :OUTPUT ACCEPT [63:15248] -A FORWARD -s 2001:db8:dead:beef::/64 -j ACCEPT -A FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT COMMIT EOF
Encore une fois, n’oubliez pas d’adapter la commande a votre préfixe. Ce que l’on fait ici c’est qu’on va refuser de router les paquets qui viennent de l’internet vers notre LAN, sauf si on est capable de les associer a une session qui a été initiée depuis notre LAN vers l’Internet.
Reste maintenant a faire en sorte que ces règles soient mises en place au démarrage :
pi@raspberrypi ~ $ sudo cat «EOF »/etc/network/interfaces post-up ip6tables-restore < /etc/ip6tables.conf EOF
Puis a rebooter la Raspberry Pi afin d’appliquer tous ces nouveaux paramètres.
pi@raspberrypi ~ $ sudo reboot
Voila, c’est terminé !
Si tout se passe bien, vos machines sur le LAN devraient maintenant recevoir un router advertisement IPv6 de la Raspberry Pi, et donc s’auto-assigner une adresse IPv6 globale, et router leur traffic IPv6 vers la Raspberry Pi, qui va le faire suivre a la Freebox.
Vous pouvez verifier que tout fonctionne en allant visiter le site http://test-ipv6.com/ qui devrait normalement vous retourner un score de 10/10.
This entry was posted in Freebox, IPv6, Linux, Networking, Raspberry Pi by Fanfwe. Bookmark the permalink.
## OpenVpn carte Olimex + MultiWebApp
Installation
sudo apt install openvpn
Configuration **/etc/openvpn/vpntest.conf**
Bash pour activer le VPN
sudo nano /usr/local/bin/startvpn
#!/bin/bash
Lancement openvpn
if [ $(systemctl is-active openvpn@vpntest >/dev/null 2>&1 && echo true || echo false) = false ]; then echo “lancer openvpn et attendre 5 secondes …” sudo systemctl start openvpn@vpntest # attendre 5 secondes sleep 5 else echo “démarré” exit 0 fi
règles iptables
if [ ! -e “/tmp/iptablesvpn” ]; then
echo “ajout des règles iptables”
sudo iptables -w -t nat -A POSTROUTING -o tun0 -j MASQUERADE -m comment –comment “Use VPN IP for tun0”
#sudo iptables -w -A FORWARD -s 10.118.111.0/24 -i wlan0 -o tun0 -m conntrack –ctstate NEW -j ACCEPT -m comment –comment “Allow only traffic from wlan0 clients to tun0”
#sudo iptables -w -A FORWARD -s 192.168.0.0/24 -i eth0 -o tun0 -m conntrack –ctstate NEW -j ACCEPT -m comment –comment “Allow only traffic from eth0 clients to tun0”
# on a ajouté les règles iptables
touch /tmp/iptablesvpn
else
echo “règles iptables existantes”
fi
Droits en exécution
sudo chmod +x /usr/local/bin/startvpn
Démarrage
startvpn
Vérification
debian@olibox:~$ ip link |grep tun 6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
debian@olibox:~$ ip route 0.0.0.0/1 via 10.8.0.1 dev tun0 default via 192.168.0.254 dev eth0 10.0.242.0/24 dev wlan0 proto kernel scope link src 10.0.242.1 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 10.118.111.0/24 dev hotspot2 proto kernel scope link src 10.118.111.1 10.231.51.0/24 dev hotspot1 proto kernel scope link src 10.231.51.1 37.235.49.24 via 192.168.0.254 dev eth0 128.0.0.0/1 via 10.8.0.1 dev tun0 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.43
règles
$ sudo iptables -L -t nat
MASQUERADE all – anywhere anywhere /* Use VPN IP for tun0 */
#### Multi custom webapp (multi_webapp)
**multi_webapp** : <https://github.com/YunoHost-Apps/multi_webapp_ynh>
App vide sans accès FTP
Dossier : /me
Publique : non
Modification configuration **/etc/php5/fpm/pool.d/webapp_me.conf** pour autoriser le *php exec*
[webapp_me]
listen = /var/run/php5-fpm-webapp_me.sock
listen.owner = www-data listen.group = www-data listen.mode = 0600
user = admin group = admins
pm = dynamic pm.max_children = 6 pm.start_servers = 3 pm.min_spare_servers = 3 pm.max_spare_servers = 5 pm.max_requests = 500 pm.status_path = /fpm-status
ping.path = /ping
request_terminate_timeout = 600s
request_slowlog_timeout = 0
slowlog = /var/log/nginx/webapp_me.slow.log
rlimit_files = 4096
rlimit_core = 0
chdir = /var/www/webapp_yan/me
catch_workers_output = no
php_value[max_execution_time] = 600 php_value[upload_max_filesize] = 10G php_value[post_max_size] = 10G
Relancer php5-fpm
sudo systemctl restart php5-fpm
Le fichier de configuration nginx
/etc/nginx/conf.d/yan.me.d/webapp_me.conf
location /me { alias /var/www/webapp_yan/me/ ; if ($scheme = http) { rewrite ^ https://$server_name$request_uri? permanent; } index index.html index.php ; try_files $uri $uri/ index.php; location ~ [^/].php(/|$) { fastcgi_split_path_info ^(.+?.php)(/.*)$; fastcgi_pass unix:/var/run/php5-fpm-webapp_me.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename; }
# Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; }
On implémente le micro framework php limonade
Structure du dossier
tree -L 4 /var/www/webapp_yan/me/
/var/www/webapp_yan/me/ ├── config.php ├── entries ├── index.php ├── lib │ ├── limonade │ ├── limonade.php │ ├── vendors │ │ └── markdown │ │ ├── markdown.php │ │ └── PHP Markdown Readme.text │ └── vendors.php ├── pages ├── public │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ ├── bootstrap.min.css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ └── bootstrap-theme.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── css │ │ ├── bootstrap-toggle.min.css │ │ ├── screen.css │ │ └── style.css │ ├── img │ │ ├── A20-Olinuxino-MICRO.png │ │ ├── bg_header_wikir.jpg │ │ ├── github.png │ │ ├── loading.gif │ │ └── nice.ogg │ ├── jquery │ │ └── jquery-2.1.1.min.js │ └── js │ ├── bootstrap-toggle.min.js │ └── custom.js └── views ├── about.html.php ├── entry.html.php ├── index.html.php ├── layout.html.php └── posts.html.php ```
Accès web https://yan.me/me/