Ceci est une ancienne révision du document !
Burp
Paramétrer le logiciel n'est qu'une part de la sauvegarde.
Il faut aussi passer du temps à voir quels dossiers sauvegarder.
Si vous avez des bases de donnée, pensez à réaliser un petit script qui va les sauver (dump) dans un dossier sauvegardé par Burp.
Les principes généraux de la sauvegarde d'un serveur sont dans l'article Processus de sauvegarde sur un serveur.
Burp, le logiciel de base
Installation de Burp
Le même paquet permet de faire client et serveur.
Sur Debian
sudo apt install burp
C'est le paramétrage des fichiers de configuration qui va faire que Burp agit en serveur, en client, ou les deux.
- Le client est sur le serveur à sauvegarder, il va préparer les sauvegardes et les envoyer là où on lui demande.
- Le serveur est à paramétrer où on va stocker les sauvegardes. Les clients se connectent à lui et lui envoient les sauvegardes. Le serveur gère combien de temps il archive le bazar.
Le serveur est aussi une autorité de certification pour les clients, les échanges se font en SSL.
Il faut toujours paramétrer un client sur le serveur, même s'il ne servira pas ensuite ; sinon il y a des soucis pour lire les sauvegardes.
Pour la suite de l'article, nous avons deux serveurs d'exemple :
Blanu
, le serveur qu'on veut sauvegarder (soit “le client”, mais cette terminologie risque de prêter à confusion vu qu'on a des fichiers de configuration de client des deux côtés)Xunre
, le serveur qui va stocker les sauvegardes (soit “le serveur”, et ça prête déjà à confusion…)
En lojban, Blanu veut dire “bleu” et Xunre “rouge”
Paramétrer les fichiers de client
La partie client se configure avec le fichier /etc/burp/burp.conf
.
Burp permet beaucoup de choses et ce fichier, abondamment commenté, donne un aperçu des possibilités.
Nous allons faire simple et modifier uniquement les lignes suivantes :
server = ::1
⇒ l'adresse du serveur à qui envoyer les sauvegardes.::1
indique que c'est en local (à laisser tel quel sur Xunre). Sur Blanu, on va indiquer l'adresse de Xunre :server = xunre.khaganat.net
password = abcd
⇒ mot de passe qui va servir à ce que Xunre et Blanu échangent. Générez un bon mot de passe !cname = machin
⇒ ça identifiera les sauvegardes comme venant du client machin. Donc mettezxunre
sur le serveur Xunre, etblanu
sur le serveur Blanu !ssl_peer_cn = burpserver
⇒ cela doit être le même nom que ce qui est configuré dans le fichier/etc/burp/burp-server.conf
sur le serveur de sauvegarde (donc Xunre). Vous pouvez laisser la configuration par défaut.include = /home
⇒ Indiquez les dossiers à inclure dans la sauvegarde. On peut exclure certains dossiers aussi, ou certaines extensions, expressions régulières. Par défaut, c'est le /home qui est sauvegardé, adaptez le chemin.
Sur la machine client (Blanu), pour le moment, c'est tout !
Ports, hyperviseurs, etc
Il y a aussi des indications de port (port = 4971
et status_port = 4972
). Ne touchez pas à ça sans nécessité. Si vous êtes dans une configuration standard (deux serveurs dédiés, chacun son ip/nom de domaine) ça marchera simplement. Ne touchez pas à iptable !
Cas de deux VM sur le même hyperviseur
La bonne pratique d'une sauvegarde consiste à envoyer les données sauvegardées dans un autre lieu physique (de préférence distant de plusieurs centaines de kilomètres). Ainsi, si le datacenter crame, vous n'avez pas tout perdu.
Mais diverses raisons peuvent amener à sauver une VM sur une autre, sur le même hyperviseur. Si vous savez ce que vous faites…
Si Xunre et Blanu sont deux VM sur le même hyperviseur, elles communiqueront très bien avec ces ports par défaut, sans toucher à iptable. Par contre, l'adresse de Xunre (nom de domaine) va poser souci. Il faut passer par les ip internes.
On peut faire mentir le DNS, en ajoutant l'ip par rapport au nom de domaine.
Par exemple, dans /etc/hosts
de Blanu (mon client), j'ajoute l'ip interne de Xunre.
192.168.20.13 xunre.khaganat.net
Si ce n'est pas fait, lors d'une sauvegarde, on aura l'erreur suivante :
2019-06-09 08:18:19: burp[24782] Could not find ssl_cert /etc/burp/ssl_cert-client.pem: No such file or directory 2019-06-09 08:18:19: burp[24782] Could not find ssl_key /etc/burp/ssl_cert-client.key: No such file or directory 2019-06-09 08:18:19: burp[24782] Could not find ssl_cert_ca /etc/burp/ssl_cert_ca.pem: No such file or directory
Cas d'un client envoyant vers un serveur dans une VM
Dans le cas où Blanu est sur un dédié, et que Xunre est sur un autre dédié MAIS dans une VM, il y a aussi un problème, lié au fait que le nom de domaine ne va pas forcément renvoyer sur la VM. Pour être plus précis, ici on ne passe pas par Apache.
À ce moment, on va bidouiller iptable. Plus précisément, on va faire que les deux ports en question de l'hyperviseur renvoie sur ceux de la VM. Dans l'exemple suivant, remplacez 192.168.20.16
par l'ip interne de votre VM servant à la sauvegarde :
iptables -t nat -I PREROUTING -p tcp --destination-port 4971 -j DNAT --to 192.168.20.16:4971 iptables -t nat -I PREROUTING -p tcp --destination-port 4972 -j DNAT --to 192.168.20.16:4972 iptables-save > /etc/iptables/iptables.rules
Paramétrer la partie serveur
Sur Xunre, qui va stocker les sauvegardes, le client doit aussi être configuré, comme indiqué au dessus, mais on va aussi en plus paramétrer /etc/burp/burp-server.conf
.
Paramétrez “keep” (comment on garde les sauvegardes). On créé autant de lignes “keep = ” à la suite que nécessaire. Le code suivant se lirait : une sauvegarde par jour pendant 7 jours, puis une par semaine pendant 4 semaine, puis une par quatre semaine pendant 6 périodes de quatre semaines. Donc 6 mois de conservation maximum, mais en éliminant des redondances au fil du temps.
keep = 7 keep = 4 keep = 6
On peut aussi modifier où sont stockées les sauvegardes. C'est le paramètre suivant (et sa valeur par défaut) :
directory = /var/spool/burp
On peut aussi modifier les valeurs du CA. Laisser la configuration par défaut est aussi simple et évitera des erreurs par la suite :
ca_conf = /etc/burp/CA.cnf ca_name = burpCA ca_server_name = burpserver ca_burp_ca = /usr/sbin/burp_ca
Déclarer les clients
Toujours dans ce fichier, pour pouvoir restaurer d'autres clients que le local, indiquer leurs noms (autant de ligne que de clients) :
restore_client = xunre restore_client = blanu
Enregistrez, savourez.
Il faut encore déclarer ailleurs les détails du ou des clients à sauver. Chaque client est représenté par un fichier dans /etc/burp/clientconfdir/
, sur le serveur (Xunre). On crée donc un fichier /etc/burp/clientconfdir/Machin
, dans lequel on renseigne la même chose que pour cname et password dans la config des clients. Attention, il faut paramétrer le client local même si on n'a pas prévu de s'en servir ; ici, ce sera le fichier /etc/burp/clientconfdir/xunre
, en plus de /etc/burp/clientconfdir/blanu
.
Le contenu minimal du fichier ressemble à ça :
cname = blanu password = abcd
Lancer les sauvegardes, contrôler que tout marche
Sur le serveur Xunre, lancer la commande suivante, qui va générer les certificats SSL :
sudo burp -c /etc/burp/burp-server.conf
Sur chacun des serveurs, lancer la commande suivante, qui va vérifier que tout se passe bien, sans rien écrire (cela liste les sauvegardes, aussi, quand il y en a) :
sudo burp -a l
S'il n'y a pas d'erreur SSL ou autre, c'est le moment de faire un backup à la main :
sudo burp -a b
Pour vérifier les sauvegarde d'un client externe. Par exemple, sur Xunre, vérifier qu'on a bien les sauvegardes de Blanu :
sudo burp -a l -C blanu
Restaurer une sauvegarde
Si on veut contrôler, on peut décompresser une archive dans un dossier temporaire sur le serveur (option -d /chemin/
).
sudo burp -a r -b 0000001 -d /home/user/burptemp/
Pour décompresser une archive venant d'une autre machine, on ajoute -C Nomduclient
:
sudo burp -a r -C blanu -b 0000001 -d /home/user/burptemp/
Les options :
-a
comme action, suivi der
indique que l'action à effectuer est une restauration (-a r
),b
pour un backup (-a b
),l
pour lister (-a l
)
-b numero_sauvegarde
est la sauvegarde qu'on va restaurer, ce numéro étant visible grâce à la commandeburp -a l
ou en listant ce qu'on trouve dans trouve dans le dossier de sauvegarde de burp, ce qui est parfois plus lisible :sudo ls -1 /var/spool/burp/blanu
-r
sert à utiliser une regexp, par exemple pour choisir le chemin qu'on veut restaurer dans la sauvegarde-d /chemin/
indique le dossier où on va décompresser l'archive, que ce soit pour la restaurer ou la contrôler. Si le nom du dossier n'existe pas, il sera créé ; sinon, cela risque d'écraser ce que ce dossier contient.-C Nom_client
permet d'indiquer le client à restaurer ; sinon par défaut c'est celui sur le serveur même (donc Xunre cherche à restaurer uniquement les fichiers de Xunre, sauf si on lui demande explicitement de s'occuper de Blanu).
Restauration simplement dans le client
burp -ar -C nom_du_client
Sauvegarder sur un 2eme servers
Faire une copie du fichier de configuration client pour le deuxième server:
cp /etc/burp/burp.conf /etc/burp/burp-2sauvgarde.conf nano /etc/burp/burp-2sauvgarde.conf
Changer IP, nom, mdp
server = IP 2eme server password = ******* cname = client_blabla
Changer l'emplacement du certificat du 2eme server
# Uncomment the following lines to automatically generate a certificate signing # request and send it to the server. ca_burp_ca = /usr/sbin/burp_ca ca_csr_dir = /etc/burp/server2/CA-client_blabla
# SSL certificate authority - same file on both server and client ssl_cert_ca = /etc/burp/ssl_cert-client_ca_blabla.pem
# Client SSL certificate ssl_cert = /etc/burp/ssl_cert-client_blabla.pem
# Client SSL key ssl_key = /etc/burp/ssl_cert-client_blabla.key
Changer le nom du server
ssl_peer_cn = server2
Ne pas oublier de changer le nom sur le server:
ca_server_name = server2
Lancer la commande de vérification:
burp -c /etc/burp/burp-2sauvgarde.conf -a l
Pour lancer une sauvgarde manuellement:
burp -c /etc/burp/burp-2sauvgarde.conf -a b
Burp-ui , interface web
L'interface web peut simplifier certaines opérations et c'est plus visuel. Cependant il faudra quand même paramétrer proprement Burp en amont.
Installation de Burp-ui
Voir https://burp-ui.readthedocs.io/en/latest/installation.html
En root :
apt install python3-pip pip3 install burp-ui
Pour voir si tout fonctionne :
burp-ui --
Par défaut, le fichier de configuration se trouve dans /usr/local/share/burpui/etc/burpui.sample.cfg
. Renommez-le en burpui.cfg (ou plutôt, créez un fichier burpui.cfg
avec juste les infos utiles).
Si vous testez juste “si ça marche”, le couple login/mot de passe par défaut est admin/admin.
burpui.cfg
Changez la partie concernant les identifiants. Il y a plusieurs possibilités, y compris LDAP. Cf https://burp-ui.readthedocs.io/en/latest/advanced_usage.html#authentication (doc à améliorer ici).
bloc à faire : paramétrer un fichier de conf idéal, commenté, et le partager ici.
configuration service
bloc à faire : expliquer comment faire que burpui soit en prod, donc toujours lancé.
configuration web
Apache2
Nginx :
Sur le serveur où est installé burp-ui :
server { listen 80; server_name burpui.example.com; access_log /var/log/nginx/burpui.access.log; error_log /var/log/nginx/burpui.error.log; location / { # you need to change this to "https", if you set "ssl" directive to "on" proxy_set_header X-FORWARDED_PROTO http; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_pass http://localhost:5000; } }
Si la VM où est burp-ui est elle-même derrière un proxy, la VM-proxy doit contenir un fichier de configuration de ce genre :
server { listen 192.168.20.35:443 ssl http2; server_name "burpui.example.com"; location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.20.40/; } }