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

 

Compartilhando um diretório do Windows (Active Directory) no Linux

Maneira simples de acessar compartilhamentos Windows em um servidor Linux.

Imagine a seguinte situação:

  1. Você tem uma infraestrutura com Active Directory da Microsoft ou LDAP, com pastas compartilhadas na rede, tudo funcionando de boa;
  2. Você também tem um servidor web (apache ou nginx) rodando tranquilamente, servindo sua intranet ou site na internet…;
    1. Aí alguém chega pra você e fala:
      – Sabe essa pasta compartilhada do setor XXX, então, precisamos colocar esses arquivos disponíveis TAMBÉM na Web (intranet ou internet).
      – Ah, mas esses arquivos devem continuar sendo acessível normalmente pelo compartilhamento do Windows. 

Isso é bem fácil de resolver, basta utilizar o cliente CIFS de sistemas de arquivos do Windows.

1° passo

Criar um ponto de montagem no servidor web. Usualmente utilizamos o /mnt, mas fica a critério de suas necessidades. No nosso exemplo, vamos criar esse ponto de montagem direto na pasta DocumentRoot de nosso servidor, que roda Apache e posteriormente definir o usuário apache como dono do diretório criado.

[root@servidor ~]# mkdir /var/www/html/arquivos

[root@servidor ~]# chown apache:apache /var/www/html/arquivos/ -R

2º passo

Criar um arquivo com as credenciais de acesso do Active Directory à pasta compartilhada. Vamos criar dentro do home do usuário Root:

[root@servidor ~]# vim /root/.shared_credencial

Insira essas informações, tão como informados:

username=nome_usuario_ad
password=senha_usuario_ad
domain=dominio.de.seu.ad

3º passo

Editar o fstab, inserindo o ponto de montagem para a pasta /var/www/html/arquivos, passando as credencias de acesso que foram registradas em /root/.consu_credencial.

[root@manjuba ~]# vim /etc/fstab

Inserir a seguinte linha no final do arquivo, substituindo o IP do servidor de arquivos e o caminho da pasta compartilhada do exemplo dado (192.168.0.10/SETORX/arquivos) pelas informações de seu compartilhamento windows.

//192.168.0.10/SETORX/arquivos /var/www/html/arquivos/ cifs credentials=/root/.shared_credencial,iocharset=utf8,sec=ntlm,nobootwait,uid=apache,gid=apache 0 0

4º passo

Se você fizer uma nova entrada no fstab, ela não será montada automaticamente. Portanto, você deve recarregar/atualizar as entradas. Uma reinicialização no Linux fará isso, mas essa não é uma maneira amigável. Uma maneira rápida de recarregar novas entradas em /etc/fstab é usar o comando mount:

[root@manjuba ~]# mount -a

Após isso, se você acessar a pasta montada, irá ter acesso aos arquivos compartilhados e como foi montado dentro do DocumentRoot do apache, os mesmos também estarão acessíveis na Web.

[root@manjuba ~]# ls /var/www/html/arquivos/

http://192.168.0.10/arquivos/

 

 

Como criar um repositório GiT de um projeto já existente e enviar ao Bitbucket?

Criando essa postagem porque nunca lembro desta sequência de comandos!

Situação: você possui um projeto já existente (pasta) e deseja que esse projeto vire um repositório GIT e que seu conteúdo seja enviado ao Bitbucket ou outro host remoto, como faz?

Obviamente você precisará ter o GiT já instalado em sua máquina (não vou colocar isso aqui), partindo do pressuposto que você ja o tenha instalado, execute os seguintes comandos para realizar a atividade proposta:

OBS: os comandos devem ser executados na pasta do projeto

  1. git init (inicializa um repositório GIT)
  2. git add –all (adiciona todos os arquivos ao GIT)
  3. git remote add origin LINK_PARA_O_REPOSITORIO (este link você consegue no próprio Bitbucket na página do projeto)
  4. git commit -m “Commit inicial” (cria um commit inicial)
  5. git push -u origin master (envia seu projeto para a branch master, se tive routra branch, mude o nome).

É isso!

Geradores de sintaxe Crontab

Se você quiser executar periodicamente uma tarefa (por exemplo, enviar e-mails, fazer backup de banco de dados, fazer manutenção regular etc.) em horários e datas especificadas, é bem provável que você irá utilizar o CRON disponível nos sistemas Unix / Linux para isso.

A sintaxe de agendamento é simples, mas permite muitas customizações:

# .---------------- minute (0 - 59) 
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 
# | | | | .---- day of week (0 - 7) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat 
# | | | | |
# * * * * *  command to be executed

Para facilitar na hora de definir esse agendamento, existe alguns geradores que poderão ajudá-lo a produzir uma sintaxe de crontab que você possa copiar e colar em seu arquivo crontab (você pode abrir o arquivo usando o comando crontab –e).

Crontab GURU
https://crontab.guru/

Crontab Generator
https://crontab-generator.org/ ou https://crontabgenerator.org/

 

 

Turnkey Linux – Access denied for user ‘root’@’localhost’

Se você estiver utilizando algum Appliance da TurnKey GNU/Linux 15.0 que venha com banco de dados MySQL, saiba que o banco que vem por padrão é o MariaDB e isso é ótimo!

Distributor ID: TurnKey
Description: TurnKey GNU/Linux 9.5 (stretch)
Release: 9.5
Codename: stretch

Algo que tem ocorrido com essa versão do Appliance é que o acesso ao TurnKey Linux Database Administration Console – Powered by Adminer   – (https://IP:12322), é não permitir o login com usuário root e senha definida na instalação, exibindo o erro:

Access denied for user ‘root’@’localhost’

Para resolver isso o procedimento é simples:

# mysql -u root -p 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mysql;
MariaDB [(none)]> update user set password=PASSWORD('INFORME_A_SENHA') where User='root';
MariaDB [(none)]> update user set plugin='' where User='root';
MariaDB [(none)]> flush privileges; 
MariaDB [(none)]> quit;

# /etc/init.d/mysql restart

Lembrando que esse não é um erro, mas uma modificação na imagem Turnkey Linux na versão 9.5. O acesso ao banco de dados MySQL/MariaDB pode ser feito normalmente pelo usuário adminer e senha definida na instalação, sem necessidade de fazer essa alteração acima no console.

Como fazer uma separação a cada 4 resultados de foreach

Esses dias recebi essa pergunta aqui no blog:

Olá, você poderia me ajudar com essa dúvida em PHP?

Preciso que, a cada quatro valores listados de um foreach, coloque uma separação.

Já consigo buscar todas as informações do BD e exibi-las, porém gostaria dessa divisão a cada 4 resultados.

Seria algo tipo:

[xxx] [xxx] [xxx] [xxx]

________

[xxx] [xxx] [xxx] [xxx]

Ou seja, uma linha para separar a cada 4 valores.

//Exemplo:
foreach ($links->result() as $value) {
echo $value;
}

Bem isso é bem simples de resolver, basta fazer algo assim:

$contador = 1;
foreach ($links->result() as $value) {
echo $value;

if($contador%4==0){
echo 'SEPARADOR';
} 
$contador++;
}

Fonte: http://php.net/manual/en/control-structures.foreach.php

Combo para pesquisar por todas as categorias ou definir uma categoria específica – WordPress

Com o código abaixo o usuário poderá pesquisar em todo seu site ou em uma determinada categoria. Modificando os argumentos dentro de “wp_dropdown_categories” você poderá excluir categorias ou até mesmo especificar a ordem específica de categorias dentro da lista.

<form role="search" method="get" id="searchform" action="<?php bloginfo('siteurl'); ?>">
  <div>
    <label class="screen-reader-text" for="s">Buscar for:</label>
    <input type="text" value="" name="s" id="s" />
    em <?php wp_dropdown_categories( 'show_option_all=All Categories' ); ?>
    <input type="submit" id="searchsubmit" value="Search" />
  </div>
</form>