Escolar Documentos
Profissional Documentos
Cultura Documentos
com
Publicado em: 08/11/2008
Torres, Flavio. IPTABLES PARA QUEM NÃO CONHECE IPTABLES. São Paulo, 2008.
Sumário
1 Conceito de segurança
2 Mecanismos de segurança
3 Conceitos de Firewall
Iptables, funcionalidades
Trabalhando com NAT em sua rede
Trabalhando com filtros de pacote
Tratamentos especiais, TOS
Módulos
Resumão
ativando nat
apagando regras
redirecionamento para squid
redirecionamento de portas
liberando portas
bloqueio de ping
bloqueio de portas
bloqueio de conexões
1 Conceito de segurança
A segurança da informação é, sem dúvida, um dos assuntos mais importantes dentre as pautas de
reunião de tecnologia em qualquer entidade.
Mobilidade e facilidade já fazem parte do nosso dia-a-dia, comprar e configurar um roteador Wi-Fi
tornou-se trivial, já com as mais diversas distribuições de Linux, instalar e configurar um servidor
como proxy acaba sendo tarefa de 15 minutos. É exatamente neste tipo de facilidade que pessoas mal
intencionadas aplicam as mais diversas formas comumente utilizadas para explorar estas
“vulnerabilidades”, com o simples uso de ferramentas desenvolvidas especialmente para esta
finalidade, a invasão.
A contra medida simples configurada em separado ou em conjunto não devem ser consideradas
medidas de segurança suficientes para impedir um indivíduo motivado a entrar na rede.
2 Mecanismos de segurança
• os métodos físicos são barreiras que limitam o contato ou acesso à informação ou a infra-estrutura
de dados que contém as informações, podem ser exemplificados como: portas, trancas, acesso por
identificação biométrica, blindagem, entre outros.
• os métodos lógicos destacam-se por controles eletrônicos que impedem ou limitam o acesso à
informação.
- Criptografia: É a forma de cifrar dados, utilizando algoritmos altamente complexos, ou não, para
tornar a informação ininteligível à terceiros. A decriptografia é utilizada pela parte autorizada a
receber esta informação e devidamente com o algoritmo de decriptação é realizado o processo
inverso.
- Assinatura digital: Código utilizado para verificar a integridade de um documento, porém, não
garante sua confidencialidade.
- Controle de acesso: destacam-se por senhas, sistemas biométricos, controle de acesso explícito,
como por exemplo, um firewall...
3 Conceitos de Firewall
Firewall, não é nada mais do que um porteiro ou um segurança com sua árdua função de verificar
quem pode entrar e sair, além de manter a consonância das coisas, atualmente, já se tornou
imprescindível sua utilização.
Existem firewalls comerciais, muitos; também existe um método de construção onde podemos
definir as próprias regras, onde você define o que quer controlar; praticidade? Nem tanto para uma
corporação com mais de 5 mil regras. De qualquer forma, com um pouco de organização,
conseguimos trabalhar, e muito bem, com o iptables.
No Linux, o iptables é embutido no kernel, o que o torna, sem dúvida, superior em relação aos
seus concorrentes. Obviamente nenhum firewall irá corrigir os erros de sua rede, mas ele poderá
limitar o uso destes serviços à certos computadores. Não faz sentido disponibilizar um serviço de FTP
a toda a internet sendo que apenas a filial necessita deste acesso, muito menos manter um serviço
web ativo no seu servidor, se nem ao menos você necessita dele lá. Então, como definir políticas de
acesso aos serviços em que eu realmente necessito mante-los?
Iptables
Para entendermos o iptables, veremos como ele trabalha para então conhecermos o quê ele pode nos
proporcionar. Teremos agora, um método bem didático de explicação. Preparado??
Filter: Onde é controlado o de filtro de pacotes, basicamente, quem entra e quem sai da sua rede. É
composta por três funções:
NAT: Ela trabalha com funções de NAT (Network Address Translation), seria uma troca do endereço
de rede. As funções dela são:
• PREROUTING: Utilizada quando necessitamos tomar ações ANTES do datagrama ser roteado.
• POSTROUTING: Utilizada quando necessitamos tomar ações APÓS o roteamento do datagrama.
• OUTPUT: Utilizada quando necessitamos realizar alterações nos datagramas após eles serem
roteados.
Mangle: Trabalha com alterações especiais nos pacotes, por exemplo alterar a prioridade de um
datagrama IP, ou marcar um determinado datagrama para que ele seja trabalhado por um
roteamento especial, como sair por outro gateway. As funções dela são:
• PREROUTING: Utilizada quando necessitamos modificar os datagramas dando um tratamento
especial antes que eles sejam roteados.
• OUTPUT: Modifica especialmente os datagramas gerados pelo servidor antes que eles sejam
roteados.
Comandos do iptables
iptables: o binário
iptables-save: binário que salva as regras em memória.
ip6tables: iptables para IPv6.
iptables-restore: binário responsável carregar em memória as regras que foram salvas pelo
‘iptables-save’.
Forma de utilização:
# iptables –t nat
diz ao iptables que será usado a tabela nat
# iptables –t filter
diz ao iptables que será usado a tabela filter
# iptables –t mangle
diz ao iptables que será usado a tabela mangle
iptables -<comando> [cadeia]
Ex: iptables -A INPUT
-F chain Iptables, remova todas as regras da chain FORWARD. Nota: Se nenhuma chain
for especificada, remove as regras de todas as chains existentes, inclusive as do
usuário
Ex: iptables –Z
-Z chain
Iptables, zere os contadores de datagramas e de bytes em todas as regras da
chain especificada, ou para todas as chains se nenhuma for especificada.
Ex: iptables –N VIRUS
-N chain
Iptables, crie uma chain chamada VIRUS, utilizado para tratar diversos casos com
o mesmo ALVO.
Ex: iptables –e WORMS worms
-e chain
Iptables, renomeie a chain WORMS para worms
Ex: iptables –X WORMS
-X chain
Iptables, apague a chain WORMS, não vou mais utilizá-la. Nota: o iptables
apagará todas se não for especificada uma.
Ex: iptables –C WORMS
Ex: -p tcp.
-p
<protocolo> Iptables, é sobre o protocolo tcp! (você encontra uma tabela de protocolos em
/etc/protocol)
Ex: -i eth0, -i eth1, -i eth+ (todas eth)
-i <interface>
Iptables, controle tudo o que ENTRA (-i de INPUT) pela interface ethX . Esta regra
também se aplica a chain FORWARD.
Ex: -o eth0, -o eth1, -o eth+ (todas eth)
-o <interface>
Iptables, controle o que SAI (-o de OUTPUT). Esta regra também se aplica nas chains
FORWARD e OUTPUT
Ex: -s 192.168.0.1/24
-s <ip>
Iptables, controle o que vier da ORIGEM (-s de SOURCE) 192.168.0.1/24
Ex: -d 192.168.0.2/24
-d <ip>
Iptables, controle o que vai com DESTINO (-d de DESTINATION)
Ex: -d ! 192.168.0.2/24, ou –p ! udp
! <pacote|ip>
Iptables, com qualquer DESTINO (-d de DESTINATION) EXCETO 192.168.0.2, o
mesmo para protocolo, qualquer um exceto udp.
Ex: -j ACCEPT, -j DROP, -j REJECT, -j LOG
-j <ação>
Iptables, o que casar com as ações definidas voce vai ACEITAR, vai NEGAR,
vai REJEITAR ou vai GRAVAR.
Ex: --sport 22
--sport
<porta>
Iptables, o que for da PORTA de ORIGEM (--sport de SOURCE PORT) 22
Ex: --dport 80
--dport
<porta>
Iptables, o que for para a PORTA de DESTINO 80 (--dport de DESTINATION PORT)
DICA: Tanto para --sport quanto para --dport podemos utilizar range de portas:
Ex: --dport 6881:6889
Ou multiportas:
Ex: -m multiport --dport 5190,4000,53
Nossa! Quanta coisa hein? Se você conseguiu chegar até aqui, é sinal de que apenas passou os
olhos pelas tabelas, não!? Tome notas, leia, imprima, releia e tenha as tabelas no bolso, se entendê-
las dominará o iptables facilmente!
Agora chega de “bla bla bla” e vamos as reais situações.
A maioria das situações abaixo foram retiradas da lista linux-board do YahooGroups, a qual sempre
presto uma ajuda nas horas vagas.
Vamos tomar como exemplo a situação de rede, a quase padrão na maioria dos casos:
Mascarar conexão
E então:
Iptables, adicione na tabela nat (-t nat), após ser roteado (-A POSTROUTING):
• O que for de origem da minha rede (-s 192.168.0.0/24)
Qual o alvo, o que fazer?
• -j MASQUERADE (mascarar a conexão)
SNAT: modificação do endereço de origem das máquinas para um único IP ou faixa de IP's.
E então, fácil? Calma, veremos muitos exemplos, até você decorá-los. Vejamos uma regra:
Iptables, adicione na tabela POSTROUTING (-t nat –A POSTROUTING):
• o que vier com origem do host (-s 192.168.0.1)
• e especificamente o que sai pela rede eth0 (-o eth0)
• deverá ter seu endereço alterado (-j SNAT) para 192.168.2.12
Redirecionar conexões que entrem na porta 7155 para a porta 3389 (Terminal Service) de uma
máquina interna de sua rede.
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 7152 -j DNAT --to 192.168.0.126:3389
Quando não especificamos uma origem ou um destino (-s <IP>, -d <IP>) o iptables segue o
padrão que é ANY, ou seja, qualquer (0/0). É redundante colocarmos algo como –s 0/0 ou –d 0/0.
Note que na regra acima, deixamos explícito a porta destino do pacote, já que ele viria pela 7152 e
além de alterarmos o IP de destino, alteramos também a porta para 3389.
Há pessoas que trabalham, de cara, bloqueando tudo e liberando apenas o necessário. Há outras
que trabalham liberando tudo o que necessita e bloqueia o resto, veja, é diferente...
Note que quando se lista uma tabela do iptables (iptables –t filter –L), você vê que a política
padrão é ACCEPT:
# iptables -t filter -L
Chain INPUT (policy ACCEPT)
Há uma forma de excluir a regra pelo seu número, para listar as regras e sua ordem fazemos:
E então, excluímos:
# iptables -D FORWARD 26
“O tipo de serviço é um campo existente no cabeçalho de pacotes do protocolo ipv4 que tem a
função especificar qual é a prioridade daquele pacote. A prioridade é definida usando o algoritmo FIFO
do próprio kernel, sendo uma das alternativas de controle/priorização de tráfego das mais simples e
rápidas.
Uma das vantagens da utilização do tipo de serviço é dar prioridade ao tráfego de pacotes interativos
(como os do ICQ, IRC, servidores de chat), etc. Com o TOS especificado, mesmo que esteja fazendo
um download consumindo toda a banda de sua interface de rede, o tráfego com prioridade interativa
será enviado antes, aumentando a eficiência do uso de serviços em sua máquina.” - Guia Foca Linux.
iptables, adicione na tabela mangle (-t mangle) antes de ser roteado (-A PREROUTING):
• o que entrar pela interface eth1 (-i eth1) que for tcp (-p tcp)
• com origem da porta 22 (--sport 22) dar o máximo de processamento (-j TOS –-set-tos 16)
Você deve ter notado, na regra de DNAT láaa em cima, há uma coisinha estranha (-p tcp -m tcp) –m
tcp... o que seria isto? Módulos!
Módulos
Os módulos ampliam o poder do iptables, é uma forma de explandir ainda mais suas regras, afinal, já
somos expert em iptables!
Definimos que aceitaremos pacotes de icmp (-p icmp) tipo do ping (--icmp-type echo-request)
se eles forem recebidos apenas no limite de um segundo (-m limit --limit 1/s). Podemos ter
s, m, h, d (segundo, minuto, hora e dia).
Certo, se eu desejar bloquear estes tipos de requisições, afinal, ninguém precisa saber se estamos
vivos ou não, a regra seria ... ?
Bloquear tudo o que entrar e que seja do tipo icmp. Esta ficou fácil, não?
Mas... Como ele controla isto, a quantidade de vezes... é memória, banco de dados?
FLAG Descrição
ACK Acknowledgement. Informa ao receptor o próximo número da seqüência do pacote
SYN Syncronize. Utilizada para realizar o sincronismo dos números seqüênciais.
FIN Finalização. Flag utilizada para indicar a finalização de uma conexão
Push. Informa ao tcp que se deve enviar todos os pacotes que estejam no buffer ao
PSH
destinatário
URG Urgent. Prioridade no envio.
Para um melhor entendimento, veja:
- O Cliente envia um datagrama com a flag SYN, para o firewall, é uma nova conexão;
- O servidor recebe a requisição, e responde com a dupla SYN+ACK;
- Para o firewall, há uma conversa, estabilizou!
Bloqueia o que entrar (-A INPUT) pela interface eth1 (-i eth1) e com estado inválido (--state
INVALID).
Bloquear tudo o que for udp e que entrar por qualquer interface (-i eth+) para as portas de 33435 até
33525. Bloqueia o traceroute =)
A opção string permite-nos vasculhar o conteúdo do pacote, por exemplo, bloquear o que contém a
string Kazaa.
iptables –A INPUT –m string --string “sexo” –j LOG --log-prefix “IPTABLES: Log da string
sexo, masculino ou feminino? =)”
Dicas
Não esqueça de sempre logar e depois bloquear, sempre liberar o chefe e depois bloquear o
restante da empresa, e assim por diante, pois o iptables irá ler suas regras de cima para baixo,
sempre.
O seu arquivo de firewall nada mais é que um “shell script”, permitindo, então você fazer:
Resumão
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z
$IPTABLES -t filter -F
$IPTABLES -t filter -Z
$IPTABLES -t filter –X
$IPTABLES -t nat -A PREROUTING -p tcp -m tcp --dport 7150 -j DNAT --to 192.168.0.117:3389