shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Script Firewall


From: xxoin
Subject: Re: Script Firewall
Date: Fri, 05 Nov 2004 21:38:27 -0000
User-agent: eGroups-EW/0.82

Prezado Ednaldo e demais participantes do grupo, caso se interessem, 
este é o script_FW que utilizo no trabalho.

Antes, porém, alguns detalhes:

- As variáveis precisam ser ajustadas;
- Utilizo Squid com autenticação de usuáios num PDC;
- Não aceito nenhuma conexão que não venha da rede
interna nas portas do proxy e do apache para
visualização de relatórios gerados pelo sarg;
- Para que a inicilização seja automática (no boot, e
isto vale para o FW_pessoal que coloquei na lista):
edite o arquivo /etc/rc.local com a seguinte linha:

. /etc/init.d/NOME_DO_SCRIPT_FW 

- A linha acima, começa com ponto+espaço...
- Caso você faça alguma alteração utilizando
software_Windows, será necessário "limpar" o END
(final) de todas as linhas do script...
- Não está liberado o outlook para ninguém...

------ Início do script_FW -------
#!/bin/bash

echo "Lendo variáveis..."
echo "Por favor aguarde..."
sleep 2
echo 
echo "Limpando a tela"
clear

# Identificando variáveis:
#-------------------------

# Módulo iptables:
iptables=/usr/sbin/iptables

# Interfaces:
eth_int=eth0
eth_ext=eth1

# Rede:
LAN=10.10.10.0/24

# Máquina para acesso à Imprensa Nacional:
imp_nac=10.10.10.3

# PDC, para autenticação dos usuários do Proxy:
PDC=10.10.10.1

# Caso seja necessário liberar uma máquina para
navegar >sem< proxy: 
#by_pass=10.10.10.x

# IP's do FW_Proxy:
IP_int=10.10.10.254
IP_ext=192.168.200.1

#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<
#
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>

# Iniciando função "start":
# ************************
FW_start(){

# Zerando regras:
$iptables -F
$iptables -t nat -F
$iptables -X

#=============================================================


# Estabelecendo política padrão:
#-------------------------------

$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT ACCEPT
$iptables -t nat -P PREROUTING DROP
$iptables -t nat -P POSTROUTING DROP
$iptables -t nat -P OUTPUT ACCEPT

#==============================================================


# Regras genéricas de proteção:
#------------------------------

# Protegendo de pacotes ping:
$iptables -A FORWARD -p icmp --icmp-type echo-request
-j DROP

# Protegendo contra Ping of Death:
$iptables -A FORWARD -p icmp --icmp-type echo-request
-m limit --limit 1/s -j ACCEPT

# Protegendo contra Port Scan (nmap & cia):
$iptables -A FORWARD -p tcp --tcp-flags
SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Protegendo contra Syn Flood:
$iptables -A FORWARD -p tcp -m limit --limit 1/s -j
ACCEPT

# Negando pings:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Contra ataque "icmp flooding" (broadcasts):
echo 1 >
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Contra mensagens de icmp_redirects:
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# Para evitar o desvio de pacotes:
echo 0 >
/proc/sys/net/ipv4/conf/all/accept_source_route

# Evitar o repasse de pacotes falsificados:
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# Evitar syn flood (syn cookies):
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#===========================================================


# Regras administrativas:
#------------------------

# LOOPBACK:
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT

# Libera ping para o FW:
$iptables -A OUTPUT -p icmp -j ACCEPT


#-----------------> Regras FW > Internet:

# Caso se deseje utilizar Proxy_Transparente, deverão
ser observadas as
# anotações feitas no arquivo /etc/squid/squid.conf
#$iptables -t nat -A PREROUTING -p tcp -i $eth_int
--dport 80 -j REDIRECT --to- port 3128 

# Libera conexões estabilizadas e com estas
relacionadas (já iniciadas):
$iptables -A INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT

# Libera o Proxy/FW para resolver DNS (usar --dport 53
ou domain):
$iptables -A OUTPUT -p UDP --dport 53 -o $eth_ext -j
ACCEPT

# Libera o Proxy para a Rede_Local:
$iptables -A INPUT -p tcp --syn -s $LAN --dport 3128
-j ACCEPT

# Libera navegação para o FW aos protocolos
http/https/ftp:
$iptables -A OUTPUT -p tcp --dport 80 -o $eth_ext -j
ACCEPT
$iptables -A OUTPUT -p tcp --dport 443 -o $eth_ext -j
ACCEPT
$iptables -A OUTPUT -p tcp --dport 20 -o $eth_ext -j
ACCEPT
$iptables -A OUTPUT -p tcp --dport 21 -o $eth_ext -j
ACCEPT

# Libera acesso ao PDC para autenticação de usuários
do Proxy:
$iptables -A OUTPUT -d $PDC -j ACCEPT

# Permite os usuários cadastrados visualizarem os
Relatórios do Sarg:
$iptables -A INPUT -p tcp --syn -s $LAN --dport 80 -j
ACCEPT

#===================================================================


# Liberando o acesso do Setor de Licitações para
acessar a Imprensa Nacional:
#-------------------------------------------------------------------

$iptables -A FORWARD -p UDP -s $imp_nac --dport 53 -j
ACCEPT
$iptables -A FORWARD -p tcp -s $imp_nac -d 201.2.0.1
-j ACCEPT
$iptables -A FORWARD -p tcp -s $imp_nac -d
www.in.gov.br -j ACCEPT
$iptables -A FORWARD -p tcp -s $imp_nac -d
incom.in.gov.br -j ACCEPT
$iptables -A FORWARD -p tcp -s $imp_nac -d
200.252.141.134 --dport 3001 -j ACCEPT
$iptables -A FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
# Negando a navegação em outros sites:
$iptables -A FORWARD -s $imp_nac -j DROP
$iptables -A FORWARD -d $imp_nac -j DROP
# Fazendo NAT para a navegação para a Imprensa
Nacional:
$iptables -t nat -A POSTROUTING -s $imp_nac -o
$eth_ext -j SNAT --to $IP_ext

#====================================================================


#--------> Liberando máquina via FW (navegação sem o
Proxy):
#$iptables -A FORWARD -p UDP -s $by_pass --dport 53 -j
ACCEPT
#$iptables -A FORWARD -p tcp -s $by_pass -d 0/0 -j
ACCEPT
#$iptables -t nat -A POSTROUTING -s $by_pass -o
$eth_ext -j SNAT --to $IP_ext

#=====================================================================


# ----> Logando tentativas de conexão na placa
externa:
$iptables -A INPUT -i $eth_ext -m state --state
NEW,INVALID -j LOG --log-prefix "TENTATIVA_EXT"
$iptables -A INPUT -i $eth_ext -m state --state
NEW,INVALID -j DROP

# ----> Logando outras tentativas de conexão:
$iptables -A INPUT -p tcp --syn -j LOG --log-prefix
"OUTRAS_TENTATIVAS"
$iptables -A INPUT -p tcp --syn -j DROP 


# Fechando função "start":
# ***********************
}

#
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# Iniciando função "stop":
# ***********************
FW_stop(){

# Dando um flushing e abrindo tudo:
$iptables -F
$iptables -t nat -F
$iptables -X

$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 -t nat -P OUTPUT ACCEPT

# Fechando função "stop":
# **********************
}

#
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# Iniciando função "restart":
# **************************
FW_restart(){

FW_stop

FW_start

# Finalizando função "restart":
# ****************************
}

#
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# --->> Mensagens na tela:
#       *****************
 
case "$1" in

