O
IPset é um recurso introduzido no kernel desde a versão 2.6.x que permite a criação de conjuntos para armazenar listas de IPs, pares de IPs e MACs e portas TCP/UDP.
Com a utilização desse recurso é possível bloquear milhares de IPs no iptables apenas com uma regra.
Para este artigo utilizarei duas máquinas virtuais com CentOS 6.4 para execução dos comandos.
Primeiro precisamos instalar o utilitário
ipset como seguinte comando:
# yum install ipset
Criando os conjuntos
Depois de instalado, utilizaremos o comando
ipset para criar os conjuntos:
# ipset create NOME_CONJUNTO hash:ip
A opção
create adiciona um novo conjuto (set) e o
hash:ip refere-se ao método de armazenamento e o tipo de dado que será armazenado separados pelo ":".
Para saber todos os tipos de conjuntos disponíveis basta digitar o seguinte comando:
# ipset help
Você também pode adicionar um timeout padrão para as entradas do conjunto:
# ipset create NOME_CONJUNTO hash:ip timeout 300
Assim todo IP adicionado ao conjunto permanecerá por 300 segundos até ser removido.
Para listar todos os conjuntos criados digite:
# ipset list [NOME_CONJUNTO]
Para adicionar um novo registro digite:
# ipset add NOME_CONJUNTO IP [timeout n]
Obs.: você só poderá utilizar a opção de timeout caso você tenha criado o conjunto com esta opção.
Para limpar todo o conteúdo de algum conjunto digite:
# ipset flush NOME_CONJUNTO
Para remover um conjunto digite:
#ipset destroy NOME_CONJUNTO
Antes de remover um conjunto certifique-se de remover todas as referências a esse conjunto no firewall, ou você não será capaz de remové-lo.
Depois dessa breve introdução a algumas opções do comando ipset, vamos criar um conjunto para nossos exemplos:
# ipset create ip_bloqueado hash:ip
Com o comando acima criamos o conjunto "ip_bloqueado" que utilizará o método hash e armazenará listas de IPs.
Vamos agora adicionar alguns IPs no conjunto:
# ipset add ip_bloqueado 192.168.200.2
# ipset add ip_bloqueado 192.168.200.3
# ipset add ip_bloqueado 192.168.200.4
Pronto, agora temos 3 registros no nosso conjunto.
Vamos criar um novo conjunto para armazenar pares de ip e mac:
# ipset create ipmac_list bitmap:ip,mac range 192.168.200.0/24
Perceba que há uma nova opção que é obrigatória para o tipo de conjunto, essa opção define a rede que poderá ser inserida no conjunto.
Agora vamos adicionar um registro nesse conjunto:
# ipset add ipmac_list 192.168.200.2,08:00:27:48:32:40
Vamos executar o seguinte comando para listar nossos conjuntos:
# ipset list
A saída do comando será mostrada como na imagem abaixo: