Dicas iptables - exemplos de regras.

Atualizado em: 05/10/2006



Sobre este documento

Original em formato texto com marcações para conversão em HTML, processo automatizado com scripts e txt2tags.

Resumo de comandos e regras de iptables mais utilizados, (na minha opinião e como eu uso, copiar e colar).

Dificilmente os comandos e dicas atenderão suas necessidades, muitos nem são compativeis com sua instalação ou nem servem para seu uso, tente adaptar ao seu ambiente, use como fonte de consulta e referencia.

Dicas - Solução de problemas

Tente instalar e configurar por partes, tente isolar o problema, facilita na localização do problema e solução, na manutenção ou instalação tente seguir esta ordem.

Passo 1 - Configure o servidor para navegar e pingar as maquinas da rede interna, configure as duas placas de rede e teste com ping para a rede interna e internet, prossiga com a instalação somente depois de obter respostas do comando ping para as maquinas da rede interna e navegar normalmente, quando não tem ambiente gráfico na maquina, use o lynx para testar a navegação, wget para download, outro serviço que possa testar o funcionamento da internet, ou arrisque prosseguir com o ping, no caso do ping faça testes com ping para um dominio.

Passo 2 - Compartilhe a conexão, sem firewall, somente compartilhe para testar a navegação a partir de uma estação, em lugar do firewall utilize estas regras de iptables.

  modprobe iptable_nat
  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
  echo 1 > /proc/sys/net/ipv4/ip_forward

Ajuste o device de acordo com sua rede, ppp0 como no exemplo acima para conexões via modem discado ou ADSL conectado via pppoe, conexões de ADSL com IP fixo ou obtido por DHCP o device é eth0, altere no exemplo acima para o device em uso.

Passo 3 - Configure a estação para navegar, precisa configurar o gateway e DNS, com esta configuração a estação navega sem restrição alguma, veja mais dicas sobre compartilhamento de internet em

http://www.zago.eti.br/adsl-compartilhar.txt

Somente depois que conseguir navegar a partir de uma estação, passe para a configuração do firewall.

Passo 4 - Explore os logs, não esqueça da grande fonte de informações que são registradas nos logs, no servidor abra um console e procure o que tem abaixo de /var/log, por exemplo, após configurar o Squid e implementar a regra de redirecionamento, as estações não navegam, um bom começo é analizar os logs do Squid, execute a linha de comando.

tail -f /var/log/squid/access.log

Este comando exibe no console as mensagens de log, exibe em tempo real, no momento em que estão sendo formadas, tente a navegação na estação e veja os resultados no console, até aqui fica fácil isolar o problema, se navegava antes do redirecionamento e agora não navega, já sabe onde procurar, inicie verificando se o Squid está rodando, configurações do squid, diretivas, ACL, permissões nos arquivos e diretórios utilizados pelo squid, documentação de configuração do Squid, pegue a mensagem de erro e coloque na caixa de pesquisa do Google..

Procure também nas mensagens de outros arquivos de log do sistema, qualquer dúvida volte ao inicio e vá testando passo a passo, seja um bom observador, antes de pedir ajuda, procure identificar a regra ou condição que ocorre, tente outras opções.

FAQ, dicas e indicação de material sobre log em geral.

http://www.zago.eti.br/firewall/log-iptables.txt
http://www.zago.eti.br/firewall/log.txt

Lembrando que as regras acima não tem proteção alguma, maquinas de cara para a internet precisa de um firewall minimo, os exemplos acima são regras para compartilhar e não oferece proteção, portanto precisa criar seu firewall, testar e monitorar, vejas as indicações de alguns modelos, ferramentas testes.

Criar ambiente de testes e backup da instalação

Considere criar um ambiente de testes, não adianta reclamar que não tem "verba" ou não tem maquina, não custa nada, o pouco tempo que investir agora vai lhe poupar muito mais no futuro além de evitar muitos problemas, considere um bom investimento de tempo, utilize estações da rede com instalações dual-boot.

Veja dicas de como fazer duas instalações Linux no mesmo HD, utilize estações para testes, evite em servidores embora seja possivel, passo a passo em
http://www.zago.eti.br/boot_div.txt

Dual boot Linux e windows - Aproveite e veja a dica sobre backup da instalação completa do windows na partição Linux, quando algum virus comer o windows ou precisar reinstalar, vai poupar muito tempo, basta uma simples cópia de volta para recuperar a instalação do windows, passo a passo em.
http://www.zago.eti.br/boot-dual-win-e-linux.html

