domingo, 1 de julho de 2012

Script de Firewall (IPTABLES)

Bem, faz um tempo que não posto nada, estava meio enrolado com os trabalhos da Faculdade, mais faz parte.
Hoje vou postar um script de firewall, bem simples porém é meu primeiro script, e pode ser de ajuda para alguém. Não vou explicar por enquanto o conteúdo de comandos e tudo mais do script, porém o mesmo está comentado.

O arquivo se encontra dentro do diretório /etc/init.d/firewall.sh

Deve se dar permissão de execução:
# chmod +x /etc/init.d/firewall.sh

Segue arquivo de Configuração.



#!/bin/bash
# SISTEMA OPERACIONAL: DEBIAN 6.0.5
#BLOG: www.linuxstudylpi.blogspot.com.br
#Futuro Analista de Redes/Suporte a Servidores
#DATA: 30/06/2012
#Escrevendo meu primeiro Script de Firewall IPTABLES
#Cléio Sousa

## INDICAR O INICIO/REINICIO DO FIREWALL
case $1 in
start|restart)
echo "Iniciando Firewall"

## CARREGANDO MODULOS NECESSÁRIOS PARA UM BOM FUNCIONAMENTO DAS REGRAS
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ipt_MASQUERADE
modprobe ipt_LOG

## LIMPAR REGRAS ANTERIORES
iptables -F
iptables -t nat -F

# DEFINIR POLITICA PADRAO (NEGAR TUDO)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

## COMPARTILHAR CONEXAO DE INTERNET

## IP DINAMICO
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

## IP FIXO
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 189.19.40.7

## ATIVAR ROTEAMENTO
echo "1" > /proc/sys/net/ipv4/ip_forward

########  Regra para proxy Squid transparente ##########################################
#echo " Ativando o Proxy Transparente SQUID .......... [ OK ]"                         #
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128    #
#iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j REDIRECT --to-port 3128    #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE                                  #
#################################################################################

#### Regra de redirecionamento das portas de DNS e NTP para o SQUID ####################
#echo " Redirecionando portas DNS e NTP para o SQUID .......... [ OK ]"                #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 53 -j REDIRECT --to-port 3128    #
#iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 123 -j REDIRECT --to-port 3128   #
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE                                  #
#################################################################################

####### Regra para liberação de portas usadas por programas p2p ########################
#echo " Liberando portas para aMule e Transmission ( p2p ) .......... [ OK ]"          #
#iptables -A INPUT -m multiport -p tcp --dport 4661,4662,51413 -j ACCEPT               #
#iptables -A INPUT -m multiport -p udp --dport 4665,4672 -j ACCEPT                     #
#################################################################################

#### Regra para Bloqueio de portas UDP #################################################
#portas UDP são usadas em geral por programas onde a integridade dos pacotes de dados  #
#não é tão essencial, como por exemplo o ICQ, o PC Anywhere, o Apple Quick Time        #
#(o servidor), vários jogos multiplayer, entre outros.                                 #
#                                                                                      #
#echo " Fechando portas UDP 1:1024 .......... [ OK ]"                                  #
#iptables -A INPUT -p udp --dport 1:1024 -j LOG --log-prefix "_BLOCKED_UDP_: "         #
#iptables -A INPUT -p udp --dport 1:1024 -j DROP                                       #
#################################################################################

## Lembrando que no começo do arquivo há uma regra de bloqueio total, incluindo a
# própria máquina (Servidor) abaixo vem as regras para liberar a máquina (Servidor) e acesso
# a internet!!

## Libera a rede localmente, para a  própria máquina (LOOPBACK) ########################
iptables -A INPUT -i lo -j ACCEPT

#### Agora a regra para estabelecer a conexão com a internet para a rede Servidor ##########
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
#### A Regra acima estabelece a conexão com a internet somente para o servidor, a rede
# interna ainda continua sem acesso a internet #########################################

# LIBERA A PORTA 3128 USADA PELO SQUID PARA A REDE LOCAL
iptables -A FORWARD -i eth0 -p tcp --dport 3128 -d 192.168.0.0/255.255.255.0 -j ACCEPT
### Estabelece a conexão para a rede Local
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

## LIBERAR/BLOQUEAR A REDE LOCAL/ COMEÇA A TER ACESSO A INTERNET A REDE
## LOCAL
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

#### LIBERA O PING AO SERVIDOR  PARA REDE INTERNA ################
iptables -A INPUT -s 0/0 -i eth0 -p icmp -j ACCEPT

######## Regras de segurança contra Ataques, pings etc.. #############################

echo " Protegendo contra Pings ( ignorando ) .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo " Protegendo contra IP spoofing .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo " Protegendo contra diversos ataques .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo " Protegendo contra bogus responses .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo " Protegendo contra IP synflood .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

echo " Protegendo contra ICMP Broadcasting .......... [ OK ]"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo " Protegendo contra alteração de rota .......... [ OK ]"
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

echo " Protegendo contra Pings da Morte .......... [ OK ]"
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

echo " Protegendo contra traceroute .......... [ OK ]"
iptables -A INPUT -p udp --dport 33435:33525 -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -p udp --dport 33435:33525 -j DROP

echo " Protegendo contra portscanners, ping of death, ataques DoS, etc. .......... [ OK ]"
iptables -A INPUT -m state --state INVALID -j LOG --log-prefix "_BLOCKED_: "
iptables -A INPUT -m state --state INVALID -j DROP



;;

stop)
echo "CUIDADO SUA MAQUINA ESTA SEM FIREWALL - ATENCAO!!!..."
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -F
iptables -t nat -F
;;

*)
echo "Digite start, restart ou stop para ativar/reativar/desativar"
exit 1
;;

esac

#################################################################################

Bem é isso pessoal, por enquanto ainda estou estudando e testando estas regras e outras, porém até o momento funcionou legal este script, agora é só alterar conforme sua necessidade, e ir estudando e testando outras regras.

Abraço!!


Referências:
http://www.hardware.com.br/livros/linux-redes/capitulo-firewall.html
http://www.vivaolinux.com.br
http://www.tccamargo.com/linux/tutoriais/iptables.html





6 comentários:

  1. Parabéns Cleio, seu script de firewall star muito bom, mas te deixo uma dica, dependendo do porte da rede não é muito viável configurar um proxy transparente, pois seria fácil de burlar, o ideal é configurá-lo normalmente e incluir o ip do proxy dentro do arquivo dhcpd.conf, para que as estações recebam o ip dinamicamente. Gostaria de agradecê-lo pelas visitas e por ter gostado do meu site quero que sinta-se a vontade para opinar e enviar dúvidas, caso tenha. Abraços...

    fagner.mendes22@gmail.com

    ResponderExcluir
  2. Valeu Fagner, no caso as regras para proxy transparentes estão comentadas, nos meus testes não utilizei o squid com proxy transparente, mas agradeço o toque que me deu, sobre a segurança.
    Abraço!

    ResponderExcluir
  3. qual regra devo fazer, pois os colaboradore tiram o proxy e consegue navegar tranquilo, utilizamos o mozila

    ResponderExcluir
  4. Este comentário foi removido pelo autor.

    ResponderExcluir
  5. cara a regra para proxy transparente está comentada neste script, é só adaptar ao seu uso, vc precisa direcionar todo o trafego da porta 80 para a porta 3128, utilizada pelo Squid.

    ResponderExcluir