Loucuras de Verão com iRules — Parte 1

Rafael Bianco Nacif
TechRebels
Published in
6 min readAug 21, 2019

Syn, syn-ack, ack…

Fala pessoal!! Sejam bem vindos a minha mais nova série de artigos aqui no TechRebels! Depois de muitos pedidos iremos finalmente falar sobre iRules! Você pode encontrar todos os meus posts de F5 publicados aqui no TechRebels neste link. Recomendo que sejam lidos na ordem, caso você tenha chegado agora.

E como sempre, fique ligado no TechRebels e siga-me no Medium clicando follow lá em cima para acompanhar os próximos posts.

Antes de iniciarmos os trabalhos, uma historinha dos bastidores. O timaço aqui do TechRebels troca figurinhas via Slack com certa frequência. Em uma das conversas, brinquei com a galera com uma ideia de artigos cujo título começava com “Loucuras de Verão”. O pessoal achou graça e me desafiaram a postar uma série de artigos com esse título… Obviamente que eu não ia deixar barato e truquei: “Valendo um café?”. E não deu outra…

Café quitado pelo grande Giuliano Barros e agora eu tô honrando a minha parte: Loucuras de Verão com iRules!

Então como sempre, prepare seu café ou coca-cola geladinha e vamos nessa!

Agora sem mais delongas… Vamos ao que interessa: iRules!

Vamos combinar aqui uma coisa. O foco dessa série não é a programação, mas a lógica da coisa e o entendimento como um todo.

Digo isso, pois, certamente não sou a pessoa ideal para ensinar uma linguagem de programação. Aposto que existe alguém muito melhor que eu para isso. Além disso tentarei algo diferente nessa série. Ao invés de imagens com as setinhas vermelhas, vou colocar pequenos vídeos com a coisa acontecendo. Vamos ver se vocês gostam. Aliás, se você curtir isso, comenta aí. Se não gostou, comenta também…

Nesse artigo iremos utilizar uma topologia bastante simples. Temos um BIG-IP em modo standalone rodando TMOS v12.1.4 e um servidor web atrás do BIG-IP. Esse servidor web utiliza o BIG-IP como default-gateway. Temos um virtual-server (VIP) escutando no IP 192.168.1.21 na porta TCP-80. Bastante simples, mas que para nossos estudos de iRules será o suficiente.

Mas pera! O que de fato é uma iRule?

Há muitos anos atrás, a F5 decidiu que era interessante que houvesse uma forma pela qual os usuários da plataforma BIG-IP pudessem manipular um determinado tráfego que estivesse passando pelo BIG-IP, utilizando alguma linguagem de programação. É uma maneira de estender as funcionalidades da plataforma sem precisar — de certa forma — que o time de desenvolvimento da F5 escreva as funções para todos os cenários possíveis e imagináveis.

Pense bem… Imagina o diferencial que é você oferecer um produto que faz um monte de coisa e ainda poder dizer: “Senhor cliente, e tem mais… Se você precisar fazer alguma coisa que não está implementada, você mesmo pode programar e botar pra rodar”.

Então, eu gosto de pensar em iRules como uma forma muito poderosa de estender as funcionalidades do BIG-IP ainda mais.

Muito bem. Agora que já entendemos o porquê, vamos ao tecniquês.

  1. iRules utilizam a linguagem TCL.
  2. O TCL é uma linguagem muito rápida e eficiente. Porém, se houver uma forma de fazer o que você precisa diretamente no TMOS, você deveria dar preferência para isso, ou seja, uma iRule nunca será tão eficiente e rápida quanto o próprio TMOS.
  3. As iRules são o que chamamos de “event driven”, ou seja, o BIG-IP fica observando um evento acontecer para de fato executar a iRule.

Se você parar um pouco pra refletir, o item 3 é bastante interessante. Como se aplica algo a um tráfego passante? Afinal, ninguém apertou um botão para então o código ser executado. O BIG-IP precisa ter um gatilho, um marco, uma referência para poder executar aquela instrução. E essa é uma regra de ouro para as iRules: Eventos!

Existe uma quantidade muito grande de eventos. Uma lista atualizada pode ser encontrada aqui. E a lógica básica de uma iRule será, na maioria dos casos, assim:

Quando esse evento acontecer, faça isso!

Vamos olhar uma iRule bem básica agora.

when CLIENT_ACCEPTED {
log local0. "O BIG-IP aceitou a conexao do cliente"
}

Na linha 1 temos “when CLIENT_ACCEPTED {”, ou seja, temos o evento CLIENT_ACCEPTED. Esse evento acontece toda vez que o BIG-IP aceita a conexão em um virtual-server. Em seguida, na linha dois, temos o comando “log local0.”, e então uma frase. Esse comando escreve uma mensagem de log no /var/local/ltm. Por fim, temos no final o “}” fechando a iRule.

Vamos pensar agora qual seria o fluxo que o BIG-IP executaria para essa iRule:

  1. Recebi um pacote SYN para um virtual-server habilitado e dei match.
  2. Esse virtual-server possui uma iRule anexada.
  3. A iRule possui um evento CLIENT_ACCEPTED com comandos de log.
  4. Como o evento acabou de acontecer, executo os comandos de log.
  5. Encaminho o pacote para seu destino final (pool member anexado ao virtual-server).

Vamos ver na prática isso acontecendo nesse pequeno vídeo. Recomendo fones de ouvido!

É muita modernidade esses vídeos, Brasilll! =D

Agora vamos ver a mesma iRule só que com um evento diferente, para ficar bem claro a ordem das coisas.

when CLIENT_CLOSED {
log local0. "O BIG-IP fechou a conexao do cliente"
}

Nessa iRule, o evento sendo utilizado é o “CLIENT_CLOSED”. Esse evento é ativado quando as conexões do cliente são fechadas pelo BIG-IP. Em seguida, a mensagem no /var/log/ltm é anotada. A ordem das coisas no BIG-IP seria a seguinte:

  1. Recebi um pacote SYN para um virtual-server habilitado e dei match.
  2. Esse virtual-server possui uma iRule anexada.
  3. A iRule possui um evento CLIENT_CLOSED com comandos de log.
  4. Encaminho o pacote para seu destino final (pool member anexado ao virtual-server).
  5. Quando o cliente ou o BIG-IP encerrarem a conexão nesse virtual-server, o evento CLIENT_CLOSED acontece e o comando de log será executado.

Vamos repetir o exercício com um segundo vídeo para ficar tudo bem explicado.

Perceberam a diferença?

No primeiro exemplo, logo que o cliente conectou a mensagem apareceu no /var/log/ltm, pois o evento observado era o CLIENT_ACCEPTED, que acontece logo que o BIG-IP aceita a conexão. Já no segundo teste, em que observamos o evento CLIENT_CLOSED, vemos a mensagem aparecendo só quando a conexão é encerrada pois de fato os eventos acontecem em momentos diferentes.

A lógica das iRules, por mais complicadas que possam parecer, sempre giram em torno de eventos. O evento em si identifica quando uma série de comandos (no nosso caso mensagens de log no /var/log/ltm) será executado. Obviamente esses comandos podem realizar diversas coisas, mas tudo começa na definição do evento. No geral, toda iRule pode ser resumida em “faça isso quando isso acontecer”.

No próximo artigo dessa série vamos ver como é possível adicionar uma condição para que a iRule seja executada, dando ainda mais inteligência e flexibilidade.

Fiquem ligados aqui no TechRebels! ;)

O que acharam? Gostaram desse novo formato com pequenos videos? Ficaram com alguma dúvida? Não deixe de comentar! Os comentários ajudam a direcionar os próximos artigos! Não deixe de seguir o TechRebels e a mim aqui no Medium clicando no “follow” ali embaixo e também no Twitter!

/FIN=1

Sobre o autor

Rafael Bianco Nacif é analista de redes sênior. Graduado em Redes de Computadores, certificado F5 Solutions Expert Security, Cisco CCNP DC e RS e também AWS CSA. Iniciou a carreira na área de TI como help-desk e hoje atua em projetos de DC de alta complexidade. linkedin.com/in/rafaelbn

--

--

Rafael Bianco Nacif
TechRebels

Senior Network Analyst | Nerd Convicto | 2xF5 CSE (Cloud/Sec), AWS CSA-Associate e CCNP DC/RS