Posts com Tag ‘iptables’

Vamos supor que se deseje acessar a internet de um computador (o cliente) compartilhando a conexão estabelecida por um outro computador (o gateway). No caso, as duas máquinas estão com Debian. A máquina que está com o acesso à internet funcionará como um gateway, tendo duas interfaces de rede: uma dedicada ao acesso à internet e uma outra para conectar-se à máquina cliente.

Para isto, vamos seguir os seguintes passos:
1- na máquina cliente, configurar o endereço de rede e gateway;
2- na máquina gateway, configurar o endereço de rede para servir à máquina cliente e ativar o roteamento de pacotes;
3- na máquina gateway, usar o IPTables para compartilhamento da conexão de Internet.

Passo 1 – na máquina cliente:
A interface de rede na máquina cliente será a eth0, que estará conectada por meio de um cabo metálico à máquina gateway. Para isto:
a) configure eth0 em /etc/network/interfaces da seguinte forma:
auto eth0
iface eth0 inet static
address 10.10.10.2
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
gateway 10.10.10.12

utilizando estes parametros, a interface eth0 terá endereço 10.10.10.2 e o gateway da conexão terá endereço 10.10.10.12.

b) Reinicie a interface através do comando:
# /etc/init.d/networking restart

c) Verificar a rota


$ route
Tabela de Roteamento IP do Kernel
Destino      Roteador    MáscaraGen.     Opções Métrica Ref Uso Iface
10.10.10.0     *         255.255.255.0     U      0     0     0 eth0
default    10.10.10.12    0.0.0.0          UG     0     0     0 eth0

Se o roteamento até o gateway não estiver correto, faça a correção das configurações através dos comandos:

# route del default
# route del -net 10.10.10.0 netmask 255.255.255.0
# route add default gw 10.10.10.12 dev eth0

O primeiro comando cancela a rota default anteriormente estabelecida. O segundo comando cancela a rota 10.10.10.0 anteriormente estabelecida. E o terceiro define a nova rota default por onde devem ser encaminhados os pacotes. No caso, 10.10.10.12 será o endereço da interface do gateway.

d) Fixe o DNS em /etc/resolv.conf (se necessário):
nameserver 208.67.222.222
nameserver 208.67.220.220

Passo 2 – na máquina gateway:
A interface de rede que está conectada à internet é a wlan0, ficando a interface eth0 destinada a fazer a comunicação com a máquina cliente.

a) configure eth0 em /etc/network/interfaces da seguinte forma:
auto eth0
iface eth0 inet static
address 10.10.10.12
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255

OBS:
1- não altere a configuração da outra inerface wlan0, que já está funcionando;
2- não informe endereço de gateway nesta placa que será a responsável por receber todo o tráfego do computador cliente. É assim mesmo, pois esta máquina funcinará como gateway.

b) Reinicie a interface através do comando:
# /etc/init.d/networking restart

c) Habilite o encaminhamento de pacotes:
c.1) Inserindo 1 no arquivo ip_forward:
# echo 1 > /proc/sys/net/ipv4/ip_forward

c.2) Altere o arquivo /etc/sysctl.conf, retirando o comentário da seguinte linha:

net.ipv4.ip_forward = 1

Passo 3 – na máquina gateway, usar o IPTables para compartilhamento da conexão à Internet:
a) limpar qualquer regra pré-existente no IPTables, para que se possa garantir o correto funcionamento do NAT e do encaminhamento de pacotes:

# iptables -F INPUT
# iptables -F OUTPUT
# iptables -F FORWARD
# iptables -F -t nat
# iptables -F -t mangle

Assim, limpa-se informações de entrada, saída, encaminhamento, “tradução” e alteração de pacotes.

b)
habilitar o encaminhamento de pacotes via IPTables:

# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Onde:
* -t nat – utiliza a tabela de “tradução” de endereços IP;
* -A POSTROUTING – adiciona a regra para saída de pacotes;
* -o wlan0 – especifica que a interface de saída para internet utilizada é wlan0;
* -j MASQUERADE – informa que o foco (target) da regra é o mascaramento de IP.

Links interessantes:

1- Linux: Compartilhando a conexão de internet
2- How To Masquerade On Linux (Internet Connection Sharing)
3- Firewall iptables – Guia Foca Linux, com um bom manual para aprender e tirar dúvida sobre IPtables
3- Para mais informações sobre o arquivo sysctl.conf, basta digitar o comando: # man sysctl.conf4

Anúncios

1) Entendendo um pouco os conceitos

TCP/IP é um sistema de protocolos – um conjunto de protocolos que dá suporte à comunicação em rede de computadores. As quatro camadas do modelo TCP/IP são:

  • A camada de APLICAÇÃO, com os protocolos FTP, HTTP, etc (mensagem);
  • A camada de TRANSPORTE, com seus pacotes UDP e TCP, dentre outros (segmento, se TCP, ou datagrama, se UDP);
  • A camada de REDE, responsável pelo roteamento, onde se tem o IP na sua versão 4 como mais significativo (datagrama ip);
  • A camada de ACESSO DE REDE não faz parte do modelo de camadas TCP/IP propriamente dito, pois é restrito ao fabricante da placa (frame, baseado em endereçco de HW físico).

Principais protocolos utilizados:

  • Na camada de APLICAÇÃO: não se trata exatamente de protocolos, mas de SERVIÇOS: ftp (porta 21), smtp (porta 23), tradução de nomes (DNS, porta 53), http (porta 80), pop3 (porta 110), snmp (porta 161).
  • Na camada de TRANSPORTE: TCP e UDP.
  • Na camada de REDE: IP, ARP, RARP, ICMP.
  • Na camda de ACESSO DE REDE: Ethernet, PPP, Token Ring, outras.

Firewalls tem a capacidade de bloquearem o acesso a portas TCP e UDP específicas. A palavra firewall significa fechar o acesso a uma porta.

O iptables atua em princípio nas camadas de REDE (ip de origem ou de destino) e de TRANSPORTE (porta origem e destino). No entanto, o iptables também permite atuar até mesmo na aplicação, com os devidos módulos adicionados. Ele está organizado por 3 tabelas, a saber: a tabela FILTER é onde é controlado o filtro de pacotes, basicamente, quem entra e quem sai da rede. Ou seja, contém regras que determinam se um pacote deve ser aceito ou não; a tabela NAT que trabalha com funções de NAT (Network Address Translation). Ou seja, realiza operações de tradução sobre IP e/ou porta, tanto de origem como de destino; e a tabela MANGLE que trabalha com alterações especiais nos pacotes, por exemplo, alterar a prioridade de um datagrama IP, marcar um determinado datagrama para que ele seja trabalhado por um roteamento especial, como sair por outro gateway, alterar o TTL, TOS, etc.

A tabela FILTER serve para executar três funções:

  • INPUT: Controla o que entra no servidor.
  • FORWARD: Controla o que entra no servidor mas deve ser redirecionado a uma outra máquina.
  • OUTPUT: Controla o que sai do servidor.

A tabela NAT serve para executar três funções:

  • 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.

A tabela MANGLE serve para executar as seguintes funções:

  • 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.

2) Estabelecendo as regras necessárias

Primeiro verifique se o iptables está instalado. Se não, faça sua instalação:

#apt-get install iptables

————————-Apagando as regras anteriores

iptables -F
iptables -t filter -F
iptables -t filter -Z
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F

——————————————————————–
TABELA INPUT
——————————————————————–


# permitir pacotes tcp vindos da internet para porta 22 (SSH)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
# permitir pacotes tcp vindos da internet para porta 80 (http)
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT
# aceita protocolo udp na porta 520
iptables -A INPUT -p udp --destination-port 520 -j ACCEPT
# aceita protocolo tcp nas portas superiores
iptables -A INPUT -p tcp --destination-port 1000:65535 -j ACCEPT
# aceita protocolo udp nas portas superiores

iptables -A INPUT -p udp --destination-port 1000:65535 -j ACCEPT
# tráfego de pacotes icmp que superar o limite de 2/seg será bloqueado
ptables -A INPUT -p icmp -m limit --limit 2/s -j ACCEPT
# altera a política default do chain INPUT
iptables -t filter -P INPUT DROP

——————————————————————–
TABELA OUTPUT
——————————————————————–

iptables -t filter -P OUTPUT ACCEPT

——————————————————————–
TABELA MANGLE
——————————————————————–
Define mínimo de espera para os serviço DNS. Isto dará uma melhor sensação de conexão em tempo real e diminuirá o tempo
de espera para conexões que requerem resolução de nomes.

iptables -t mangle -A OUTPUT -p udp --dport 53 -j TOS --set-tos 0x10

————————-Bloquear roteamento de pacotes

iptables -t filter -P FORWARD DROP

Registrar as tentativas indesejáveis de acesso externo ao servidor no syslog do sistema (que está em /var/log):

iptables -A INPUT -p tcp --dport 21 -j LOG --log-prefix "FIREWALL: ftp "
iptables -A INPUT -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: smtp "
iptables -A INPUT -p tcp --dport 110 -j LOG --log-prefix "FIREWALL: pop3 "
iptables -A INPUT -p tcp --dport 113 -j LOG --log-prefix "FIREWALL: identd "
iptables -A INPUT -p udp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A INPUT -p tcp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A INPUT -p tcp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba "
iptables -A INPUT -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba "

Existem dois comandos muito úteis para evitar que as configurações se percam cada vez que a máquina for reiniciada:

#iptables-save > /home/minha_home/meu_arquivo_regras.txt
#iptables-restore < /home/minha_home/meu_arquivo_regras.txt

O primeiro comando acima salva a atual política estabelecida em um arquivo texto meu_arquivo_regras. O segundo, restabelece a política a partir das definições deste arquivo texto.

Links:
1- Estrutura do iptables
2- Entenda como o funciona o sistema de log do Linux
3- Iptables rápido
4- Firewall Básico, NAT e Redirecionamento com IPTABLES