Iptables com nat, prioridade de pacotes e bloqueio de portas

Publicado por tiago cesar de lima (última atualização em 08/07/2010)

[ Hits: 12.938 ]

Download script_vol




Boas pessoal. Esse é meu primeiro firewall e gostaria da opinião de vocês.

Meu cenário é uma empresa com até 25 funcionários. A intenção do iptables é fazer nat, prioridade de pacotes e bloqueio de portas. Os bloqueios a sites vou deixar com o Squid mais pra frente.

Abraços!

  



Esconder código-fonte

#!/bin/sh
#Script Firewall.
#Desenvolvido por Tiago Cesar de Lima com ajuda de vários artigos do VOL

echo "Bom dia Sentinela. E hora de Acordar"
sleep 1

echo "Limpa todas as regras"
sleep 1
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

echo "Exclui chains criadas"
sleep 1
iptables -t filter -X
iptables -t nat -X
iptables -t mangle -X

echo "Zera contador"
sleep 1
iptables -t filter -Z
iptables -t nat -Z
iptables -t mangle -Z

echo "Ativando trafego loopback"
sleep 1
iptables -A INPUT -i lo -j ACCEPT

echo "Ativando módulo NAT"
sleep 1
/sbin/modprobe iptable_nat

echo "Realizando NAT"
echo "Todo pacote transmitido pela rede eth0 sairá com um mesmo IP"
sleep 1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo "Ativando IP Forward (Redirecionamento)"
echo 1 > /proc/sys/net/ipv4/ip_forward
sleep 1

echo "Prevencao a ataques diversos"

echo "Ligando proteção para SYN flood. Deve ser feita em todos os servidores"
sleep 1
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

echo "Prevencaoo a Ping da Morte"
sleep 1
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

echo "Desabilitando resposta de Ping pela internet"
sleep 1
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-request -j DROP

echo "Descartando pacotes suspeitos ou danificados"
sleep 1
#iptables -A FORWARD -m unclean -j DROP
#iptables -A INPUT -m unclean -j DROP
#Essa fica para os especialistas me ajudarem!!

echo "Scanners Ocultos (Shealt Scan)"
sleep 1
iptables -A INPUT -p tcp --tcp-flags SYN, ACK -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN, ACK -j DROP

echo "Toda requisição que vier da rede interna sera aceita"
sleep 1

iptables -A INPUT -i eth1 -p tcp --syn -s 192.168.0.0/24 -j ACCEPT

echo "Toda requisição que vier da rede wireless será aceita"
sleep 1
iptables -A INPUT -i eth2 -p tcp --syn -s 192.168.1.0/24 -j ACCEPT

echo "Não-roteamento de pacotes da interface eth2 (Wireless) para eth1 (Rede Interna)"
sleep 1
# Rede 192.168.0.0 --> Rede Fisica (Cabeada)
# Rede 192.168.1.0 --> Rede Wireless
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j REJECT

echo 'OK, você conseguiu fazer o NAT, mas ainda precisa'
echo "liberar algumas coisinhas certo? "
sleep 1

echo "Liberando portas de acesso:"
sleep 1

echo "Porta SSH (39800) e gravando logs"
sleep 1
# Roteador de Casa 
iptables -A INPUT -p tcp --dport 39800 -m-mac --mac-source xx:xx:xx:xx:xx:xx -j LOG --log-level 6 --log-prefix "ssh_h"
iptables -A INPUT -p tcp --dport 39800 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT

echo "Placa de rede eth0"
sleep 1
iptables -A INPUT -p tcp --dport 39800 -m mac --mac-source xx:xx:xx:xx:xx:xx -j LOG --log-level 6 --log-prefix "ssh_e"
iptables -A INPUT -p tcp --dport 39800 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT

echo "Placa de Rede Wireless"
sleep 1
iptables -A INPUT -p tcp --dport 39800 -m mac --mac-source xx:xx:xx:xx:xx:xx -j LOG --log-level 6 --log-prefix "ssh_w"
iptables -A INPUT -p tcp --dport 39800 -m mac --mac-source xx:xx:xx:xx:xx:xx  -j ACCEPT

echo "Porta 80 (http) e 443 (https)"
sleep 1
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

echo "NAT para Squid"
sleep 1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3128

echo "Porta 21 (ftp)"
sleep 1
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
   
echo "Liberando Porta 25 (smtp) e fazendo NAT para provedor de e-mail (porta smtp padrão 26)"
sleep 1
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 26

echo "Porta 110 (pop)"
sleep 1
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

#Liberando Porta RDP (3989) e fazendo Redirecionamento do Protocolo para o Host
#iptables -t nat -A PREROUTING -p tcp --dport 39897 -i eth0 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to-destination 192.168.0.302:3989
#iptables -t nat -A PREROUTING -p tcp --dport 39898 -i eth0 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to-destination 192.168.0.301:3989
#iptables -t nat -A PREROUTING -p tcp --dport 39899 -i eth0 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to-destination 192.168.0.300:3989

####Prioridade de serviços ####

echo "Muito bem, agora vamos dar prioridade aos servicos, afinal de"
echo "contas, e muito mais importante falar com a mamae no telefone do"
echo "que ficar baixando filminhos nao e ?"

sleep 1

