Projetinho de firewall

Publicado por Alexandre Bargiela 01/09/2007

[ Hits: 9.490 ]

Download firewall-project.tar.gz




Pessoal, eu juntamente com um amigo, o Leandro, estávamos criando esse projeto para facilitar a adição de regras de firewall para usuários leigos e por questão de tempo dei uma paradinha.

Se vocês quiserem ajudar com idéias ou implementações, eu agradeço.

Abraço a todos e espero ter ajudado.

Obs.: Execute o main para funcionar.

  



Esconder código-fonte

OBS.: Eu apenas adicionei aqui o que tem em cada arquivo, caso você tente copiar esse arquivo e jogar em um arquivo só não irá funcionar, a não ser que você faça implementações para isso, para executar ele corretamente, baixe o arquivo .tar descompacte e execute a main, da seguinte forma  sh  main


#!/bin/bash

. inputOutputForward
. prerouting
. postrouting
function addRegra(){

clear
echo "Escolha a tabela a ser usada"
echo ""
echo "1 - INPUT/OUTPUT/FORWARD (Ao escolher INPUT você estará liberando a ENTRADA ou SAÃDA ou ENCAMINHAMENTO de qualquer pacote na porta/endereço liberada em seu computador.)"
echo ""
echo "2 - PREROUTING (Ao escolher PREROUTING vc estará redirecionando de seu IP válido para uma máquina da sua rede interna um serviço que ela deseje disponibilizar.)"
echo ""
echo "3 - POSTROUTING (Ao escolher POSTROUTING vc estará mascarando a saida de um IP frio de sua maquina/rede para sair com o IP válido e roteavel na internet.)"
read TABLE

#Faz o tratamento se o valor for maior que o de opções existentes para a escolha
#ele para
echo ""

if [  $TABLE -gt 3 ]; then
        echo "Você deve digitar uma opção válida de 1 à 5";
fi

if [ $TABLE -eq 1 ]; then
        inputOutputForward;

        elif [ $TABLE -eq 2 ]; then
        escolhePrerouting;

        elif [ $TABLE -eq 3 ]; then
        postrouting;
fi
}
#!/bin/bash
. wizard;
. addRegra;
. sair;

function escolha(){
clear
echo "O que você deseja fazer?"
echo ""
echo "1 - Wizard [Configure seu firewall rapidamente]"
echo "2 - Adicionar uma regra [ Adicione regras de ENTRADA/SAIDA/ENCAMINHAMENTO/MASCARAMENTO/REDIRECIONAMENTO ]"
echo "3 - Sair"
read OPCAO

if [ $OPCAO -eq 1 ]; then
        wizard;

        elif [ $OPCAO -eq 2 ]; then
        addRegra;

        elif [ $OPCAO -eq 3 ]; then
        sair;
fi
}#!/bin/bash
function execWizard(){
clear

ipt=/sbin/iptables
echo "O wizard vem com a politica DEFAULT DROP, ou seja ele bloqueia todas as portas e você pode usar esse mesmo script para ir liberando elas."
echo ""
echo "Adicione seu IP válido, caso não saiba consulte em www.meuip.com.br [obs.: Se seu IP é dinâmico, essas regras valerão apenas até o IP ser alterado.]"
read eth1


$ipt -P FORWARD DROP
$ipt -P INPUT DROP
$ipt -P OUTPUT DROP

#libera localhost para all
$ipt -A INPUT -s 127.0.0.1 -d 0/0 -j ACCEPT
$ipt -A OUTPUT -d 127.0.0.1 -j ACCEPT

#libera net para server
$ipt -A OUTPUT -p tcp $eth1 -j ACCEPT
$ipt -A OUTPUT -p udp $eth1 -j ACCEPT

#libera protocolo icmp server all
$ipt -A OUTPUT -p icmp -d 0/0 -j ACCEPT
$ipt -A INPUT -p icmp -d 0/0 -j ACCEPT

exit 1
}
#!/bin/bash

function iniciaModulo(){
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe iptable_filter

#habilita forward
echo '1' > /proc/sys/net/ipv4/ip_forward
}#!/bin/bash
function inputOutputForward(){
clear
echo "Escolha qual tabela você deseja usar"
echo "1 - INPUT [ Regras de entrada no firewall ]"
echo "2 - OUTPUT [ Regras de saída do firewall ]"
echo "3 - FORWARD [ Regras para encaminhamento do firewall ]"
read TABLE

if [ $TABLE -gt 3 ]; then
      echo "Você deve digitar uma opção válida de 1 à 3";
fi

if [ $TABLE -eq 1 ]; then
        TABLE=INPUT
        elif [ $TABLE -eq 2 ]; then
        TABLE=OUTPUT
        elif [ $TABLE -eq 3 ]; then
        TABLE=FORWARD
fi

echo "Digite o endereço de origem se todos use 0/0"
read SRC

echo "Digite o endereço de destino se todos use 0/0"
read DST

echo "Qual protocolo você deseja usar?"
echo "1 - tcp"
echo "2 - udp"
read PROTO

if [  $PROTO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PROTO -eq 1 ]; then
        PROTO=tcp
        elif [ $PROTO -eq 2 ]; then
        PROTO=udp
fi

echo "Digite a porta que você deseja liberar a entrada ex.: 80(porta http)"
read PORT


echo "Digite a Chain "
echo "1 - ACCEPT"
echo "2 - DROP"
echo "3 - REJECT"
read CHAIN


if [ $CHAIN -gt 3 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $CHAIN -eq 1 ]; then
        CHAIN=ACCEPT
        elif [ $CHAIN -eq 2 ]; then
        CHAIN=DROP
        elif [ $CHAIN -eq 3 ]; then
        CHAIN=REJECT
        fi

echo "Qual a prioridade dessa regra?"
echo "1 - alta"
echo "2 - baixa"
read PRIO

if [ $PRIO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PRIO -eq 1 ]; then
        PRIO="I"
        elif [ $PRIO -eq 2 ]; then
        PRIO="A"
fi

/sbin/iptables -$PRIO $TABLE -s $SRC -d $DST -p $PROTO --dport $PORT -j $CHAIN

echo "Regra criada com sucesso para vizualiza-la digite iptables-save"
exit 1
}

#!/bin/bash

########################
#               Script by      #
#       Alexandre Bargiela #
#       Leandro Ardisson   #
########################

. SuperUser
. iniciaModulo
. escolha
. wizard
. inputOutputForward
. prerouting
. postrouting
. sair

SuperUser
iniciaModulo
escolha
wizard
inputOutputForward
prerouting
postrouting
sair#!/bin/bash
function postrouting(){

echo "Digite o endereço de origem se todos use 0/0"
read SRC

echo "Digite o endereço de destino se todos use 0/0"
read DST

echo "Qual protocolo você deseja usar?"
echo "1 - tcp"
echo "2 - udp"
read PROTO

if [ $PROTO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PROTO -eq 1 ]; then
        PROTO=tcp
        elif [ $PROTO -eq 2 ]; then
        PROTO=udp
fi

echo "Digite a porta que você deseja liberar a entrada ex.: 80(porta http)"
read PORT

echo "Qual a prioridade dessa regra?"
echo "1 - alta"
echo "2 - baixa"
read PRIO

if [ $PRIO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PRIO -eq 1 ]; then
        PRIO="I"
        elif [ $PRIO -eq 2 ]; then
        PRIO="A"
fi

iptables -$PRIO FORWARD -p $PROTO  -s $SRC -d $DST -j ACCEPT
iptables -$PRIO FORWARD -p $PROTO -d $DST -s $SRC -j ACCEPT
iptables -t nat -$PRIO POSTROUTING -s $SRC -d $DST -p $PROTO --dport $PORT -j MASQUERADE

exit 1
}
#!/bin/bash
.       preroutingEnd
.       preroutingPort

function escolhePrerouting(){
echo "Qual tipo de Redirecionamento você deseja fazer"
echo ""
echo "1 - Redirecionamento de portas apenas ex.: 80 redireciona para 3128"
echo "2 - Redirecionamento de IP:porta ex.: 200.1.2.3:80 redireciona para 192.168.0.1:3128"
read ESCOLHA

if [ $ESCOLHA -gt 2 ]; then
        echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $ESCOLHA -eq 1 ];then
        preroutingPort;

        elif [ $ESCOLHA -eq 2 ]; then
        preroutingEnd;
fi

}
#!/bin/bash
function preroutingEnd(){
echo "Digite o endereço de origem (Esse IP geralmente é seu IP válido se não sabe qual é entre em www.meuip.com.br e consulte)."
read SRC

echo "Digite o endereço de destino, é a máquina interna aonde será redirecionado o serviço ex.: 192.168.0.10"
read DST

echo "Qual protocolo você deseja usar?"
echo "1 - tcp"
echo "2 - udp"
read PROTO

if [  $PROTO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PROTO -eq 1 ]; then
        PROTO=tcp
        elif [ $PROTO -eq 2 ]; then
        PROTO=udp
fi

echo "Digite a porta que de origem ex.: 80(porta http)"
read SPORT

echo "Digite a porta que de Destino ex.: 8080(porta redir para o http)"
read DPORT

if [ $CHAIN -gt 3 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

echo "Qual a prioridade dessa regra?"
echo "1 - alta"
echo "2 - baixa"
read PRIO

if [ $PRIO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PRIO -eq 1 ]; then
        PRIO="I"
        elif [ $PRIO -eq 2 ]; then
        PRIO="A"
fi

#iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128

iptables -t nat -$PRIO PREROUTING -p $PROTO -s $SRC --dport $SPORT -j DNAT --to $DST:$DPORT

exit 1

}#!/bin/bash

function preroutingPort(){

echo "Adicione a interface de origem que ele deve redirecionar ex.: eth0"
read INTER

echo "Qual protocolo você deseja usar?"
echo "1 - tcp"
echo "2 - udp"
read PROTO

if [  $PROTO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PROTO -eq 1 ]; then
        PROTO=tcp
        elif [ $PROTO -eq 2 ]; then
        PROTO=udp
fi

echo "Digite a porta que de origem ex.: 80(porta http)"
read SPORT

echo "Digite a porta que de Destino ex.: 3128 [porta redir para o squid(proxy)]"
read DPORT

echo "Qual a prioridade dessa regra?"
echo "1 - alta"
echo "2 - baixa"
read PRIO

if [ $PRIO -gt 2 ]; then
      echo "Você deve digitar uma opção válida entre 1 e 2";
fi

if [ $PRIO -eq 1 ]; then
        PRIO="I"
        elif [ $PRIO -eq 2 ]; then
        PRIO="A"
fi

iptables -t nat -$PRIO PREROUTING -p $PROTO -i $INTER --dport $SPORT -j REDIRECT --to-port $DPORT

exit 1
}#!/bin/bash
function sair(){
        exit 1
}#!/bin/bash
function SuperUser(){
        if [ $UID != 0 ]; then
        echo "##################################################################"
        echo "# Você precisa estar logado como root para executar esse script. #"
        echo "##################################################################"
        exit 1
fi
}
#!/bin/bash

. execWizard

function wizard(){

if [ -f /var/run/wizard.pid ]; then
        echo "wizard já executado"
        echo ""
        echo "Deseja executar o wizard novamente? sim ou não"
        read EXEC

        if [ $EXEC = 1 ]; then
        execWizard;
        fi

else
        touch /var/run/wizard.pid
        execWizard
fi
exit 1

}

Scripts recomendados

Front-end para o Samba

Firewall com proxy transparente completo

Analisar log do tcpdump

Samba

Agendador de Taferas


  

Comentários
[1] Comentário enviado por igorcemim em 01/09/2007 - 12:25h

Ai vai uma dica.
Se voce quer manter a compatibilidade:
Nao utilize acentos pois em um computador eles podem aparecer corretamente e em outro podem nao aparecer.
por exemplor máquina ficaria: máquina
e assim por diante.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts