Script para o netfilter (iptables)

Publicado por Vanderson C. Siewert em 22/11/2005

[ Hits: 11.706 ]

 


Script para o netfilter (iptables)



Utilizando o iptables, elaborei um script para rodar na inicialização da máquina, para que não tenha que rodar todos os processos na mão e para fazer isto de forma mais automatizada.

Função do script:
  • Habilita o roteamento entre as interfaces de rede, para um servidor de acesso a Internet, carregando os módulos necessários para a execução do script.
  • Limpa primeiramente as tabelas filter e nat, depois irá negar todo o tráfego das interfaces de rede, permitindo as conexões na interface localhost (loopback) para serviços que o servidor venha a rodar, e depois libera acesso a interface da rede local (LAN) com a liberação de alguns protocolos e portas de comunicação em cima dos protocolos icmp, udp e tcp.
  • Exemplifica como estipular regras para que a conexão ao firewall se dê somente por uma única máquina na rede, que vai ser controlado pelo MAC Address desta máquina.
  • Libera acesso para a interface da Internet, com algumas portas específicas (DNS:53, http:80 e SMTP:25).
  • Permite a saída da rede interna, habilitando o módulo state e também o mascaramento.
  • Permite a entrada para a rede interna, caso seja necessário, colocar senão desconsidere esta parte.
  • Habilita a proteção contra o ping da morte.
  • Habilita a geração dos logs na tela do console.

Laboratório:

Este script é para se ter uma base, não é nenhuma receita de bolo. Cada firewall terá sua particularidade. Utilizei em meu laboratório o Fedora Core 4.0 com o kernel 2.6.

Abaixo, segue o script:

#!/bin/bash

echo
echo " Iniciando o FIREWALL"
echo
sleep 1

echo " Definindo variáveis"

IPTABLES="/usr/sbin/iptables"
INTERNA="192.168.0.1" # IP da placa interna
EXTERNA="10.1.1.3" # IP da placa externa
REDEINTERNA="192.168.0.0/24" # rede interna
REDEEXTERNA="10.1.1.0/24"
#echo " Habilitando o forward entre as interfaces"
#sleep 1
#echo "1" > /proc/sys/net/ipv4/ip_forward # habilitando o roteamento

echo " Carregando os módulos necessários"
sleep 1
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_tables

echo " Limpando as regras da tabela nat"
sleep 1
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t nat -Z

echo " Limpando as regras da tabela filter"
sleep 1
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z

echo " Definindo as polices"
sleep 1
$IPTABLES -P INPUT DROP # drop nega tudo
$IPTABLES -P FORWARD DROP # ninguem passa pelo firewall

echo " Permitindo conexoes loopback"
# Liberando acessos para o próprio micro
sleep 1
$IPTABLES -A INPUT -s 127.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -s $EXTERNA -j ACCEPT
$IPTABLES -A INPUT -s $INTERNA -j ACCEPT

echo " Permitindo conexoes para a placa interna"
sleep 1

$IPTABLES -A INPUT -d $INTERNA -p icmp -j ACCEPT # aceita ping
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 80 -j ACCEPT # http WEB
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 443 -j ACCEPT # https
$IPTABLES -A INPUT -d $INTERNA -p udp --dport 53 -j ACCEPT # dns
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 53 -j ACCEPT # dns
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 25 -j ACCEPT # SMTP
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 110 -j ACCEPT # POP3
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 143 -j ACCEPT # imap
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 143 -j ACCEPT # imap
$IPTABLES -A INPUT -d $INTERNA -p udp --dport 3128 -j ACCEPT # proxy
$IPTABLES -A INPUT -d $INTERNA -p tcp --dport 3128 -j ACCEPT # proxy

echo " Permitindo conexoes para a placa externa"
sleep 1
# Permitindo o acesso da internet para o firewall
$IPTABLES -A INPUT -d $EXTERNA -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 25 -j ACCEPT
$IPTABLES -A INPUT -d $EXTERNA -p tcp --dport 80 -j ACCEPT

# Exemplo de conexão para a placa de rede externa via MAC Address
# $IPTABLES -A INPUT -d $EXTERNA -m mac --mac-source 00:10:DC:55:D6:A9 -p tcp --dport 22 -j ACCEPT

# Exemplo de uma máquina externa (modem) para acessar a placa externa de
# um único endereço externo não para toda a Internet
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 20 -j ACCEPT
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 21 -j ACCEPT
# $IPTABLES -A INPUT -s 10.1.1.1 -d $EXTERNA -p tcp --dport 22 -j ACCEPT


echo " Habilitando statefull"
sleep 1

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

echo " Permitindo a saida da rede interna"
sleep 1

$IPTABLES -A FORWARD -s $REDEINTERNA -p icmp -j ACCEPT
# Libera web
$IPTABLES -A FORWARD -s $REDEINTERNA -p tcp --dport 80 -j ACCEPT
# Sem proxy
$IPTABLES -A FORWARD -s $REDEINTERNA -p udp --dport 80 -j ACCEPT

echo " Habilitando o masquerade"
sleep 1
# Habilitando o mascaramento

$IPTABLES -t nat -A POSTROUTING -s $REDEINTERNA -j MASQUERADE

echo " Permitindo a entrada para a rede interna"
sleep 1
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 3389 -j ACCEPT
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 20 -j ACCEPT
$IPTABLES -A FORWARD -d 192.168.0.1 -p tcp --dport 21 -j ACCEPT

echo " Redirecionando portas do Firewall para Web Server e FTP Server"
sleep 1
# NAT reverso

$IPTABLES -t nat -A PREROUTING -d $EXTERNA -p tcp --dport 3389 -j DNAT --to 192.168.0.1
$IPTABLES -t nat -A PREROUTING -d $EXTERNA -p tcp --dport 20 -j DNAT --to 192.168.0.1
$IPTABLES -t nat -A PREROUTING -d $EXTERNA -p tcp --dport 21 -j DNAT --to 192.168.0.1

echo " Protecao contra ping da morte"
sleep 1

$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

echo " Gerando Logs"
sleep 1
$IPTABLES -A INPUT -d $INTERNA -j LOG
$IPTABLES -A INPUT -d $EXTERNA -j LOG
$IPTABLES -A FORWARD -s $REDEINTERNA -j LOG
$IPTABLES -A FORWARD -d $REDEINTERNA -j LOG
Outras dicas deste autor

Problemas com o Squid 2.5 no Fedora Core 4

Leitura recomendada

Criar lançador para o Grafix2

Shell script com Kdialog

Monitoramento de link de internet de servidores

Screenshot usando o terminal

Instalador Skype automatizado - Zenity

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts