Xii Parou, qual era o comando mesmo ? Parte IV

Continuando a serie de posts sobre comandos de diagnostico do Fortigate! : )

Hoje irei comentar sobre o grep que utilizo muito em meus script em bash ( que são bem feios, se um programador ver ele chora 🙁 ), mas, também no Fortigate, vamos ao que é interessa.

O comando grep é utilizado para filtro de saídas de comandos tais como debug, get e show.

Exemplo simples do comando grep é quando queremos ver apenas as linhas de uma configuração que contenham uma determinada entrada:

FGVM00000000  (port3) # get | grep speed
speed               : auto

Neste exemplo queremos apenas a linha que contém a entrada speed.

Nesse momento vocês se perguntam, mas só isso ?! 🙂

O grep do FortiOS acompanha 8 opções:

-i      Ignore case distinctions
-n      Print line number with output lines
-v      Select non-matching lines
-f      Print fortinet config context
-c      Only print count of matching lines
-A      Print NUM lines of trailing context
-B      Print NUM lines of leading context
-C      Print NUM lines of output context

Vamos ver uma a uma.

O -i é para não diferenciar entre maiúsculas e minúsculas.

EX:

No nosso mesmo exemplo dentro da interface port3 queremos apenas a linha Acquired DNS, essa entrada tem letras maiúsculas e minúsculas.

FGVM00000000 (port3) # get | grep “acquired dns”

FGVM00000000 (port3) #

Podemos ver que  não teve saída o comando. Agora adicionando a opção “-i” vamos ver a saída:

FGVM00000000 (port3) # get | grep -i “acquired dns”
Acquired DNS1       : 0.0.0.0
Acquired DNS2       : 0.0.0.0
FGVM00000000 (port3) #

A opção -n é para listar a linha da ocorrência:

FGVM00000000 (port3) # get | grep -n “Acquired DNS”
43:Acquired DNS1            : 0.0.0.0
44:Acquired DNS2            : 0.0.0.0

A opção -v serve para negar um filtro, exemplo, quero todas as sessões do firewall menos as TCP:

FGVM00000000 # get system session list | grep -v tcp
PROTO   EXPIRE SOURCE           SOURCE-NAT       DESTINATION      DESTINATION-NAT
udp     89     10.2.7.120:36086 1.1.1.1:36086 177.33.13.42:11161 –
icmp    23     10.2.7.120:12786 1.1.1.1:62464 187.74.26.66:8   –
udp     76     10.2.7.140:50937 1.1.1.1:50937 177.19.7.215:56231 –
icmp    2      10.2.7.120:12938 1.1.1.1:26646 181.42.96.66:8   –
icmp    57     10.2.7.120:13068 1.1.1.1:62464 177.24.3.26:8  –
icmp    17     10.2.7.120:12984 1.1.1.1:26668 200.1.11.78:8 –
icmp    17     10.2.7.120:12984 –                10.4.1.39:8      –
icmp    59     10.2.7.120:13080 –                10.3.0.1:8       –

A opção -f é a minha  preferida, podemos fazer vários scripts com o seu auxilio, ela traz a exata configuração de uma entrada, exemplo quero clonar um objeto eu tenho que listar todas as linhas para criá-lo, exemplo vamos verificar a configuração completa de um vip 🙂

Se dermos um simples grep sem opção procurando pelo IP 2.2.2.2 temos a seguinte saída:

FGVM00000000 # show firewall vip | grep  “2.2.2.2”
set extip 2.2.2.2
set extip 2.2.2.2
set extip 2.2.2.2
set extip 2.2.2.2
set extip 2.2.2.2

Não nós traz muitas informações úteis, porém se usarmos a opção -f:

FGVM00000000 #show firewall vip | grep -f 2.2.2.2
config firewall vip
edit “VIP_514_UDP_DMZ”
set extip 2.2.2.2 <—
set extintf “port8”
set portforward enable
set mappedip “10.2.0.253”
set protocol udp
set extport 514
set mappedport 514
next
edit “VIP_514_TCP_DMZ”
set extip 2.2.2.2 <—
set extintf “port8”
set portforward enable
set mappedip “10.2.0.253”
set extport 514
set mappedport 514
next
edit “VIP_541_TCP_DMZ”
set extip 2.2.2.2 <—
set extintf “port8”
set portforward enable
set mappedip “10.2.0.253”
set extport 541
set mappedport 541
next
edit “VIP_541_UDP_DMZ”
set extip 2.2.2.2 <—
set extintf “port8”
set portforward enable
set mappedip “10.2.0.253”
set protocol udp
set extport 541
set mappedport 541
next
edit “Aggregation”
set extip 2.2.2.2 <—
set extintf “port8”
set portforward enable
set mappedip “10.2.0.96-10.2.0.96”
set extport 443
set mappedport 443
next
end

Como podemos ver ele traz todos os comandos necessários para criar esse objeto e com uma seta “<—” para demonstrar a linha que a entrada foi localizada 🙂

A opção -c é usada para contar a quantidade de entradas da sua consulta.

FGVM00000000# get system session list | grep -c tcp
162

Temos 162 sessões tcp

A opção -A assim como na versão para linux lista a entrada e a quantidade de linha depois da entrada, Exemplo para uma linha após a entrada “set srcintf” :

FGVM00000000# show  firewall policy 28 | grep -A 1  “set srcintf”
set srcintf “wan2”
set dstintf “Internet”

Já a opção -B lista a entrada e a quantidade de linha antes da entrada, Exemplo para 1 linha antes da entrada “set srcintf” e -B 1 uma linha antes da entrada :

FGVM00000000#  show  firewall policy 28 | grep -B 1 “set srcintf”
edit 28
set srcintf “wan2”

E por ultimo a opção -C é a soma  das opção -A e -B que podem ser utilizadas juntas, EX:

FGVM00000000# show  firewall policy 28 | grep -B 1 -A 1 “set srcintf”
edit 28
set srcintf “wan2”
set dstintf “Internet”

OU Substituída pela -C 1 Ex:

FGVM00000000#  show  firewall policy 28 | grep -C 1 “set srcintf”
edit 28
set srcintf “wan2”
set dstintf “Internet”

E por ultimo é possível utilizar o grep para localizar uma ou mais entradas como por exemplo o IP “10.2.0.” e o “10.3.1.” separando os mesmo com “\|” EX:

FGVM00000000# show  firewall address | grep “10.2.0.\|10.3.1.”
set subnet 10.3.1.244 255.255.255.252
set subnet 10.2.0.0 255.255.255.0
edit “10.2.0.0/24”
set subnet 10.3.1.0 255.255.255.0
edit “10.2.0.0/16”
set subnet 10.2.0.0 255.0.0.0
edit “10.3.1.5”
set subnet 10.3.1.5 255.255.255.255

É isso ai 🙂

William Costa

trtec

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *