Automatizando o pfSense com pfSsh.php

O pfSense teve a interface completamente redesenhada nas últimas versões. Todas as configurações podem ser facilmente acessadas e ajustadas com essa interface. No entanto, às vezes, você gostaria de fazer configurações por meio de uma API ou através do terminal. No momento, o pfSense não possui uma API, que estará disponível somente em uma das próximas versões. Até lá, você pode usar o shell do desenvolvedor pfSense, também chamado de pfSsh.php.

Acessando pfSsh.php

A maneira mais rápida de acessar o shell do desenvolvedor é conectar-se ao pfSense via SSH ou conectar diretamente ao firewall. Se o SSH ainda não estiver ativado, você pode fazer isso na interface da web em Sistema → Avançado.

É melhor proibir o login com uma senha e permitir somente o login com um certificado.

Se o acesso SSH estiver ativado, você pode fazer login com o usuário admin (ajustar IP):

$ ssh admin@192.168.1.254

Na opção 12, você encontrará o shell do desenvolvedor, que é basicamente um shell PHP.

Exemplo de comandos para pfSsh.php

Aqui estão alguns exemplos de comandos para mostrar como usar o shell. Cada entrada é um código PHP normal e deve ser completada com exec;.

Mostrar configurações de DHCP

pfSense shell: print_r($config["dhcpd"]);
pfSense shell: exec;
Array
(
    [lan] => Array
        (
            [range] => Array
                (
                    [from] => 10.0.1.7
                    [to] => 10.0.255.245
                )

        )

)

Definir domínio

pfSense shell: $config['system']['domain'] = 'mydomain.com';
pfSense shell: write_config();
pfSense shell: exec;

Execute comandos regulares do shell

Dentro do shell do PHP você também pode executar comandos normais do shell colocando um “!” Na frente dele:

pfSense shell: ! cat /etc/version
pfSense shell: exec;
2.4.3-RELEASE

Comandos “Gravar” e “Reprodução”

Com pfSsh.php você também pode “gravar” vários comandos e “reproduzi-los” mais tarde. Isso é útil para tarefas recorrentes. Um exemplo:

pfSense shell: record echoTest
Recording of echoTest started.
pfSense shell: echo "Isso\n";
pfSense shell: echo "eh\n";
pfSense shell: echo "um\n";
pfSense shell: ! echo "teste\n"
pfSense shell: exec;
pfSense shell: stoprecording
Recording stopped.

As entradas são salvas em / etc / phpshellsessions / e podem ser editadas lá, se necessário.

A “gravação” agora pode ser reproduzida da seguinte maneira:

pfSense shell: playback echoTest

Playback of file echoTest started.

Isso
eh
um
teste

pfSense shell:

ou diretamente da raíz do shell:

$ pfSsh.php playback echoTest

Conclusão

O pfSsh.php é uma ferramenta útil para automatizar o pfSense com scripts ou personalizações. Especialmente se você gerencia várias instâncias ou precisa de uma certa configuração repetidas vezes, pfSsh.php é uma grande ajuda. Por exemplo, você pode empacotar todas as configurações (isto é, código PHP) em um arquivo, salvá-las em /etc/phpshellsessions/ e executá-las ou encaminhar a saída diretamente para pfSsh.php:

$ ssh admin@192.168.1.254 '/usr/local/sbin/pfSsh.php' < MyConfig.txt

 

Best Practice: Select lentas, rápidas e super-rápidas.

Infelizmente nos dedicamos tanto na hora de desenvolver, que não nos aprofundamos nas características que oferecem cada ferramenta.

E as melhores práticas entram exatamente ai. Neste primeiro post desta categoria, vamos comentar sobre o uso do comando Select em uma base de dados Mysql, que com algumas otimizações podemos ter resultados bem mais rápidos.

Busca de Palavras

/* Muito rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘palavra’)

/* Rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘+palavra’ IN BOOLEAN MODE)

/* Lentas */
SELECT * FROM tabela WHERE RLIKE ‘(^| +)palavra($| +)’

/* Super lenta */
SELECT * FROM tabela WHERE RLIKE ‘([[:space:]]|[[:<:]])palavra([[:space:]]|[[:>:]])’

Busca de Conteúdo

/* Muito rápida */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘palavra*’ IN BOOLEAN MODE)

/* Rápida */
SELECT * FROM tabela WHERE FIELD LIKE ‘palavra%’

/* Lentas */
SELECT * FROM tabela WHERE MATCH (`campo`) AGAINST (‘*palavra*’ IN BOOLEAN MODE)

/* Super lenta */
SELECT * FROM tabela WHERE campo LIKE ‘%palavra%’

Número de registros

/* Muito rápida */
SELECT SQL_CALC_FOUND_ROWS * FROM tabla WHERE condición LIMIT 0, 10
SELECT FOUND_ROWS()

/* Rápida */
SELECT * FROM tabela WHERE condicao LIMIT 0, 10
SELECT COUNT(chave) FROM TABELA WHERE condicao

Fonte: PHP Mysql tips