Configurar SQUID com SSL_BUMP em modo explicito.

Preparação do Ambiente (SQUID Specific)

Desabilitar SELINUX e FIREWALLD

# yum clean all
# yum -y update
# yum -y install squid
# systemctl start squid
# systemctl enable squid
# cd /etc/squid/
# mkdir ssl_cert
# chown squid:squid ssl_cert/
# chmod 700 ssl_cert
# cd ssl_cert
# openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem -out myCA.pem
# openssl x509 -in myCA.pem -outform DER -out myCA.der (myCA.der – Ficheiro a instalar nos clientes)
# /usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db
# chown squid:squid -R /var/lib/ssl_db

Configuração /etc/squid/squid.conf

  • Comentar a linha:

#http_port 3128

  • Adicionar as seguintes configurações:

http_port 0.0.0.0:3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl_cert/myCA.pem
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 10
sslproxy_options NO_SSLv2,NO_SSLv3,SINGLE_DH_USE
ssl_bump server-first
sslproxy_cert_error allow all

acl ssl_step1 at_step SslBump1
acl ssl_step2 at_step SslBump2
acl ssl_step3 at_step SslBump3
ssl_bump peek ssl_step1
ssl_bump splice all

Reiniciar o SQUID

# systemctl restart squid

Ficheiro de Log

/var/log/squid/access.log

WireShark Remoto

Recentemente deparei-me com a necessidade de analisar tráfego, em tempo real, de servidores remotos com recurso ao Wireshark. A solução encontrada para capturar pacotes remotamente foi a criação de um “named pipe”.

O “named pipe” foi criado com o seguinte comando:

mkfifo /tmp/remote_ppr

Uma vez criado o “named pipe” foi efetuado um tcpdump no servidor remoto fazendo o output para o “named pipe” utilizando o seguinte comando:

ssh root@myserver “tcpdump -s 0 -U -n -w – -i eth0 ‘not port 22 and (host 10.51.234.1 or host 10.51.234.2)'” > /tmp/remote

Por fim, foi iniciado o wireshark a efetuar a leitura dos pacotes recebidos pelo “named pipe”

wireshark -k -i /tmp/remote

Mod_JK, Jboss, First packet isn’t SYN

Recentemente deparei-me com uma situação na qual a firewall de hardware fazia drop às ligações estabelecidas entre o apache (mod_jk) e um servidor aplicacional Jboss.

Foram, adicionadas as seguintes flags aos workers do mod_jk:

socket_keepalive=1
socket_timeout=600

Foi, desta forma, ultrapassada a situação.

 

Liferay – Enumeração de utilizadores utilizando os documentos

Uma das vulnerabilidades existentes no liferay que permite enumerar utilizadores existentes na plataforma encontra-se no caminho dos documentos do Liferay, para corrigir esta vulnerabilidade deve seguir-se o seguinte procedimento:

Editar o ficheiro urlrewrite.xml (\tomcat-7.0.40\webapps\ROOT\WEB-INF

Inserir a seguinte regra:

<rule>
<from>^/documents/([A-Za-z]+)</from>
<to type=”permanent-redirect”>/</to>
</rule>

Erro “Unable to verify leaf signature” no NodeJS

Recentemente, após instalar uma aplicação NodeJS (MEAN Stack) deparei-me com o erro “Unable to verify leaf signature”. Após alguns despites conclui que a dificuldade encontrada estava relacionada com a cadeia de certificação associada ao certificado SSL utilizado pela aplicação. A minha primeira abordagem foi verificar no servidor NGINX a correta configuração do certificado e devida cadeia, no entanto todas as configurações estavam de acordo com as especificações, desta forma conclui que o a situação estava relacionada com servidor aplicacional (NodeJS).

Para tornar a aplicação funcional executei o seguinte procedimento no servidor aplicacional:

npm install ssl-root-cas

Este pacote NodeJS contem vários certificados intermédios que são “confiáveis” pelo browser mas não pelo NodeJS

var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()

Desta forma os certificados em falta serão adicionados.

Para além desta situação foi-me necessário adicionar mais certificados a este modulo pois por defeito os que eu necessitava não se encontravam neste “bundle”, para tal foi ncessário fazer o download dos certificados em falta para tal utilizei o seguinte procedimento:

require('ssl-root-cas/latest')
  .inject()
  .addFile(__dirname + '/certificadointermedioemfalta.crt');

Adicionar IP secundário em Linux

Adicionar IP temporário

Utilizando o ifconfig

Caso seja necessário adicionar um ip secundário a um interface que se encontra em uso e esta situação é temporária deve correr-se o seguinte comando:

ifconfig [nic]:0 [IP-Address] netmask [mask] up

Como exemplo:

ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0 up

Para correr este comando é necessário estar autenticado com o user root.

Utilizando o comando ip

Para efetuar esta configuração utilizando o binario ip deve correr-se o seguinte comando:

ip address add [ip]/[mask-digits] dev [nic]

Como exemplo:

ip address add 192.168.99.37/24 dev eth0

Adicionar IP permanentemente

CentoOS/RHEL

Para sistemas Centos/RHEL deve criar-se um ficheiro chamado:

ifcfg-eth0:1

O ficheiro deverá ter os seguintes conteudos:

NAME=""
BOOTPROTO=none
MACADDR=""
IPV6INIT=no
DEVICE=eth0:1
NETMASK=255.255.255.248
MTU=""
ONPARENT=yes
IPADDR=192.168.8.1
ONBOOT=yes

Uma vez efetuada a configuração devem reiniciar-se os serviços de network:

service network restart

JVM 100% CPU Leap Second

Na passagem do ano deparei-me com uma situação no mínimo curiosa, devido ao facto do ultimo minuto do ano ter tido 1 segundo a mais (leap second) várias JVM’s ficaram com uma utilização excessiva de CPU, afetando assim a performance de vários servidores. Depois de várias pesquisas, verifiquei que as recomendações de multiplos fabricantes era: efetuar reboot aos servidores em questão. Por se tratarem de ambientes produtivos, não considerei boa opção reiniciar as máquinas e descobri um “workaround”. Aparentemente forçar um reset à data é suficiente para corrigir o problema.

O comando a utilizar é o seguinte:

date -s "`date`"

 

/bin/tar: Argument list too long

Quando o numero de ficheiros numa diretoria excede 30.000 comprimilos pode ser um desafio. Seguem os passos para concluir esta tarefa com sucesso::

find . -name '*.txt' -print >/tmp/ficheiros
tar -cvzf textfiles.tar.gz --files-from /tmp/ficheiros
find . -name '*.txt' | xargs rm -v

Servidor de mail Zimbra. Erro “Some services are not running”

Por vezes a consola do servidor de correio eletrônico zimbra reporta os serviços como não disponíves quando no entanto os mesmos se encontram online como se pode comprovar atravez do comando:

$ zmcontrol status
Host zimbra
mailbox Running
memcached Running
service webapp Running
snmp Running
spell Running
stats Running
zimbra webapp Running
zimbraAdmin webapp Running
zimlet webapp Running
zmconfigd Running

Para corrigir esta situação devem correr-se os seguintes comandos como root:

# /opt/zimbra/libexec/zmsyslogsetup
# service rsyslog restart
# chkconfig rsyslog on

Init script para SOLR 4.10.2

#!/bin/sh
# description: Solr Server
# Solr Server service start, stop, restart

#solr start -d /opt/solr/core

SOLR_DIR="/opt/solr"
SOLR_CORE="/opt/solr/core"
SOLR_PORT="8983"
case $1 in
start)
echo "Starting Solr..."
$SOLR_DIR/bin/solr start -d $SOLR_CORE
sleep 1
lsof -i :8983
;;
stop)
echo "Stopping Solr..."
$SOLR_DIR/bin/solr stop -d $SOLR_CORE -p $SOLR_PORT
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: $0 [start|stop|restart]"
exit 1
;;
esac

exit 0