Escolar Documentos
Profissional Documentos
Cultura Documentos
O IPset foi introduzido a partir do kernel 2.6.39 como uma ferramenta integrante do
framework netfilter, para nos auxiliar a gerencias listas. Listas essas que podem ser de
endereço IPs, ranges, portas, mac, e trabalhar com conjuntos com todos esses itens, como por
exemplo um par de ip e mac, ip e porta, e por ai vai.
O IPset é uma forma de podermos agrupar IPs , entre outros em um único nome e fazer
referencia a esse nome da regra de iptables. Facilitando em muito nosso trabalho. E ainda por
cima reduz o consumo de memória e CPU do firewall, pois iremos diminuir a quantidade de
regras substanciamente.
Para instalar o aplicativo, um simples yum install ipset ou apt-get install ipset já é o
suficiente.
Onde:
COMANDOS = create|add|del|test|destroy|list|save|restore|flush|rename|etc
Em opções de comandos, vai depender de cada tipo de comando que foi utilizado, por
exemplo para add, teríamos que informar o tipo de dados que serão armazenados, além do
nome. Então para facilitar nossa vida, iremos ver como criar uma lista e posteriormente como
adicionar elementos a essa lista.
Quando vamos criar uma nova lista, algumas informações devem ser fornecidas, entre
elas logicamente o nome, método e o tipo. Sua sintaxe seria algo do gênero:
Existem outros, mas para o nosso Post não há necessidade, pois queremos facilitar e
não criar um novo estudo sobre uma ferramenta. Não é ?
bitmap
list
hash
E por fim o hash que tem tamanho padrão de 65.536, mas pode ser maior utilizando a
opção maxelem, e obviamente usa um hash para armazenar as informações.
Bom visto isso, podemos ver alguns exemplo de criação de listas (sets) e como
adicionar elementos à mesma. Pelo fato do hash não ter limitação, normalmente usamos o
próprio.
Acima temos uma lista simples, onde incluem a rede 192.168.0.0/24, 10.0.0.24, e tem
como exceção a rede 10.0.0.0/30, numa set chamada ips_internos. Obviamente esse é só uma
lista, temos ainda que aplicar em uma regra de firewall. Neste exemplo usei o tipo net, por se
tratar apenas de redes e não ips isolados ou ranges.
Podemos ver acima que além de usar IPs individuais, consigo adicionar um range de
endereços. É possível visualizar suas listas com o comando ipset list. Veja a saída de exemplo
abaixo:
Vejamos um exemplo, usando uma dupla, como ip e mac, para um range especifico da
rede.
Neste exemplo acima, estamos usando o conjunto ip e mac, mas note que usei o
método bitmap. O único método que permite o uso desta dupla é justamente o bitmap,
possuem outros tipos para esse método. Para uma consulta sobre todos tipos suportados por
cada método de uma olhada no man page em https://linux.die.net/man/8/ipset.
Por exemplo, o método hash, suporta net-port, ip-port, entre outros, vejamos um
exemplo.
Podemos ver no exemplo acima, que especifico um ip e uma porta tcp ou udp, mas
quando não especifico nada, no caso da porta 111, ele atribui tanto tcp como upd. E neste
momento não especifico se é origem ou destino. Farei isso na regra de firewall do iptables,
especificamente dentro do módulo set.
Uma vez que tenhamos criados nossos sets, iremos então criar a regra de firewall
utilizando a opção –m set. Veja a sintaxe abaixo:
No exemplo acima temos duas regras, a primeira permite chegar pacotes com destino
a nossa lista DMZ, e o segundo permite sair pacotes com origem em nossa DMZ, desde que já
tenham conexão estabelecida ou Relacionada. Adicionei mais um módulo somente para
mostrar que ainda é possível utilizar-se de outros módulos ao mesmo tempo que usamos o set.
Para um segundo exemplo pegamos o set ips_internos, que não permito chegar a
determinado ips , por exemplo de servidores. Alias poderíamos criar um set também para os
servidores. Vamos então a um exemplo mais completo, do inicio da criação dos set, até as
regras de firewall.
A primeira regra bloqueia acesso à porta 22 ssh dos servidores com exceção da rede
10.0.0.30. A segunda regra libera a rede 10.0.0.30 as porta 80 e 443 dos servidores, e por fim a
ultima regra libera acesso dos ip_internos, com exceção de 10.0.0.0/30 as portas 80 e 443 dos
servidores.
Por causa desta ultima regra, tive que criar uma segunda liberando a rede 10.0.0.0/30.
Adicional
Além do que vimos em relação ao ipset, existem muitas opções que podem ser
exploradas, como salvar através do save, restaurar através do restore, testar ou validar
conteúdo de set através do test e muito mais. De uma olhada no man page no ipset para
explorar mais ainda as suas funcionalidades.
Um grande abraço