Logo Khaganat
Traductions de cette page?:

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 mettez xunre sur le serveur Xunre, et blanu 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 (à lancer dans screen/tmux parce que ça peut être long !) :

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

Réaliser les sauvegardes régulières

Partie à améliorer : juste un cron ? un démon en plus ? seul ? quoi, où ?

Côté client (Blanu)

Si tout va bien, il est temps de paramétrer des sauvegardes régulières.

Sur votre client Blanu, créez les règles suivantes dans le cron de l'utilisateur root (crontab -e en tant que root).

Pour le client :

20 4 * * *	root	/usr/sbin/burp -a t -q 1200 >>/var/log/burp-client 2>&1
  • 20 4 * * * le client se lance toutes les 20 minutes. Cela permet de sauvegarder régulièrement dans la journée (moins de delta à envoyer d'un coup).
  • -a pour “action”, t pour “timed backup”.
  • -q 1200 utilise un nombre aléatoire (ici en seconde : 1200 secondes soit 20 minutes) pour lancer la commande.
  • »/var/log/burp-client 2>&1 écrit un fichier de log. La sortie d'erreur (STDERR) est redirigée vers la sortie standart (STDOUT) donc aussi écrite dans le log.

Si vous envoyez les sauvegardes à un second serveur, vous pouvez ajouter la ligne suivante :

20 4 * * *      root    /usr/sbin/burp -c /etc/burp/burp_2sauvgarde.conf -a t -q 1200 >>/var/log/burp_2sauvgarde 2>&1
  • -c /etc/burp/burp_2sauvgarde.conf indique un autre fichier de configuration à prendre en compte (cf plus baspour les détails)

Voici à quoi devrait ressembler votre cron pour la partie concernant Burp :

# CLIENT Burp
20 4 * * *	root	/usr/sbin/burp -a t -q 1200 >>/var/log/burp-client 2>&1

# Si vous avez du mysql ou autre BDD, pensez au script 
00 1 * * * /home/user/script/mysqlbackup.sh

Côté serveur (Xunre)

Votre crontab reprend les mêmes éléments côté client mais ajoute des éléments côté serveur

# SERVER Burp
# Envoie un résumé à 6h (donc, tous les jours).
0 6 * * *	root    /etc/burp/send_summary /etc/burp/burp-server.conf youremail@example.com "Daily backup summary"

# The following will run file deduplication over all client storages every
# Saturday at 8 in the morning. Again, if your server is using a different
# config file to /etc/burp/burp-server.conf, change that argument.
#0 8 * * 6	root    /usr/sbin/bedup -l -c /etc/burp/burp-server.conf >>/var/log/burp-bedup 2>&1


30 1 * * * /home/khaganat/mybackup/balai.sh 

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 de
    • r 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 commande burp -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/;
    }
}

Erreurs diverses

Sur le serveur

L'install de base a foiré, vous avez purgé le paquet, recommencé, et vous avez cette erreur :

2020-12-16 09:43:46 +0000: burp[6400] Connecting to localhost:4971
2020-12-16 09:43:46 +0000: burp[6400] main socket: network read problem in asfd_do_read_ssl: 1 - 0=Success
140108238101952:error:1409441B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:../ssl/record/rec_layer_s3.c:1544:SSL alert number 51
2020-12-16 09:43:46 +0000: burp[6400] This is probably caused by the peer exiting.
2020-12-16 09:43:46 +0000: burp[6400] Please check the peer's logs.
2020-12-16 09:43:46 +0000: burp[6400] problem with auth

Faites

sudo ps -A | grep burp

Et tuez le processus, puis relancez les commandes.

Sur le client

On a changé le serveur où sauver les choses, et là, burp nous dit ça côté client :

burp -a l
2020-12-16 10:10:40 +0000: burp[7295] Could not find ssl_cert_ca /etc/burp/ssl_cert_ca.pem: No such file or directory
2020-12-16 10:10:40 +0000: burp[7295] Connecting to nuxru.khaganat.net:4971
2020-12-16 10:10:40 +0000: burp[7295] main socket: network read problem in asfd_do_read_ssl: 1 - 0=Success
140426189172160:error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:../ssl/record/rec_layer_s3.c:1544:SSL alert number 48
2020-12-16 10:10:40 +0000: burp[7295] This is probably caused by the peer exiting.
2020-12-16 10:10:40 +0000: burp[7295] Please check the peer's logs.
2020-12-16 10:10:40 +0000: burp[7295] problem with auth

Ici aussi, tuez le processus ET supprimez le certificat actuel :

sudo /etc/burp/rm ssl_cert-*

En relançant la commande, cela le régènerera.

Sources, Liens utiles

CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/burp.1608113732.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact