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.476 ]

Por: Hugo Alvarez em 26/02/2007


O script de iptables e algumas regras



Quando o sistema voltar, é hora de verificar se está tudo ok, digite:

# modprobe ipt_layer7

Nenhum erro ok?

Se sim, vamos criar um script de iptables que permita conexão remota pela eth0 (placa internet) ou não, redirecionamentos úteis para alguns serviços que você pode querer rodar na rede interna para o mundo como liberar um webserver ou um terminal com VNC ou RDP da rede interna, bloqueio de Messenger e outros do tipo, temos que redirecionar as solicitações http para o squid, enfim, o básico para sobrevivência.

Crie um arquivo com nome firewall dentro de /etc/init.d

# vi /etc/init.d/firewall

Adicione o seguinte conteúdo dentro do script, vou comentar todas as linhas para entendimento, não é necessário deixá-las comentadas.

####################################################
# Aqui eu zero regras carregadas anteriormente (caso queira consulte os parâmetros com o comando "iptables --help | more" sem as aspas)
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -Z
####################################################
# Aqui eu defino as políticas de segurança das CHAINS INPUT, OUTPUT e FORWARD, sempre deixo o FORWARD liberado porque ninguém de fora vai conseguir graça mesmo, existem pessoas que optam pelo bloqueio total e liberação do que usa

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

# Carregar os módulos, temos muitas opções já que compilamos todos os módulos do iptables

modprobe iptable_nat
modprobe iptable_filter
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_MASQUERADE
modprobe ipt_LOG
modprobe ipt_layer7

## Chains -j LOG do iptables ##
#
# Aqui eu jogo no /var/log/syslog todas as conexões que entrarem pela eth0(mundo) realizadas na porta 80 da minha máquina, meu ip quente fictício é 200.00.200.200

iptables -t nat -A PREROUTING -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 80 -j LOG --log-prefix="ACESSO WEB "

# Aqui eu jogo no /var/log/syslog todas as conexões que entrarem pela eth0 (mundo) realizadas na porta 80 da minha máquina, meu ip quente fictício é 200.200.200.201, é útil caso você tenha dois webservers rodando na rede interna, caso a sua conexão com o segundo ip esteja em outra placa de rede coloque a interface da placa respectiva, ex: eth1. No meu caso como tenho um load-balance de links minha máquina a eth0 responde pelos dois links

iptables -t nat -A PREROUTING -i eth0 -d 200.200.200.201 -p tcp -m tcp --dport 80 -j LOG --log-prefix="ACESSO WEB "

# Aqui eu jogo no /var/log/syslog todas as conexões que entrarem pela eth0 (mundo) realizadas na minha porta 21, no caso de você ter um servidor FTP na rede interna, caso você queira utilizar esta opção é extremamente interessante bloquear esse acesso por ip, pois, sabemos que o serviço FTP envia as senhas no modo cleartype, e se alguém estiver sniffando a rede pode capturar a senha e nesse caso, se o ip do indivíduo não estiver na lista de acesso você pode enviar o usuário e senha do seu servidor por e-mail para o mundo que ninguém vai conseguir conectar mesmo, recomendação, não faça isso porque vai ter muito nego tentado a conexão. Além disso, no caso de um portscan ninguém vai saber que existe um servidor FTP disponível.

iptables -t nat -A PREROUTING -i eth0 -d 201.63.116.155 -p tcp -m tcp --dport 21 -j LOG --log-prefix="ACESSO FTP "


# Com esta regra eu jogo no log /var/log/syslog todas as conexões que saírem do host 192.168.100.32 com a string MASCARAMENTO, é útil para descobrir quando algo não está funcionando, suponha o site da caixa, se ele sair pelo squid sabemos que as ferramentas não funcionam, então você pode liberar a máquina com um POSTROUTING e ver aonde ela está conectando-se para posteriormente liberar com POSTROUTING somente os endereços necessários para que sua estação consiga sucesso na conexão

iptables -t nat -A POSTROUTING -s 192.168.100.32 -d 0/0 -j LOG --log-prefix=" MASCARAMENTO "

## CHAIN INPUT, define as conexões que serão aceitas, como ela está setada para DROP (-P INPUT DROP) o padrão é bloquear tudo, ou seja, nada vai funcionar direito se não for dito o contrário

# Estabelece relação de confiança entre estações da rede local, esta regra diz que todas as conexões que entrarem pela eth1(rede local) de uma máquina da classe .100.0 devem ser aceitas sem restrições

iptables -A INPUT -i eth1 -s 192.168.100.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

# Aqui eu libero o INPUT na porta 80 do meu firewall, é obrigatória caso você tenha um webserver na rede interna que precisa ser acessado pela mundo, considerando um webserver sempre atualizado, as chances de invasão nesta configuração são quase zero, estou considerando quase zero porque sempre vai existir alguém para quebrar o paradigma

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

# Libera acesso ao serviço FTP, com a regra crua assim você está liberando o acesso do mundo à porta 21 do firewall, não aconselho usar FTP, se for possível sempre use SFTP, ou libere somente para ips confiáveis, que você sabe de quem é pode ir até o cara e encher ele de porrada se fizer alguma merda no server ;)

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT

# Se você suprimir a regra acima e colocar essa em seu lugar, você define que somente o host 100.100.100.100 quando sua conexão entrar pela eth0 poderá acessar o servidor FTP

iptables -A INPUT -i eth0 -s 100.100.100.100 -p tcp -m tcp --dport 21 -j ACCEPT

# Libera acesso na porta 3389 MS-RDP, esta é a regra caso você queira liberar o acesso de alguém na internet à sua rede interna através do MS-RDP (vulgo Terminal Services do Windows)

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3389 -j ACCEPT

# Essa é de lei, libera o acesso ao SSH, crua assim você vai conseguir visualizar milhares tentativas fracassadas ao seu SSH, como já vimos no início do artigo, fechar o acesso do root via SSH é tarefa obrigatória já que você vai querer enviar a senha de root da sua máquina por e-mail spam para o mundo que mesmo assim ninguém vai conseguir acesso, mas NÃO FAÇA ISSO hehehe.

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

# Mais segurança ainda para SSH, libere somente o IP remoto da sua casa para acesso ao SSH, existe um problema com essa regra, se você estiver de férias e precisar conectar ao firewall nem você vai conseguir

iptables -A INPUT -i eth0 -s 100.100.100.100 -p tcp -m tcp --dport 22 -j ACCEPT

# Esta é para fechar nossa configuração de INPUT, após liberar o que quiser feche tudo que tentar acessar sua rede através da internet, esta linha nega tudo que não se classificar nas regras acima

iptables -A INPUT -i eth0 -j REJECT

## CHAIN FORWARD, mesmo com a police de FORWARD liberada (-P FORWARD ACCEPT) é necessário indicar para onde o FORWARD será feito ou os pacotes vão se perder pois, não sabem o caminho :)

# Libera o FORWARD na eth0 para todas as tentativas de conexão na porta 80 do servidor www (web), caso você tenha definido o INPUT para WWW esta regra é obrigatória

iptables -A FORWARD -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 80 -j ACCEPT

# Libera o FORWARD na eth0 para todas as tentativas de conexão na porta 80 do servidor www1 (web), caso você tenha definido o INPUT para WWW esta regra é obrigatória

iptables -A FORWARD -i eth0 -d 200.200.200.201 -p tcp -m tcp --dport 80 -j ACCEPT

# Libera o FORWARD na eth0 para o serviço FTP do servidor www, caso você tenha definido o INPUT para FTP esta regra é obrigatória

iptables -A FORWARD -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 21 -j ACCEPT

# Libera o FORWARD na porta 3389 (necessário para conexões RDP mesmo com INPUT liberado), caso você tenha definido o INPUT -j ACCEPT para a porta 3389 esta regra é obrigatória

iptables -A FORWARD -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 3389 -j ACCEPT

# Bloqueia o FORWARD de todas as conexões do messenger antes que ele chegue nas regras de liberação
iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP

# Bloqueia o imbloqueável Bit Torrent
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP

## CHAIN POSTROUTING e PREROUTING ## NAT ##

# Aqui é um pulo do gato, suponha que você tem uma aplicação web que o mundo acessa, suas máquinas da rede interna também acessam mas, obviamente você não vai consumir sua banda internet fazendo as conexões da rede interna saírem para voltar para sua própria rede, então você redireciona internamente

# Redireciona todas as tentativas de conexão da rede local à www.meuservidor.com.br para os servidores locais

iptables -t nat -A PREROUTING -s 192.168.100.0/24 -d www.meuservidor.com.br -p tcp -m tcp -j DNAT --to 192.168.100.200

# Redireciona todas as tentativas de conexão da rede local à www1.meuservidor.com.br

iptables -t nat -A PREROUTING -s 192.168.100.0/24 -d www1.meuservidor.com.br -p tcp -m tcp -j DNAT --to 192.168.100.201

# Aqui serve para você definir para onde vai uma conexão que entrar pela internet pelo MS-RDP, escolha a máquina Windows com o serviço e redirecione para ela, você pode definir várias máquinas colocando uma porta diferente.

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to 192.168.100.30

# Todas as conexões da estação da rede com ip 192.168.100.10 não atravessarão o proxy SQUID para navegar na internet

iptables -t nat -A PREROUTING -i eth1 -s 192.168.100.10 -p tcp -m tcp -j ACCEPT

# Esta regra nega acesso na porta 443 (https) do orkut, tem neguinho que se acha esperto digitando https://www.orkut.com

iptables -t nat -A PREROUTING -s 192.168.100.0/24 -d www.orkut.com -p tcp -m tcp --dport 443 -j DROP

# Todas as conexões da rede local à porta 80 serão redirecionadas para a porta do proxy (PROXY TRANSPARENTE)

iptables -t nat -A PREROUTING -s 192.168.100.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128

# Redireciona todas as conexões entrantes na porta 80 da eth0 para o servidor www, se você definiu INPUT e FORWARD da internet para a rede interna é necessário definir para onde os pacotes irão após entrarem ou eles se perderão

iptables -t nat -A PREROUTING -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.100.200

# Repete a regra acima para outro servidor, caso exista

iptables -t nat -A PREROUTING -i eth0 -d 200.200.200.201 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.100.201

# Redireciona todas as conexões entrantes na porta 21 da eth0 para o servidor www, se você definiu INPUT e FORWARD da internet para a rede interna também é necessário especificar para onde irão os pacotes ou eles se perderão

iptables -t nat -A PREROUTING -i eth0 -d 200.200.200.200 -p tcp -m tcp --dport 21 -j DNAT --to 192.168.100.200

# NAT, essa nem precisa falar né, libera a galera pra fazer o que bem entender

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -d 0/0 -j MASQUERADE
###############################################################

Finalizada a criação do script, salve e saia, vamos torná-lo executável e colocá-lo na inicialização:

# chmod +x firewall
# vi /etc/init.d/bootmisc.sh


Adicione ao final do arquivo o seguinte conteúdo:

# Inicializando o Firewall
if [ -x /etc/init.d/firewall ]; then
. /etc/init.d/firewall
fi

E pronto.

Agora é reboot na máquina e correr pro abraço, dentro do diretório /etc/l7protocols você vai poder ver todos os pacotes que o layer7 pode bloquear, no site do layer7 há uma tabela com cores que definem se o protocolo é bem suportado, médio ou ruim, e assim por diante, eu vou ficando por aqui, agora você pode ir até uma LAN HOUSE tentar um nmap da vida na sua máquina, veja o que acontece, um simples scan e ele vai dizer que a máquina nem existe, vai ser preciso mais do que p0 e -t insane para começar a brincadeira.

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

Servidor seguro com Bridge, Snort e Guardian

Dominando o iptables (parte 1)

Como criar um firewall de baixo custo para sua empresa

Dominando o Iptables (parte 2)

L7-filter (funcionando) no Slackware 10.2

  
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