Iptables com nat, prioridade de pacotes e bloqueio de portas

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

[ Hits: 11.992 ]

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

Script para média anual de aluno

Script para realizar atualização automática do flash player

Twitter via https pelo terminal

Criando usuário no sistema operacional Debian 8

checa_servicos.sh


  

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts