Script: Actualizar un address list con los IPs de Google y Youtube

Muchas veces se requiere de bloquear ciertos sitios y al momento de hacerlo por IP es complicado porque resuelve su dominio con diferentes rangos de IPs.

Un script realizado en Perl puede ser de gran utilidad ya que permite obtener todas las direcciones IPs de Google y Youtube (es fácil cambiarlo a otros dominios) realizando una consulta DIG (DNS); luego las sube a un MikroTik RouterOS por SSH y la importa para ejecutarla.

Es de simple implementación. El script es el siguiente:

#!/usr/bin/perl

use strict;
use warnings;
use File::Temp qw/tempfile tempdir/;

# Configuration
my $dig = '/usr/bin/dig';

my $fh = new File::Temp(UNLINK => 0);
my $filename = $fh->filename;
`$dig google.com >$filename`;
`$dig youtube.com >>$filename`;
close $fh;

my $addr_list;
open($fh, '<', $filename);
while (<$fh>) {
if (m/^google.com..+IN.+A/) {
my ($google_addr) = $_ =~ m/(d{1,3}.d{1,3}.d{1,3}.d{1,3})/;
$addr_list .= qq(add list=google address=$google_addrn);
}
if (m/^youtube.com..+IN.+A/) {
my ($youtube_addr) = $_ =~ m/(d{1,3}.d{1,3}.d{1,3}.d{1,3})/;
$addr_list .= qq(add list=youtube address=$youtube_addrn);
}
}
close($fh);

open($fh, '>', $filename);
print $fh qq(/system script run remove_dynipaddrn);
print $fh qq(/ip firewall address-listn);
print $fh $addr_list;

# Copiar el script a MikroTik Router
`/usr/bin/scp $temp_filename user@host:renew_dynipaddr.rsc`;
unlink($fh);

# Ejecuta el script en MikroTik RouterOS
`ssh user@host '/import file-name=renew_dynipaddr.rsc'`;

exit 0;

Este script funciona en consola, pero si se desea realizar automáticamente con algún Cron es necesario importar certificados SSL para no utilizar contraseñas en SSH. Un artículo en el wiki comenta como crear los certificados y luego importarlos en un RouterOS.

En caso de hacerlo con una agenda (scheduler) es necesario limpiar las entradas para que no se repitan las mismas, para eso se crea un script con el siguiente código:

add name=remove_dynipaddr policy=ftp,read,write,winbox,api source="/ip firewall address-list remove [find list="google"];/ip firewall address-list  [find list="youtube"]"

Ejecutarlo en el mismo intervalo que se ejecuta el script de carga.

Se puede adaptar facilmente para obtener las IPs de Facebook para restringirle el acceso ó limitarle el ancho de banda.

Vía: Acim