====== Bloquear IPs procedentes de la red Tor con reglas iptables ====== Este sencillo script descarga una lista actualizada con las IPs de los nodos Tor de salida conocidos y posteriormente bloquea las IPs (V4 y v6) de dicha lista mediante iptables. #!/bin/bash ######################## IPTABLES_TARGET="DROP" IPTABLES_CHAINNAME="TOR" ######################## # Comprueba que no existe el chain "TOR" en IPv4 y lo crea (-N). if ! iptables -L $IPTABLES_CHAINNAME -n >/dev/null 2>&1 ; then iptables -N $IPTABLES_CHAINNAME >/dev/null 2>&1 # Los paquetes entrantes TCP usarán las reglas del chain TOR, la cual según se definió en la cabecera será denegada. iptables -A INPUT -p tcp -j $IPTABLES_CHAINNAME 2>&1 fi # Comprueba que no existe el chain "TOR" en IPv6 y lo crea (-N). if ! ip6tables -L $IPTABLES_CHAINNAME -n >/dev/null 2>&1 ; then ip6tables -N $IPTABLES_CHAINNAME >/dev/null 2>&1 ip6tables -A INPUT -p tcp -j $IPTABLES_CHAINNAME 2>&1 fi # Descarga la lista de IPs a bloquear, la ordena y en el caso de haber lineas comentadas las elimina. echo -e "\nGetting TOR node list from dan.me.uk\n" CMD=$(wget -q -O - "https://www.dan.me.uk/torlist/" | sort -u | sed 's|^#.*$||g') # Elimina las reglas actuales del chain "TOR" y genera las nuevas reglas. iptables -F $IPTABLES_CHAINNAME ip6tables -F $IPTABLES_CHAINNAME for IP in $CMD; do if [[ $IP =~ .*:.* ]] # IPv6 then ip6tables -A $IPTABLES_CHAINNAME -s $IP -j $IPTABLES_TARGET let COUNT_IPv4=COUNT_IPv4+1 else let COUNT_IPv6=COUNT_IPv6+1 # IPv4 iptables -A $IPTABLES_CHAINNAME -s $IP -j $IPTABLES_TARGET fi done echo -e "\n\t $COUNT_IPv4 IPv4 blocked.\n\t $COUNT_IPv6 IPv6 blocked." **Historial con todos los nodos salida de la red Tor** (Desde 2012): [[https://collector.torproject.org/]] (IPv4). Tor actualmente no registra en sus listas de nodos salida las direcciones IPv6, pero pueden ser obtenidas desde este enlace "https://metrics.torproject.org/rs.html#search/flag:exit%20". La URL que usa el script "https://www.dan.me.uk/torlist/" sí mantiene en el listado las IPv6, aunque no se sabe a ciencia cierta de donde son obtenidas. Un método de conseguir dicha información, además de esa tabla online sería mediante la resolución inversa de nombres. Hay que tener en cuenta que aunque se resuelva una IPv6, eso no asegura que la IPv6 obtenida sea usada como nodo de salida. # Desde una dirección IPv4 (Tor exit node). dig +short -x 185.56.83.83 onion.xor.sc dig +short AAAA onion.xor.sc. 2a06:e80:3000:1:bad:babe:ca11:911 # Desde una IPv6 (No siempre las IPv6 tienen configurados registros PTR). dig +short -x 2a06:e80:3000:1:bad:babe:ca11:911