Instalando um firewall mínimo em Debian

Neste artigo preocupei-me em abordar um assunto que ainda gera muita discussão, um firewall. Descrevo como mínimo porque as tecnologias que exemplifico são as mínimas necessárias para uma rede de qualquer tamanho e que vejo muita gente tendo problemas para executar tarefas extremamente simples, como bloquear um messenger com eficiência.

[ Hits: 336.327 ]

Por: Hugo Alvarez em 26/02/2007


Instalando o iptables



Aplique o patch do iptables, digite:

# cd /usr/src/iptables-1.3.7
# patch -p1 < ../netfilter-layer7-v2.9/iptables-layer7-2.9.patch
# chmod +x extensions/.layer7-test
# make KERNEL_DIR=/usr/src/linux
# make install KERNEL_DIR=/usr/src/linux


Acabamos a configuração do iptables, agora temos que descompactar as definições de protocolos do layer 7, vá até a pasta onde você salvou as definições e execute:

# tar xvzf l7-protocols-2007-01-14.tar.gz

Entre na pasta que você descompactou,

# cd l7-protocols-2007-01-14

e execute:

# make install

Está pronta a instalação do iptables e dos protocolos para layer 7.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalando o Debian Sarge
   3. Sobre o particionamento
   4. Instalando o Debian Sarge (parte 2)
   5. Configurando o sistema
   6. Mais algumas configurações úteis
   7. Instalando o SQUID 2.6
   8. Instalando o Apache
   9. Instalando o MRTG
   10. Instalando o SARG
   11. Atualizando o kernel
   12. Instalando o iptables
   13. O script de iptables e algumas regras
   14. Considerações finais e fontes consultadas
Outros artigos deste autor

Youtube + Buddy Poke x Iceweasel + Flash no Debian Etch

Travando qualquer máquina Linux

Samba + Windows XP (perfil móvel)

Leitura recomendada

Instalação do Layer7 no Debian Etch

Mandrake Firewall - Firewall com interface amigável

Introdução ao Firewall Linux

Script de Firewall com redirecionamento de portas em Linux Debian

UFW e GuFW, firewall simples ao alcance de todos

  
Comentários
[1] Comentário enviado por dailson em 26/02/2007 - 14:55h

Hugo

Muito bom seu artigo. Bastante didático. E detalhado
Parabéns mesmo.
Ficou Excelente!

[2] Comentário enviado por Sup0rt3 em 26/02/2007 - 15:12h

Hugo, O Xugo-vegetal ?

Bom artigo cara. muito legal mesmo. Parabens ;)

[3] Comentário enviado por agk em 26/02/2007 - 15:45h

Blz de artigo, parabéns.

Só acho que tem um errinho aqui:
cp /boot/config-2.6.8-2-386 /boot/.config
O .config você tem que copiar para dentro de /usr/src/linux
Ficando assim:
cp /boot/config-2.6.8-2-386 /usrc/src/linux/.config

[4] Comentário enviado por Vinicius Varella em 26/02/2007 - 23:20h

hugoalvarez...

Cara, mto bom velho...
Achei o script iptables mto bem explicado!

valeu!

[5] Comentário enviado por juninho (RH.com) em 27/02/2007 - 09:25h

Tenho 3 servidores rodando, mas agora achei muita coisa adicional no seu artigo, como você disse, não deixou nada pra depois ( nem mesmo o editor vim ), já adicionei a meus favoritos.

Parabéns.

[6] Comentário enviado por robson..pba em 27/02/2007 - 10:58h

pessoal o que estou fazendo de errado que nao consigo acessar o meu firewall de fora via ssh segue meu script abaixo, uma outra duvida porque quando executo meu script aparece:

FATAL: Module iptables not found.
iptables: No chain/target/match by that name



obs: eth0 (ethernet - adsl) 10.1.1.254
eth1 rede interna 10.0.0.6
lembrando que ja fiz o redirecionamento da porta 22 no modem para o ip 10.1.1.254


#!/bin/sh

# Ativa o modulo natmodprobe iptable_nat
modprobe iptables
modprobe iptable_nat

# ativa proteção contra pacote danificados
iptables -A FORWARD -m unclean -j DROP

# Compartilha a Conexão
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -t nat -A PREROUTING -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Ativo roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward

# Abre algumas portas (opcional)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
# Abre para a rede local
iptables -A INPUT -p tcp --syn -s 10.0.0.0/255.255.255.0 -j ACCEPT

# Redirecionando a porta 22 para o servidor
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 10.1.1.254
iptables -A INPUT -p tcp -i eth0 --dport 22 -d 10.1.1.254 -j ACCEPT
# Fecha para o resto
iptables -A INPUT -p tcp --syn -j DROP

echo " pronto "




[7] Comentário enviado por hugoalvarez em 27/02/2007 - 11:53h

Olá amigos, sobre o erro comentado da cópia do .config está correto, na verdade essa cópia não é necessária, ela é como uma cópia da configuração atual em caso de kernel panic dá pra descobrir o que aconteceu de errado, eu sinceramente nesse caso recompilaria porque são milhares de opções de kernel para achar onde está o problema na mão.

Com certeza ainda devem haver alguns detalhes que passaram desapercebido obrigado pela colaboração.

Vlws

Sobre o erro Robson tente remover a seguinte linha no seu script onde coloquei o #

# Ativa o modulo natmodprobe iptable_nat
##modprobe iptables##
modprobe iptable_nat

o iptables está nativo no kernel não precisa ser carregado.

Flws

[8] Comentário enviado por hugoalvarez em 27/02/2007 - 12:16h

Tente assim:

#!/bin/sh

# Ativa o modulo nat
modprobe iptable_nat

# Ativo roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward

# Estabeleço a relação de confiança entre estações da rede
iptables -A INPUT -i eth1 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Aceita conexões entrantes pela eth0(internet) na porta 22
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

# Nega TUDO de qualquer host entrando pela eth0 (placa de rede da internet)
iptables -A INPUT -i eth0 -j DROP

# Redireciona todas as tentativas de conexão na porta 80 para a porta 3128 do Squid
iptables -t nat -A PREROUTING -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Compartilha a Conexão
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo " pronto "

Sobre bloquear forward dos pacotes unclean e syn nunca os estudei a fundo nesse caso não vejo necessidade é interessante caso se precise liberar uma porta que pode sofrer um ataque tipo nmap e outros, se você estabelecer a relação de confiança entre suas máquinas as maquinas da internet por padrão vão ser rejeitadas com o DROP da chain INPUT. Pode fazer o teste coloque no ar e vá até a LAN HOUSE, o nmap não vai detectar nem a sua porta 22 que está aberta, e acho que ninguem vai tentar dar um brute force num SSH né, fala sééériu hehehe, e se tentarem vc bloqueia e ip do kra e acaba com a brincadeira, dar uma olhada no syslog uma vez por dia não custa nada e ninguem vai quebrar a senha de um SSH tão facil assim, a não ser que seja 123456,

Flws

[9] Comentário enviado por robson..pba em 27/02/2007 - 15:35h

Obrigado Hugo quanto ao erro resolveu o problema.Quanto ao ssh ja tinha resolvido mais como vc escreveu ficou mais facil de entender.

Tenho mais um problema direcionei a porta 5900 para o ip da minha eth0 (internet) e preciso liberar para ser conectado no ip 10.0.0.13

coloquei essas regras mais nao funciona onde estou errando ???

iptables -A INPUT -p tcp --destination-port 5900 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to-dest 10.0.0.13
iptables -A INPUT -p tcp -i eth0 --dport 5900 -d 10.0.0.13 -j ACCEPT

Segue abaixo o resultado do comando
nmap eth0(internet)

PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
646/tcp open unknown
905/tcp open unknown
2049/tcp open nfs
3128/tcp open squid-http
6000/tcp open X11


Blz, e obrigado desde já

[10] Comentário enviado por robson..pba em 27/02/2007 - 15:36h

