Connexion Ansible sur pfSense, NAS QNAP et Synology

Edit du 01/11/2015 : Afin d’avoir toujours accès à notre pfSense, il faut afficher la clé publique de notre serveur se trouvant dans /root/.ssh/id_rsa.pub et coller son contenu sur l’interface web de pfSense dans System, User Manager, Users, admin, Authorized keys. Si on suit mon tutoriel initial, la clé copiée grâce à ssh-copy-id est rejetée au bout de quelques jours.

On va commencer par le serveur d’administration Ansible.

Voici les lignes à ajouter au fichier /etc/ansible/hosts.

[firewall]
pfsense ansible_ssh_host=192.168.1.1 ansible_ssh_port=2222 ansible_ssh_user=root ansible_python_interpreter=/usr/local/bin/python

[nas]
qnap ansible_ssh_host=192.168.1.252 ansible_ssh_port=2222 ansible_ssh_user=admin ansible_ssh_pass=QNAPpassword
syno ansible_ssh_host=192.168.1.253 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass=SYNOpassword

Trois choses importantes à retenir :

  1. ansible_python_interpreter permet de renseigner où se trouve l’exécutable python sur l’équipement cible (dans la plupart des cas c’est /usr/bin/python). Pour rappel afin de retrouver une commande il suffit de faire which python
  2. pfSense et les NAS QNAP et Synology ont la particularité d’avoir des interfaces web sur lesquelles on se connecte avec le login admin. Si vous utilisez admin dans ansible_ssh_user vous aurez des dysfonctionnements dans certains cas, il faut utiliser ansible_ssh_user=root là où je l’ai précisé
  3. Les gens pointilleux remarqueront qu’on a les mots de passe en clair dans le fichier, saimal ! Oui le but est de faire une présentation simple et didactique, on peut faire mieux

Pour les NAS QNAP et Synology il sera nécessaire d’installer sshpass (apt-get install sshpass) sur le serveur d’administration Ansible. Ce paquet est nécessaire à cause de ansible_ssh_pass, si vous ne vous en servez pas il ne sera pas nécessaire. Pour les NAS QNAP et Synology il faudra également modifier le fichier /etc/ansible/ansible.cfg en décommentant scp_if_ssh = True. Vous trouverez la procédure ici afin de créer ce fichier si vous ne l’avez pas.

Pour pfSense, il faudra effectuer les commandes suivantes afin de copier notre clé sur la machine pfsense.

ssh-keygen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 root@191.168.1.1

QNAP

Sur les NAS QNAP il faut installer le package python pour jouer avec Ansible. Il suffit simplement de se connecter sur l’interface web du NAS puis de lancer App Center et enfin installer python.

Voici comment on lance une commande Ansible sur un QNAP.

ansible -m setup qnap
ansible qnap -m shell -a "mkdir /share/MD0_DATA/partage/test"

Pour rappel on se connecte en SSH sur un NAS QNAP sur le port 22 (par défaut) avec le login admin. On affiche la version de Python en faisant python --version. Il faut évidemment que le service SSH soit lancé. Ça se trouve dans Panneau de contrôle, Service réseau, Telnet/SSH, il faut cocher la case Permettre la connexion SSH, renseigner le Numéro de port 2222.

SYNOLOGY

Sur les NAS Synology en principe python est déjà installé si ce n’est pas le cas il faut se connecter sur l’interface web du NAS puis lancer Centre de paquets et enfin installer python.

Voici comment on lance une commande Ansible sur un Synology.

ansible -m setup syno
ansible syno -m shell -a "mkdir /volume1/partage/test"

Pour rappel on se connecte en SSH sur un NAS Synology sur le port 22 (par défaut) avec le login admin. On affiche la version de Python en faisant python --version. Il faut évidemment que le service SSH soit lancé. Ça se trouve dans Panneau de configuration, Application, Terminale & SNMP, il faut cocher la case Activer le service SSH, renseigner le Port 2222.

PFSENSE

pfSense est basé sur FreeBSD 10.1 depuis la version 2.2 (datant du 15/04/2015), c’est un firewall open-source basé sur Packet Filter (bien différent de iptables). La dernière version de pfSense est la 2.2.4 sortie le 26/07/2015. Pour utiliser Ansible sur pfSense, il faut installer Python. On se connecte en SSH sur pfsense sur le port 22 (par défaut) avec le login admin puis on tape 8 (Shell) puis on tape pkg install python. Sur les versions antérieures à la 2.2 voir comment installer python ici. On affiche la version de Python en faisant python --version. Il faut évidemment que le service SSH soit lancé. Ça se trouve dans System, Advanced, Secure Shell, il faut cocher la case Enable Secure Shell, renseigner le SSH port 2222.

Voici comment on lance une commande Ansible sur un pfSense.

ansible -m setup pfsense
ansible-playbook /etc/ansible/backup_logs_pfsense.yml

BONUS

Le playbook backup_logs_pfsense.yml en bonus. Attention au module fetch car par défaut le paramètre validate_checksum est à yes ! Par conséquent si vous voulez directement sauvegarder/récupérer votre fichier access.log vous aurez des échecs puisqu’il y a une probabilité forte que le fichier access.log source soit modifié pendant la copie donc le checksum ne sera pas identique entre le fichier access.log source et destination à la fin de la copie. Le module fetch permet de copier un fichier du noeud cible vers le serveur local (d’administration Ansible).

---
- name: Copy access.log, block.log and backup
  hosts: "pfsense"
  tasks:
    - name: Copy files
      shell: cp -p {{ item }} {{ item }}_{{ ansible_date_time.date }}.bak
      with_items:
        - /var/squid/logs/access.log
        - /var/squidGuard/log/block.log

    - name: Backup files
      fetch: src={{ item }} dest=/var/log/pfsense/ fail_on_missing=yes flat=yes
      with_items:
        - /var/squid/logs/access.log_{{ ansible_date_time.date }}.bak
        - /var/squidGuard/log/block.log_{{ ansible_date_time.date }}.bak

La ligne à ajouter dans le fichier /etc/cron.d/admin.

00 5 1,10,20 * * root /usr/local/bin/ansible-playbook /etc/ansible/backup_logs_pfsense.yml > /var/log/ansible.log 2>&1

Bon week-end à tous !

Les commentaires sont fermés.