"start")
FW_start
echo "O FW_proxy está sendo ativado..."
sleep 1
echo "O FW_proxy foi ativado com sucesso!"
        
    ;;
        
    "stop")
    FW_stop
    echo "O FW_proxy está sendo desativado..."
    sleep 1
    echo "   O FW_proxy foi DESATIVADO!"
    echo '                      ===================='
    echo '                       Mostrando tabelas:'
    echo '                      ===================='
    echo 'Tabela FILTER'
    echo '*************'
    iptables -L -n
    echo
    echo 'Tabela NAT'
    echo '**********'
    iptables -t nat -L

        ;;
                
        "restart")
        FW_restart
        echo "O FW_proxy está sendo desativado..."
        sleep 1
        echo "O FW_proxy está sendo reativado..."
        sleep 2
        echo "O FW_proxy foi ativado com sucesso!"
        
            ;;
                        
            "filter")
            echo "Listando as regras da Tabela FILTER..."
            iptables -L -n
            
                ;;
                                
                "nat")
                echo "Listando as regras da Tabela NAT..."
                iptables -t nat -L
                                                
                    ;;                          
      
                    *)
                    echo "Utilize um dos seguintes comandos:"
                    echo
                    echo "service FW_proxy start --> para iniciar o
FW;"
                    echo "service FW_proxy stop --> para desativar o
FW;"
                    echo "service FW_proxy restart --> para
reiniciar o FW;"
                    echo "service FW_proxy filter --> para mostrar a
Tabela FILTER e"
                    echo "service FW_proxy nat --> para mostrar a
Tabela NAT."
    
esac

# ---------------- < Xxoin - 2004 > -------------------------

------ Final do scritp_FW --------


Qualquer dúvida, manda aí...

Um abração!

_______
Xxoin 



--- Em address@hidden, Edinaldo de Souza Revoredo 
Junior <edinaznet@y...> escreveu
> Cara gostei muito vou usa-lo em casa, gostaria de ver o que vc usa 
num 
> ambiente corporativo, se vc puder postar aqui vai ser muito bom...
> 
> Edinaldo Junior
> 
> 
> 
> 
> xxoin escreveu:
> 
> >
> >Aí vai o que uso num computador pessoal, se lhe interessar o que
> >utilizo num ambiente corporativo me avise...
> >
> >Algumas regras output estão explícitas para o caso de se desejar 
mudar
> >a política para output. O mesmo para a tabela nat...
> >
> >Os logs estão indo para /var/log/messages
> >
> >
> >_____ script_FW-início __________
> >
> >#!/bin/bash
> >
> >echo "Lendo variáveis..."
> >echo "Por favor aguarde."
> >sleep 2
> >echo 
> >echo "Limpando a tela."
> >clear
> >
> ># Identificando variáveis:
> >#-------------------------
> >
> ># Módulo iptables:
> >iptables=/usr/sbin/iptables
> >
> ># Interfaces:
> >eth_int=eth0
> >eth_ext=ppp0
> >
> ># Iniciando função "start":
> ># ************************
> >FW_start(){
> >
> ># Zerando regras:
> >$iptables -F
> >$iptables -t nat -F
> >$iptables -X
> >
> >#=============================================================
> >
> >
> ># Estabelecendo política padrão:
> >#-------------------------------
> >
> >$iptables -P INPUT DROP
> >$iptables -P FORWARD DROP
> >$iptables -P OUTPUT ACCEPT
> >$iptables -t nat -P PREROUTING ACCEPT
> >$iptables -t nat -P POSTROUTING ACCEPT
> >$iptables -t nat -P OUTPUT ACCEPT
> >
> >#==============================================================
> >
> >
> ># Regras genéricas de proteção:
> >#------------------------------
> >
> ># Protegendo de pacotes ping:
> >$iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
> >
> ># Protegendo contra Ping of Death:
> >$iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --
limit
> >1/s -j ACCEPT
> >
> ># Protegendo contra Port Scan (nmap & cia):
> >$iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m 
limit
> >--limit 1/s -j ACCEPT
> >
> ># Protegendo contra Syn Flood:
> >$iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
> >
> ># Negando pings:
> >echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
> >
> ># Contra ataque "icmp flooding" (broadcasts):
> >echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
> >
> ># Contra mensagens de icmp_redirects:
> >echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
> >
> ># Para evitar o desvio de pacotes:
> >echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
> >
> ># Evitar o repasse de pacotes falsificados:
> >echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
> >
> ># Evitar syn flood (syn cookies):
> >echo 1 > /proc/sys/net/ipv4/tcp_syncookies
> >
> >#===========================================================
> >
> >
> ># Regras administrativas:
> >#------------------------
> >
> ># LOOPBACK:
> >$iptables -A INPUT -i lo -j ACCEPT
> >$iptables -A OUTPUT -o lo -j ACCEPT
> >
> ># Libera ping para o FW:
> >$iptables -A OUTPUT -p icmp -j ACCEPT
> >
> >
> >#-----------------> Regras FW > Internet:
> >
> ># Libera conexões estabilizadas e com estas relacionadas (já 
iniciadas):
> >$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
> >
> ># Libera o Proxy/FW para resolver DNS (usar --dport 53 ou domain):
> >$iptables -A OUTPUT -p UDP --dport 53 -o $eth_ext -j ACCEPT
> >
> ># Libera navegação para o FW aos protocolos http/https/ftp:
> >$iptables -A OUTPUT -d 201.2.0.1 -o $eth_ext -j ACCEPT
> >$iptables -A OUTPUT -p tcp --dport 80 -o $eth_ext -j ACCEPT
> >$iptables -A OUTPUT -p tcp --dport 443 -o $eth_ext -j ACCEPT
> >$iptables -A OUTPUT -p tcp --dport 20 -o $eth_ext -j ACCEPT
> >$iptables -A OUTPUT -p tcp --dport 21 -o $eth_ext -j ACCEPT
> >
> ># Mascarando as conexões:
> >$iptables -t nat -A POSTROUTING -o $eth_ext -d 0/0 -j MASQUERADE
> >
> ># ----> Logando tentativas de conexao na placa externa:
> >$iptables -A INPUT -i $eth_ext -m state --state NEW,INVALID -j LOG
> >--log-prefix "TENTATIVA_EXT"
> >$iptables -A INPUT -i $eth_ext -m state --state NEW,INVALID -j DROP
> >
> ># Logando outras tentativas de conexão:
> >$iptables -A INPUT -p tcp --syn -j LOG --log-
prefix "OUTRAS_TENTATIVAS"
> >$iptables -A INPUT -p tcp --syn -j DROP
> >
> >
> ># Fechando função "start":
> ># ***********************
> >}
> >
> >#
> >  
> >
> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<
> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            
                                                        
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >
> ># Iniciando função "stop":
> ># ***********************
> >FW_stop(){
> >
> ># Dando um "flushing" e abrindo tudo:
> >$iptables -F
> >$iptables -t nat -F
> >$iptables -X
> >
> >$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 -t nat -P OUTPUT ACCEPT
> >
> ># Fechando função "stop":
> ># **********************
> >}
> >
> >#
> >  
> >
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> 
> ># Iniciando função "restart":
> ># **************************
> >FW_restart(){
> >
> >FW_stop
> >
> >FW_start
> >
> ># Finalizando função "restart":
> ># ****************************
> >}
> >
> >#
> >  
> >
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> 
> ># Mensagens na tela:
> ># *****************
> > 
> >case "$1" in
> >
> >"start")
> >
> >FW_start
> >echo "O FW está sendo ativado..."
> >sleep 2
> >echo "O FW foi ativado com sucesso!"
> >        
> >   ;;
> >     "stop")
> >        FW_stop
> >     echo "O FW está sendo desativado..."
> >     sleep 1
> >     echo "O FW foi DESATIVADO!"
> >        echo '                       ===================='
> >     echo '                   Mostrando tabelas:'
> >     echo '                  ===================='
> >     echo
> >     echo 'Tabela FILTER'
> >     echo '*************'
> >     iptables -L -n
> >     echo
> >     echo 'Tabela NAT'
> >     echo '**********'
> >     iptables -t nat -L
> >     echo 
> >     
> >   ;;
> >             "restart")
> >             FW_restart
> >             echo "O FW está sendo desativado..."
> >             sleep 1
> >             echo "O FW está sendo reativado..."
> >             sleep 2
> >             echo "O FW foi ativado com sucesso!"
> >        
> >   ;;
> >                     *)
> >                     iptables -L -n |less
> >
> >esac
> >
> >________ Final do script_FW ____________
> >
> >
> >_______
> >Xxoin
> >
> >
> >_________________________________________________________
> >
> >
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]