Dead Packets

11/07/2012

TCP RST enviado pelo firewall

Filed under: cisco,troubleshooting — drak @ 7:00 PM

Caso: Capture no Cisco ASA (caixa grande, 5550) indicava intermitência na comunicação de certos tráfegos, ora estabelecia conexão ora a mesma recebia um TCP Reset. Foi inicialmente verificado as métricas de performance do equipamento: CPU e memória normais, tráfego na interface também normal.

Foi verificado o detalhe do tráfego ponto a ponto, originava de um determinado host da rede interna, chegava no firewall e era enviada para um VIP (Load Balancer F5 BigIP). Foi montada um tcpdump no BigIP para determinar qual dos servidores da farm estava enviando o TCP Reset e qual não foi a surpresa quando na captura do BigIP não foi encontrado nenhum pacote RST sendo enviado.

Tráfego passando normalmente

Tráfego sendo rejeitado com TCP RST

Surgiu a questão, porque o firewall estava enviando os resets (já que não havia outros elementos que poderiam fazer isso na topologia) ?

Foi feito nova revisão do firewall, verificou-se a configuração da ACL, existência de service policy (não havia) e outros parâmetros de segurança que poderiam limitar conexões como threath-detection, nada relevante foi encontrado.

Foi passado a informação de que uma nova aplicação relacionada ao SAP havia entrado em produção há pouco tempo, o que poderia ter causado algum impacto de performance no firewall, porém parâmetros como CPU e memória já haviam sido analisados e não estavam nem perto de 100%, foi quando analisando o número de conexões estabelecidas (sh conn count) notamos que o número era estranhamente “redondo”, 650001. Imediatamente suspeitamos que o número máximo de sessões do equipamento havia sido atingido, ao validar o número de sessões simultâneas que o equipamento suporta no datasheet do fabricante finalmente validamos a suspeita, entendendo que o comportamento observado ocorria justamente por esse limite ter sido alcançado.

Comunicamos ao time da aplicação o problema encontrado, fizemos uma análise de sessões (inserir link) para determinar os IPs mais ofensivos (do ponto de vista de número de sessões criadas) e passamos essa informação a eles, durante essa análise notamos que o maior tráfego era de servidores de backup fazendo consultas DNS, descobrimos que as máquinas de backup estavam rodando o software Data Protector que em sua configuração padrão realiza uma consulta no DNS reverso do IP do servidor que está sendo feito o backup, o motivo do número excessivo de sessões foi que a zona de DNS reversa não estava configurada e portanto o Data Protector ficava continuamente tentando efetuar essa consulta ao DNS, que nunca era resolvida com sucesso, causando um efeito similar a o de uma ataque DoS e estourando o número de sessões utilizadas no firewall.

Referências
Cisco ASA 5500 Series Adaptive Security Appliances

Anúncios

02/09/2011

Traceroute passando pelo firewall Cisco ASA

Filed under: cisco,dicas e truques — drak @ 8:40 PM

Depois de um tempo inativo, finalmente um post novo, pequeno para começar com calma 😛

Um recurso muito útil para analisar se determinado tráfego está passando pelos firewalls que você administra é o traceroute, este comando envia pacotes (geralmente UDP se for Linux, ICMP se Windows) com TTL iniciando em 1 e incrementando-os a cada 3 pacotes, ele espera como retorno um pacote ICMP Time Exceeded (type 11, code 0).

Quando um equipamento L3 recebe um pacote antes de roteá-lo ele irá subtrair 1 do TTL do pacote a ser roteado, caso esse valor chegue a zero o roteador irá devolver um pacote de erro ICMP Time Exceeded e o IP da interface que entrou o pacote erá o visto nesse retorno.

Uma dificuldade associada a realizar um traceroute num ambiente que possui firewalls Cisco (tanto PIX quanto ASA) é que, devido à configuração padrão destes equipamentos não subtrairem TTL como um outro device que roteia qualquer os mesmos não aparecem no traceroute, ou seja, ao fazer um traceroute entre a rede interna e a DMZ você não irá ver nenhum IP da interface do firewall no resultado.

Essa tecnologia funciona dessa maneira pois provê uma segurança adicional, tornando o firewall “invisível” na rede, porém há casos de redes complexas em que a necessidade de facilitar o troubleshooting é maior do que o risco de expor o IP do firewall em um traceroute, e para esse caso é possível implementar uma configuração no ASA para que ele apareça no traceroute, basta seguir o seguinte artigo da Cisco: Make the Firewall Show Up in a Traceroute in ASA/PIX

Referências
ICMPv4 Traceroute Messages
Traceroute
ASA/PIX/FWSM: Handling ICMP Pings and Traceroute

30/06/2010

SNAF Lab Notes

Filed under: certificação,cisco — drak @ 11:02 AM

Seguindo o mesmo espírito do CCNA Security Lab Notes, seguem algumas anotações utilizadas durante o estudo. Para este exame utilizei como principais recursos:

– Cisco ASA: All-in-One Firewall, IPS, Anti-X, and VPN Adaptive Security Appliance (2nd Edition)
– Material do curso Securing Networks with ASA Fundamentals (SNAF)
– Labs em equipamentos reais

wr erase
reload
sh mem
sh ver
sh hist
sh bootvar
dir
boot system disk0:/asa822-k8.bin
asdm image disk0:/asdm-631.bin
wr mem
logging enable
logging host inside 10.1.1.1
logging trap debugging

same-security-traffic permit inter-interface
same-security-traffic permit intra-interface

dhcpd address 10.0.0.100-10.0.0.200 inside
dhcpd enable inside
dhcpd dns 192.189.10.10 interface inside
dhcpd wins 192.189.10.10 interface inside
dhcpd lease 80000 int inside

! Modular Policy Framework

access-l INTERNET_ACL permit tcp any object-group WEBSERVERS object-group HTTP_SVC
access-l VOIP_ACL permit object-group VOIP_Protocols 192.168.1.0 255.255.255.0 172.18.0.0 255.255.0.0

class-map VOICE_MAP
match access-l VOIP_ACL
class-map INTERNET_MAP
match access-l INTERNET_ACL
policy-map OUTSIDE_POL
class VOICE_MAP
priority
class INTERNET_MAP
ips inline fail-open
service-policy OUTSIDE_POL interface outside

class-map type management MANAGEMENT
match port tcp eq https
policy-map outside-policy
class MANAGEMENT
set connection conn-max 10 embryonic-conn-max 8

sh service-policy

class-map 8080_INSPECT_TRAFFIC
match port tcp eq 8080
policy-map global_policy
class 8080_INSPECT_TRAFFIC
inspect http

! Threat detection

threat-detection basic-threat
threat-detection rate
threat-detection rate dos-drop rate-interval 600 average-rate 50 burst-rate 100
sh threat-detection scanning-threat attacker
sh threat-detection shun
sh threat-detection statistics

! VPN

crypto isakmp enable outside

crypto isakmp policy 10 authen pre-share
crypto isakmp policy 10 encrypt 3des
crypto isakmp policy 10 hash sha
crypto isakmp policy 10 group 2
crypto isakmp policy 10 lifetime 86400

tunnel-group 192.168.11.2 type ipsec-l2l
tunnel-group 192.168.11.2 ipsec-attributes
pre-shared-key CHAVE
isakmp keepalive threshold 10 retry 2

access-l outside_1_cryptomap line 1 extended permit ip 10.0.1.0 255.255.255.0 10.0.11.0 255.255.255.0

crypto ipsec transform-set ESP-3DES-SHA esp-3des esp-sha-hmac
crypto map outside_map 1 match address outside_1_cryptomap
crypto map outside_map 1 set pfs group2
crypto map outside_map 1 set peer 192.168.11.2
crypto map outside_map 1 set transform-set ESP-3DES-SHA
crypto map outside_map 1 interface outside

access-l inside_nat0_outbound line 1 extended permit ip 10.0.1.0 255.255.255.0 10.0.11.0 255.255.255.0
nat (inside) 0 access-list inside_nat0_outbound tcp 0 0 udp 0

sh run access-l
sh run isakmp
sh run tunnel-group
sh run ipsec
sh run crypto map

sh crypto isakmp sa
sh crypto ipsec sa

crypto isakmp enable outside

crypto isakmp policy 10 authen pre-share
crypto isakmp policy 10 encrypt 3des
crypto isakmp policy 10 hash sha
crypto isakmp policy 10 group 2
crypto isakmp policy 10 lifetime 86400

ip local pool MYPOOL 10.0.21.1-10.0.21.254 mask 255.255.255.0

tunnel-group REMOTE type remote-access
tunnel-group REMOTE ipsec-attributes
pre-shared-key CHAVE
tunnel-group REMOTE general-attributes
default-group-policy POL_REMOTE
address-pool MYPOOL
group-policy POL_REMOTE internal
group-policy REMOTE attributes
vpn-tunnel-protocol IPSec
dns-server value 10.0.1.15 172.30.1.15
wins-server value 10.0.1.16 172.30.1.16
default-domain value remote.com
username CarterB attributes vpn-group-policy MYGROUP

webvpn
enable outside
import webvpn url-list URL disk0:/tmpAsdmImportFile128451205
delete /noconfirm disk0:/tmpAsdmImportFile128451205
username usuario1 password LBc0wsr7MhAKY5C5 encrypted privilege 0
username usuario1 attributes
vpn-group-policy Grp_Pol_VPN1
group-policy Grp_Pol_VPN1 internal
group-policy Grp_Pol_VPN1 attributes
vpn-tunnel-protocol webvpn
webvpn
rl-list value URL
tunnel-group AUSTIN type remote-access
tunnel-group AUSTIN general-attributes
default-group-policy Grp_Pol_VPN1

sh import webvpn url-list

! Firewall virtualization

sh mode
sh context
mode multiple

class MEDIUM-RESOURCE-SET
limit-resource conns 20%
limit-resource ASDM 4
limit-resource telnet 5
limit-resource ssh 5

context CLIENT1
member MEDIUM-RESOURCE-SET
allocate-interface Ethernet0/0 invisible
config-url disk0:/client1.cfg
mac-address auto
changeto system
chanteto context CLIENT1
sh cpu usage context all

redundant-interface redundant1 active member

01/05/2010

CCNA Security Lab Notes

Filed under: certificação,cisco — drak @ 10:23 AM

Recentemente passei na prova 640-553 (IINS) e obtive a certificação CCNA Security, deixo registrado aqui uma trilha do que estudei na forma de comandos utilizados durante o estudo para a prova, apenas lembrando que esses notes são apenas um GUIA para o estudo teórico, o que é mais cobrado na prova é o ASDM e os conceitos portanto não utilize isto aqui como única referência ou você vai se dar mal.

Como recursos de estudo utilizei:

CCNA Security Official Exam Certification Guide
– CCNA Security Lab Manual
– CBT Nuggets Cisco CCNA Security – Exam-Pack 640-553: IINS
– Simulações no GNS3

! CCNA Security Lab Notes

security passwords min-length 10
enable secret hardtoguesspass

! Configuracao console
line con 0
password ciscocon
exec-timeout 5 0
login
logg syn

! Configuracao telnet
line vty 0 4
password ciscovtypass
exec-timeout 5 0
login

! Criptografa as senhas que estao em plain-text
service password-encryption

banner motd $get off$

username admin secret hardpassadmin priv 15

! Melhorias no login
login block-for 60 attempts 2 within 30
login on-sucess log
login on-failure log every 2

! Preparacao para ssh
ip domain-name security.lab

! Limpa e gera chaves RSA para acesso ssh
crypto key zeroize rsa
crypto key generate rsa general-keys modulus 1024

! Ajusta configuracao de SSH
ip ssh time-out 90
ip ssh authentication-retries 2

! Configura SSH ao inves de telnet
line vty 0 4
priv level 15
login local
transport input ssh
exit

! Views
aaa new-model
exit
enable view

parser view TECH
secret techpass
commands exec include all show
commands exec include all config terminal

enable view TECH
sh parser view

! Boot resilience
sh flash
secure boot-image
secure boot-config
sh secure bootset
sh flash

! NTP
ntp master 3
ntp server 10.1.1.1
ntp update-calendar
sh ntp associations

! Logs
logging 10.0.0.1
logging trap critical
logging userinfo

! SNMP
snmp-server community secretSNMP ro

! Inicia lockdown generico
auto secure

! AAA
aaa new-model
aaa authentication login default local none
aaa authentication enable default enable
aaa authentication login TELNET_LINE local
line vty 0 4
login authentication TELNET_LINE
debug aaa authentication
aaa authentication login default group radius none
radius-server host 10.1.1.1 key chaveSECRETA auth-port 1645 acct-port 1646
aaa accounting exec default start-stop tacacs+

! ACL
ip access-list NOME_DA_ACL
	15 permit tcp 10.0.0.0 0.0.0.255 192.168.0.0 0.0.255.255 eq http

! CBAC - Classic firewall
ip inspect NOME_DA_REGRA telnet
ip inspect NOME_DA_REGRA realaudio
ip inspect autosec inspect out

sh ip inspect all

! Restricao em telnet e snmp com ACLs
access-list 50 permit 192.168.1.0 0.0.0.255
line vty 0 4
access-class 50 in

snmp-server community secretSNMP ro 50

! Stateful rudimentar
ip access-list extended INTERNET_FILTER
permit tcp any any established

! Reorganiza ACLs
ip access-list resequence INTERNET FILTER 5 10

! L2 Security
spanning-tree vlan 1 priority 0

! Protecao contra VLAN Hopping
int f0/0
switchport mode trunk
switchport trunk native vlan 99
switchport nonegotiate
storm-control broadcast level 50
sh int f0/0 trunk
sh int f0/0 switchport

! Protecao contra CAM Overflow
int f0/5
switchport mode access
spanning-tree portfast
spanning-tree bpduguard enable
sh spanning-tree int f0/5 detail
spanning-tree guard root
shut
switchport port-security
switchport port-security maximum 2
switchport port-security violation shutdown
switchport port-security mac-address aaaa.bbbb.cccc
switchport port-security mac-address sticky
switchport port-security aging time 120
no shut
sh port-security int f0/5

! Desabilita portas nao utilizadas
int range f0/2 - 4
shut

! Utilizacao de VLANs
vlan 20
name users
int f0/5 - 10
switchport access vlan 20

! SPAN Port - Monitora trafego
monitor session 1 source interface f0/5 both
monitor session 1 destination interface f0/5
sh monitor session 1

! VPN site-to-site

! Fase 1
crypto isakmp enable
crypto isakmp policy 10
crypto isakmp key cisco123 address 10.1.1.1
authentication pre-share
encryption aes 256
hash sha
group 5
lifetime 3600
sh crypto isakmp policy

! Fase 2
crypto ipsec transform-set 50 esp-aes 256 esp-sha-hmac
crypto ipsec security-association lifetime seconds 1800
! Proxy ID
access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.3.0 0.0.0.255

crypto map NOME_DO_CMAP 10 ipsec-isakmp
match address 101
set peer 10.1.1.1
set pfs group 5
set transform-set 50

int f0/0
crypto map NOME_DO_CMAP

sh crypto ipsec transform-set
sh crypto map
sh crypto isakmp sa
sh crypto ipsec sa

21/04/2010

GNS3 – Qual router escolher ?

Filed under: cisco,dicas e truques — drak @ 8:42 AM

Estou estudando para o CCNA Security e geralmente faço muitas simulações utilizando o GNS3, uma coisa que estava me irritando muito era a frequência que meu router estava crashando, parando o processo dynamips e consequentemente perdendo todas as configs que eu havia feito.

Para resolver isso dei uma pesquisada nos foruns do GNS3 e encontrei uma ótima dica: Use o router 2691. Para ser mais exato, para realizar todos os Labs necessários ao CCNA Security eu utilizo a imagem do 2691, pack ADVANCED SECURITY v12.4.15T13(MD), senti uma melhora expressiva na estabilidade e ela contém todos as características necessárias (VPN e IPS, por exemplo).

Referências
GNS3

21/03/2010

Resetar senha do firewall PIX/ASA

Filed under: cisco,dicas e truques — drak @ 1:02 PM

Tenho notado que muitas pessoas chegam ao blog procurando por este assunto, portanto para atender a demanda, segue como realizar o reset de senha nos firewalls PIX (procedimento para ASA pode ser visto nas referências), copiado descaradamente dos guias oficiais da Cisco.

  1. Pegue o arquivo de Lockout adequado para a versão do seu PIX no site da Cisco
  2. Conecte seu PC ao PIX com um cabo serial via console, você verá somente a tela de login;
  3. Reboote o PIX (retire o cabo de energia);
  4. Quando as mensagens de STARTUP começarem aperte ESC (ou BREAK), deve aparecer um prompt escrito “monitor>”;
  5. Entre com os comandos:
! Define a interface que tem conectividade com um servidor TFTP
monitor>interface 0
0: i8255X @ PCI(bus:0 dev:13 irq:10)
1: i8255X @ PCI(bus:0 dev:14 irq:7 )

Using 0: i82559 @ PCI(bus:0 dev:13 irq:10), MAC: 0050.54ff.82b9
! Endereço da interface
monitor>address 10.21.1.99
address 10.21.1.99
! IP do TFTP Server
monitor>server 172.18.125.3
server 172.18.125.3
! Nome da imagem que você pegou no site da Cisco
monitor>file np52.bin
file np52.bin
! Default gateway
monitor>gateway 10.21.1.1
gateway 10.21.1.1
! Testanto conectividade com o TFTP Server
monitor>ping 172.18.125.3
Sending 5, 100-byte 0xf8d3 ICMP Echoes to 172.18.125.3, timeout is 4 seconds:
!!!!!
Success rate is 100 percent (5/5)
! Pegando o arquivo
monitor>tftp
tftp np52.bin@172.18.125.3 via 10.21.1.1...................................
Received 73728 bytes
  1. Quando o arquivo carregar, digite “y” para aceitar o reset das senhas;
  2. A senha default para telnet será resetada para “cisco”, a senha de enable ficará em branco;
  3. Lembre-se de alterar as senhas e salvar a configuração no final.

Referências
Performing Password Recovery

Password Recovery and AAA Configuration Recovery Procedure for the PIX

30/11/2009

Script de backup de configuração – Cisco PIX/ASA

Filed under: cisco — drak @ 7:18 AM

Em complemento ao post anterior, segue abaixo o script para backup de firewalls Cisco. Os pré-reqs de funcionamento são ligeiramente diferentes:

  1. USUARIO_BACKUP deve ser usuário local do firewall e ter senha conhecida (SENHA_USUARIO_BACKUP) e deve existir no servidor Linux onde vai rodar o script
  2. O firewall deve estar no arquivo /firewall/script/firewall.cisco no formato: IP,HOSTNAME

Um dos problemas desse script é a existência da senha do usuário de backup em texto claro no meio do arquivo, para minimizar este problema podemos compilar o arquivo de script com o comando “shc -rf arquivo”, mais detalhes sobre este programa nos links de referência.

Existe um problema não resolvido neste script, o status de retorno não é preciso (ou seja, a falha no backup não é avisada corretamente), porém é possível perceber que o script está falhando no primeiro diff após o erro, que avisará sobre uma alteração no firewall mostrando que tudo foi alterado, devido a inexistência de novo arquivo de configuração.

Update 10/12: Alterei a maneira como o script puxa a configuração, agora utilizando wget, dessa forma solucionei o problema relacionado ao código de retorno do script, e agora consigo definir precisamente se o comando executou com sucesso ou não.

Update 16/12: Reparei que o diff estava reportando configurações diferentes mesmo quando o firewall não havia sido alterado, isso estava ocorrendo porque no início de cada arquivo de configuração existe uma linha similar a esta “: Written by USUARIO_BACKUP at 02:00:02.525 BRST Tue Dec 15 2009”. Para que o diff seja efetivo basta incluir um argumento para que ele ignore esta linha.

#!/bin/bash
# Script para realizar o backup dos firewalls Cisco

data=$(date +%d-%m-%Y)
dataOntem=$(date +%d-%m-%Y -d "-1 day")
hora=$(date +%d-%m-%Y-%H:%M:%S)
email=seuemail@seudominio.com
log=/firewall/log/bkpCisco.$data.log
logConsolidado=/firewall/log/bkpConsolidado.$data.log
user=USUARIO_BACKUP
pass=SENHA_USUARIO_BACKUP

echo >> $log
echo $hora": Inicio do Backup - Cisco" >> $log

cat /firewall/script/firewall.cisco | while read linha; do
firewall=`echo $linha | cut -d',' -f1`
hn=`echo $linha | cut -d'=' -f2`

# Puxa o arquivo de configuracao
wget -q --tries 1 --timeout 4 --read-timeout=4 --connect-timeout=4 --no-check-certificate --http-user=$user --http-password=$pass https://$firewall/config -O /firewall/backup/$firewall.$data.cfg
if [ $? == 0 ]; then
        md5=`md5sum /firewall/backup/$firewall.$data.cfg | cut -d ' ' -f1`
        echo $hora": Firewall: $firewall ($hn) - BACKUP OK - $md5" >> $log
        diff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg --brief --ignore-matching-lines='Written by'
        if [ $? != 0 ]; then
                echo $hora": Detectada alteracao no firewall $firewall ($hn)" >> $log
                diffOut=$(sdiff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg -s)
                echo >> $log
                echo "$diffOut" >> $log
        fi
else
        echo $hora": Firewall: $firewall ($hn) - ERRO NO BACKUP" >> $log
fi
done

echo $hora": Fim do Backup - Cisco" >> $log
echo >> $log

# Remove arquivos mais antigos que 30 dias
echo $hora": Inicio da limpeza" >> $log
echo $hora": Lista de arquivos deletados:" >> $log
find /firewall/log/*.log -mtime +30 -daystart >> $log
find /firewall/log/*.log -mtime +30 -daystart -delete
find /firewall/backup/*.cfg -mtime +30 -daystart >> $log
find /firewall/backup/*.cfg -mtime +30 -daystart -delete
echo $hora": Fim da limpeza" >> $log

cat $log >> $logConsolidado
cat $logConsolidado | mail -s "Firewall Backup Status" $email

Referências
Encrypting Shell Scripts

Limitations of shc, a Shell Encryption Utility

ash

# Script para realizar o backup dos firewalls Cisco

data=$(date +%d-%m-%Y)

dataOntem=$(date +%d-%m-%Y -d “-1 day”)

hora=$(date +%d-%m-%Y-%H:%M:%S)

email=bradcsoc@globalcrossing.com

log=/firewall/log/bkpCisco.$data.log

logConsolidado=/firewall/log/bkpConsolidado.$data.log

user=USUARIO_BACKUP

pass=SENHA_USUARIO_BACKUP

echo >> $log

echo $hora”: Inicio do Backup – Cisco” >> $log

cat /firewall/script/firewall.cisco | while read linha; do

firewall=`echo $linha | cut -d’,’ -f1`

hn=`echo $linha | cut -d’=’ -f2`

# Loga em cada uma das maquinas e executa o comando “sh run”

VAR=$(expect -c “

spawn ssh $user@$firewall

expect \”assword:\”

send \”$pass\r\”

expect \”>\”

send \”ena\r\”

expect \”assword:\”

send \”$pass\r\”

expect \”#\”

send \”conf t\r\”

expect \”conf\”

send \”no pager\r\”

send \”sh run\r\”

log_file -noappend /firewall/backup/$firewall.$data.cfg.tmp

expect \”end\”

expect \”#\”

log_file

send \”pager 24\r\”

send \”exit\r\”

send \”exit\r\”

“)

sed ‘1,/sh/ d’ /firewall/backup/$firewall.$data.cfg.tmp >> /firewall/backup/$firewall.$data.cfg.tmp1

sed ‘$d’ /firewall/backup/$firewall.$data.cfg.tmp1 >> /firewall/backup/$firewall.$data.cfg

rm /firewall/backup/$firewall.$data.cfg.tmp*

if [ $? == 0 ]; then

echo $hora”: Firewall: $firewall ($hn) – BACKUP OK” >> $log

diff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg –brief

if [ $? != 0 ]; then

echo $hora”: Detectada alteracao no firewall $firewall ($hn)” >> $log

diffOut=$(sdiff /firewall/backup/$firewall.$data.cfg /firewall/backup/$firewall.$dataOntem.cfg -s)

echo >> $log

echo “$diffOut” >> $log

fi

else

echo $hora”: Firewall: $firewall ($hn) – ERRO NO BACKUP” >> $log

fi

echo “$VAR”

done

echo $hora”: Fim do Backup – Cisco” >> $log

echo >> $log

# Remove arquivos mais antigos que 30 dias

echo $hora”: Inicio da limpeza” >> $log

echo $hora”: Lista de arquivos deletados:” >> $log

find /firewall/log/*.log -atime +30 >> $log

find /firewall/log/*.log -atime +30 -delete

find /firewall/backup/*.cfg -atime +30 >> $log

find /firewall/backup/*.cfg -atime +30 -delete

echo $hora”: Fim da limpeza” >> $log

cat $log >> $logConsolidado

cat $logConsolidado | mail -s “Firewall Backup Status” $email

Blog no WordPress.com.