Outils pour utilisateurs

Outils du site


anthony_messe:banana_pi:logs_des_connexions

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:banana_pi:logs_des_connexions [2018/05/11 09:50]
Anthony Messé [Activation des logs dans iptables]
anthony_messe:banana_pi:logs_des_connexions [2018/06/14 13:01] (Version actuelle)
Anthony Messé
Ligne 1: Ligne 1:
 +Lien vers [[anthony_messe:​anthony_messe|l'​accueil]]
 +
 ====== Logger les connexion du point d'​accès ====== ====== Logger les connexion du point d'​accès ======
  
-===== Activation des logs dans iptables =====+On va logger les connexions de l'AP et les transmettre en temps réel à une autre machine grâce au protocole RELP.
  
-Il faut simplement activer les logs après avoir flush les tables. +====== Configuration du client ======
-  iptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix "New input connection: " +
-  iptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix "New output connection: " +
-  ​+
  
-Ce qui nous donne au final (par exemple pour une classe A) +Le client est ici la BPi.
-<​code=bash>​ +
-#!/bin/sh +
-#​Variables +
-_trans_port="​9040"​ +
-_dns_port="​5353"​ +
-_interface_wifi="​wlx503eaa3d7d6c"​ +
-_tor_uid=`id -u debian-tor` +
-_router="​10.255.255.254"​ #Adresse du router (adresse de la machine ayant le point d'​accès wifi) +
-_reseau_wifi="​10.0.0.0/​8"​ +
-_unreachable="​192.168.16.20/​24"​ #Adresse dont on empêche l'​accès +
-_eth0_ip=`ip -4 addr show eth0 | grep -oP '​(?<​=inet\s)\d+(\.\d+){3}'​`+
  
-#On efface toutes les règles iptables +On installe le paquet nécessaire au bon fonctionnement du protocole RELP
-iptables -F +
-iptables -X +
-iptables -t nat -F +
-iptables -t nat -X +
-iptables -t mangle -F +
-iptables -t mangle -X+
  
-#On met les policy +  apt install rsyslog-relp
-iptables ​-P INPUT DROP +
-iptables -P FORWARD DROP +
-iptables -P OUTPUT DROP +
-ip6tables -P INPUT DROP +
-ip6tables -P FORWARD DROP +
-ip6tables -P OUTPUT DROP+
  
-#On redirige ​le traffic TCP vers Tor +Editez ​le fichier /​etc/​rsyslog.conf
-iptables -t nat -A PREROUTING -i $_interface_wifi -p tcp --syn -j REDIRECT --to-ports $_trans_port +
-#On redirige les requêtes DNS vers Tor +
-iptables -t nat -A PREROUTING -i $_interface_wifi -p udp --dport 53 -j REDIRECT --to-ports $_dns_port+
  
-#On log le trafic entrant +  nano /​etc/​rsyslog.conf
-iptables -A INPUT -i $_interface_wifi -m state --state NEW -j LOG --log-prefix "New input connection: " +
-#On autorise les requêtes DHCP à entrer +
-iptables -A INPUT -i $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT +
-#On autorise les connexion SSH +
-iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j ACCEPT +
-#On autorise les connexions déja établies +
-iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT +
-#On autorise la boucle locale +
-iptables -A INPUT -i lo -j ACCEPT +
-#On autorise les requêtes vers le routeur et le port DNS +
-iptables -A INPUT -d $_router -i $_interface_wifi -p udp -m udp --dport $_dns_port -j ACCEPT +
-#On autorise les requêtes vers le routeur pour le traffic TCP +
-iptables -A INPUT -d $_router -i $_interface_wifi -p tcp -m tcp --dport $_trans_port --tcp-flags FIN,​SYN,​RST,​ACK SYN -j ACCEPT+
  
-#On log le trafic sortant +Ajoutez les lignes suivantes à la fin du fichier 
-iptables -I OUTPUT -m owner --uid-owner $_tor_uid -j LOG --log-prefix ​"New output connection: ​+ 
-#On drop le paquet si il n'est pas dans l état new, established,​ ou related +<​code>​ 
-iptables -A OUTPUT -m state --state INVALID -j DROP +#On charge ​le module relp (output) 
-#On autorise ls connexions déja établies +module(load="omrelp") 
-iptables -A OUTPUT -m state --state NEW,​ESTABLISHED -j ACCEPT +#On log avec le protocole relp vers une adresse ​et un port précis 
-#On autorise les requêtes DHCP à sortir +action(type="​omrelp"​ target="​192.168.16.11"​ port="​20514"​ tls="​on"​)
-iptables -A OUTPUT -o $_interface_wifi -p udp --dport 67:68 --sport 67:68 -j ACCEPT +
-#On autorise le traffic issu de la carte et de l'​utilisateur root +
-iptables -A OUTPUT ! -s $_reseau_wifi -m owner --uid-owner 0 -j ACCEPT+
 </​code>​ </​code>​
  
-===== Récupération automatique des logs =====+> //​192.168.16.11//​ étant l'​adresse de la machine qui va collecter les logs (le serveur).
  
-On va ajouter la ligne suivante dans la crontab ​+Ce qui nous donne au final pour le fichier /​etc/​rsyslog.conf du client ​
  
-  ​0 1 * * * /bin/sh /​root/​logs_analyzer.sh+<​code>​ 
 +module(load="​imuxsock"​) # provides support for local system logging 
 +module(load="​imklog"​) ​  ​# provides kernel logging support
  
-On crée le script +# Use traditional timestamp format. 
-  nano logs_analyzer.sh+$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  
-On le chmod +# Set the default permissions for all log files. 
-  chmod +x logs_analyzer.sh+$FileOwner root 
 +$FileGroup adm 
 +$FileCreateMode 0640 
 +$DirCreateMode 0755 
 +$Umask 0022
  
-Collez-y les lignes ci-dessous : +Where to place spool and state files 
-<​code=bash>​ +$WorkDirectory /var/spool/rsyslog
-#!/bin/sh+
  
-_date=`date +%Y-%m-%d` +#On charge le module relp (output) 
-mkdir -p /​root/​logs_wifi +module(load="omrelp") 
-echo "\nRécupération des logs...+#On log avec le protocole relp vers une adresse et un port précis 
-cat /​var/​log/​syslog | grep -e hostapd -e DST| grep -v CRON > /​tmp/​$_date.log +action(type="omrelp" ​target="192.168.16.11" ​port="​20514"​ tls="​on"​)
-cd /tmp +
-echo "Compression..." +
-gzip $_date.log -f +
-echo "Copie..." +
-cp $_date.log.gz /​root/​logs_wifi/​ +
-rm $_date.log.gz +
-rm /​var/​log/​syslog +
-touch /​var/​log/​syslog+
 </​code>​ </​code>​
  
 +On redémarre rsyslog et on vérifie son état
  
-Il est nécessaire de compresser les données pour économiser de la place. En effet, comme on peut le voir ci dessous, les données compressées prennent 20 fois moins de place. +  systemctl restart rsyslog && systemctl status rsyslog 
-<code=bash> + 
-root@debian:​~#​ ls -l -h +===== Configuration du serveur ===== 
-total 31M + 
--rw-r--r-- 1 root root  31M mai    9 13:10 access_point.log +On installe le paquet nécessaire au bon fonctionnement du protocole RELP 
--rwxrwxrwx 1 root sys  2,4K mai    9 12:04 iptables.sh + 
-root@debian:​~gzip access_point.log ​ +  apt install rsyslog-relp 
-root@debian:​~ls -l -h + 
-total 1,5M +Editez le fichier /​etc/​rsyslog.conf 
--rw-r--r-1 root root 1,5M mai    9 13:10 access_point.log.gz + 
--rwxrwxrwx 1 root sys  2,4K mai    9 12:04 iptables.sh +  ​nano /​etc/​rsyslog.conf 
-root@debian:​~# ​+ 
 +Ajoutez les lignes suivantes à la fin du fichier 
 + 
 +<​code>​ 
 +#On charge le module relp (input) 
 +module(load="​imrelp"​ ruleset="​relp"​) 
 +#On écoute sur un port 
 +input(type="​imrelp"​ port="​20514"​ tls="​off"​) 
 +#On redirige les logs vers un fichier précis en fonction de l'ip de l'​équipement 
 +template(name="​DynFile"​ type="​string"​ string="/​var/​log/​remote/​system-%FROMHOST-IP%.log") 
 +#Règle appelée avec le module relp 
 +ruleset(name="​relp"​){ 
 +  ​action(type="​omfile"​ dynaFile="​DynFile"​) 
 +}
 </​code>​ </​code>​
  
-===== Résultat =====+Ce qui nous donne au final pour le fichier complet :
  
-Au final, on peut observer le contenu en fichier en faisant un cat. 
-Voici un exemple ce ce qu'on trouve à l'​intérieur 
 <​code>​ <​code>​
-May  4 09:14:25 debian kernel: [21983.824425] New input connection: IN=wlx503eaa3d7d6c OUTMAC=50:​3e:​aa:​3d:​7d:​6c:​cc:​b0:​da:​67:​65:​31:​08:​00 SRC=10.255.255.50 DST=10.255.255.254 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=8195 DF PROTO=TCP SPT=55915 DPT=9040 WINDOW=17520 RES=0x00 SYN URGP=0 ​ +module(load="​imuxsock"​) # provides support for local system logging 
-May  4 09:14:31 debian kernel: [21989.958539] New input connection: IN=wlx503eaa3d7d6c OUT= MAC=50:​3e:​aa:​3d:​7d:​6c:​cc:​b0:​da:​67:​65:​31:​08:​00 SRC=10.255.255.50 DST=10.255.255.254 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=23855 DF PROTO=TCP SPT=55916 DPT=9040 WINDOW=17520 RES=0x00 SYN URGP=0 ​ +module(load="​imklog"​) ​  # provides kernel logging support 
-May  4 09:17:13 debian kernel: [22151.745982] New input connection: IN=wlx503eaa3d7d6c OUT= MAC=ff:​ff:​ff:​ff:​ff:​ff:​cc:​b0:​da:​67:​65:​31:​08:​00 SRC=10.255.255.50 DST=10.255.255.255 LEN=229 TOS=0x00 PREC=0x00 TTL=128 ID=17657 PROTO=UDP SPT=138 DPT=138 LEN=209 ​ + 
-May  4 09:18:17 debian hostapd: wlx503eaa3d7d6c:​ WPA rekeying GTK +# Use traditional timestamp format. 
-May  4 09:18:17 debian hostapd: wlx503eaa3d7d6c:​ STA cc:​b0:​da:​67:​65:​31 WPA: sending 1/2 msg of Group Key Handshake +$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 
-May  4 09:18:17 debian hostapd: wlx503eaa3d7d6c:​ STA cc:​b0:​da:​67:​65:​31 WPA: received EAPOL-Key frame (2/2 Group+ 
-May  4 09:18:17 debian hostapd: wlx503eaa3d7d6c:​ STA cc:​b0:​da:​67:​65:​31 WPA: group key handshake completed ​(RSN+# Set the default permissions for all log files. 
-May  4 09:19:36 debian kernel: [22295.592654] New input connection: IN=wlx503eaa3d7d6c OUTMAC=50:​3e:​aa:​3d:​7d:​6c:​cc:​b0:​da:​67:​65:​31:​08:​00 SRC=10.255.255.50 DST=10.255.255.254 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=24462 DF PROTO=TCP SPT=55917 DPT=9040 WINDOW=17520 RES=0x00 SYN URGP=0 ​+$FileOwner root 
 +$FileGroup adm 
 +$FileCreateMode 0640 
 +$DirCreateMode 0755 
 +$Umask 0022 
 + 
 +# Where to place spool and state files 
 +$WorkDirectory /​var/​spool/​rsyslog 
 + 
 +
 +# First some standard log files Log by facility. 
 +
 +auth,​authpriv.*                 /​var/​log/​auth.log 
 +*.*;​auth,​authpriv.none          -/​var/​log/​syslog 
 +#cron.*                         /​var/​log/​cron.log 
 +daemon.*                        -/​var/​log/​daemon.log 
 +kern.*                          -/​var/​log/​kern.log 
 +lpr.*                           ​-/​var/​log/​lpr.log 
 +mail.*                          -/​var/​log/​mail.log 
 +user.*                          -/​var/​log/​user.log 
 + 
 +
 +# Emergencies are sent to everybody logged in
 +# 
 +*.emerg ​                        :omusrmsg:* 
 + 
 +#On charge le module relp (input
 +module(load="​imrelp"​ ruleset="​relp"​
 +#On écoute sur un port 
 +input(type="​imrelp"​ port="​20514"​ tls="​off"​) 
 +#On redirige les logs vers un fichier précis en fonction de l'ip de l'​équipement 
 +template(name="​DynFile"​ type="​string"​ string="/​var/​log/​remote/​system-%FROMHOST-IP%.log"​) 
 +#Règle appelée avec le module relp 
 +ruleset(name="​relp"​){ 
 +  action(type="​omfile"​ dynaFile="​DynFile"​) 
 +}
 </​code>​ </​code>​
  
-===== Conclusion ===== 
  
-On a bien rempli les obligations légales qui étaient : +===== Rotation auto des logs sur le serveur ===== 
-  ​* Les informations relatives à l'​appareil utilisé + 
-Il suffit de se rendre sur https://aruljohn.com/mac/ et de renseigner l'​adresse mac de l'​équipement +Créez un fichier logrotate et collez-y le contenu suivant 
-Au final on obtient par exemple ​//OnePlus Tech (Shenzhen) Ltd//. + 
-  * La date horaire et durée des communications +  ​nano /etc/logrotate.d/relp_ap_logs 
-  * Les informations ​d'​authentification ​ + 
-On récupère l'​adresse MAC et l'​adresse IP associée (on est donc en mesure de dire qui s'est rendu sur tel ou tel site) +<​code>​ 
-  * L'​adresse IP cible des communications +/var/log/remote/*.log { 
-Avec les logs iptables+    daily 
 +    ​rotate 365 
 +    compress 
 +    dateformat %Y-%m-%d  
 +} 
 +</​code>​
  
 ===== Ressources ===== ===== Ressources =====
  
-  * https://​access.redhat.com/​solutions/​70465+  * 
anthony_messe/banana_pi/logs_des_connexions.1526025035.txt.gz · Dernière modification: 2018/05/11 09:50 par Anthony Messé