echo "Definindo Espera Mínima a pacotes VoiP --> preciso pegar as configurações"
sleep 1
iptables -t mangle -A PREROUTING -d meuprovedorvoip.com.br -j ACCEPT
iptables -t mangle -A FORWARD -d meuprovedorvoip.com.br -j ACCEPT
iptables -t mangle -A PREROUTING -d meuprovedorvoip.com.br -j TOS --set-tos 16
iptables -t mangle -A FORWARD -d meuprovedorvoip.com.br -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p udp --dport xxxx -j ACCEPT
iptables -t mangle -A FORWARD -p udp --dport xxxx -j ACCEPT
iptables -t mangle -A PREROUTING -p udp --sport xxxx -j TOS --set-tos 16
iptables -t mangle -A FORWARD -p udp --sport xxxx -j TOS --set-tos 16
iptables -t mangle -A PREROUTING -p udp --sport xxxx -j ACCEPT
iptables -t mangle -A FORWARD -p udp --sport xxxx -j ACCEPT
iptables -t mangle -A PREROUTING -p udp --dport xxxx -j TOS --set-tos 16
iptables -t mangle -A FORWARD -p udp --dport xxxx -j TOS --set-tos 16

echo "Definindo Maximo Processamento a pacotes http e https"
sleep 1
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j TOS --set-tos 8
iptables -t mangle -A FORWARD -p tcp --sport 80 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TOS --set-tos 8
iptables -t mangle -A FORWARD -p tcp --dport 80 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -p tcp --sport 443 -j TOS --set-tos 8
iptables -t mangle -A FORWARD -p tcp --sport 443 -j TOS --set-tos 8
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j TOS --set-tos 8
iptables -t mangle -A FORWARD -p tcp --dport 443 -j TOS --set-tos 8

echo "Definindo Maxima Confiança a e-mails (SMTP e POP3)"
sleep 1
iptables -t mangle -A PREROUTING -p tcp --dport 110 -j TOS --set-tos 4
iptables -t mangle -A FORWARD -p tcp --dport 110 -j TOS --set-tos 4
iptables -t mangle -A PREROUTING -p tcp --sport 110 -j TOS --set-tos 4
iptables -t mangle -A FORWARD -p tcp --sport 110 -j TOS --set-tos 4
iptables -t mangle -A PREROUTING -p tcp --sport 26 -j TOS --set-tos 4
iptables -t mangle -A FORWARD -p tcp --sport 26 -j TOS --set-tos 4
iptables -t mangle -A PREROUTING -p tcp --dport 26 -j TOS --set-tos 4
iptables -t mangle -A FORWARD -p tcp --dport 26 -j TOS --set-tos 4

echo "Definindo Custo Minimo a downloads"
sleep 1
iptables -t mangle -A PREROUTING -p tcp --sport 21 -j TOS --set-tos 2
iptables -t mangle -A FORWARD -p tcp --sport 21 -j TOS --set-tos 2
iptables -t mangle -A PREROUTING -p tcp --dport 21 -j TOS --set-tos 2
iptables -t mangle -A FORWARD -p tcp --dport 21 -j TOS --set-tos 2

echo "Bloqueando tudo"
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

echo "-------->> Sentinela Ativo: Iptables On <<--------"

sleep 2


Scripts recomendados

Atualizar status do Twitter pelo terminal

RPM para conexão PPPOE

Bloquear pelo Hosts

Criar grupos e usuários

Exemplo de Shell-Script


  

Comentários
[1] Comentário enviado por joorlando3 em 09/07/2010 - 08:33h

Bom dia! eu trocaria a linha que ativa o proxy da porta 80:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

para:

iptables -t nat -A PREROUTING -i eth0 -p tcp -d ! 200.201.174.207 --dport 80 -j REDIRECT --to-port 3128

sendo que o ip 200.201.174.207 o ip da conectividade social, já que a conectividade social não funciona se a conexão passar por um proxy, a regra acima faz que o acesso a conectividade social esteja disponível a qualquer micro da rede, mas a há outras formas de resolver esse problema, agora se ninguém acessa o serviço da Conectividade Social da Caixa Federal na sua rede desconsidere essa mensagem.

[2] Comentário enviado por irado em 09/07/2010 - 15:30h

quando vc limpa as regras o iptables vai para um modo - podemos chamar default - de politicas: TUDO ACCEPT. A partir daí, mano, o que importa os seus comandos -j ACCEPT? tá tudo arrombado mesmo...

o habitual (pelo menos do pessoal que conheço) é vc DROP tudo como politica pré-estabelecida e daí ACCEPT só o que é necessário/adequado. O que não for definido por vc como ACCEPT vai pra vala.

[3] Comentário enviado por removido em 09/07/2010 - 18:37h

o irado está certo, falta atribuir a política padrão do firewall.
Thiago, se quiser dar uma olhada do meu firewall acessa aqui o meu blog:
http://blog.cesar.augustus.nom.br:8081/instalando-o-firewall-no-linux.html

[4] Comentário enviado por overlock em 12/07/2010 - 09:50h

bom pessoal, a idéia é que, o iptables atribui regras em ordem estruturada, como um programinha em pascal ou c/c++. como no final do arquivo eu to dando DROP em todos os arquivos que entrarem e saírem, se eu não colocar os -j ACCEPT eu bloqueio tudo, inclusive o que preciso acessar.

Valeu os comentários! ajudaram bastante aqui!

Abraços!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts