Ci-dessous, les différences entre deux révisions de la page.
| 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/07 15:12] Anthony Messé [Contenu des dossiers] |
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 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 | + | |
| - | - 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: 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 255: | 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 290: | 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: |
| - | apt: pkg=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" |
| - | - name: Installation du paquet wpasupplicant | + | dest: /etc/network/interfaces |
| - | apt: pkg=wpasupplicant state=installed update_cache=true | + | force: no |
| - | - name: Installation du paquet dnsutils | + | - name: Création du fichier de configuration /etc/network/interfaces.d/interface_ap |
| - | apt: pkg=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 317: | 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 335: | 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 343: | 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 | ||