Firewall funcional de fácil manipulação

Bom galera, este é meu primeiro artigo, estou trabalhando com Linux a alguns meses e graças ao VOL eu hoje sinto a liberdade (hehe) que o Linux pode proporcionar. Neste artigo vou descrever como construir um firewall com uma ajudinha do Webmin para editar seus arquivos de configuração. Então mãos a obra.

[ Hits: 34.497 ]

Por: André Santos em 19/05/2010


Configuração dos comandos no Webmin



Bom, acesse seu webmin pelo browser e vá na guia > OTHERS > Custom Commands;

Webmin N° 1

Vamos criar primeiro um 'new custom command', que servirá para reiniciar nosso firewall sem precisar logar via ssh.

Clique em 'Create a new custom command'. Irá aparecer uma uma tela semelhante a esta:
Deixe desta forma e clique em 'CREATE':

Webmin N° 2

Vamos criar agora um modelo arquivo para edição via web, clique em 'Create a new file editor', irá aparecer uma tela semelhante a esta:
Deixe desta forma:
Siga os mesmos procedimentos do passo N° 2 para criar os demais arquivos.

Página anterior     Próxima página

Páginas do artigo
   1. Reunindo tudo...
   2. Explicação de arquivos secundários
   3. Configuração dos comandos no Webmin
   4. Finalizando o nosso firewall
Outros artigos deste autor

Hotspot - Atualização - CoovaChilli

Hotspot rápido com Coovachilli

Leitura recomendada

Um poderoso firewall para a sua rede wireless com IP x MAC

IPTABLES - Conceitos e aplicação

Firewall rápido e seguro com iptables

Criando cluster com o PFSense

Trabalhando com CARP nos BSD's

  
Comentários
[1] Comentário enviado por cvs em 20/05/2010 - 08:06h

Interessante pra poder ter uma base pra fazer algo mais personalizado hein...
Boa iniciativa.

[2] Comentário enviado por mcnd2 em 20/05/2010 - 18:48h

Muito bom.

Simples a deixando a liberdade a todos...

[3] Comentário enviado por gostt em 21/05/2010 - 14:41h

André,
parabéns, muito bom seu artigo, alem de uma boa didática para o conteúdo, você citou de onde vem a verdadeira sabedoria.
Tiago 1:5

Um grande abraço

Paulo Henrique

[4] Comentário enviado por andfeh em 24/05/2010 - 23:31h

Opa, muito obrigado a todos. Espero que eu possa contribuir ainda mais, Valeu Paulo, sem esta sabedoria nada eu estaria sabendo.

Abraço, até mais.

[5] Comentário enviado por crandrade em 17/06/2010 - 09:24h

Andre,

Comecei a estudar iptables agora, montei um laboratorio com maquinas virtuais simulando duas redes com um firewall (iptables) no meio, gostaria de saber como faço para bloquear o trafego entre as duas redes e ir liberando aos poucos somente o necessario. As duas redes ja estão se falando.

Abraços.

[6] Comentário enviado por andfeh em 18/06/2010 - 22:35h

Seguinte, você tem que partir do principio, que entre redes separadas, você usará inicialmente a tabela FILTER, cadeia FORWARD para trafegar entre uma rede e outra...

ai por exemplo a rede "A"=192.168.0.XXX/24 e a rede "B"=192.168.10.XXX/24, ok?

entao você cria uma regra + ou - assim:

iptables -t filter -A FORWARD -s 192.168.0.XXX/24 -d 192.168.10.XXX/24 -j DROP
iptables -t filter -A FORWARD -d 192.168.0.XXX/24 -s 192.168.10.XXX/24 -j DROP

tradução: a primeira regra diz que tudo/qualquer protocolo que vier da rede "A" para rede "B" vai seja negado e vice versa...

e assim por diante...

mas lembre-se quando você for adicionar uma regra para aceitar algum tráfego entre as redes vocÊ tem que adicionar antes que o tráfego seja "DROPADO" entre elas, ok?

até mais.

[7] Comentário enviado por ton.work em 31/08/2010 - 16:44h

André Santos,

estou usando seu firewall e estou gostando muito, tenho em rede dois servidores e cada um com uma placa gv800 e nela precisaria abilitar as seguintes portas:

