Firewall Iptables agressivo para desktop

Publicado por Danilo Martins (última atualização em 29/04/2010)

[ Hits: 13.456 ]

Homepage: www.facebook.com/Nilodanx52

Download Firewall.sh

Download 1272380410.rc.firewall (versão 2)




Há alguns anos venho utilizando inúmeras formas de segurança na internet... e perdi muito tempo.

Pois agora que eu utilizo o Fedora 11 não perco mais tempo! Pesquisei muitas semanas no VOL, Google, entre outros fóruns para encontrar regras e as adaptei às minhas necessidades.

Aqui está o script, bem agressivo, e não dei os direitos dos desenvolvedores pois "um bom filho a casa retorna". Espero que compreendam...

Divirtam-se!!!

  



Versões atualizadas deste script

Versão 2 - Enviado por Danilo Martins em 27/04/2010

Changelog: Como já tinha postado a primeira versão desse script, resolvi postar o que eu uso atualmente, este possui a mesma estrutura, porém retirei algumas coisas e comentei outras.

Download 1272380410.rc.firewall


Esconder código-fonte

#!/bin/sh

echo "####################ATIVANDO IPTABLES#######################"
### Passo 1: Limpando as regras ###
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F POSTROUTING -t nat
iptables -F PREROUTING -t nat
iptables -F -t nat

echo "Limpando as regras ...................................[ OK ]"

# Definindo a Politica das Cadeias
iptables -P INPUT REJECT
iptables -P FORWARD REJECT
iptables -P OUTPUT ACCEPT
echo "Politica das Cadeias .........................[ OK ]"

### Passo 2: Desabilitar o trafego IP entre as placas de rede ###
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "Desabilitar o trafego IP entre as placas .............[ OK ]"