Nesta estação (instalação) de testes, vai consumir somente parte do espaço do HD e nada mais, utilizando maquina que está atrás de firewall vai complicar um pouco, para não mexer na configuração atual, procure seguir uma destas opções.

A - instalar um modem discado nesta maquina de testes, lembrando que as regras de iptables são mesmas para modem discado e ADSL conectado via rp-pppoe, a única diferença pode ocorrer no device, algumas conexões utilizam o device diferente, como eth0, wlan0 ou outro, as regras são as mesmas, ajuste o device utilizado, modem discado utiliza "ppp0".

Nada de hardmodem ou sofisticação, pra testes pode utilizar aqueles modem on-board que já vem de brinde em algumas maquinas, atende muito bem, pode ser um AMR PCtel, instala facilmente na maioria das distros, complica um pouco com atualização do kernel mas tem solução, não precisa de placa de rede adicional, a única diferença fica por conta do device e lentidão.

Prontinho, com este micro conectado na net, use uma estação conectada a ele, pode usar um cabo crossover para trabalhar totalmente isolado das demais maquinas.

Pode até ser usado quando cai o link ou ADSL, embora muito mais lento permite acesso à internet enquanto o ADSL não volta.

Daqui pra frente só depende da sua criatividade para explorar as duas redes, porque não usar mais duas maquinas para criar mais uma conexão para testes com VPN, outros serviços de rede, outras distros ou novas versões, só depende de ti!.

B - Quem pode fazer os testes fora do horario de expediente ou quando a internet não está em uso, nestes casos considere duas ou mais instalações do Linux no mesmo HD ou usar outro HD na maquina, isto permite todo tipo de teste sem comprometer a instalação que funciona, quando terminar os testes, volta facilmente ao estado que era antes.

C - Utilizando estação com dual-boot e duas placas de rede, quando o cabo do modem não alcaça a maquina de testes, para não levar o micro até o local do modem, ou para não levar o modem até o local do micro, faça um cabo de rede para ligar o ADSL a este micro de testes, normalmente é um cabo crossover, utilize emendas RJ45 ou cabo especifico e do tamanho necessário, lembre que isto deve fazer parte do seu kit de sobrevivencia, utilize também para testes de atualização dos pacotes e outros fins, considere manter como backup do firewall, qualquer problema com a maquina principal, basta trocar o cabo de micro.

Existem outras opções, os exemplos acima servem como base para pensar no assunto, observe o que tem à sua volta, seja criativo e mãos à obra.

Lembre que não precisa repetir todo o processo na maquina principal, simplesmente faça copia do script e arquivos de configuração.

Considere manter esta instalação como backup, em casos de emergencia, nunca se sabe quando vai ocorrer acidentes, queimar a maquina, HD ou uma pane na configuração que pare tudo, nestas situações basta alterar o IP que as estações nem ficam sabendo da troca, em menos de um minuto se faz a troca do IP e sobe a segunda maquina do firewall.

Porque não pensei nisso antes!

Resumo - Dicas - Comandos de uso frequente...

Salvar regras em arquivo; iptables-save > meufire.txt

Carregar configurações que salvou com iptables-save > meufire.txt use iptables-restore < meufire.txt

Listar no console as regras em uso; iptables -L

Salvar em arquivo; iptables -L > listmeufire.txt

Configuração via ambiente gráfico e remotamente

webmin tem modulo especifico sobre iptables/firewall e outros recursos..., Veja mais sobre webmin, como acessar remotamente e outras dicas em
http://www.zago.eti.br/webmin.txt
SSH - Considere o uso do ssh, permite executar aplicativos do ambiente gráfico remoto, tem varios aplicativos para windows, tanto em ambiente gráfico como texto (shell) é a mais segura e melhor ferramenta para acesso remoto, altamente configurável.

Acesso remoto via ssh em ambiente gráfico, cliente windows utilizando - Winscp - putty - Freenx - tutorial em
http://www.zago.eti.br/ssh/ssh-gui.html

FAQ, instalar, configurar, dicas e exemplos de uso do SSH em
http://www.zago.eti.br/ssh/ssh.html
http://www.zago.eti.br/ssh/ssh.txt
Edição de script, utilize editores simples, no shell local ou em conexões remotas via ssh, utilize o editor "vi" ou "mc", veja dicas sobre eles em.
http://www.zago.eti.br/vi.txt
http://www.zago.eti.br/mc.txt
Arquivos de configuração podem ser editados e manipulados com simples editor de texto, seja para fazer toda a configuração ou simples ajustes, pode utilizar ferramentas como webmin e refinar os ajustes com seu editor de texto preferido, pode copiar estes arquivos de outra instalação, portanto fique à vontade para fazer a seu modo, veja mais dicas de como manipular arquivos de configuração em
http://www.zago.eti.br/modelos/A-menu-modelos.html

Iniciar, parar, reiniciar, status

Comandos úteis

Onde ficam as regras de iptables

Em scripts precisa informar o caminho completo para chamar o Iptables. Dependendo da distro ou versão, pode estar em locais diferentes, utilize o comando whereis para localizer, exemplo.

  [zago@aula zago]$ whereis iptables
  iptables: /usr/sbin/iptables

COMO INICIAR (CARREGAR) O MODULO IPTABLES? Coloque no inicio do script o comando correspondente a cada modulo, carregue somente os modulos necessários.

Como fazer NAT (compartilhar internet) modprobe iptable_nat

INSTALAR: qualquer regra de firewall que utilize Iptables requer a instalação do modulo ou compilar o kernel com ele embutido, prefira trabalhar com modulos, este procedimento é adotado pela maioria das distros.

Dependendo do perfil de instalação, pode incluir o não este modulo, use as ferramentas de sua distro para conferir se já está instaladou ou instalar quando for o caso.

Alguns exemplos via linha de comando, precisa tornar root no console para instalar pacotes;

Instalar via apt-get apt-get install iptables

Via smart. smart install iptables

Via Synaptic, procure, selecione e instale o pacote iptables.

Via rpm a partir do diretório onde salvou ou download ou montou o CD, rpm -ivh iptables-versão.rpm --replacepkgs

Como ver se está instalado? Use a ferramenta de sua distro, exemplo no CL9, via synaptic procure pelo pacote iptables ou via rpm, exemplo:

# rpm -qa | grep iptables iptables-1.2.7a-26694cl

ajuda: iptables -h

Iptables não foi iniciado, execute antes o comando ou inclua no rc.local:

modprobe ip_tables

modulos e ajuda

IPtables pode ser compilado com diversas bibliotecas.

Precisa carregar o modulo antes da regra que o utiliza, o local pode ser diferente conforme a distro, no SUSE 10.1 procure em /sys/module/, tente filtrar os modulos sobre iptables com ls -la /sys/module/ip*

Quando falhar o comando, procure identificar se foi compilado com a biblioteca ou terá que compilar seu iptables novamente.

Copia de parte de um firewall, (carregar modulos)

  ##### carregar modulos
  /sbin/modprobe iptable_nat
  /sbin/modprobe ip_conntrack
  /sbin/modprobe ip_conntrack_ftp
  /sbin/modprobe ip_nat_ftp
  /sbin/modprobe ipt_LOG
  /sbin/modprobe ipt_REJECT
  /sbin/modprobe ipt_MASQUERADE

Obter ajuda sobre opções do iptables,

iptables -h

iptables --help

ajuda sobre mac

iptables -m mac --help

log do iptables

Para registrar as ocorrencias em log precisa carregar o ipt_LOG, no inicio do firewall ou antes de regra acrescente.

/sbin/modprobe ipt_LOG

Exemplo de uma regra para registrar log de todos acessos na porta 80, identificar o registro com "FIREWALL: http: ".

  $iptables -A INPUT -p tcp --dport 80 -i $EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: "

Esta regra registra as ocorrencias em /var/log/firewall, cada acesso tem um registro neste formato.

  Jun 15 19:20:15 linux-speedy kernel: FIREWALL: http: IN=eth0 OUT= MAC=00:02:e3:0f:0b:26:00:04:16:00:c0:54:08:00 SRC=201.68.202.124 DST=200.204.198.164 LEN=44 TOS=0x00 PREC=0x00 TTL=252 ID=2 PROTO=TCP SPT=33049 DPT=80 WINDOW=7957 RES=0x00 SYN URGP=0
  

Use tail ou outra ferramenta para acompanhamento ou filtro.

veja os resultados de:

iptables -t filter -L INPUT

iptables -L INPUT -n

Dicas sobre log do sistema.
http://www.zago.eti.br/log.html

Como fazer um script (firewall) com regras de iptables

Tem sites que auxiliam na criação de script, segue algumas indicações.

Iptables script generator
http://www.linuxit.com.br/modules.php?name=Tux_BR_Iptables

Algumas dicas.

Em testes as regras podem ser executadas na linha de comando, mas isto tem um incoveniente, toda vez que reinicar a maquina as regras se perdem, o ideal e executa-las junto com o boot da maquina.

Quando for poucas regras pode acrescenta-las no final do script de inicialização, no CL é o rc.local que fica em /etc/rc.d/rc.local, este local muda conforme a distro, veja o local correto em sua instalação.

A maneira mais elegante é criar um script com as regras de firewall, torne-o executavel e acrescente no final de /etc/rc.d/rc.local, uma linha para executar o script junto com boot da maquina, exemplo para executar o script com nome iptfirewall.sh que está no sub-diretório /etc/rc.d, basta acrescentar no final de rc.local, esta linha:

/etc/rc.d/iptfirewall.sh

Como criar script, dicas, exemplos e documentação.

http://www.zago.eti.br/script/A-menu-scripts.html

Modelo 1 - compartilhar internet sem firewall

Este topico (MODELO 1) não é um firewall, são somente regras pra compartilhar uma conexão, ideal em testes de instalação e solução de problemas quando suspeitar de regras do firewall, com estas regras a maquina fica totalmente vulneravel a invasão, veja neste documento outros modelos com indicação da segurança.

Compartilhar uma conexão de internet para os demais micros da rede, precisa no minimo destas regras:

      modprobe iptable_nat
      iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
      echo 1 > /proc/sys/net/ipv4/ip_forward

Explicando:

A primeira linha carrega o modulo pra fazer NAT. A segunda linha faz o mascaramento a tercera linha ativa o IP forward, repasse de pacote pras demais maquinas da rede interna, veja mais exemplos abaixo.

Conexão via modem discado ou ADSL com IP dinamico que requer rp-pppoe, nestas conexões a interface é ppp0, segue o exemplo com ppp0

      modprobe iptable_nat
      iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
      echo 1 > /proc/sys/net/ipv4/ip_forward

Conexão via ADSL com IP fixo e outras conexões que utiliza a interface eth0.

      modprobe iptable_nat
      iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      echo 1 > /proc/sys/net/ipv4/ip_forward

A diferença entre as duas regras acima é a interface de saida pra internet, eth0 ou ppp0

Existem outras regras e maneiras, nos proximos exemplos tem mais exemplos sobre uso da regra com NAT.

a tercera linha ativa o IP forward, repasse de pacotes para as demais maquinas da rede interna.

Outras maneiras de ativar o mesmo serviço (acionar o IP forwarding).

alterar em /etc/sysctl.conf, de

net.ipv4.ip_forward = 0

para

net.ipv4.ip_forward = 1

Ou altere em /etc/sysconfig/network, de

# FORWARD_IPV4=no # not used anymore. see /etc/sysctl.conf

para

FORWARD_IPv4="yes"

Lembre que somente uma deverá ser utilizada, prefiro acrescentar no escript esta regra:

echo 1 > /proc/sys/net/ipv4/ip_forward

e não utilizo as outras mencionadas acima.

Conferir se repasse está habilidade (forward), execute:

cat /proc/sys/net/ipv4/ip_forward

Exemplo de comando e o que retorna quando habilitado.

  [zago@faq zago]$ cat /proc/sys/net/ipv4/ip_forward
  1

Retornando 1 está habilitado, retornando zero não está habilitado, caso tenha dado o comando para fazer forward e no resultado acima está retornando 1, então tem algum erro, provavel erro de digitação.

regras do mascaramento cat /proc/net/ip_masquerade

ver as regras do iptables iptables --list -n -v

iptables --list

iptables -L

Regra para barrar um IP especifico acrescente a linha abaixo em seu script depois do ip_forward:

/usr/bin/iptables A -OUTPUT -p tcp -s IPBLOQUEADO -j DROP

Redirecionamento - regras por porta, IP e etc..

Existem diversas opções e regras para redirecionar um pedido que chega da internet para chegar a uma estação ou servidor que estão atrás do firewall. Segue alguns exemplos;

Redirecionar ssh, tudo que chega na porta 22 (usada pelo ssh) redirecionar para a estação com IP 192.168.1.53

$iptables -t nat -A PREROUTING -p tcp -s 0/0 --dport 22 -i eth0 -j DNAT --to 192.168.1.53:22
Onde:
eth0 = placa de rede de cara pra net, ajuste na sua instalação
22 é a porta que quero redicionar pra outra maquina (22 é a porta default utilizada nas conexões por ssh), pode ser alterada.
192.168.1.53 é o IP reservado da maquina interna que vai atender a conexão.

Na maquina remota (internet) a conexão é disparada para o IP do firewall, a regra acima redireciona para a estação, um exemplo de linha de comando para conexão via ssh;

ssh user@IP, ou ssh zago@200.200.200.200, quando este pedido chega no Firewall com IP 200.200.200.200 é automaticamente redirecionado para a estação com IP 192.168.1.53 que atenderá o pedido e completará a conexão.

$iptables -t nat -A PREROUTING -p tcp -s 0/0 --dport 22 -i eth0 -j DNAT --to 192.168.1.53:22

Outra opção, usar porta diferente no cliente, assim pode redirecionar cada porta para estações especificas, também pode redirecionar com troca de porta, neste exemplo a 2222 será redirecionada para 22, nesta regra vai redirecionar para a estação, somente os pedidos que chegam na porta 2222, os demais pedidos na porta 22 ou outra qualquer serão tratados por outras regras.

$iptables -t nat -A PREROUTING -p tcp -s 0/0 --dport 2222 -i eth0 -j DNAT --to 192.168.1.53:22

Pode configurar o ssh para ouvir em outra porta, ou até mesmo manter a default, neste exemplo foram mantidas, tanto o firewall como estação estão ouvindo na porta 22, o uso da porta 2222 foi utilizando somente na linha de comando e na regra de iptables, a regra de redirecionamento funciona somente para os pedidos que chegam na porta 2222, a linha de comando na internet tem que indicar a porta, exemplo;

ssh -p 2222 zago@200.200.200.200

o (-p 2222) serve para indicar a porta, os pedidos que chegarem na porta 22 seguem outras regras, pode ser redirecionada para outra maquina ou atendida pela própria maquina do firewall.

Restringindo o redirecionamento somente a determinado IP, permitindo que somente conexões com origem no IP 200.204.198.164 sejam redirecionadas para a estação, qualquer conexão com origem em IP diferente não serão redirecionadas, exemplo da regra;

$iptables -t nat -A PREROUTING -p tcp -s 200.204.198.164 --dport 2222 -i eth0 -j DNAT --to 192.168.1.3:22

Como pode notar, são varias opções, nem todos os serviços permitem a troca da porta, alguns requer regras mais complexas, mas sempre tem meios de dificultar o acesso de estranhos, mesmo sobre ssh tem muito mais.

Somente voce sabe o que tem a proteger, portanto implemente as medidas de segurança, a finalidade aqui é dicas sobre redirecionamento, sobre segurança e outras dicas, continue pesquisando....

Para facilitar a organização por assunto, algumas regras estão no FAQ especifico sobre o pacote ou serviço, como exemplo, as regras de redirecionamento sobre VNC estão no FAQ sobre VNC, Bittorrent idem, consulte o tutorial ou FAQ especifico. Veja algumas indicações abaixo.

FAQ com mensagens da Linux-br
http://www.zago.eti.br/firewall/redirecionamento.txt

VNC - redirecionar pedidos que chegam da internet para estação atras de firewall
http://www.zago.eti.br/vnc.txt

Bittorrent - regras para habilitar acessarem à rede
http://www.zago.eti.br/bittorrent.html

Indicações...

Documentation about the netfilter/iptables project
Tem alguns documentos em Português.
http://www.netfilter.org/documentation/

L7-filter - classifica pacotes como Kazaa, HTTP, Jabber, Citrix, Bittorrent, FTP, Gnucleus, eDonkey2000, etc., identifica e permite criar regras de firewall, veja mais em;
http://l7-filter.sourceforge.net/
Excelente tutorial, vale a pena consultar - (em Inglês)
http://iptables-tutorial.frozentux.net/iptables-tutorial.html
Página principal sobre iptables e firewall.
http://www.zago.eti.br/A-menu-firewall.html

Acesso aos FAQ montado com seleção de respostas esclarecedoras na lista Linux-br.
http://www.zago.eti.br/firewall/

Pááina principal deste site (FAQ)
http://www.zago.eti.br/menu.html