Ceci est une ancienne révision du document !
Lien vers l'accueil
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).
Voir cette page.
Créez un fichier access_point.yml
nano access_point.yml
Placez-y le code ci-dessous (ce code déploie le projet avec une adresse IPv4 classe A)
---
- 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
tasks:
- 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://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/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 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: Suppression du script de logs
file:
path: /root/logs_analyzer.sh
state: absent
- name: Création du script de logs
copy:
content: "#!/bin/sh\n_date=`date +%Y-%m-%d`\nmkdir -p /root/logs_wifi\necho \"\nRécupération des logs...\"\ncat /var/log/syslog | grep -e hostapd -e DST| grep -v CRON > /tmp/$_date.log\ncd /tmp\necho \"Compression...\"\ngzip $_date.log -f\necho \"Copie...\"\ncp $_date.log.gz /root/logs_wifi/\nrm $_date.log.gz\nrm /var/log/syslog\ntouch /var/log/syslog"
dest: /root/logs_analyzer.sh
force: no
group: sys
owner: root
mode: 0777
- cron:
name: "ap_logs"
state: absent
- cron:
name: "ap_logs"
minute: "0"
hour: "1"
job: "/bin/sh /root/logs_analyzer.sh"
- name: Redémarrage des hosts
become: yes
shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded"
async: 1
poll: 0
On exécute ensuite le fichier avec la commande suivante
ansible-playbook access_point.yml