Depois de um bom tempo lendo artigos e mais artigos da internet, decidi que iria montar um script de firewall que protegesse minha rede de ataques e outros danos que a internet nos traz. Depois de montado e testado o script, queria entender os logs, foi aí que conheci o Fwanalog e gostaria de dividir com todos minha aventura.
Só para considerações de estudo no Linux, as funções de firewall são agregadas à própria arquitetura do kernel, isso o torna sem dúvida muito superior em relação a seus concorrentes. Enquanto a maioria dos produtos "firewall" são denominados de subsistemas, o Linux possui a capacidade de transformar o firewall no próprio.
Tudo que chega ou sai de um host é processado por seu kernel, independente de sistema operacional. O que o Linux faz de diferente é agregar, via Netfilter (software este inicialmente acoplado ao sistema), funções de controle de fluxo interno em termos de firewall.
Então sem mais conversa, segue o meu script de firewall e lembrando que pode ser modificado para melhorias em outras redes, apenas peço que lembrem sempre de quem o criou.
#!/bin/bash
echo Script de Firewall Montando por:
echo Nome: Rafael da Silva Rosa
echo Funcao: Analista de informatica PL
echo Fone: 35 8833-0343 ou 35 3552-6462
echo
echo
### Compartilhamento da Internet
echo Compartilhando a internet
iniciar(){
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
echo Internet Compartilhada ..... [ok]
### Alterar política padrão
echo Alterando a Politica Padrao
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo politica padrao ..... [ok]
### Libera a loopback e a rede local
echo Liberando Loopback e Rede Local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --syn -s 192.168.52.0/28 -j ACCEPT
iptables -A OUTPUT -p tcp --syn -s 192.168.52.0/28 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 192.168.52.0/28 -j ACCEPT
echo Loopback e Rede local ..... [ok]
### Redirecionar acessos para o Squid retirando o ip do servidor
echo Redirecionando rede para Squid e log na porta 80
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 >'
iptables -I INPUT -s 192.168.52.3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 200.xxx.xxx.xxx -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 DROP>'
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -t nat -A PREROUTING -s 192.168.52.4 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.52.2 -p tcp --dport 80 -j REDIRECT --to-port 3128
echo Redirecionamento .... [ok]
# Segurança
### Segurança Diversa
echo Seguranca da rede, Firewall e gerando logs de portas
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
### Impedindo ataque Ping of Death no Firewall
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
### Descarte de pacotes nao identificados ICMP
iptables -A OUTPUT -m state -p icmp --state INVALID -j DROP
iptables -A INPUT -m state -p icmp --state INVALID -j DROP
iptables -A FORWARD -m state -p icmp --state INVALID -j DROP
### Impedindo ataque Ping of Death na rede
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
### Impedindo ataque de Denial Of Service Dos na rede e servidor
iptables -I FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp -m limit --limit 1/s -j ACCEPT
### Impedindo ataque Port Scanners na rede e no Firewall
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -I INPUT -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO>'
iptables -A INPUT -p udp --dport 33435:33525 -j DROP
iptables -I FORWARD -p udp --dport 33435:33525 -j LOG --log-level info --log-prefix 'SCANNERS DROPADO NA REDE>'
iptables -A FORWARD -p udp --dport 33435:33525 -j DROP
### Bloquear Back Orifice na rede
iptables -I INPUT -p tcp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE DROPADO>'
iptables -A INPUT -p tcp --dport 31337 -j DROP
iptables -I INPUT -p udp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE UDP>'
iptables -A INPUT -p udp --dport 31337 -j DROP
iptables -I FORWARD -p tcp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE NA REDE>'
iptables -A FORWARD -p tcp --dport 31337 -j DROP
iptables -I FORWARD -p udp --dport 31337 -j LOG --log-level info --log-prefix 'ORIFICE NA REDE UDP>'
iptables -A FORWARD -p udp --dport 31337 -j DROP
### Bloquear NetBus na rede
iptables -I INPUT -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS >'
iptables -A INPUT -p tcp --dport 12345 -j DROP
iptables -I INPUT -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
iptables -A INPUT -p udp --dport 12345 -j DROP
iptables -I FORWARD -p tcp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS NA REDE>'
iptables -A FORWARD -p tcp --dport 12345 -j DROP
iptables -I FORWARD -p udp --dport 12345 -j LOG --log-level info --log-prefix 'NETBUS UDP>'
iptables -A FORWARD -p udp --dport 12345 -j DROP
### Desabilita resposta para pingecho 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
### Desabilita port scan
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
### Desabilita redirecionamento de ICMP
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 >$f
done
### Protecao contra synflood
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
### Ativando protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
### Protecao contra worms
iptables -I FORWARD -p tcp --dport 135 -j LOG --log-level info --log-prefix 'WORMS REDE>'
iptables -A FORWARD -p tcp --dport 135 -j DROP
iptables -I INPUT -p tcp --dport 135 -j LOG --log-level info --log-prefix 'WORMS >'
iptables -A INPUT -p tcp --dport 135 -j DROP
[1] Comentário enviado por elton.lima em 23/09/2010 - 07:54h
Camarada tenho grandes dúvidas em relaçao ao redirect do squid no IPTABLES. Me explica quem são esses IPs 192.168.52.4 e 192.168.52.2 e a linha 'iptables -I INPUT -s 200.xxx.xxx.xxx -p tcp --dport 80 -j ACCEPT'
Obrigado ! :)
### Redirecionar acessos para o Squid retirando o ip do servidor
echo Redirecionando rede para Squid e log na porta 80
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 >'
iptables -I INPUT -s 192.168.52.3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -s 200.xxx.xxx.xxx -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 DROP>'
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -t nat -A PREROUTING -s 192.168.52.4 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.52.2 -p tcp --dport 80 -j REDIRECT --to-port 3128
echo Redirecionamento .... [ok]
[2] Comentário enviado por removido em 23/09/2010 - 08:56h
Bom dia meu camarada. O que acontece ai éo seguinte:
1º esse endereços de ips são da minha rede interna.
2º na minha rede tinha apenas 3 micro para acesso a internet, 2 usuário e um servidor que queria acesso a internet pela porta 80 e os dois usuário pela porta 3128.
3º eu poderia redirecionar minha placa da rede interna exemplo eth1 para a porta 3128, mas ai eu redirecionaria meu servidor também, então o que eu fiz foi:
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 >'
LOG DA PORTA 80 ACEITO
iptables -I INPUT -s 192.168.52.3 -p tcp --dport 80 -j ACCEPT
LIBEREI ACESSO DO SERVIDOR QUE EU QUERIA NA PORTA 80
iptables -I INPUT -s 200.xxx.xxx.xxx -p tcp --dport 80 -j ACCEPT
LIBEREI ACESSO A PORTA 80 PARA O IP DA MATRIZ (RELATÓRIO SARG E FWANALOG)
iptables -I INPUT -p tcp --dport 80 -j LOG --log-level info --log-prefix 'PORTA 80 DROP>'
LOG DA PORTA 80 RECUSADO
iptables -A INPUT -p tcp --dport 80 -j DROP
FECHEI A PORTA 80 PARA O RESTANTE
iptables -t nat -A PREROUTING -s 192.168.52.4 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 192.168.52.2 -p tcp --dport 80 -j REDIRECT --to-port 3128
REDIRECIONEI MEUS 2 USUÁRIOS PARA O SQUID
[5] Comentário enviado por removido em 23/09/2010 - 19:20h
Boa noite camarada f360c4, obrigado pelo post e pela dica mas acho que houve um equivoco. Porque.
No próprio artigo eu descrevo que a importância maior do mesmo é divulgar o livro do Iptables, pela facilidade que encontrei para
entender o iptables após a leitura do mesmo. Depois eu ainda citei e não menos de uma vez o artigo do que está no link que você
postou, e citei também que a importância era o script de firewall.
Realmente eu utilizei o artigo postado por você como referências de estudo para criar o meu. Já a parte em que você diz que se seguir
o meu artigo não funciona por favor posta a dificuldade que te ajudaremos, mas só para lembrar que se eu colocar tudo e você só
copiar e colar ai não terá aprendizado. Não me leva a mal também, é só para efeito de resposta.
[6] Comentário enviado por removido em 23/09/2010 - 19:29h
Boa noite silent-man essa regra diz o seguinte:
iptables -A OUTPUT -p tcp --sport 1024:5999 --dport 1863:1863 -m state --state NEW -j ACCEPT
Tudo que sair para fora da rede OUTPUT, que for do protocolo tcp -P TCP com as portas de origem 1024 até 5999
e com as portas de destino 1863 e que for uma conexão com estado NOVO ele aceita -j ACCEPT
Isso que dizer que qualquer pacote da minha rede com essas portas de origem e de destino
ele aceita, mas são pacotes QUE SAEM da minha rede OUTPUT.
[9] Comentário enviado por removido em 24/09/2010 - 17:47h
Boa silent-man, mas para acessar o msn não tenho que sair pelo firewall?
Então com a regra OUTPUT eu não libero a saida por essas portas para fora, ou seja, para a internet? Com isso toda requisição que for feita nas portas de origem e para as portas de destino precisam sair pelo firewall (OUTPUT). O FORWARD seria para o caso de repasse de pacotes para a minha rede. Bom acho que expliquei legal, mas caso não vamos discutir mais rsrs
[10] Comentário enviado por silent-man em 25/09/2010 - 12:08h
Vamos lá.
~# man iptables
filter:
This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets)
Levando em consideração que sua política padrão seja DROP.
As tabelas são as seguintes:
1 - INPUT (para pacotes destinados aos soquetes local) Ou seja, todo pacote que se destina ao FIREWALL. Para você acessar o firewall remotamente via ssh você deve liberar o INPUT na sua porta ssh(padrão 22).
~# iptables -t filter -A INPUT -p tcp -s ip_do_seu_micro -d ip_do_firewall(ip que escuta na porta ssh) --dport 22 -j ACCEPT
2 - FORWARD (para pacotes sendo roteados através da máquina) Ou seja, tudo que vá para uma rede diferente da origem(de quem faz a requisição). Digamos que você tenha duas redes uma LAN 172.16.254.0/24 e uma rede DMZ 10.3.254.0/24(rede dos servidores). Você da sua LAN que chegar no servidor telnet na DMZ, você precisa liberar o FORWARD(tráfego para redes distintas).
3 - OUTPUT (para pacotes gerados localmente) Ou seja, tudo que é gerado no próprio firewall para fora dele, um ping por exemplo. Se você quer pingar o google você deve liberar o OUTPUT.
[11] Comentário enviado por removido em 25/09/2010 - 14:53h
Olá ribasfs, todo o script que fiz foi desenvolvido nas regras que aprendi com o livro.
Se você puder ler o livro verá que ele não mostra regras e sim ensina como usá-las.
Então resumindo eu criei as regras em cima do que aprendi no livro.
Acho que respondi sua questão.
Abraços.
[12] Comentário enviado por removido em 25/09/2010 - 14:58h
Olá silent-man, claro que considero sua critica como construtiva e obrigado por enviá-la e também vi que você usou
o man do iptables para me mostrar como funciona as regras do pitables. Mas eu usei essa e resolveu meu
problema com o msn, então deduzi que a regra funcione como eu expliquei.
Mas obrigado pelo crítica.
Abraço.
[13] Comentário enviado por gabolli em 14/12/2011 - 08:31h
Bom dia, amigo tenho uma duvida vc no caso liberou o Sicoob, esta mesma regra serveria para eu liberar outros progrmas utilizo o M3Client, da mobiltec e um programa que utilizo para fazer captação de pedidos assim os vendedores com os aparelhos de celular envião os pacotes de pedidos para um servidor logo depois eu utilizo esse programa para baixar esse pacote este programa utiliza porta 8090, como eu libero esta porta e tambem como faço para ela passar direto pelo squid. ?
[14] Comentário enviado por removido em 10/01/2012 - 22:18h
cara para liberar a porta vc vai usar a regra iptables -a input -8090 -j accept para passar pelo firewall e forward se for repassar para a rede, usa a regra antes de qualquer bloqueio para que vc tenha certeza da liberação e a regra que fiz para o sicob foi para liberar o acesso na porta 80 para minha rede, lembrando que ela tem que ser colocada antes da regra de repasse para a porta 3128 pois o firewall le as regra de cima para baixo como pilha, e respondendo sua pergunta se ela serve para liberar outra aplicação serve sim desde que siga a porta 80. Qualquer estou a disposição.