Outils pour utilisateurs

Outils du site


anthony_messe:ansible:playbook

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
anthony_messe:ansible:playbook [2018/05/09 09:51]
Anthony Messé [Avec un seul fichier yml]
anthony_messe:ansible:playbook [2018/05/28 16:03] (Version actuelle)
Anthony Messé
Ligne 1: Ligne 1:
 +Lien vers [[anthony_messe:​anthony_messe|l'​accueil]]
 +
 ====== Utiliser les playbooks dans Ansible ====== ====== Utiliser les playbooks dans Ansible ======
  
 On va utiliser un playbook pour exécuter toutes les tâches. C'est un fichier qui contient toutes les actions à effectuer (un peu comme un script shell). On va utiliser un playbook pour exécuter toutes les tâches. C'est un fichier qui contient toutes les actions à effectuer (un peu comme un script shell).
 +
 +
 +===== Avec les roles (recommandé) =====
 +
 +Voir [[anthony_messe:​ansible:​roles|cette page]].
  
 ===== Avec un seul fichier yml ===== ===== Avec un seul fichier yml =====
Ligne 23: Ligne 30:
      ​ansible_become:​ yes      ​ansible_become:​ yes
   tasks:   tasks:
-  ​- name: Suppression du fichier sources.list +- name: Suppression du fichier sources.list
-    file: +
-      path: /​etc/​apt/​sources.list +
-      state: absent +
-  - name: Création du fichier sources.list +
-    copy: +
-      content: "# deb http://​ftp.fr.debian.org/​debian/​ stretch main\n\ndeb http://​ftp.fr.debian.org/​debian/​ stretch main contrib non-free\ndeb-src http://​ftp.fr.debian.org/​debian/​ stretch main contrib non-free\n\ndeb http://​security.debian.org/​debian-security stretch/​updates main contrib non-free\ndeb-src http://​security.debian.org/​debian-security stretch/​updates main contrib non-free\n\n#​ stretch-updates,​ previously known as '​volatile'​\ndeb http://​ftp.fr.debian.org/​debian/​ stretch-updates main contrib non-free\ndeb-src http://​ftp.fr.debian.org/​debian/​ stretch-updates main contrib non-free"​ +
-      dest: /​etc/​apt/​sources.list +
-      force: no +
-  - name: Installation du paquet aptitude +
-    apt: pkg=aptitude state=installed update_cache=true +
-  - name: Mise à jour de la liste des paquets +
-    apt: update_cache=yes +
-  - name: Mise à jour des paquets +
-    apt: upgrade=yes +
-  - name: Installation du paquet wireless-tools +
-    apt: pkg=wireless-tools state=installed update_cache=true +
-  - name: Installation du paquet ntp +
-    apt: pkg=ntp state=installed update_cache=true +
-  - name: Installation du paquet ntp +
-    apt: pkg=ntp state=installed update_cache=true +
-  - name: Suppression du fichier de configuration /​etc/​ntp.conf +
-    file: +
-      path: /​etc/​ntp.conf +
-      state: absent +
-  - name: Création du fichier de configuration /​etc/​ntp.conf +
-    copy: +
-      content: "​server ntp.ubuntu.com prefer\nserver ntp2.jussieu.fr\nserver 0.fr.pool.ntp.org\nserver 0.europe.pool.ntp.org"​ +
-      dest: /​etc/​ntp.conf +
-      force: no +
-  - name: Installation du paquet wpasupplicant +
-    apt: pkg=wpasupplicant state=installed update_cache=true +
-  - name: Installation du paquet dnsutils +
-    apt: pkg=dnsutils state=installed update_cache=true +
-  - name: Installation du paquet hostapd +
-    apt: pkg=hostapd state=installed update_cache=true +
-  - name: Suppression du fichier de configuration /​etc/​hostapd/​hostapd.conf +
-    file: +
-      path: /​etc/​hostapd/​hostapd.conf +
-      state: absent +
-  - name: Création du fichier de configuration /​etc/​hostapd/​hostapd.conf +
-    copy: +
-      content: "​interface={{ wlan_interface ​ }}\nssid=prxc\ndriver={{ wifi_driver }}\nchannel=6\nhw_mode=g\nwpa=2\nwpa_passphrase=mypassphrase\nwpa_key_mgmt=WPA-PSK\nwpa_pairwise=CCMP\nrsn_pairwise=CCMP"​ +
-      dest: /​etc/​hostapd/​hostapd.conf +
-      force: no +
-  - name: Install Tor +
-    apt: pkg=tor state=installed update_cache=true +
-  - name: Suppression du fichier de configuration /​etc/​tor/​torrc +
-    file: +
-      path: /​etc/​tor/​torrc +
-      state: absent +
-  - name: Création du fichier de configuration /​etc/​tor/​torrc +
-    copy: +
-      content: "​VirtualAddrNetworkIPv4 10.192.0.0/​10\nAutomapHostsOnResolve 1\nTransPort 9040\nDNSPort 5353\nTransListenAddress 10.255.255.254\nDNSListenAddress 10.255.255.254"​ +
-      dest: /​etc/​tor/​torrc +
-      force: no +
-  - name: Suppression du fichier de configuration /​etc/​network/​interfaces +
-    file: +
-      path: /​etc/​network/​interfaces +
-      state: absent +
-  - name: Création du fichier de configuration /​etc/​network/​interfaces +
-    copy: +
-      content: "​source /​etc/​network/​interfaces.d/​*\n#​ The loopback network interface\nauto lo\niface lo inet loopback\n\n#​ The primary network interface\nallow-hotplug eth0\niface eth0 inet dhcp\n# This is an autoconfigured IPv6 interface\niface eth0 inet6 auto\n\nauto wlx503eaa3d7d6c\niface wlx503eaa3d7d6c inet static\nhostapd /​etc/​hostapd/​hostapd.conf\naddress 10.255.255.254\nnetmask 255.0.0.0\n"​ +
-      dest: /​etc/​network/​interfaces +
-      force: no +
-  - name: Installation du paquet dnsmasq +
-    apt: pkg=dnsmasq state=installed update_cache=true +
-  - name: Suppression du fichier de configuration /​etc/​dnsmasq.conf +
-    file: +
-      path: /​etc/​dnsmasq.conf +
-      state: absent +
-  - name: Création du fichier de configuration /​etc/​dnsmasq.conf +
-    copy: +
-       ​content:​ "​interface={{ wlan_interface ​ }}\nno-dhcp-interface=lo,​ eth0\ndhcp-range=10.255.255.10,​10.255.255.50,​255.0.0.0,​12h\nport = 0\ndhcp-option=6,​10.255.255.254\n"​ +
-       dest: /​etc/​dnsmasq.conf +
-       ​force:​ no +
-  - name: Création du script iptables +
-    copy: +
-       ​content:​ "#​!/​bin/​sh\n#​Variables\n_trans_port=\"​9040\"​\n_dns_port=\"​5353\"​\n_interface_wifi=\"​wlx503eaa3d7d6c\"​\n_tor_uid=`id -u debian-tor`\n_router=\"​10.255.255.254\"​ #Adresse du router(adresse de la machine ayant le point d'​accès wifi)\n_reseau_wifi=\"​10.0.0.0/​8\"​\n_unreachable=\"​192.168.16.20/​24\"​ #Adresse dont on empêche l'​accès\n_eth0_ip=`ip -4 addr show eth0 | grep -oP \'​(?<​=inet\\s)\\d+(\\.\\d+){3}\'​`\n\n#​On efface toutes les règles iptables\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\n\n#On met les policy\niptables -P INPUT DROP\niptables -P FORWARD DROP\niptables -P OUTPUT DROP\nip6tables -P INPUT DROP\nip6tables -P FORWARD DROP\nip6tables -P OUTPUT DROP\n\n#On redirige le traffic TCP vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port\n#​On redirige les requêtes DNS vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port\n\n#​On log le trafic entrant\niptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix \"New input connection: \"​\n#​On autorise les requêtes DHCP à entrer\niptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise les connexion SSH\niptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT\n#On autorise les connexions déja établies\niptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT\n#On autorise la boucle locale\niptables -A INPUT -i lo -j ACCEPT\n#On autorise les requêtes vers le routeur et le port DNS\niptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT\n#On autorise les requêtes vers le routeur pour le traffic TCP\niptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,​SYN,​RST,​ACK SYN -j ACCEPT\n\n#​On log le trafic sortant\niptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix \"New output connection: \"​\n#​On drop le paquet si il n est pas dans l état new, established,​ ou related\niptables -A OUTPUT -m state --state INVALID -j DROP\n#On autorise ls connexions déja établies\niptables -A OUTPUT -m state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT\n#On autorise les requêtes DHCP à sortir\niptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise le traffic issu de la carte\niptables -A OUTPUT ! -s $_reseau_wifi -m owner --uid-owner 0 -j ACCEPT"​ +
-       dest: /​root/​iptables.sh +
-       ​force:​ no +
-       ​group:​ sys +
-       ​owner:​ root +
-       mode: 0777 +
-  - name: Création du fichier service iptables +
-    copy: +
-       ​content:​ "​[Unit]\nDescription=Setup firewall\nAfter=network.target local-fs.target\n[Service]\nRemainAfterExit=true\nExecStart=/​root/​iptables.sh\n[Install]\nWantedBy=multi-user.target"​ +
-       dest: /​etc/​systemd/​system/​iptables.service +
-       ​force:​ no +
-  - name: Activation du service iptables +
-    systemd: +
-       name: iptables +
-       ​enabled:​ yes +
-       ​masked:​ no +
-  - name: Activation du forwarding IPv4 +
-    lineinfile:​ +
-      dest: /​etc/​sysctl.conf +
-      regexp: '​^#​\s*net.ipv4.ip_forward=1.*$'​ +
-      line: '​net.ipv4.ip_forward=1'​ +
-      backrefs: yes +
-  - cron: +
-      name: "​ap_logs"​ +
-      state: absent +
-  - cron: +
-      name: "​ap_logs"​ +
-      minute: "​10"​ +
-      hour: "​0"​ +
-      job: "cat /​var/​log/​syslog | grep -e hostapd -e MAC| grep -v CRON > /​root/​access_point.log"​ +
-  - name: Redémarrage des hosts +
-    become: yes +
-    shell: sleep 2 && /​sbin/​shutdown -r now "​Ansible system package upgraded"​ +
-    async: 1 +
-    poll: 0 +
-</​code>​ +
- +
-On exécute ensuite le fichier avec la commande suivante +
-  ansible-playbook access_point.yml +
- +
-===== Avec des roles ===== +
- +
-Chaque rôle peut être exécuté en l'​appelant. Il contient une suite d'​instructions,​ un peu comme une fonction d'un programme. +
- +
-On crée l'​arborescence suivante +
-> Le fichier ansible.retry est créé automatiquement et ne doit donc pas être créé par vous. +
-<​code>​ +
-+
-├── access_point.retry +
-├── access_point.yml +
-└── roles +
-    ├── configure_interfaces +
-    │   ​├── files +
-    │   ​├── handlers +
-    │   ​├── meta +
-    │   ​├── tasks +
-    │   ​├── templates +
-    │   ​└── vars +
-    ├── dnsmasq +
-    │   ​├── files +
-    │   ​├── handlers +
-    │   ​├── meta +
-    │   ​├── tasks +
-    │   ​├── templates +
-    │   ​└── vars +
-    Etc +
-</​code>​ +
- +
-Le dossier roles contient les dossiers suivants : +
-  * configure_interfaces ​  +
-  * hostapd  +
-  * ipv4_forwarding ​  +
-  * tor  +
-  * wifi_tools +
-  * dnsmasq  ​      +
-  * iptables  +
-  * reboot  +
-  * update_upgrade +
-  * ntp +
- +
-Qui contiennent eux-mêmes les dossiers suivants :  +
-  * files   +
-  * handlers ​  +
-  * meta   +
-  * tasks   +
-  * templates ​  +
-  * vars +
- +
-Nous n'​utilisons que le dossier //tasks//, la création des autres dossiers est donc facultative. +
- +
-==== access_point.yml ==== +
- +
-À la racine, le fichier access_point.yml contient le code suivant +
- +
-<​code>​ +
---- +
-- hosts: bpi +
-  vars: +
-     "​wifi_driver":​ "​nl80211"​ +
-     "​wlan_interface":​ "​wlx503eaa3d7d6c"​ +
-     ​ansible_connection:​ ssh +
-     ​ansible_ssh_user:​ user +
-     ​ansible_ssh_pass:​ bonjour +
-     ​ansible_become_method:​ su +
-     ​ansible_become_user:​ root +
-     ​ansible_become_pass:​ bonjour +
-     ​ansible_become:​ yes +
-  roles: +
-  - role: update_upgrade +
-  - role: wifi_tools +
-  - role: hostapd +
-  - role: tor +
-  - role: ntp +
-  - role: configure_interfaces +
-  - role: dnsmasq +
-  - role: iptables +
-  - role: ipv4_forwarding +
-  - role: reboot +
-</​code>​ +
- +
-==== Contenu des dossiers ==== +
- +
-On va maintenant créer un fichier main.yml dans le dossier //tasks// de chacun des dossiers créés dans rôle. C'est à dire : +
- +
-  * configure_interfaces ​  +
-  * hostapd  +
-  * ipv4_forwarding ​  +
-  * tor  +
-  * wifi_tools +
-  * dnsmasq  ​      +
-  * iptables  +
-  * reboot  +
-  * update_upgrade +
- +
-Comme ceci : +
-<​code>​ +
-└── roles +
-    ├── configure_interfaces +
-    │   ​├── files +
-    │   ​├── handlers +
-    │   ​├── meta +
-    │   ​├── tasks +
-    │   ​│ ​  ​└── main.yml +
-    │   ​├── templates +
-    │   ​└── vars +
-</​code>​ +
- +
-Voici le contenu de chaque fichier //​main.yml//​ de chaque dossier +
-> On reprend simplement le code du playbook du début +
-=== configure_interfaces === +
-<​code>​ +
---- +
-- name: Suppression du fichier de configuration /​etc/​network/​interfaces+
   file:   file:
-    path: /etc/network/interfaces+    path: /etc/apt/sources.list
     state: absent     state: absent
-- name: Création du fichier ​de configuration /​etc/​network/​interfaces+- name: Création du fichier ​sources.list
   copy:   copy:
-    content: "source ​/etc/network/interfaces.d/*\n# The loopback network interface\nauto lo\niface lo inet loopback\n\n# The primary network interface\nallow-hotplug eth0\niface eth0 inet dhcp\n# This is an autoconfigured IPv6 interface\niface eth0 inet6 auto\n\nauto wlx503eaa3d7d6c\niface wlx503eaa3d7d6c inet static\nhostapd ​/etc/hostapd/​hostapd.conf\naddress 10.255.255.254\nnetmask 255.0.0.0\n+    content: "deb http://deb.debian.org/debian stretch main contrib non-free\ndeb-src http://deb.debian.org/debian stretch main contrib non-free\n\ndeb http://​deb.debian.org/​debian stretch-updates main contrib non-free\ndeb-src http://​deb.debian.org/​debian stretch-updates main contrib non-free\n\ndeb http://security.debian.org/​debian-security/​ stretch/​updates main contrib non-free\ndeb-src http://​security.debian.org/​debian-security/​ stretch/​updates main contrib non-free
-    dest: /etc/network/interfaces+    dest: /etc/apt/sources.list
     force: no     force: no
-</​code>​ +- name: Installation du paquet aptitude 
- +  apt: pkg=aptitude state=installed update_cache=true 
-=== hostapd === +- name: Mise à jour de la liste des paquets 
-<​code>​ +  apt: update_cache=yes 
----+- name: Mise à jour des paquets 
 +  apt: upgrade=yes 
 +- name: Installation du paquet ntp 
 +  apt: pkg=ntp state=installed update_cache=true 
 +name: Installation du paquet wireless-tools 
 +  apt: pkg=wireless-tools state=installed update_cache=true 
 +- name: Installation du paquet wpasupplicant 
 +  apt: pkg=wpasupplicant state=installed update_cache=true
 - name: Installation du paquet hostapd - name: Installation du paquet hostapd
   apt: pkg=hostapd state=installed update_cache=true   apt: pkg=hostapd state=installed update_cache=true
Ligne 275: Ligne 59:
 - name: Création du fichier de configuration /​etc/​hostapd/​hostapd.conf - name: Création du fichier de configuration /​etc/​hostapd/​hostapd.conf
   copy:   copy:
-    content: "​interface={{ wlan_interface ​ }}\nssid=prxc\ndriver={{ wifi_driver ​}}\nchannel=6\nhw_mode=g\nwpa=2\nwpa_passphrase=mypassphrase\nwpa_key_mgmt=WPA-PSK\nwpa_pairwise=CCMP\nrsn_pairwise=CCMP"​+    content: "#L'interface ​wifi\ninterface={ wlan_interface }\n#Le SSID (le nom du point d'​accès wifi)\nssid=🐧 OPEN WIFI 🐧\n#Le driver wifi\ndriver= { wifi_driver }\n#On choisit le channel\nchannel=6\n#Mettre le paramètre à \"​g\"​ pour la bande à 2.4Ghz, et à \"​a\"​ pour la bande à 5Ghz\nhw_mode=g\n\n#Vous pouvez décommenter les paramètres suivants pour utiliser l'​authentification\nwpa=2\nwpa_passphrase=votre_mot_de_passe\nwpa_key_mgmt=WPA-PSK\nwpa_pairwise=CCMP\nrsn_pairwise=CCMP\n\n#On log le trafic\nlogger_syslog=-1\nlogger_syslog_level=1\nlogger_stdout=-1\nlogger_stdout_level=2\n\n#​ Levels (minimum value for logged events):​\n# ​ 0 = verbose debugging\n# ​ 1 = debugging\n# ​ 2 = informational messages\n# ​ 3 = notification\n# ​ 4 = warning\n# ​ -1 = all\n#Pour nous permettre d'​obtenir la liste des stations connectées\nctrl_interface=/​var/​run/​hostapd\nctrl_interface_group=0"
     dest: /​etc/​hostapd/​hostapd.conf     dest: /​etc/​hostapd/​hostapd.conf
     force: no     force: no
-</​code>​ 
- 
-Pour logger, on peut ajouter les options suivantes au fichier hostapd.conf:​ 
-<​code>​ 
-logger_syslog=-1 
-logger_syslog_level=1 
-logger_stdout=-1 
-logger_stdout_level=2 
-</​code>​ 
- 
-=== ipv4_forwarding === 
-<​code>​ 
---- 
-- name: Activation du forwarding IPv4 
-  lineinfile: 
-    dest: /​etc/​sysctl.conf 
-    regexp: '​^#​\s*net.ipv4.ip_forward=1.*$'​ 
-    line: '​net.ipv4.ip_forward=1'​ 
-    backrefs: yes 
-</​code>​ 
- 
-=== tor === 
-<​code>​ 
---- 
 - name: Install Tor - name: Install Tor
   apt: pkg=tor state=installed update_cache=true   apt: pkg=tor state=installed update_cache=true
Ligne 310: Ligne 70:
 - name: Création du fichier de configuration /​etc/​tor/​torrc - name: Création du fichier de configuration /​etc/​tor/​torrc
   copy:   copy:
-    content: "VirtualAddrNetworkIPv4 ​10.192.0.0/​10\nAutomapHostsOnResolve 1\nTransPort ​9040\nDNSPort 5353\nTransListenAddress ​10.255.255.254\nDNSListenAddress ​10.255.255.254"​+    content: "#Adresse virtualle de Tor (voir le man pour plus d'​infos)\nVirtualAddrNetworkIPv4 ​10.192.0.0/​10\n#Port vers lequel on va rediriger le trafic\nTransPort 10.255.255.254:9040\n#Port vers lequel on va rediriger les requêtes DNS\nDNSPort ​10.255.255.254:5353"
     dest: /​etc/​tor/​torrc     dest: /​etc/​tor/​torrc
     force: no     force: no
-</code> +- name: Suppression du fichier de configuration ​/etc/​network/​interfaces 
- +  file: 
-=== wifi_tools === +    path: /​etc/​network/​interfaces 
-<​code>​ +    ​state:​ absent 
---- +- name: Création ​du fichier de configuration /​etc/​network/​interfaces 
-- name: Installation ​du paquet wireless-tools +  ​copy
-  ​aptpkg=wireless-tools state=installed update_cache=true +    ​content:​ "​source /​etc/​network/​interfaces.d/​*\n#​ The loopback network interface\nauto lo\niface lo inet loopback\n\n#​ The primary network interface\nallow-hotplug eth0\niface eth0 inet dhcp\n# This is an autoconfigured IPv6 interface\niface eth0 inet6 auto"​ 
-nameInstallation du paquet wpasupplicant +    dest/​etc/​network/​interfaces 
-  aptpkg=wpasupplicant state=installed update_cache=true +    forceno 
-- name: Installation ​du paquet dnsutils +- name: Création ​du fichier de configuration /​etc/​network/​interfaces.d/​interface_ap 
-  ​aptpkg=dnsutils state=installed update_cache=true +  ​copy
-</code> +    ​content:​ "auto { wlan_interface }\niface { wlan_interface } inet static\nhostapd ​/etc/​hostapd/​hostapd.conf\naddress 10.255.255.254\nnetmask 255.0.0.0"​ 
- +    dest: /​etc/​network/​interfaces.d/​interface_ap 
-=== dnsmasq === +    ​force:​ no
-<​code>​ +
----+
 - name: Installation du paquet dnsmasq - name: Installation du paquet dnsmasq
   apt: pkg=dnsmasq state=installed update_cache=true   apt: pkg=dnsmasq state=installed update_cache=true
Ligne 337: Ligne 95:
 - name: Création du fichier de configuration /​etc/​dnsmasq.conf - name: Création du fichier de configuration /​etc/​dnsmasq.conf
   copy:   copy:
-     ​content:​ "​interface={{ wlan_interface ​ }}\nno-dhcp-interface=lo,​ eth0\ndhcp-range=10.255.255.10,​10.255.255.50,​255.0.0.0,​12h\nport = 0\ndhcp-option=6,​10.255.255.254\n"​+     ​content:​ "#L'interface ​wifi sur laquelle on va distribuer les adresses\ninterface={ wlan_interface }\n#Les interfaces sur lesquelles on ne distribue pas d'​adresses\nno-dhcp-interface=lo,​ eth0\n#La plage d'​adresses distribuées\ndhcp-range=10.0.0.10,​10.255.255.250,​255.0.0.0,​12h\n#On désactive le serveur DNS de dnsmasq (activé par défaut)\nport = 0\n#On donne le serveur DNS (quelle que soit l'​adresse,​ les requêtes seront redirigées vers Tor)\ndhcp-option=6,​10.255.255.254\n#On active les logs\nlog-queries\nlog-facility=/​var/​log/​syslog"
      dest: /​etc/​dnsmasq.conf      dest: /​etc/​dnsmasq.conf
      ​force:​ no      ​force:​ no
-</​code> ​   
- 
-=== iptables === 
-<​code>​ 
---- 
 - name: Création du script iptables - name: Création du script iptables
   copy:   copy:
-     ​content:​ "#​!/​bin/​sh\n#​Variables\n_trans_port=\"​9040\"​\n_dns_port=\"​5353\"​\n_interface_wifi=\"​wlx503eaa3d7d6c\"​\n_tor_uid=`id -u debian-tor`\n_router=\"​10.255.255.254\"​ #Adresse du router(adresse de la machine ayant le point d'​accès wifi)\n_reseau_wifi=\"​10.0.0.0/​8\"​\n_unreachable=\"​192.168.16.20/​24\"​ #Adresse dont on empêche l'​accès\n_eth0_ip=`ip -4 addr show eth0 | grep -oP \'​(?<​=inet\\s)\\d+(\\.\\d+){3}\'​`\n\n#​On efface toutes les règles iptables\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\n\n#On met les policy\niptables -P INPUT DROP\niptables -P FORWARD DROP\niptables -P OUTPUT DROP\nip6tables -P INPUT DROP\nip6tables -P FORWARD DROP\nip6tables -P OUTPUT DROP\n\n#On redirige le traffic TCP vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port\n#​On redirige les requêtes DNS vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port\n\n#​On log le trafic entrant\niptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix \"New input connection: \"​\n#​On autorise les requêtes DHCP à entrer\niptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise les connexion SSH\niptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT\n#On autorise les connexions déja établies\niptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT\n#On autorise la boucle locale\niptables -A INPUT -i lo -j ACCEPT\n#On autorise les requêtes vers le routeur et le port DNS\niptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT\n#On autorise les requêtes vers le routeur pour le traffic TCP\niptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,​SYN,​RST,​ACK SYN -j ACCEPT\n\n#​On log le trafic sortant\niptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix \"New output connection: \"​\n#​On drop le paquet si il n est pas dans l état new, established,​ ou related\niptables -A OUTPUT -m state --state INVALID -j DROP\n#On autorise ls connexions déja établies\niptables -A OUTPUT -m state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT\n#On autorise les requêtes DHCP à sortir\niptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise le traffic issu de la carte\niptables -A OUTPUT ! -s $_reseau_wifi -m owner --uid-owner 0 -j ACCEPT"​ +     ​content:​ "#​!/​bin/​sh\n#​Variables\n_trans_port=\"​9040\"​\n_dns_port=\"​5353\"​\n_interface_wifi=\"​{ wlan_interface }\"​\n_tor_uid=`id -u debian-tor`\n_router=\"​10.255.255.254\"​ #Adresse du router(adresse de la machine ayant le point d'​accès wifi)\n_reseau_wifi=\"​10.0.0.0/​8\"​\n_unreachable=\"​192.168.16.20/​24\"​ #Adresse dont on empêche l'​accès\n_eth0_ip=`ip -4 addr show eth0 | grep -oP \'​(?<​=inet\\s)\\d+(\\.\\d+){3}\'​`\n\n#​On efface toutes les règles iptables\niptables -F\niptables -X\niptables -t nat -F\niptables -t nat -X\niptables -t mangle -F\niptables -t mangle -X\n\n#On met les policy\niptables -P INPUT DROP\niptables -P FORWARD DROP\niptables -P OUTPUT DROP\nip6tables -P INPUT DROP\nip6tables -P FORWARD DROP\nip6tables -P OUTPUT DROP\n\n#On redirige le traffic TCP vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port\n#​On redirige les requêtes DNS vers Tor\niptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port\n\n#​On log le trafic entrant\niptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix \"New input connection: \"​\n#​On autorise les requêtes DHCP à entrer\niptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise les connexion SSH\niptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT\n#On autorise les connexions déja établies\niptables -A INPUT -m state --state ESTABLISHED,​RELATED -j ACCEPT\n#On autorise la boucle locale\niptables -A INPUT -i lo -j ACCEPT\n#On autorise les requêtes vers le routeur et le port DNS\niptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT\n#On autorise les requêtes vers le routeur pour le traffic TCP\niptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,​SYN,​RST,​ACK SYN -j ACCEPT\n\n#​On log le trafic sortant\niptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix \"New output connection: \"​\n#​On drop le paquet si il n est pas dans l état new, established,​ ou related\niptables -A OUTPUT -m state --state INVALID -j DROP\n#On autorise ls connexions déja établies\niptables -A OUTPUT -m state --state NEW,​ESTABLISHED,​RELATED -j ACCEPT\n#On autorise les requêtes DHCP à sortir\niptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT\n#On autorise le traffic issu de la carte et venant de root\niptables -A OUTPUT ! -s $_reseau_wifi -m owner --uid-owner 0 -j ACCEPT"​ 
-     dest: /root/iptables.sh+     dest: /usr/local/​sbin/​iptables_access_point.sh
      ​force:​ no      ​force:​ no
      ​group:​ sys      ​group:​ sys
Ligne 355: Ligne 108:
 - name: Création du fichier service iptables - name: Création du fichier service iptables
   copy:   copy:
-     ​content:​ "​[Unit]\nDescription=Setup firewall\nAfter=network.target local-fs.target\n[Service]\nRemainAfterExit=true\nExecStart=/​root/iptables.sh\n[Install]\nWantedBy=multi-user.target"​+     ​content:​ "​[Unit]\nDescription=Setup firewall\nAfter=network.target local-fs.target\n[Service]\nRemainAfterExit=true\nExecStart=/​usr/local/​sbin/​iptables_access_point.sh\n[Install]\nWantedBy=multi-user.target"​
      dest: /​etc/​systemd/​system/​iptables.service      dest: /​etc/​systemd/​system/​iptables.service
      ​force:​ no      ​force:​ no
Ligne 363: Ligne 116:
      ​enabled:​ yes      ​enabled:​ yes
      ​masked:​ no      ​masked:​ no
-</code> +- name: Installation du paquet rsyslog-relp 
- +  apt: pkg=rsyslog-relp state=installed update_cache=true 
-=== reboot ​=== +- name: Suppression du fichier de configuration /etc/rsyslog.conf 
-<​code>​ +  file: 
----+    path: /​etc/​rsyslog.conf 
 +    state: absent 
 +- name: Création du fichier de configuration /​etc/​rsyslog.conf 
 +  copy: 
 +     ​content:​ "​module(load=\"​imuxsock\"​) # provides support for local system logging\nmodule(load=\"​imklog\"​) ​  # provides kernel logging support\n\n#​ Use traditional timestamp format.\n$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat\n\n#​ Set the default permissions for all log files.\n$FileOwner root\n$FileGroup adm\n$FileCreateMode 0640\n$DirCreateMode 0755\n$Umask 0022\n\n# Where to place spool and state files\n$WorkDirectory /​var/​spool/​rsyslog\n\n#​On charge le module relp (output)\nmodule(load=\"​omrelp\"​)\n#​On log avec le protocole relp vers une adresse et un port précis\naction(type=\"​omrelp\"​ target=\"​192.168.16.11\"​ port=\"​20514\"​ tls=\"​off\"​)"​ 
 +     dest: /​etc/​rsyslog.conf 
 +     force: no 
 +     ​group:​ sys 
 +     ​owner:​ root 
 +     mode: 0777
 - name: Redémarrage des hosts - name: Redémarrage des hosts
   become: yes   become: yes
-  shell: sleep 2 && /​sbin/​shutdown -r now "​Ansible system package upgraded"​+  shell: sleep 2 && /​sbin/​shutdown -r now
   async: 1   async: 1
   poll: 0   poll: 0
 </​code>​ </​code>​
  
-=== ntp === +On exécute ensuite le fichier ​avec la commande suivante 
-<​code>​ +  ​ansible-playbook access_point.yml
---- +
-- name: Installation du paquet ntp +
-  apt: pkg=ntp state=installed update_cache=true +
-- name: Suppression du fichier ​de configuration /​etc/​ntp.conf +
-  ​file: +
-    path: /​etc/​ntp.conf +
-    state: absent +
-name: Création du fichier de configuration /etc/ntp.conf +
-  copy: +
-     ​content:​ "​server ntp.ubuntu.com prefer\nserver ntp2.jussieu.fr\nserver 0.fr.pool.ntp.org\nserver 0.europe.pool.ntp.org"​ +
-     dest: /​etc/​ntp.conf +
-     ​force:​ no +
-</​code>​+
  
-=== update_upgrade === 
-<​code>​ 
---- 
-- name: Suppression du fichier sources.list 
-  file: 
-    path: /​etc/​apt/​sources.list 
-    state: absent 
-- name: Création du fichier sources.list 
-  copy: 
-    content: "# deb http://​ftp.fr.debian.org/​debian/​ stretch main\n\ndeb http://​ftp.fr.debian.org/​debian/​ stretch main contrib non-free\ndeb-src http://​ftp.fr.debian.org/​debian/​ stretch main contrib non-free\n\ndeb http://​security.debian.org/​debian-security stretch/​updates main contrib non-free\ndeb-src http://​security.debian.org/​debian-security stretch/​updates main contrib non-free\n\n#​ stretch-updates,​ previously known as '​volatile'​\ndeb http://​ftp.fr.debian.org/​debian/​ stretch-updates main contrib non-free\ndeb-src http://​ftp.fr.debian.org/​debian/​ stretch-updates main contrib non-free"​ 
-    dest: /​etc/​apt/​sources.list 
-    force: no 
-- name: Installation du paquet aptitude 
-  apt: pkg=aptitude state=installed update_cache=true 
-- name: Mise à jour de la liste des paquets 
-  apt: update_cache=yes 
-- name: Mise à jour des paquets 
-  apt: upgrade=yes 
-</​code>​ 
- 
- 
-Puis comme précédemment,​ on exécute le fichier ansible 
-  ansible-playbook access_point.yml 
 ===== Ressources ===== ===== Ressources =====
   * https://​docs.ansible.com/​ansible/​latest/​user_guide/​playbooks.html   * https://​docs.ansible.com/​ansible/​latest/​user_guide/​playbooks.html
anthony_messe/ansible/playbook.1525852270.txt.gz · Dernière modification: 2018/05/09 09:51 par Anthony Messé