# Configurando a Protecao anti-spoofing
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#for spoofing in /proc/sys/net/ipv4/conf/*/rp_filter; do
# echo "1" > $spoofing
#done
echo "Protecao anti-spoofing ...............................[ OK ]"
###########setando protecao contra ataques
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for i in /proc/sys/net/ipv4/conf/*; do
echo 0 >$i/accept_redirects
echo 0 >$i/accept_source_route
echo 1 >$i/log_martians
echo 1 >$i/rp_filter;
done
echo "Protecao contra ataques ..............................[ OK ]"

# Impedimos que um atacante possa maliciosamente alterar alguma rota
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "Impedimos alterar alguma rota ........................[ OK ]"

# Utilizado em diversos ataques, isso possibilita que o atacante determine o "caminho" que seu
# pacote vai percorrer (roteadores) ate seu destino. Junto com spoof, isso se torna muito perigoso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "Impossibilita que o atacante determine o "caminho" .....[ OK ]"

# Protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "Protecao contra responses bogus ......................[ OK ]"

# Protecao contra ataques de syn flood (inicio da conexao TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Protecao contra ataques de syn .......................[ OK ]"

### Passo 3: Carregando os modulos do iptables ###
# Ativa modulos
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_GRE
echo "Carregando os modulos ................................[ OK ]"

### Pacotes
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
#iptables -A OUTPUT -m state --state ESTABLISHED, RELATED, NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Pacotes ..............................................[ OK ]"

### Ativando o mascaramento (nat)
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "Ativando Mascaramento ................................[ OK ]"

######

# Redireciona porta 80 para 3128 (squid)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

# PORTA 3128 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 3128 -j ACCEPT
echo "Redireciona porta 80 para 3128 .......................[ OK ]"
# PORTA 110 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i eth0 -p udp --dport 110 -j ACCEPT
echo "PORTA 110 ............................................[ OK ]"
# PORTA 25 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 25 -j ACCEPT
echo "PORTA 25 .............................................[ OK ]"
# PORTA 443 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 443 -j ACCEPT
echo "PORTA 443 ............................................[ OK ]"
# PORTA 67 - ACEITA A CONECÇÃO DO DHCP
iptables -A FORWARD -i eth0 -p tcp --dport 67 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 86 -j ACCEPT
iptables -A FORWARD -i eth0 -p udp --dport 67 -j ACCEPT
iptables -A FORWARD -i eth0 -p udp --dport 86 -j ACCEPT
echo "PORTA 67 .............................................[ OK ]"
# https
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p udp --dport 8080 -j ACCEPT
echo "https ................................................[ OK ]"
# PORTA 21 - ACEITA PARA A REDE LOCAL
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp --dport 21 -j ACCEPT
echo "PORTA 21 .............................................[ OK ]"
# PORTA 6881 - PROGRAMAS DE TORRENT'S
iptables -A INPUT -p tcp --dport 6881 -j ACCEPT
iptables -A INPUT -p udp --dport 6885 -j ACCEPT
iptables -A INPUT -p udp --dport 4444 -j ACCEPT
echo "PROGRAMAS DE TORRENT'S ...............................[ OK ]"
#bloqueia qualquer tentativa de nova conexao de fora para esta maquina
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j REJECT
echo "bloqueia tentativa de nova conexao de fora ...........[ OK ]"

#no iptables, temos de dizer quais sockets sao validos em uma conexao
iptables -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Cadeia de Entrada ....................................[ OK ]"
#######################################################################
# No iptables, temos de dizer quais sockets sao validos em uma conexao#
#######################################################################
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Sockets Sao Validos ..................................[ OK ]"
#################################################
################ Tabela FILTER ##################
#################################################
############ Proteção contra tronjans ###########
iptables -A INPUT -p TCP -i eth0 --dport 666 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 4000 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 6000 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 6006 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 16660 -j REJECT
echo "Proteção contra tronjans .............................[ OK ]"
############## Proteção contra worms #################
iptables -A FORWARD -p TCP -i eth0 --dport 135 -j REJECT
echo "Proteção contra worms ................................[ OK ]"
############# Proteção contra trinoo ##################
iptables -A INPUT -p TCP -i eth0 --dport 27444 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 27665 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 31335 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 34555 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 35555 -j REJECT
echo "Proteção contra trinoo ...............................[ OK ]"
######### Protecao contra acesso externo squid ###########
iptables -A INPUT -p TCP -i eth0 --dport 3128 -j REJECT
iptables -A INPUT -p TCP -i eth0 --dport 8080 -j REJECT
echo "Proteção contra squid externo.........................[ OK ]"
############# Protecao contra telnet #############
iptables -A INPUT -p TCP -i eth0 --dport telnet -j REJECT
echo "Proteção contra telnet ...............................[ OK ]"
# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j REJECT
iptables -A FORWARD -m unclean -j REJECT
iptables -A INPUT -m state --state INVALID -j REJECT
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT
iptables -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j REJECT
echo "Prtecoes Diversas ....................................[ OK ]"
# Dropa pacotes TCP indesejaveis
iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j REJECT
echo "Dropa pacotes mal formados ...........................[ OK ]"
# Proteç contra syn-flood
iptables -A FORWARD -p tcp --dport 135 -i eth0 -j REJECT
echo "Protecao contra syn-flood ............................[ OK ]"
# Proteç contra ping da morte
iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT
echo "Proteç contra ping da morte .........................[ OK ]"
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "Caregando tabela filter ..............................[ OK ]"

# Loga tentativa de acesso a determinadas portas
iptables -A INPUT -p tcp --dport 22 -i eth0 -j LOG --log-prefix "FIREWALL: ssh: "
iptables -A INPUT -p tcp --dport 21 -i eth0 -j LOG --log-prefix "FIREWALL: ftp: "
iptables -A INPUT -p tcp --dport 23 -i eth0 -j LOG --log-prefix "FIREWALL: telnet: "
iptables -A INPUT -p tcp --dport 25 -i eth0 -j LOG --log-prefix "FIREWALL: smtp: "
iptables -A INPUT -p tcp --dport 80 -i eth0 -j LOG --log-prefix "FIREWALL: http: "
iptables -A INPUT -p tcp --dport 110 -i eth0 -j LOG --log-prefix "FIREWALL: pop3: "
iptables -A INPUT -p udp --dport 111 -i eth0 -j LOG --log-prefix "FIREWALL: rpc: "
iptables -A INPUT -p tcp --dport 113 -i eth0 -j LOG --log-prefix "FIREWALL: identd: "
iptables -A INPUT -p tcp --dport 137:139 -i eth0 -jLOG --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p udp --dport 137:139 -i eth0 -j LOG --log-prefix "FIREWALL: samba: "
iptables -A INPUT -p tcp --dport 161:162 -i eth0 -j LOG --log-prefix "FIREWALL: snmp: "
iptables -A INPUT -p tcp --dport 6881 -i eth0 -j LOG --log-prefix "FIREWALL: torrent: "
iptables -A INPUT -p udp --dport 6885 -i eth0 -j LOG --log-prefix "FIREWALL: torrent: "
iptables -A INPUT -p udp --dport 4444 -i eth0 -j LOG --log-prefix "FIREWALL: torrent: "
iptables -A INPUT -p tcp --dport 6667:6668 -i eth0 -j LOG --log-prefix "FIREWALL: irc: "
iptables -A INPUT -p tcp --dport 3128 -i eth0 -j LOG --log-prefix "FIREWALL: squid: "
echo "Negando portas indesejadas ...........................[ OK ]"

##Algumas portas devem ser negadas.
iptables -A INPUT -p tcp --dport 1433 -j REJECT
iptables -A INPUT -p tcp --dport 6670 -j REJECT
iptables -A INPUT -p tcp --dport 6711 -j REJECT
iptables -A INPUT -p tcp --dport 6712 -j REJECT
iptables -A INPUT -p tcp --dport 6713 -j REJECT
iptables -A INPUT -p tcp --dport 12345 -j REJECT
iptables -A INPUT -p udp --dport 12345 -j REJECT
iptables -A INPUT -p tcp --dport 12346 -j REJECT
iptables -A INPUT -p udp --dport 12346 -j REJECT
iptables -A INPUT -p tcp --dport 20034 -j REJECT
iptables -A INPUT -p tcp --dport 31337 -j REJECT
iptables -A INPUT -p udp --dport 31337 -j REJECT
iptables -A INPUT -p tcp --dport 6000 -j REJECT
echo "Negando portas invalidas .............................[ OK ]"

#Traceroutes caindo

iptables -A INPUT -p udp --dport 33434:33523 -j REJECT
iptables -A INPUT -p tcp --dport 113 -j REJECT
iptables -A INPUT -p igmp -j REJECT
iptables -A INPUT -p tcp --dport 80 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j REJECT

echo "Rejeitando lixo :.....................................[ OK ]"

###BLOQUEANDO TODAS AS SAIDAS E PORTAS
iptables -A INPUT -p all -j REJECT
iptables -A FORWARD -p all -j REJECT
echo "Rejeitando saida e entrada ...........................[ OK ]"
########################

# Esta regra � o cora��o do firewall,
# ela bloqueia qualquer conex�o que n�o tenha sido permitida acima, justamente por isso ela � a �ltima da cadeia.
iptables -A INPUT -p tcp --syn -j REJECT
echo "Bloqueia tudo :.......................................[ OK ]"


# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Habilitar o trafego IP entre as placas: ..............[ OK ]"

echo "##################FIM DE REGRAS IPTABLES####################"
echo "####################FIREWALL ATIVADO#######################"
exit 0

Scripts recomendados

olhaMeuDesktop 0.1 - Aplicativo para gravar Área de Trabalho

Bloquear o DHCP de dispositivos móveis

Utilitário para Slackware 10

Envio de backps de bancos por ftp com notificação por email

Configurando a raiz do seu servidor apache facilmente.


  

Comentários
[1] Comentário enviado por elgio em 21/08/2009 - 18:46h

Amigo, um script que certamente serve aos vossos propósitos.

Mas ninguém deve baixar ele e simplesmente aplicar, pois foi construído para uma realidade específica sua.

Além de que é perigoso:

iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j REJECT

Com estas regras acima, basta um atacante fazer da Internet um:

hping --fast -S -p 80 QUALQUER_IP_INTERNO_teu

E derruba TODOS OS TEUS SERVIDORES TCP! Fácil fácil. Muito mais fácil do que perder tempo realizando um syn flood de verdade. Agora teu iptables é quem tira teus servidores do ar!
(sim, pois além de 1/s tu dropa)

Má ideia...

[2] Comentário enviado por nilodanx52 em 23/08/2009 - 01:08h

Bem! então, peço humilde mente que me comente novamente se puder (é claro) afim de ajudar-me a não deixar essa falha... e se tiver como mande-me regras que permita-me reduzir maiores transtorno... Abrigado Pelo Alerta!!!
################################
###VIVA O LINUX!!! SEGURANÇA É TUDO!!!###
################################

[3] Comentário enviado por elizeuoliveira em 24/08/2009 - 18:59h

ola cara é o seguinte eu preciso de ajuda para configurar o meu firewall é mno unbutu


meu email e elizeu@worksoft.inf.br

[4] Comentário enviado por pssgyn em 10/03/2010 - 16:09h


Elgio, boa tarde. Estou procurando alguns scripts de firewall que seja simples e funcional. Nesse script que vc fez o seu comentário, qual seria a solução, para o erro que vc apontou ??? Obrigado e uma boa tarde .....

[5] Comentário enviado por luizvieira em 04/05/2010 - 09:15h

Muito bom, só precisa de uma personalização de acordo com o contexto e fica melhor ainda :-)
[ ]'s

[6] Comentário enviado por zenienss em 16/05/2010 - 17:00h

Voce nao deu os creditos aos desenvolvedores e espera que compreendam? que LIXO! Voce é o famoso control+C e Control+V que se acha! Vai estudar e o dia que voce conseguir sozinho dai voce nao precisa dar creditos.
L
I
X
O


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts