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: 337.730 ]

Por: Hugo Alvarez em 26/02/2007


Instalando o Debian Sarge



Para iniciar a instalação do Debian Sarge com suporte ao kernel 2.6, siga os procedimentos:

1. Certifique-se de que o BIOS da sua máquina está configurado para dar boot pelo CD;
2. Coloque o CD e reinicie a máquina, quando aparecer a tela a seguir digite linux26, isso iniciará a instalação do Debian Sarge com suporte ao kernel 2.6;


Após carregar, a primeira tela que aparecerá será a de seleção de idioma, prefira a seleção em inglês, a tradução aplicada nas distribuições GNU/Linux é horrível, talvez você se depare com alguma coisa do tipo "Propriedades do rato" quando quiser configurar seu mouse, em todo caso se quiser outro idioma fique a vontade.

Segue a tela de seleção de idiomas:


Após selecionar o idioma, o sistema presumirá que você está em uma das seguintes regiões da imagem a seguir, corrija, pois, estamos no Brasil, ele presumiu errado porque escolhi idioma inglês, se tivesse escolhido português apareceria uma tela com Brasil logo de cara, muito inteligente esse sistema heim, vou me dar bem com ele.




Após escolher onde estamos, o sistema pedirá que você defina o layout padrão do teclado, o meu é ABNT2, se tiver vírgula do lado do zero no teclado numérico o seu também é ABNT2, caso contrario opte pelo Brazilian (EUA layout).


Após selecionar o layout de teclado, ele vai detectar o hardware para localizar o CDROM com a fonte de dados, no nosso caso estamos instalando a partir do CDROM e ele vai detectar sem problemas.


Automaticamente será iniciada a cópia básica dos arquivos de sistema e quando acabar ele vai solicitar que você configure a rede.

Vai aparecer uma tela dizendo:

"Your network is probaly not using DHCP protocol. Alternatively, the DHCP server may be slow or some the network hardware in not working properly."

(Não tenho fotos dessa parte da configuração porque até aqui a instalação estava sendo pelo VMWARE para poder tirar fotos da instalação, após a parte da configuração da rede volto a ilustrar)

Pressione <Continue> (Será a única opção, não tem erro).

Se suas placas de rede forem suportadas pelo Debian Sarge, ótimo, vai aparecer a seguinte tela:

"Configure the Network (no topo da janela)"

Selecione a opção: "Configure network manually" <ENTER>

Na tela seguinte com o campo IP ADDRESS:

Digite o seu endereço IP que tem internet disponível e pressione <ENTER>

Na tela seguinte com o campo NETMASK:

Digite sua máscara de rede ou se não souber coloque 255.255.255.0 e pressione <ENTER>

Na tela seguinte com o campo GATEWAY:

Digite seu gateway de internet e pressione <ENTER>

Você deve saber qual é seu gateway, caso não souber ligue para o provedor que eles informam.

Na tela com o seguinte campo Name server addresses:

Digite o seu endereço DNS primário e pressione <ENTER>

Após configurar as placas de rede, não sei quantas você tem na máquina, vai aparecer a seguinte tela:


Coloque um nome para sua máquina e pressione <ENTER>

Vai aparecer a seguinte tela:


Digite o endereço do domínio da sua rede ou invente um se quiser e pressione <ENTER>. Ex: hugo.com.

Vai aparecer a tela de particionamento de disco, siga as instruções.


Selecione "Manually edit partition table" e pressione <ENTER> (é possível que apareça algo diferente no seu, pois, no meu caso peguei um HD que achei e espetei ele na máquina, nem sabia se tinha sistema ou não).

Vai aparecer a tela a seguir:


Selecione seu HD e pressione <ENTER>.


Ele vai perguntar se você deseja criar uma nova partição vazia, se você tiver Windows outra qualquer outra coisa no HD não coloque YES, pois, você vai perder todos os seus dados, nesse caso aconselho criar seu próprio método de particionamento, esta etapa você pode preencher como quiser, não é obrigatório seguir estas instruções, você pode criar só uma partição / e pronto, lembre-se que é você que vai administrar. Caso esteja de acordo selecione YES e mande pau, pressione <ENTER>.

Vai aparecer essa tela:


Selecione FREE SPACE e pressione <ENTER>.

Vai aparecer essa tela:


Selecione Create a new partition e pressione <ENTER>.

Aparecerá esta tela:


Selecione o tamanho da partição e pressione <ENTER>. Meu HD têm 8 GB, selecione 1GB para a partição de root, pois, posso querer baixar alguns softwares, selecione um tamanho compatível com seu HD, se tiver um HD de 40 ou 80 GB pode por 5 ou 10GB.

Aparecerá esta tela:


Selecione Primary e pressione <ENTER>.

Aparecerá esta tela:


Eu sempre começo criando as partições pelo Beginning e coloco a partição de SWAP no meio do HD, fica a seu critério, vou colocar uma breve explicação sobre o particionamento no GNU/LINUX.

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

Samba + Windows XP (perfil móvel)

Travando qualquer máquina Linux

Leitura recomendada

Bloqueando o UltraSurf e o WebMessenger do Hotmail com Proxy Transparente

Servidor de internet a rádio no Debian

Squid/IPtables - Bloqueando Facebook e personalizando IP de acesso irrestrito (definitivo)

Monitorando e bloqueando P2P com IPTABLES e IPP2P

Bloqueando programas P2P com iptables

  
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