MIKROTIK: Manipulando Address-List

O Roteadores Mikrotik permitem a criação de listas de endereços IP, que podem ser utilizados no modulo firewall de inúmeras formas, para bloqueio e/ou liberação e monitoramento de acessos de de determinados IP´s ou faixas de IP´s.

Características de uma entrada Address-list

Toda lista possui um ID, o nome da lista, endereço/faixa de IP´s, pode conter um tempo de expiração, e também um comentário.

ID

Quando uma entrada é adicionada a lista, recebe um identificador sequencial, chamado ID, que pode ser utilizado para manipulação da entrada. Este ID é somente leitura e não pode ser atualizado.

list

O Nome da lista, é utilizado para referencia-la nas regras de firewall, assim, uma lista de ip´s liberados poderia ter o nome de WHITELIST, ou em bom portugues LIBERADOS.

Importante, o nome da lista é case-sensitive, ou seja, WHITELIST e whitelist, são tratadas pelo MIKROTIK como listas distintas.

No exemplo abaixo, utilizando o comando print, são listadas duas regras, x1 e X1

address

O campo endereço, pode conter um IP individual, como 1.1.1.1, ou por exemplo uma faixa como 1.1.1.0/24, 1.1.0.0/16, ou, 1.0.0.0/8

Além de um endereço IP, o campo address, pode conter um endereço dns, nesse caso, o MIkrotik irá resolver o DNS informado e criará uma entrada dinâmica com o endereço IP referente ao DNS resolvido.

timeout

Cada entrada da lista, pode possuir um tempo de expiração, que após expirado faz com que a entrada seja removida do Mikrotik. O Tempo de expiração é definido utilizando o formato: Horas:Minutos:Segundos, ambos com 2 dígitos, assim uma entrada que deve permanecer por 1 hora e meia, possuirá o valor 01:30:00.

Em alguns casos é necessário manter a entrada por alguns dias, então deve-se informar o número de dias seguido da letra d, e então horas:minutos:segundos, como no exemplo abaixo, 30 dias, 10 horas, 30 minutos e 15 segundos:
30d10:30:15

Se o campo timeout, estiver ausente, a entrada permanecerá indefinidamente na lista.

comment

O campo comentário é opcional, pode servir para identificação da entrada/endereço, e ser utilizado em scripts para manipulação da lista.

Manipulando a address-list via terminal

Criando uma entrada na address -list

/ip firewall address-list add \
    list=whitelist address=1.1.1.1 comment="OpenDNS"

Listando as entradas da address-list

Utilizando o comando abaixo, é listado todos as as entradas da address-list, com seu ID, name, address, timeout e comment, estas propriedades podem ser utilizadas em filtros em manipulações em lote, como atualizações e remoções de entradas.

/ip firewall address-list print

Removendo entradas

Pelo ID: neste exemplo iremos remover a entrada com ID igual a 5000, para saber o ID da entrada utilize o comando print.

/ip firewall address-list remove number=5000

Usando consultas/filtros

Nestes exemplos, ao invés de utilizar o ID da entrada, iremos remover todas as entradas que possuem uma propriedade com um valor especifico, campos comment e list..

Remover as entradas que possuem um comentário OpenDNS

/ip firewall address-list remove \
    [/ip firewall address-list find comment="OpenDNS"]

Remover as entradas da lista whitelist

/ip firewall address-list remove \
    [/ip firewall address-list find list=whitelist]

SCRIPTs

Em algumas definições e ferramentas do MIKROTIK, é possível executar um script quando algum evento é disparado, como por exemplo no DHCP SERVER quando um endereço IP é atribuído, quando uma nova conexão VPN é iniciada ou finalizada (profile), nestes disparadores de evento, são passados variáveis ao script que podem ser usadas para automatizar certas situações.

O nome das variáveis podem ser encontradas na wiki do Mikrotik

Nas conexões VPN, o script é definido no Profile

https://wiki.mikrotik.com/wiki/Manual:PPP_AAA

Nessa opção são disponibilizados ao script as seguintes variáveis, que podem ser usadas em scripts ON-UP e ON-DOWN:

  • user
  • local-address
  • remote-address
  • caller-id
  • called-id
  • interface

Para utilizar uma variável preceda o o nome da mesma com $, colocando o nome da variável entre ” aspas duplas. Como no exemplo abaixo.

/ip firewall address-list add list=VPN \
    address=$"caller-id" comment=$user timeout=1d

Mais informações

https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/Address_list

IPBlockCountry – Bloqueio por Pais (Mikrotik/Windows Server/Linux)

Windows Server

Utilizar o script import-firewall-blocklist.ps1 que cria uma lista de restrições baseadas nos ips/faixas de ips informados no arquivo .txt

Para executar deve ser usado o powershell, a ativado o recurso de execucao de scripts com o comando:

Set-ExecutionPolicy RemoteSigned

Referência:
//stackoverflow.com/questions/4037939/powershell-says-execution-of-scripts-is-disabled-on-this-system

Algumas fontes para listas de ip´s:

//www.ipdeny.com/ipblocks/

Pode-se obter a lista de ips de forma automática, acessando a url por codigo de pais, exemplo: //www.ipdeny.com/ipblocks/data/countries/xx.zone

Ips da China cn//www.ipdeny.com/ipblocks/data/countries/cn.zone
Ips Argentina ar//www.ipdeny.com/ipblocks/data/countries/ar.zone

//www.okean.com/thegoods.html
//www.countryipblocks.net/
//www.wizcrafts.net/iptables-blocklists.html
//www.iblocklist.com
//lite.ip2location.com

Mikrotik

No mirkotik pode-se utilizar uma address list, e duas regras de firewall, uma para input e outra para foward.

Exemplo de script:

  1. Remove todos os endereços da lista de bloqueio vigente.
  2. Adiciona os Ip´s a lista de bloqueio.
  3. Remove as regras antigas de Bloqueio
  4. Cria as novas regras de bloqueio na 2a posição.

/ip firewall address-list
remove [find list=BLOCK-Country]
add address=203.95.208.0/22 list=BLOCK-Country
add address=203.95.224.0/19 list=BLOCK-Country
add address=203.99.8.0/21 list=BLOCK-Country
add address=203.99.16.0/20 list=BLOCK-Country
add address=203.99.80.0/20 list=BLOCK-Country
add address=203.100.32.0/20 list=BLOCK-Country
add address=203.100.48.0/21 list=BLOCK-Country
add address=203.100.58.0/24 list=BLOCK-Country
add address=203.100.60.0/24 list=BLOCK-Country
add address=203.100.63.0/24 list=BLOCK-Country
add address=203.100.80.0/20 list=BLOCK-Country
add address=203.100.96.0/19 list=BLOCK-Country
add address=203.100.192.0/20 list=BLOCK-Country
add address=203.104.32.0/20 list=BLOCK-Country
add address=203.105.96.0/19 list=BLOCK-Country
add address=203.105.128.0/19 list=BLOCK-Country
add address=203.107.0.0/17 list=BLOCK-Country
add address=203.110.160.0/19 list=BLOCK-Country
add address=203.110.208.0/20 list=BLOCK-Country
add address=203.110.232.0/23 list=BLOCK-Country
add address=203.110.234.0/24 list=BLOCK-Country
add address=203.114.80.0/22 list=BLOCK-Country
add address=203.114.84.0/22 list=BLOCK-Country
add address=203.114.88.0/22 list=BLOCK-Country
add address=203.114.92.0/22 list=BLOCK-Country
add address=203.114.244.0/22 list=BLOCK-Country
add address=203.118.192.0/19 list=BLOCK-Country
add address=203.118.241.0/24 list=BLOCK-Country
add address=203.118.248.0/22 list=BLOCK-Country
add address=203.119.24.0/21 list=BLOCK-Country
add address=203.119.32.0/22 list=BLOCK-Country
add address=203.119.80.0/22 list=BLOCK-Country
add address=203.119.85.0/24 list=BLOCK-Country
add address=203.119.113.0/24 list=BLOCK-Country
add address=203.119.114.0/23 list=BLOCK-Country
add address=203.119.116.0/22 list=BLOCK-Country
add address=203.119.120.0/21 list=BLOCK-Country
add address=203.119.128.0/17 list=BLOCK-Country
add address=203.123.58.0/24 list=BLOCK-Country
add address=203.128.32.0/19 list=BLOCK-Country
add address=203.128.96.0/19 list=BLOCK-Country
add address=203.128.224.0/21 list=BLOCK-Country

/ip firewall filter
remove [find comment=BLOCK-Country]
add action=drop chain=input comment="BLOCK-Country" log-prefix="Block Country" src-address-list=BLOCK-Country place-before=3
add action=drop chain=forward comment="BLOCK-Country" log-prefix="Block Country" src-address-list=BLOCK-Country place-before=3

Linux

Usando .htaccess voce pode bloquear acessos ao seu website diretamente.

order allow,deny
 allow from all
 # Get up-to-date list from //www.wizcrafts.net/russian-blocklist.html
deny from 2.72.0.0/13 2.92.0.0/14 2.132.0.0/14 
deny from 5.34.56.0/22 5.60.0.0/16 5.143.0.0/16
deny from 80.48.0.0/13 80.70.96.0/20

Para boqueio de todos os serviços deve-se utilizar iptables.

Referencias: //www.parkansky.com/china.htm