Esqueci de mencionar que comentei essa linha para teste
iptables -A INPUT -i eth0 -j DROP

[11] Comentário enviado por hugoalvarez em 27/02/2007 - 16:45h

Olá Robson,

o grande segredo é organizar as regras, eu costumo deixar tudo que é INPUT primeiro, depois FORWARD e depois NAT, as vezes todas as regras estão corretas mas na ordem errada um pacote pode ser bloqueado antes de chegar na regra que vai redirecioná-lo,

o INPUT -i eth0 -j DROP é lei, o que você não liberou não tem acesso e pronto, o DROP no INPUT não impede que pacotes que você enviou da rede interna não consigam retornar, eles retornam normalmente pq foram originados internamente, o DROP impede que qualquer um na internet acesse os serviços na sua máquina, portanto, deixe sempre ativo,

agora para funcionar o 5900, VNC se não me engano, verifique internamente se funciona, estando ok, tente assim:

iptables -A INPUT -p tcp -i eth0 --dport 5900 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 5900 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to 10.0.0.13

Nesse caso a regra de INPUT deve obrigatoriamente estar antes da regra que bloqueia tudo, ex:

iptables -A INPUT -p tcp -i eth0 --dport 5900 -j ACCEPT
iptables -A INPUT -i eth0 -j DROP

A linha com PREROUTING está correta e pode ser colocada junto com as demais regras.

A linha do FORWARD é obrigatória porque o pacote deve ser encaminhado para a máquina que está na rede interna.

Se você tirar o -j DROP da eth0 os portscan e até tentativas de conexão na sua máquina estarão disponíveis, se eu tiver o seu ip consigo conectar remotamente e vou parar na tela da senha, com o DROP ativo scanners não conseguem descobrir os serviços rodando logo vai cair muito as tentativas de acesso pq como vou acessar um serviço que nem sei se existe, acabo desistindo,

Sobre os serviços rodando uma questão legal que levantei depois do artigo, olhem o resultado do meu netstat -na

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
tcp 0 0 192.168.100.5:3128 192.168.100.30:3587 TIME_WAIT
tcp 0 0 192.168.100.5:3128 192.168.100.30:3592 TIME_WAIT
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::ffff:192.168.100.5:22 ::ffff:192.168.100:1260 ESTABLISHED
tcp6 0 132 ::ffff:192.168.100.5:22 ::ffff:192.168.100:2741 ESTABLISHED
udp 0 0 0.0.0.0:3130 0.0.0.0:*
udp 0 0 0.0.0.0:67 0.0.0.0:*
udp 0 0 0.0.0.0:3550 0.0.0.0:*
raw 0 0 0.0.0.0:1 0.0.0.0:* 7

Tenho Listen na 80, meu webserver local para o mrtg, tenho a 3128 do squid, e tenho a 22 do ssh, a internet só pode conectar na 22, onde quero chegar,

Eu removi os serviços da minha inicialização definitivamente executando o seguinte comando:

update-rc.d -f gpm remove

Com este comando removi todos os scripts de inicialização do gpm (mouse) porém o script principal continua dentro de /etc/init.d, para deixar só o ssh que foi instalado removi tudo que não uso assim:

update-rc.d -f portmap remove
update-rc.d -f inetd remove
update-rc.d -f nfs-common remove
update-rc.d -f lpd remove
update-rc.d -f ppp remove

Assim removi todos os serviços ativos e que não uso, ficou o squid, ssh e apache

Flws

[12] Comentário enviado por robson..pba em 28/02/2007 - 11:58h

Hugo ai esta minhas regras, testei o vnc localmente e esta funcionando, porem de fora nao consigo acessar o mesmo, não consigo ver onde estou errando
so corrigindo um erro meu
eth1 é minha ethernet
eth0 rede interna
no modem direcionei a porta 5900 para o ip da minha eth1 10.1.1.254

#!/bin/sh

# Ativa o modulo iptable_nat
modprobe iptable_nat

# Ativo roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward

# Compartilha a Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# ESTABELEÇO A RELAÇÃO DE CONFIANÇA ENTRE ESTAÇÕES DA REDE
iptables -A INPUT -i eth0 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# LIBERO PORTAS
iptables -A INPUT -p tcp -i eth1 --dport 5900 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 5912 -j ACCEPT

# ACEITA CONEXOES ENTRANTES ETH1(INTERNET) NA PORTA 22
iptables -A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT

# BARRO RESTANTE
iptables -A INPUT -i eth1 -j DROP

#REDIRECIONO CONECXOES DA PORTA 5900 PARA O IP DEFINIDO
iptables -A FORWARD -i eth1 -p tcp --dport 5900 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 5912 -j ACCEPT

# REDIRECIONA CONEXOES DA PORTA 80 PARA 3128 (SQUID)
iptables -t nat -A PREROUTING -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -j RED
IRECT --to-port 3128

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5900 -j DNAT --to 10.0.0.13
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5912 -j DNAT --to 10.0.0.12

[13] Comentário enviado por robson..pba em 28/02/2007 - 16:35h

peço desculpe por uma falha minha, porque conforme sua resposta e conforme minhas regras acima agora estão funcionando.

Obrigado pela ajuda.

[14] Comentário enviado por lacierdias em 04/03/2007 - 17:17h

Hugo gostaria de te parabenizar não só pelo artigo mais por toda a atenção dada as pessoas que te solicitam.
Se tivéssemos mais pessoas assim o universo do Linux seria muito melhor.
Grande abraço.

[15] Comentário enviado por angeloshimabuko em 07/03/2007 - 08:55h

Algumas observações quanto ao particionamento.

Em primeiro lugar, o número máximo de partições e unidades lógicas em um disco PATA é 63. P. ex., caso o disco seja /dev/hda (master da IDE primária), as partições primárias serão hda1, hda2, hda3 e hda4. Se uma dessas partições for estendida, poderão ser criadas até 59 unidades lógicas nela: hda5, hda6, ..., hda63.

Caso o disco seja SATA ou SCSI, o número máximo de partições e unidades lógicas é 15. P. ex., /dev/sda => primárias e/ou estendida: sda1, sda2, sda3 e sda4; unidades lógicas: sda5, sda6, ..., sda15.

Essas limitações são impostas pelo mantenedor de números maiores e menores do Linux (atualmente o Torben Mathiasen). Veja mais em: <http://www.lanana.org/docs/device-list/>.

Segundo: no seu exemplo, a partição hda4 não foi suprimida. Nesse caso, é uma partição estendida. alguns particionadores não a mostram, mas use o "fdisk", p.ex., e você a verá.

Terceiro: o melhor local para o espaço de swap é o início do disco e não o meio (o tempo de acesso mede-se em milissegundos e não em nanossegundos). Por causa da geometria do disco (v_linear = v_ang x raio) e pelo fato da velocidade angular (v_ang) ser constante (em discos SATA e PATA, atualmente, 5400 RPM ou 7200 RPM), o início do disco (parte externa do disco) é lido com mais desempenho que o interior.

Quanto à compilação das aplicações, uma recomendação. Siga o padrão LSB e o FHS quando for escolher os locais para instalar os binários. Caso faça uma instalação a partir dos fontes, deixe o padrão, que é usar a pasta /usr/local. As pastas /usr/bin e /usr/sbin devem ser utilizadas para a instalação dos binários da distribuição. Caso instale binários que não sejam da distribuição, e que não tenham sido compilados por você, coloque-os em /opt.

[16] Comentário enviado por gusfreire em 09/03/2007 - 13:27h

Hugo Alvarez Parabéns pelo artigo, eu segui passo a passo todo o tutorial, mas quando iniciad da Kernel panic, você sabe o porque isso acontece? Valew

[17] Comentário enviado por hugoalvarez em 09/03/2007 - 15:54h

Olá amigos,

obrigado pelas críticas também adicionou bastante para eu mesmo estudar, sobre o particionamento colhi a informação de uma conceituada escola para certificação LPI, teremos agora também que descobrir se isso ocorre também no windows, porque estudo windows tambem e segundo outra escola conceituada é possivel o numero de partições que citei, eu nunca testei, sobre o local onde os pacotes serão instalados pode-se definir o /usr/local/bin e sbin para softwares compilados na mão sem problemas, é só mudar a linha prefix, eu não uso nada no local quando uso a debian, deixo como nativo(só utilizo o local na slack), normalmente instalo os pacotes como nativos do sistema, se instalasse pelo apt assim seria, só não utilizei o apt porque as versões disponíveis são mais antigas do que a que eu queria instalar, portanto isso fica a critério,

gusfreire,

sobre o kernel panic, tem jeito de resolver sim, eu mesmo já peguei uns 3 ou 4 problemas diferentes de kernel panic em maquinas diferentes, um deles mesmo era até cabacisse minha :D, esqueci de colocar na linha do make-kpkg a opção --initrd, e ele dava um kernel panic relativo à detecção do teclado, coloque as ultimas linhas até o kernel panic da sua máquina que solucionaremos com certeza.

Abraços.


[18] Comentário enviado por gusfreire em 10/03/2007 - 10:30h

Hugo o erro é o seguinte: Kernel Panic not sync atempted to kill init e lista o seguinte: atkbd.c: Spurios ACK on isa0060/serio0. Some program might be trying access hardware direcly.
O 2.4 ta funcionando normalmente quando eu ecolho no Grub iniciar o 2.6 da esse erro acima.
Será que da pra resolver, parece que eh um patch esse atkbd.c ou uma biblioteca, mas não sei como resolver.

[19] Comentário enviado por hugoalvarez em 12/03/2007 - 11:33h

Esse é justamente o erro que comentei acima, peguei quando esqueci de colocar a opção -initrd na linha do make-kpkg, no seu caso segundo a sua mensagem você utilizou a instalação do kernel 2.4 correto?

Se sim será necesário recompilar os modulos da versão tambem, por isso logo no começo do artigo coloquei linux26 durante a inicialização da instalação, assim evitei o trabalho de ter que recompilar os módulos para versão 2.6 do kernel, então temos 2 opções:

tentar compilar os modulos para versão 2.6:
dentro de /usr/src/linux
make modules; make modules_install

ou instalar já com kernel 2.6, o sarge instala o kernel 2.6.8 se digitar linux26 no prompt de instalação, não esqueça de colocar o -initrd na linha do comando make-kpkg ou erro irá acontecer, eu fiquei batendo a cabeça uma semana tentando entender pq não funcionava, deixe um post caso não conseguir, vou ficar de olho.

Flws

[20] Comentário enviado por gusfreire em 12/03/2007 - 12:17h

Hugo fiz o que você falou e notei que no seu artigo quando manda compilar o kernel novo está sim com a opção -inittrd olha:
Neste Link: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=6108&pagina=11
Após instalar o kernel-package, inicie a compilação do novo kernel:
# make-kpkg -initrd kernel_image

[21] Comentário enviado por gusfreire em 12/03/2007 - 12:26h

Não sei se ajuda mas o meu servidor tem a seguinte configuração:
Processador: P4 2.8 HT
Placa Mãe: Intel, Controladora Scsi, um HD Scsi da Seagate de 40 GB 1 GB de memória Ram e duas placas de rede RTL8169S 1000 MBPS

[22] Comentário enviado por hugoalvarez em 12/03/2007 - 14:11h

está correto, eu estava passando por esse erro quando estava usando assim:

make-kpkg kernel_image

o correto é como está no artigo, você já tentou compilar os modulos ou instalar com a opção linux26 e o erro persiste?

A todos os amigos que lerem esse artigo, gostaria de pedir um grande favor de cooperação, quando tentarem realizar algum procedimento descrito e não obtiverem sucesso, podem deixar um comentário ou enviar o problema para o meu e-mail hugoalvarez@ig.com.br, pois, estou criando uma espécie de CHANGELOG para disponibilizar em meu site, com objetivo de portar e documentar minhas instalações para criar um padrão, instalável em qualquer máquina que tenha OS baseado nas 3 distribuições principais,

obrigado

[23] Comentário enviado por rodrigom em 01/04/2007 - 21:58h

Estava lendo o artigo agora, gostei muito, principalmente do firewall/iptables.

[24] Comentário enviado por lomax em 17/06/2007 - 03:09h

Parabéns pelo artigo, usarei bastante dessas informações em meu servidor!

[25] Comentário enviado por brcfm em 26/07/2007 - 10:17h

Na hora de desligar o pc ele fica parando portmap daemon...
e nao sai dali

[26] Comentário enviado por rdalvarenga em 03/12/2007 - 14:29h

Sou iniciante em linux e estou tentando instalar um servidor debia, segui passo a passo e esta ocorrendo a seguinte msg
Qndo executo o comando make all e make install:

debian:/usr/src/squid-2.6.STABLE7# make all
make: *** Sem regra para processar o alvo `all'. Pare.
debian:/usr/src/squid-2.6.STABLE7# make install
make: *** Sem regra para processar o alvo `install'. Pare.
debian:/usr/src/squid-2.6.STABLE7#

debian:/usr/src/squid-2.6.STABLE7# ls
acinclude.m4 config.log COPYING helpers Makefile.am scripts
aclocal.m4 configure COPYRIGHT icons Makefile.in snmplib
bootstrap.sh configure.in CREDITS include QUICKSTART SPONSORS
cfgaux contrib doc INSTALL README src
ChangeLog CONTRIBUTORS errors lib RELEASENOTES.html tools
debian:/usr/src/squid-2.6.STABLE7#


Vlw.

[27] Comentário enviado por esdra$ em 27/03/2008 - 09:30h

Show de bola seu artigo...
super explicativo...

flw

[28] Comentário enviado por celsof2 em 27/03/2008 - 22:27h

muito bom o artigo wlwwwwwwwwwwwww

[29] Comentário enviado por celsof2 em 27/03/2008 - 22:28h

muito bom mesmo

[30] Comentário enviado por mcsba em 09/09/2009 - 12:01h

Olá Hugo, eu uso o debian 5 lenny

tentei fazer seu script de firewall mas quando tento executar mostra o seguinte erro.

The "nat" table is not intended for filtering, hence the use of DROP is deprecated and will permanently be disabled in the next iptables release. Please adjust your scripts.

Tem idéia do pode ser?

[31] Comentário enviado por hugoalvarez em 09/09/2009 - 15:04h

Mcsba,

provavelmente trata-se de incompatibilidade entre versões, se você estiver utilizando uma versão nova do iptables será necessário reescrever algumas regras, a tabela NAT não é mais utilizada para fazer filtragem de pacotes e isso é permanente, foi uma modificação no software mesmo, esse artigo ainda serve para dar algumas idéias mas em geral é obsoleto e não recomendo segui-lo passo a passo.

Substitua todas as linhas onde a ação DROP e tabela NAT estão especificadas e coloque essas regras na tabela filter, vai resolver o problema.

Aconselho também que utilize políticas em DROP, todas elas,

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

e através do parametro -m state (consulte os states possíveis no man) libere o retorno dos pacotes, esse artigo é realmente muito obsoleto não serve para os dias atuais.

Até mais.

[32] Comentário enviado por ton.work em 18/08/2010 - 16:20h

Olá hugo configurei um firewall com suas dicas e acabei usando o script do "robson..pba" que me serviu como uma luva, só tive que mudar algumas coisinhas para funcionar pra mim mas já está mamão com açucar.

#!/bin/sh

# Ativa o modulo iptable_nat
modprobe iptable_nat

# Ativo roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward

# Compartilha a Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# ESTABELEÇO A RELAÇÃO DE CONFIANÇA ENTRE ESTAÇÕES DA REDE
iptables -A INPUT -i eth0 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# LIBERO PORTAS
iptables -A INPUT -p tcp -i eth1 --dport 5900 -j ACCEPT
iptables -A INPUT -p tcp -i eth1 --dport 5912 -j ACCEPT