81
2100
2101
6551

82
4550
2101
6551

abilitei usando a porta 81 e fiz um teste de portas no site shields up e a porta estava aberta, será que tem algum esquema pra deixar essa porta aberta mas em modo Stealth

ficou assim o firewall
#!/bin/bash

## VARIABLES ##

IFWAN=`ifconfig | sed -n "1p" | awk {'print $1'}` # Filtra Saida do comando 'ifconfig' - Automatiza a implantação do Script
IPWAN=`ifconfig | sed -n "2p" | awk {'print $3'}`
IFLAN=`ifconfig | sed -n "11p" | awk {'print $1'}`
IPLAN=`ifconfig | sed -n "12p" | awk {'print $3'}`
LAN=192.168.1.10/24

## PROGRAMS ##

IPT=`which iptables`
EC=`which echo`
MODUP=`which modprobe`

## FIREWALL START ##

START_FW(){
echo " [ Firewall Starting ... ]"

# LOAD MODULES

$MODUP ip_tables
$MODUP ip_conntrack
$MODUP iptable_filter
$MODUP iptable_mangle
$MODUP iptable_nat
$MODUP ipt_LOG
$MODUP ipt_limit
$MODUP ipt_state
$MODUP ipt_REDIRECT
$MODUP ipt_owner
$MODUP ipt_REJECT
$MODUP ipt_MASQUERADE
$MODUP ip_conntrack_ftp
$MODUP ip_nat_ftp
######
#liberando acesso interno da rede
iptables -A INPUT -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&
iptables -A OUTPUT -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&
iptables -A FORWARD -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&

#compartilhando a web na rede interna
iptables -t nat -A POSTROUTING -s 192.168.1.10/255.255.255.0 -o eth1 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&
######
# POLICES THIS FIREWALL

$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT ACCEPT

# ENABLE LOOPBACK

$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -j ACCEPT

# ENABLE IMPORTANT PORTS

$IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT -m state --state RELATED -j ACCEPT
DOOROPEN=`cat "/home/antonio/portasabertas.conf"`
for n in $DOOROPEN; do
PROTOCOL=`$EC $n | cut -d '@' -f 1`
DOOR=`$EC $n | cut -d '@' -f 2`
if [ "$PROTOCOL" = "tcp" ]; then
$IPT -t filter -A INPUT -p tcp --dport $DOOR -j ACCEPT
elif [ "$PROTOCOL" = "udp" ]; then
$IPT -t filter -A INPUT -p udp --dport $DOOR -j ACCEPT
fi
done

# BLOCK SITES FROM INTRANET

$IPT -t filter -A FORWARD -m state --state ESTABLISHED -j ACCEPT
$IPT -t filter -A FORWARD -m state --state RELATED -j ACCEPT
SITES=`cat "/server/firewall/sitesdesativados.conf"`
for n in $SITES ; do
$IPT -t filter -A FORWARD -s $LAN -d $n -j DROP
$IPT -t filter -A FORWARD -s $n -d $LAN -j DROP
done

# PING OF DEATH

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
$IPT -N PING
$IPT -A INPUT -p icmp --icmp-type echo-request -j PING
$IPT -A PING -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A PING -j DROP

# SYN-FLOOD

echo "0" > /proc/sys/net/ipv4/tcp_syncookies
$IPT -N syn-flood
$IPT -A INPUT -i $IFWAN -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP

# BRUTE-SSH

$IPT -N BRUTE-SSH
$IPT -A INPUT -i $IFWAN -p tcp --dport 22 -j BRUTE-SSH
$IPT -A BRUTE-SSH -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A BRUTE-SSH -j DROP

# ANTI-SPOOFINGS

$IPT -A INPUT -s 10.0.0.0/8 -i $IFWAN -j DROP
$IPT -A INPUT -s 127.0.0.0/8 -i $IFWAN -j DROP
$IPT -A INPUT -s 172.16.0.0/12 -i $IFWAN -j DROP
$IPT -A INPUT -s 192.168.1.0/16 -i $IFWAN -j DROP

# SHEALT SCAN

$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPT

# ENABLE FORWARDING

DOORCROSS=`cat "/home/antonio/portasfoward.conf"`
for n in $DOORCROSS; do
STAT=`$EC $n | cut -d '@' -f 1`
PROTO=`$EC $n | cut -d '@' -f 2`
PORT_IN=`$EC $n | cut -d '@' -f 3`
IPTARGET=`$EC $n | cut -d '@' -f 4`
PORT_OUT=`$EC $n | cut -d '@' -f 5`
if [ "$STAT" = "0" ]; then
$IPT -t filter -A FORWARD -p $PROTO --dport $PORT_IN -j ACCEPT
$IPT -t filter -A FORWARD -p $PROTO --sport $PORT_IN -j ACCEPT
$IPT -t nat -A PREROUTING -p $PROTO --dport $PORT_IN -j DNAT --to $IPTARGET
$IPT -t nat -A POSTROUTING -d $IPTARGET -j SNAT --to $IPLAN
elif [ "$STAT" = "1" ]; then
$IPT -t filter -A FORWARD -p $PROTO --dport $PORT_IN -j ACCEPT
$IPT -t filter -A FORWARD -p $PROTO --sport $PORT_IN -j ACCEPT
$IPT -t nat -A PREROUTING -p $PROTO --dport $PORT_IN -j DNAT --to $IPTARGET:$PORT_OUT
$IPT -t nat -A POSTROUTING -d $IPTARGET -j SNAT --to $IPLAN
fi
done

# ENABLE PROXY

#$IPT -t nat -A PREROUTING -i $IFLAN -p tcp --dport 80 -j REDIRECT --to-port 3128
#$IPT -t nat -A PREROUTING -s $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.10/24 --dport 80,443 -j REDIRECT --to-ports 3128
#ENABLE MASQUERADE

DOORMASQ=`cat "/server/firewall/portasmascaradas.conf"`
for n in $DOORMASQ; do
PROTO=`$EC $n | cut -d '@' -f 1`
PORT=`$EC $n | cut -d '@' -f 2`
if [ "$PROTO" = 'tcp' ]; then
$IPT -t filter -A FORWARD -p tcp --dport $PORT -j ACCEPT
$IPT -t filter -A FORWARD -p tcp --sport $PORT -j ACCEPT
$IPT -t nat -A POSTROUTING -o $IFWAN -p tcp --dport $PORT -j MASQUERADE
elif [ "$PROTO" = 'udp' ]; then
$IPT -t filter -A FORWARD -p udp --dport $PORT -j ACCEPT
$IPT -t filter -A FORWARD -p udp --sport $PORT -j ACCEPT
$IPT -t nat -A POSTROUTING -o $IFWAN -p udp --dport $PORT -j MASQUERADE
fi
done

echo " [ OK ]"
}

STOP_FW(){
echo " [ Firewall Stopping ... ]"
## CLEAN RULES NETFILTER ##

$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t filter -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t filter -Z
$IPT -t nat -Z
$IPT -t mangle -Z

## DISABLE ROUTING ##

$EC "0" > /proc/sys/net/ipv4/ip_forward

echo " [ OK ]"
}

case "$1" in
"start") START_FW ;;
"stop") STOP_FW ;;
"restart") STOP_FW; START_FW ;;
*) echo
$EC " [ FIREWALL: start, stop ou restart. ]"
$EC " [ Uso incorreto do firewall, restart em ]"
$EC " [ 3 segundos. ]"
echo
sleep 3
/server/firewall/sh.firewall.conf restart
esac

[8] Comentário enviado por andfeh em 10/09/2010 - 10:36h

Opa, bom dia, ton.work, explica melhor a topologia de sua rede para que eu possa te ajudar...

Até Mais.

[9] Comentário enviado por sobralmaster em 09/06/2011 - 16:12h

Boa tarde..

Li os seus postssobre coovachilli e sobre firewall, já ha algum tempo eu venho me dedicando a este tipo de trabalho.

Ja passei por outros softwares para hotspot e pretendo testar este pois me parece uma ótima solução. Quanto ao seu Firewall, Show de bola. Muito bom e seguindo a sua linha de raciocínio ninguém precisa "meter" a mão nos códigos para liberar ou Bloquear alguma cosia, muito bom mesmo

Está de parabens, a galera que está começando agora agradece..

Que Deus continue nos dando a sabedoria necessária.

Um fortíssimo abraço

Sobralmaster


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts