Dead Packets

25/11/2010

Diagnóstico para alta de CPU

Filed under: juniper — drak @ 5:20 PM

Analizar a causa de um problema de CPU nem sempre é fácil, alguns fatores comuns são uma taxa alta de sessões por segundo, muitos pacotes sendo bloqueados ou uma política de firewall muito extensa e com a maioria dos matches na última regra. Além disso, mesmo que seja determinado que a alta CPU se deve a tráfego legítimo como identificar qual fluxo está comprometendo o ambiente ? A Juniper provê uma ferramenta que facilita esta identificação, basicamente você ativa o debug com dois comandos:

set fprofile packet enable
set fprofile packet start

Analise o resultado da seguinte maneira:

clu-lab:fw-lab(M)-> get fprofile packet
packet buffer size(in kilo-packets): 8
total ip packet: 8189
total ip packet time(us): 280064
total none-ip packet: 3
total none-ip packet time(us): 396
 Id  Type        Protocol    Source            Destination             Sport       Dport        Time  Percentage
 1  ip          0x11        192.168.242.6     192.168.242.16          1330          80      278220  99.20%
 2  ip          0x06        192.168.44.102    192.168.242.27         22427        7800         765   0.00%
 3  ip          0x06        192.168.242.30    192.168.145.93            22       23040         516   0.00%
 4  ip          0x06        192.168.1.150     192.168.145.93          3389       10368         266   0.00%
 5  none-ip     0x8133      00:26:88:00:ac:0b             10:db:f0:f0:f0                       254   0.00%
 6  none-ip     0x8133      00:26:88:00:ab:8b             10:db:f0:f0:f0                       142   0.00%
 7  ip          0x06        192.168.145.93    192.168.242.30         23040          22         122   0.00%
 8  ip          0x06        192.168.1.150     192.168.145.93          3389       36448          90   0.00%
 9  ip          0x06        192.168.145.93    192.168.242.16         10368        3389          47   0.00%
 10  ip          0x06        192.168.145.93    192.168.242.16         36448        3389          38   0.00%
clu-lab:fw-lab(M)->

Acima podemos ver que a CPU está alta por causa do ataque de UDP flood (protocol 0x11 = 17 em hexa)
E para finalizar o debug:

unset fprofile packet enable

Lembrando que qualquer comando de debug deve ser usado com cautela pois pode piorar ainda mais o problema de CPU alta.

Referências
What is causing High “FLOW” CPU Utilization? (ScreenOS 5.x and later)
How to run Packet Profiling on firewall to determine cause of High “FLOW” CPU (ScreenOS 6.x)

Anúncios

17/09/2010

VPN client-to-site – Policy mode

Filed under: juniper — drak @ 8:29 PM

Irei fazer uma série especial de VPNs, não explicarei conceitos apenas publicarei templates para vários tipos de VPNs em várias tecnologias, espero que ajude alguém.

Abaixo segue um procedimento completo de criação de VPN client-to-site por policy, onde a rede local é 192.168.20.0/24 e a rede do pool (que o host remoto recebe ao se conectar) é 192.168.10.0/24.

A template abaixo foi projetado para ser utilizada apenas selecionando os valores do começo que estão como variáveis e trocando seus valores por toda a configuração.

USER IKE 	= IKE_USER
USER VPN 	= vpn@customer.com
GRUPO IKE 	= grp_IKE_USER
POOL NAME 	= POOL_VPN
IP POOL BEG	= 192.168.10.1
IP POOL END	= 192.168.10.254
USER AUTH 	= joao@customer.com
USER PASS 	= P@ssw0rd
GRUPO AUTH 	= grp_AUTH_CLIENT
GATEWAY		= GW_DIAL_CUST
INTERFACE	= ethernet1/1
PRESHARE	= pr3sh4redkey
PROPOSAL P1	= pre-g2-3des-sha
VPN NAME	= VPN_DIAL_CUST

set user "IKE_USER" uid 1
set user "IKE_USER" ike-id u-fqdn "vpn@customer.com" share-limit 10
set user "IKE_USER" type ike
set user "IKE_USER" "enable"

set user-group "grp_IKE_USER" id 1
set user-group "grp_IKE_USER" user "IKE_USER"

set ippool "POOL_VPN" 192.168.10.1 192.168.10.254

set xauth default auth server "Local" chap

set user "joao@customer.com" uid 2
set user "joao@customer.com" type auth xauth
set user "joao@customer.com" remote ippool "POOL_VPN"
set user "joao@customer.com" password "P@ssw0rd"
set user "joao@customer.com" "enable"

set user-group "grp_AUTH_CLIENT" id 2
set user-group "grp_AUTH_CLIENT" user "joao@customer.com"

set ike gateway "GW_DIAL_CUST" dialup "grp_IKE_USER" Aggr outgoing-interface "ethernet1/1" preshare "pr3sh4redkey" proposal "pre-g2-3des-sha"
set ike gateway "GW_DIAL_CUST" nat-traversal udp-checksum
set ike gateway "GW_DIAL_CUST" nat-traversal keepalive-frequency 5
set ike gateway "GW_DIAL_CUST" xauth server "Local" user-group "grp_AUTH_CLIENT"
unset ike gateway "GW_DIAL_CUST" xauth do-edipi-auth

set vpn "VPN_DIAL_CUST" gateway "GW_DIAL_CUST" replay tunnel idletime 0 proposal "g2-esp-3des-sha"
set vpn "VPN_DIAL_CUST" proxy-id local-ip 0.0.0.0/0 remote-ip 255.255.255.255/32 "any"

set address "Trust" "192.168.120.22/32" 192.168.120.22 255.255.255.255

set policy from "Untrust" to "Trust" "Dial-Up VPN" "192.168.120.22/32" ANY tunnel vpn "VPN_DIAL_CUST" log

Referências
Juniper Forum
Configuring or Troubleshooting a Juniper Firewall VPN – NetScreen devices

03/05/2010

VPN Site-to-Site – Route mode

Filed under: juniper,ScreenOs — drak @ 7:54 PM

Uma das tecnologias que mais demandam tempo de configuração e testes em conjunto é a VPN, no ScreenOS existem duas metodologias de criação de VPN site-to-site, por rota e por policy. Basicamente por policy a configuração é mais simples e não demanda criação de interfaces de túnel ou roteamento, por rota a VPN e a regra de acesso são independentes, o que permite mais flexibilidade em alguns cenários.

Abaixo segue um procedimento completo de criação de VPN site-to-site por rota, onde a rede local é 172.30.0.0/16 e as redes remotas são 192.168.0.0/24 e 10.0.0.0/16, nota-se que é necessário criar apenas um gateway porém dois túneis VPN, isso ocorre porque até a versão 6.2 não é possível colocar múltiplos proxy-id na mesma configuração de VPN, uma característica implementada a partir da versão 6.3.

É esperado um conhecimento teórico das VPNs para entender a configuração abaixo, nela deixei explícito os proposals utilizados na fase 1 (isakmp) e fase 2 (ipsec).

# Criação das interfaces tunel
set interface "tunnel.1" zone "Untrust"
set interface tunnel.1 ip unnumbered interface ethernet0/0
set interface "tunnel.2" zone "Untrust"
set interface tunnel.2 ip unnumbered interface ethernet0/0

# Fase 1
set ike p1-proposal "pre-g2-3des-sha-86400" preshare group2 esp 3des sha-1 second 86400
set ike gateway "gw_IP_PEER_REMOTO" address 200.200.200.200 Main outgoing-interface "ethernet0/0" preshare shared_secret_muito_complexo! proposal "pre-g2-3des-sha-86400"

# Fase 2
set ike p2-proposal "g2-esp-3des-md5-28800" group2 esp 3des md5 second 28800

set vpn "vpn_10.0.0.0/16" gateway "gw_IP_PEER_REMOTO" replay tunnel idletime 0 proposal "g2-esp-3des-md5-28800"
set vpn "vpn_10.0.0.0/16" id 0x1 bind interface tunnel.1
set vpn "vpn_10.0.0.0/16" proxy-id local-ip 172.30.0.0/16 remote-ip 10.0.0.0/16 "ANY"

set vpn "vpn_192.168.0.0/24" gateway "gw_IP_PEER_REMOTO" replay tunnel idletime 0 proposal "g2-esp-3des-md5-28800"
set vpn "vpn_192.168.0.0/24" id 0x2 bind interface tunnel.2
set vpn "vpn_192.168.0.0/24" proxy-id local-ip 172.30.0.0/16 remote-ip 192.168.0.0/24 "ANY"

# Definição de rotas e policy
set route 10.0.0.0/16 interface tun.1
set route 192.168.0.0/24 interface tun.2

set address "Trust" "172.30.0.0/16" 172.30.0.0/16
set address "Untrust" "10.0.0.0/16" 10.0.0.0/16
set address "Untrust" "192.168.0.0/24" 192.168.0.0/24

# Note que a policy não precisa estar com os mesmos objetos que o proxy-id, ou seja, na policy você pode realizar o controle de acesso e liberar somente alguns serviços, mesmo que a VPN esteja fechando com a permissão de trafegar ANY por ela.

set policy id 40 from "Trust" to "Untrust" "172.30.0.0/16" "10.0.0.0/16" "ANY" permit log
set policy id 40
set dst-address "192.168.0.0/24"
exit

set policy id 41 from "Untrust" to "Trust" "10.0.0.0/16" "172.30.00.0/16" "ANY" permit log
set policy id 41
set src-address "192.168.0.0/24"
exit

# Comandos para diagnóstico
# Verificação de Fase 1
get ike cookie

# Verificação de Fase 2
get sa

Referências
Juniper Forum
Configuring or Troubleshooting a Juniper Firewall VPN – NetScreen devices

02/04/2010

Comandos mal documentados do IDP blade da Juniper

Filed under: juniper — drak @ 3:36 PM

Se você trabalha com firewall Juniper série ISG com módulo de IDP integrado sabe que é quase impossível encontrar documentação para a blade, garimpei vários comandos úteis nas minhas intermináveis sessões de troubleshooting com o suporte do fabricante, espero que ajude alguém.

É necessário saber em qual módulo a sua “security module” está, para isso basta o comando “get chassis”.

get sm status
# get security module status
exec sm 1 ksh ls
# list all the files in the security module
exec sm 1 ksh "scio version"
# list the version
exec sm 1 ksh "scio subs service detail s0"
# list sm details like CPU, pkts/s
exec sm 1 ksh "sloginfo -w"
# equivalent to tail -f
exec sm 1 save tftp A.B.C.D filename.txt to destination_file_name.txt
# copy file from tftp to sm
exec sm 1 save tftp A.B.C.D destination_file_ontftp.txt from source_file_on_sm.txt
# copy file from sm to tftp
exec sm 1 ksh "pidin info"
exec sm 1 ksh "pidin memory"
exec sm 1 ksh "pidin tt"
# get sm status
exec sm 3 get queue
# get queue on sm
exec sm 3 get mem <address> size <number>
# get memory details on sm
exec sm 3 ksh "command"
# execute unix command
exec sm 3 switch
# switch between sm's
exec sm 2 "ls /idp/log"
# look for core files
debug flow sm-skip
# packets are not sent to SM though IDP is enabled
set sm disable <cpu#>
# disable CPU on sm

Crie um website ou blog gratuito no WordPress.com.