# ACEITA CONEXOES ENTRANTES ETH1(INTERNET) NA PORTA 22
iptables -A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT

# BARRO RESTANTE
iptables -A INPUT -i eth1 -j DROP

#REDIRECIONO CONECXOES DA PORTA 5900 PARA O IP DEFINIDO
iptables -A FORWARD -i eth1 -p tcp --dport 5900 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 5912 -j ACCEPT

# REDIRECIONA CONEXOES DA PORTA 80 PARA 3128 (SQUID)
iptables -t nat -A PREROUTING -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -j RED
IRECT --to-port 3128

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5900 -j DNAT --to 10.0.0.13
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5912 -j DNAT --to 10.0.0.12

Obrigado a vocês por deixarem este material valioso para muitas pessoas pois sem isso seria impossivel pra mim instalar o squid ou qualquer distro linux.
E só uma pergunta, fiz teste de portas no shields up e no pc flank e mostraram todas as portas em stealth, gostaria de saber se posso ficar tranquilo com isso ou preciso melhorar a segurança de alguma forma?
Obrigado

Antonio

[33] Comentário enviado por hugoalvarez em 18/08/2010 - 20:03h

Olá Antonio,

inicialmente agradeço pelo comentário, mas como deve ter visto no meu comentário acima esse script é bem antigo e já precisa de várias modificações, eu começaria mudando todas as políticas para DROP logo de cara, estabeleceria relações de confiança de dentro da rede para fora da rede e em serviços essenciais mesmo e que iniciam conexão "na rua" por um cliente seriam os únicos permitidos.

Com as opções RELATED e ESTABLISHED fica lindo de fazer, consulte a opção -m state --state e vai achar para que servem todas, para não ter q refazer tudo do zero vc pode começar mudando tudo pra FORWARD DROP e procurar o que parou de funcionar em sua rede, um a um vc elimina todos os buracos e vai criando um novo firewall enquanto não pára a empresa.

Sua LAN deve estar totalmente fora de alcance dos invasores em uma rede que tem relação com uma outra rede(DMZ) através de um switch(veja bem isso não é uma regra, é apenas um modelo que eu gosto de trabalhar, que tem como ponto cego falha de hardware do firewall), DMZ só responde para LAN se LAN iniciar conexão com DMZ -> DMZ não consegue iniciar conexões com LAN -> DMZ fica com tudo fechado, serviços ficam liberados parcialmente, a LAN pode tudo que estiver configurado em serviços, a internet só nas portas corretas, as relações de internet não ficam setadas como relacionadas, apenas conectam e desconectam.

Nas portas abertas para internet mida os níveis de conexões, por exemplo não deixar SSH aceitar mais do que 4 conexões por minuto, se houver 4 DROP(vc não vai errar sua senha mais do que 4 vezes em um minuto), sobre os outros serviços sempre medir os acessos, se vc tem um website qtos clientes vão se conectar simultaneamente? Vc sabe que tem possíveis X clientes, eu recebo 200 visitas por dia no site da empresa, a CAIXA recebe milhões de conexões, vale configurar bem o APACHE nesse caso, esconder banner do seu SMTP, assim por diante.

Com esse script nunca fui hackeado, mas ele não é bom.

Abraços.


[34] Comentário enviado por ton.work em 23/08/2010 - 09:19h

Puts cara sério!, não sou muito bom com esse esquema de firewall será que você tem algum mais recente por ai?


valeu


antonio

[35] Comentário enviado por vyvynewlife em 11/01/2012 - 11:35h

Eu instalei o FW mais não consigo conectar na internet.

[36] Comentário enviado por hugoalvarez em 12/01/2012 - 14:51h

Meu véi,

esse artigo é de 2007 é muito véio,

vou postar aqui uma mão, coisa bem básica hein um script empresarial tem q ser muito melhor que isso nos dias de hoje, é que peguei aqui um script funcional e dei umas digitadas rápidas pra ajhudar pq to no trampo e tá correria aqui, aí vai, em baixo tem umas explicações:

#!/bin/bash

/sbin/ifconfig eth0:1 200.200.200.200
/sbin/ifconfig eth0:2 200.200.200.201

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT

#Aceitamos conexoes SSH iniciadas por EMPRESA
iptables -A INPUT -s 200.200.200.199 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 200.200.200.199 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Libera o PROXY das filiais para EMPRESA
iptables -A INPUT -s 200.200.200.199 -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -d 200.200.200.199 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Atravessa squid por fora
iptables -A INPUT -s 200.200.200.202 -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -d 200.200.200.202 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autoriza o trafego local sem encaminhamento
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Aceitamos todas as conexoes da LAN
iptables -A INPUT -i eth1 -s 192.168.4.0/24 -j ACCEPT
iptables -A INPUT -i eth1 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

#TCP estabelecida pela LAN recebe resposta
#iptables -A OUTPUT -o eth0 -p tcp -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#DNS liberado para resposta desde que a conexao seja iniciada na LAN
iptables -A OUTPUT -o eth0 -d 4.2.2.2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -s 4.2.2.2 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -o eth0 -d 200.30.0.97 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -s 200.30.0.97 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Ativa o encaminhamento de pacotes entre a LAN e EMPRESA, EMPRESA e LAN
iptables -A FORWARD -i eth0 -s 200.200.200.199 -o eth1 -d 192.168.4.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.4.0/24 -o eth0 -d 200.200.200.199 -j ACCEPT

#Ativa o encaminhamento de pacotes entre a LAN e o servidor DPI, DPI e LAN
iptables -A FORWARD -i eth0 -s 200.230.57.43 -o eth1 -d 192.168.4.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.4.0/24 -o eth0 -d 200.230.57.43 -j ACCEPT

#Ativa o redirecionamento VNC/tcp para a maquina designada
iptables -t nat -A PREROUTING -i eth0 -s 200.200.200.199 -p tcp --dport 5900 -j DNAT --to 192.168.4.109
iptables -t nat -A PREROUTING -i eth0 -s 200.200.200.199 -p tcp --dport 3389 -j DNAT --to 192.168.4.126

#Ativa o mascaramento de conexão
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE



Basicamente é o seguinte, com um pouco de leitura vc vai entender o script e ver que tem alguns exemplos de serviços já liberados:

No começo tem algumas interfaces eth0 definidas a mais, são ips da internet do local

192.168.4.0/0 é a rede utilizada, LAN

O INPUT e FORWARD por padrão fechados, evita scans

OUTPUT pode sair a vontade, no meu caso servia mas você pdoe fechar

EMPRESA era a matriz onde eu trabalhava, ip de internet tambem, então ela podia tudo no firewall, conectar ssh, etc.


Na regra atravessa squid era uma liberação para eu de qualquer lugar da internet navegar pelo squid da empresa, tipo pra simular um ip quente diferente, útil pra acessar jogos, no meu caso, eu chegava em casa, ssh na eth0 liberada, pegava um ip dinamico da minha conexao, liberava no firewall, liberava no proxy, arrumava o squid, configurava o proxy do meu navegador com o ip quente da conexao da empresa e vualá, ip da minha conexão maqueado.

Tem umas regras de liberação de serviços, tipo VNC e CAT(software de acidentes do governo)

Você vai ver no script várias --state ESTABLISHED,RELATED , o conceito é esse, tudo de dentro pra fora póde, mas o que está fora só responde se quem estiver dentro pedir, fóra nunca inicia conexão, exceto no caso de sh por exemplo que tem liberação explicita, pra um compartilhamento de internet pode remover quase tudo daí, deixando só os forwards e o postrouting.

Qualquer coisa posta ae.

Abrçs.

Hugo.






[37] Comentário enviado por vyvynewlife em 06/03/2012 - 16:57h

Olá Hugo desculpe o atraso na resposta, mais funcionou tudo perfeitamente..

Ótima dica...


Obrigada mesmo..

[38] Comentário enviado por daniel2099 em 09/04/2016 - 09:40h

Instalei o firewall mas não esta funcionando ?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts