Python Firewall

Da un mese a questa parte mi e’ capitato di controllare i logs del mio demone VPN (OpenVPN) e trovare “strani” messaggi tipo questo

an 29 19:32:22 openvpn[1715]: 87.162.209.63:43237 TLS Error: TLS handshake failed
Jan 29 19:32:22 openvpn[1715]: 87.162.209.63:43237 SIGUSR1[soft,tls-error] received, client-instance restarting
Jan 29 19:32:23 openvpn[1715]: 87.162.209.63:6235 TLS Error: TLS key negotiation failed to occur within 60 second

Una rapida ricerca su google sul codice di errore mi porta a pensare che qualcuno sta cercando di autenticarsi sul mio server usando un protocollo diverso rispetto a quello impostato.

La soluzione piu’ ovvia sarebbe quella di cambiare la porta su cui il demone VPN e’ in ascolto (port 1194), con una meno conosciuta… ma purtroppo questo non puo’ essere il mio caso perche’ alcuni miei client hanno tutte le porte bloccate tranne quella di default.

La mia soluzione e’ stata quella scrivere un piccolo script in python il quale ha il compito di leggere il file di log ogni ora (esattamente 12 minuti dopo ogni scoccare di ora)

12 * * * * python /home/unicondor/pythonFirewall/OpenVpnParser.py -s /var/log/openvpn > /home/unicondor/out.txt 2>&1

ed andare a prendere quelli IP che per 50 volta hanno provato ad autenticarsi sul server VPN.

Una volta avuta questa lista, possiamo procedere con l’aggiornare iptables e la chain di INPUT droppando tali ip

# iptables -A INPUT -s ip_to_block -j DROP

Lo script in python e’ disponibile al seguente indirizzo

https://github.com/flaviopace/pythonOpenVpnIpBlocker