Um ficheiro MKV continha uma faixa de áudio em AC3 que não permitia ser reproduzido em alguns equipamentos. Para se converter para AAC há diversas formas documentadas.
Aqui fica o registo da utilização do FFMPEG (ou avconv) para extração e substituição da faixa de áudio.
1. Extração do áudio
ffmpeg -i Video.mkv -ab 192000 audio.aac
A extração do áudio inicia-se e é feita a conversão de AC3 para AAC com uma qualidade média de 192kbps.
2. Substituição da faixa de áudio num ficheiro MKV
ffmpeg -i Video.mkv -i audio.aac -map 0:v -map 1:a -codec copy -shortest NovoVideo.mkv
São fornecidos dois inputs (-i Video.mkv - vídeo pretendido e o segundo -i audio.aac com o áudio pretendido) é feito o mapeamento dos streams de cada input (-map 0:v para obter apenas o vídeo do primeiro stream e -map:1a para obter apenas o áudio do segundo stream) e é tudo copiado como está sem encoding (-codec copy) terminando o vídeo quando terminar o stream mais curto (-shortest) e colocando tudo um novo ficheiro (NovoVideo.mkv).
sábado, 21 de maio de 2016
terça-feira, 8 de março de 2016
Reverse Proxy com o nginx
A utilização de um reverse proxy permite que um servidor acessível a partir da Internet forneça serviços existentes na sua rede privada para a Internet.
Desta forma, basta uma única máquina com este serviço para depois permitir o acesso a, por exemplo, vários serviços web existentes na rede privada.
Servidores internos a disponibilizar na internet:
Após isto o serviço HTTP fica disponível e acessível na porta 80
netstat -tap
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:http *:* LISTEN 8967/nginx
Os ficheiros de configuração de cada site ficam disponíveis em: /etc/nginx/sites-available
Por defeito existe apenas o default que permite ver a página por defeito do nginx.
rm /etc/nginx/sites-enabled/default
Após qualquer alteração deste género é necessário fazer o reload das configurações do servidor:
service nginx reload
Neste caso, após ser removido o site default, passará a ser dado um aviso que a página não está disponível.
Resta agora criar um ficheiro de configuração para cada servidor:
nano /etc/nginx/sites-avaiable/www
server {
listen 80;
server_name www.exemplo.org exemplo.org;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.11;
}
}
nano /etc/nginx/sites-avaiable/test
server {
listen 80;
server_name test.exemplo.org;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass https://192.168.1.12;
}
}
Resta agora ativar os sites, para tal é necessário criar um link simbólico de cada um dos ficheiros para o diretório sites-enabled:
ln -s /etc/nginx/sites-available/www /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
E reiniciar o serviço
service nginx reload
Após isto caso o DNS esteja a apontar para o servidor correto e a porta 80 do router encaminhe tudo para o novo servidor, será possível aceder a cada um dos servidores pelo seu nome de domínio.
Esta configuração pode ser escalável para muitos mais serviços de forma semelhante.
[2] - Exemplo: https://www.garron.me/en/linux/nginx-reverse-proxy.html
Desta forma, basta uma única máquina com este serviço para depois permitir o acesso a, por exemplo, vários serviços web existentes na rede privada.
Requisitos
O serviço de reverse proxy será feito com recurso ao nginx num servidor ubuntu 14.04.Servidores internos a disponibilizar na internet:
- 192.168.1.11:80 - servidor web principal
- 192.168.1.12:80 - servidor web de teste
Instalação do nginx
apt-get install nginxApós isto o serviço HTTP fica disponível e acessível na porta 80
netstat -tap
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:http *:* LISTEN 8967/nginx
Os ficheiros de configuração de cada site ficam disponíveis em: /etc/nginx/sites-available
Por defeito existe apenas o default que permite ver a página por defeito do nginx.
Configuração do reverse proxy
Como o reverse proxy não vai disponibilizar serviço web direto, a configuração default que pode ser removida:rm /etc/nginx/sites-enabled/default
Após qualquer alteração deste género é necessário fazer o reload das configurações do servidor:
service nginx reload
Neste caso, após ser removido o site default, passará a ser dado um aviso que a página não está disponível.
Resta agora criar um ficheiro de configuração para cada servidor:
nano /etc/nginx/sites-avaiable/www
server {
listen 80;
server_name www.exemplo.org exemplo.org;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://192.168.1.11;
}
}
nano /etc/nginx/sites-avaiable/test
server {
listen 80;
server_name test.exemplo.org;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass https://192.168.1.12;
}
}
ln -s /etc/nginx/sites-available/www /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/
E reiniciar o serviço
service nginx reload
Após isto caso o DNS esteja a apontar para o servidor correto e a porta 80 do router encaminhe tudo para o novo servidor, será possível aceder a cada um dos servidores pelo seu nome de domínio.
Esta configuração pode ser escalável para muitos mais serviços de forma semelhante.
Referências
[1] - Documentação Oficial: https://www.nginx.com/resources/admin-guide/reverse-proxy/[2] - Exemplo: https://www.garron.me/en/linux/nginx-reverse-proxy.html
quarta-feira, 16 de dezembro de 2015
OpenELEC/Kodi autoplay de vídeos e playlists
Com o OpenELEC obtém-se rapidamente um media center completamente funcional mas com alguns ajustes é possível transformá-lo num kiosk que apresenta automaticamente um conjunto de vídeos num loop infinito.
Isto permite que sempre que seja ligado, arranque e inicie a reprodução sem qualquer intervenção humana (não é necessário rato/teclado/comando).
Assim, um sistema com uma televissão e um raspberry pi fica completamente autónomo para reprodução de vídeos de demonstração, divulgação, etc.
Quando se tiver a playlist concluída resta guardar com um nome sugestivo, por exemplo: videos_loop
Por defeito fica guardada em /storage/.kodi/userdata/playlists/video.
(
sleep 20 ;
kodi-send --action="PlayerControl(RepeatAll)" ;
kodi-send --action="PlayMedia(\"/storage/.kodi/userdata/playlists/video/videos_loop.m3u\")" ;
)&
É fácil perceber que inicialmente se esperam 2 segundos, depois é enviado o comando para o kodi alterar a forma de reprodução para RepeatAll e de seguida é dada a ordem de reprodução da playlist guardada.
Existem inúmeros comandos disponíveis para o kodi [1], permitindo personalizar e automatizar diversas tarefas.
A partir daqui resta ligar o raspberry pi com o OpenELEC e depois de carregar o Kodi, a playlist é iniciada e fica em loop até ser desligado.
Isto permite que sempre que seja ligado, arranque e inicie a reprodução sem qualquer intervenção humana (não é necessário rato/teclado/comando).
Assim, um sistema com uma televissão e um raspberry pi fica completamente autónomo para reprodução de vídeos de demonstração, divulgação, etc.
Criar uma playlist
A maneira mais fácil consiste em reproduzir um vídeo e depois ir adicionando novos vídeos à playlist.Quando se tiver a playlist concluída resta guardar com um nome sugestivo, por exemplo: videos_loop
Por defeito fica guardada em /storage/.kodi/userdata/playlists/video.
Reproduzir automaticamente e ficar em loop
Para iniciar a reprodução automática de vídeos/playlists, é possível criar um ficheiro autostart.sh em /storage/.config com:(
sleep 20 ;
kodi-send --action="PlayerControl(RepeatAll)" ;
kodi-send --action="PlayMedia(\"/storage/.kodi/userdata/playlists/video/videos_loop.m3u\")" ;
)&
É fácil perceber que inicialmente se esperam 2 segundos, depois é enviado o comando para o kodi alterar a forma de reprodução para RepeatAll e de seguida é dada a ordem de reprodução da playlist guardada.
Existem inúmeros comandos disponíveis para o kodi [1], permitindo personalizar e automatizar diversas tarefas.
A partir daqui resta ligar o raspberry pi com o OpenELEC e depois de carregar o Kodi, a playlist é iniciada e fica em loop até ser desligado.
Referências
[1] - http://kodi.wiki/view/List_of_built-in_functionssegunda-feira, 14 de dezembro de 2015
Kodi e Plex Media Server
Uma Raspberry Pi permite tornar qualquer televisão num centro multimédia de excelência a um custo extremamente acessível. Já foi visto aqui há muito tempo os diferentes "sabores" para utilização do Raspberry Pi como media center e o "sabor" aconselhado continua a ser o OpenELEC.
De facto as versões atuais do OpenELEC já trazem o Kodi (após o rebranding feito ao XBMC), mas continuam a caber num simples cartão de 512MB!!
Apesar de ser possível aceder ao Plex Media Server por DLNA, existe uma forma muito mais apelativa e que permite criar um autêntico cliente Plex no Kodi.
A solução passa pela instalação da skin Amber e do Add On PleXBMC.
A forma mais fácil é obter o ficheiro a partir do site [2]:
wget https://github.com/hippojay/plugin.video.plexbmc/archive/v4.0.0beta4.zip -O PleXBMC_latest.zip
Depois é necessário copiá-lo para o OpenELEC:
scp PleXBMC_latest.zip root@openelec:~
Para fazer a instalação resta aceder ao Kodi, ir aos Add Ons e instalar a partir de zip, selecionando o ficheiro copiado anteriormente.
Após este processo é perguntado se é pretendido ativar e utilizar esta skin.
Ao utilizar esta skin, no menu Settings aparece uma opção Go Plex que deverá ser utilizada para entrar em modo Plex e assim visualizar todos os conteúdos multimédia disponibilizados pelo Plex Media Server de forma muito apelativa.
Para reverter para o modo Kodi existe a opção Go Kodi.
Assim, na configuração do servidor é necessário:
1 » definir o servidor primário com o IP do Plex Media Server;
2 » aceder a Manage MyPlex e quando aparecer se pretende definir uma conta, deve cancelar-se o processo;
3 » aceder a Select Master Server... e deverá aparecer o nome do Plex Media Server, que deverá ser selecionado.
Após tudo isto é possível aceder à opção Go Plex e navegar pela galeria de media de forma muito apelativa.
ssh root@IP_do_OpenELEC
cd ~/.kodi/addons/skin.amber/1080i
mv Includes.xml Includes.xml.old
wget http://sprunge.us/JOCj -O Includes.xml
De seguida é possível fazer o Reload da skin no Kodi para que sejam carregadas as novas opções do menu.
[1] - http://kodi.wiki/view/Add-on:PleXBMC
[2] - https://github.com/hippojay/plugin.video.plexbmc/releases
[3] - http://kodi.wiki/view/Add-on:Amber
[4] - http://forum.kodi.tv/showthread.php?tid=187051
De facto as versões atuais do OpenELEC já trazem o Kodi (após o rebranding feito ao XBMC), mas continuam a caber num simples cartão de 512MB!!
Apesar de ser possível aceder ao Plex Media Server por DLNA, existe uma forma muito mais apelativa e que permite criar um autêntico cliente Plex no Kodi.
A solução passa pela instalação da skin Amber e do Add On PleXBMC.
1 - Instalação do PleXBMC
A instalação do PleXBMC está bem descrita [1] na página do projeto e aqui ficam as dicas.A forma mais fácil é obter o ficheiro a partir do site [2]:
wget https://github.com/hippojay/plugin.video.plexbmc/archive/v4.0.0beta4.zip -O PleXBMC_latest.zip
Depois é necessário copiá-lo para o OpenELEC:
scp PleXBMC_latest.zip root@openelec:~
Para fazer a instalação resta aceder ao Kodi, ir aos Add Ons e instalar a partir de zip, selecionando o ficheiro copiado anteriormente.
2 - Instalação da skin Amber
Não há muito a dizer para além das instruções oficiais [3], no Kodi para ativar esta skin é necessário aceder à condiguração da Aparência, onde será necessário obter mais e escolher a Amber para descarregar e instalar.Após este processo é perguntado se é pretendido ativar e utilizar esta skin.
Para reverter para o modo Kodi existe a opção Go Kodi.
3 - Configuração do PleXBMC para acesso ao servidor Plex
Com uma atualização do Plex Media Server deixou de ser tão transparente a configuração do cliente para quem não tenha ou não queira ter conta no plex.tv.Assim, na configuração do servidor é necessário:
1 » definir o servidor primário com o IP do Plex Media Server;
2 » aceder a Manage MyPlex e quando aparecer se pretende definir uma conta, deve cancelar-se o processo;
3 » aceder a Select Master Server... e deverá aparecer o nome do Plex Media Server, que deverá ser selecionado.
Após tudo isto é possível aceder à opção Go Plex e navegar pela galeria de media de forma muito apelativa.
4 - Kodi 14 e a skin Amber
A versão OpenElec 5.0.8 vem com o Kodi 14.2 e a skin Amber esconde diversas opções das configurações do Kodi. Contudo, é possível alterar um ficheiro [4] para ativar novamente as Configurações. Assim, resta aceder por SSH ao OpenELEC e substituir o ficheiro ~/.kodi/addons/skin.amber/1080i/Includes.xml:ssh root@IP_do_OpenELEC
cd ~/.kodi/addons/skin.amber/1080i
mv Includes.xml Includes.xml.old
wget http://sprunge.us/JOCj -O Includes.xml
De seguida é possível fazer o Reload da skin no Kodi para que sejam carregadas as novas opções do menu.
[1] - http://kodi.wiki/view/Add-on:PleXBMC
[2] - https://github.com/hippojay/plugin.video.plexbmc/releases
[3] - http://kodi.wiki/view/Add-on:Amber
[4] - http://forum.kodi.tv/showthread.php?tid=187051
Plex Media Server - Instalação e utilização
A utilização de um servidor de streaming para uma rede interna é muito útil pois permite que a partir de um único local de armazenamento sejam disponibilizados conteúdos multimédia para os diversos equipamentos da rede: televisões, telemóveis, tablets, portáteis, pc, etc.
Um servidor de streaming já visto anteriormente é o miniDLNA que é muito versátil e permite rapidamente ter um serviço básico de DLNA numa rede.
Uma alternativa muito apelativa é o Plex Media Server [1], apesar de ser proprietária é gratuita e existe uma versão para ubuntu a partir do 10.04.
wget https://downloads.plex.tv/plex-media-server/0.9.12.19.1537-f38ac80/plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb
Depois é necessário instalar o pacote com:
sudo dpkg -i plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb
A partir daqui tudo deve ser instalado, caso surjam dependências que seja necessário instalar, é possível automatizar esse processo com:
sudo apt-get install -f
http://IP_do_servidor:32400/web/index.html
Depois é possível acrescentar uma Biblioteca (Library), por exemplo, para Filmes e indicar o local onde estão os ficheiros a disponibilizar.
Caso se tratem de filmes existem alguns scripts automáticos que fazem a inventariação dos filmes com capas e ficha técnica da produção.
Depois resta utilizar um cliente compatível, por exemplo, grande parte das televisões LG com DLNA têm a aplicação Plex cliente instalada, que ao ser utilizada apresenta uma ótima interface para acesso aos ficheiros multimédia disponibilizados pelo Plex Media Server.
[1] - https://plex.tv/
[2] - https://plex.tv/downloads
Um servidor de streaming já visto anteriormente é o miniDLNA que é muito versátil e permite rapidamente ter um serviço básico de DLNA numa rede.
Uma alternativa muito apelativa é o Plex Media Server [1], apesar de ser proprietária é gratuita e existe uma versão para ubuntu a partir do 10.04.
1 - Instalação
Utilizando uma máquina com ubuntu, pelo menos 10.04, é necessário descarregar o instalador [2], por exemplo, para a versão disponível neste momento será:wget https://downloads.plex.tv/plex-media-server/0.9.12.19.1537-f38ac80/plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb
Depois é necessário instalar o pacote com:
sudo dpkg -i plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb
A partir daqui tudo deve ser instalado, caso surjam dependências que seja necessário instalar, é possível automatizar esse processo com:
sudo apt-get install -f
2 - Configuração e Utilização
A partir do momento que está a executar, o PMS (Plex Media Server) pode ser acedido por browser a partir de qualquer localização da rede:http://IP_do_servidor:32400/web/index.html
Depois é possível acrescentar uma Biblioteca (Library), por exemplo, para Filmes e indicar o local onde estão os ficheiros a disponibilizar.
Caso se tratem de filmes existem alguns scripts automáticos que fazem a inventariação dos filmes com capas e ficha técnica da produção.
Depois resta utilizar um cliente compatível, por exemplo, grande parte das televisões LG com DLNA têm a aplicação Plex cliente instalada, que ao ser utilizada apresenta uma ótima interface para acesso aos ficheiros multimédia disponibilizados pelo Plex Media Server.
[1] - https://plex.tv/
[2] - https://plex.tv/downloads
terça-feira, 8 de dezembro de 2015
Servidor HTTPS gratuito e confiável - Let's Encrypt
O projeto Let's Enrypt [1] juntou grandes empresas da rede na criação de uma entidade de certificação gratuita, automática e aberta. Permitindo assim que todos os websites possam ter certificados válidos para encriptação do tráfego que geram.
Para perceber melhor o conceito, pode dizer-se que toda a navegação feita em endereços URL que utilizam apenas http:// é aberta e pode ser facilmente acedida por qualquer "pessoa" na rede.
Quando se utilizam endereços URL que começam por https:// significa que existe uma negociação automática entre o servidor e o nosso browser, que lhes permite comunicar de uma forma que toda a informação que passa na rede está encriptada e ao ser apanhada não é perceptível o que lá está.
Para que se possa confiar no servidor, há muitos anos criou-se um esquema de empresas de certificação que se responsabilizam pela validade da identidade do servidor e pela segurança e fiabilidade das chaves utilizadas. Este processo envolvia quase sempre o pagamento dos certificados.
Sempre foi possível a criação de certificados manuais, que cada administrador criava para os seus servidores, contudo como eram manuais e não havia nenhuma entidade externa a validá-los, quase todos os browsers exibem avisos que o site é potencialmente perigoso e afins. Tornando-se assim uma solução pouco aceitável para uma utilização generalizada pois, apesar de as comunicações serem muito mais seguras, os utilizadores eram alertados para os perigos de segurança do certificado não ser reconhecido...
Com o projeto Let's Encrypt, grandes empresas como a Mozilla, Cisco, Akamai, Facebook, entre muitas outras, decidiram tornar o processo de criação e atribuição de certificados para servidores muito mais rápido, fácil e económico, permitindo assim que a proteção de todas as comunicações feitas online esteja ao alcance de todos.
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Para instalar:
./letsencrypt-auto
Na documentação do projeto há imensas referências que permitem cobrir grande parte das configurações básicas [2], designados de plugins e que estão muito bem documentados.
Desta forma foi instalado o cliente Let's Encrypt no servidor para HTTPS e executado como root:
./letsencrypt-auto certonly --manual
De seguida é necessário indicar o domínio alvo do certificado, podendo ser incluídos diversos domínios separados por vírgulas ou espaço, por exemplo: dominio.my.to
Depois é indicado que o nosso IP público será registado e associado ao pedido de certificado.
E são depois apresentadas algumas informações que deverão ser seguidas:
Make sure your web server displays the following content at
http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande before continuing:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134
E fica à espera que seja feito o setup necessário, após o qual devemos dar enter.
Como se pode observar pelas indicações dadas, o serviço do Let's Encrypt vai tentar aceder a um ficheiro em HTTP no mesmo domínio, assim é necessário criar as pastas necessários no servidor HTTP e criar o ficheiro indicado com o conteúdo pretendido:
mkdir -p /var/www/html/.well-known/acme-challenge
printf "%s" coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134 > /var/www/html/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande
Para testar deve abrir-se o browser o endereço http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande e verificar se aparece o texto pretendido:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134
Quando isto estiver pronto, resta voltar ao cliente do Let's Encrypt e finalizar com enter e, caso tudo corra bem, aparecerá a seguinte informação:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/dominio.my.to/fullchain.pem. Your cert will
expire on 2016-03-07. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Os certificados estão disponíveis em /etc/letsencrypt/live/dominio.my.to/ e explicados na documentação [3].
No ficheiro de configuração do HTTPS no apache, por exemplo, /etc/apache2/sites-available/default-ssl.conf, deverão ser refletidos os novos certificados:
####Configuration for SSL #####
SSLEngine on
# LET'S ENCRYPT
SSLCertificateFile /etc/letsencrypt/live/dominio.my.to/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.my.to/privkey.pem
#### End of SSL Configuration ####
De seguida resta reiniciar o apache e começar a utilizar o novo certificado válido
service apache2 restart
Ao aceder ao serviço HTTPS no browser já será apresentado como seguro sem as mensagens normais que o certificado não é válido.
[1] - https://letsencrypt.org/
[2] - https://letsencrypt.readthedocs.org/en/latest/using.html#installation
[3] - https://letsencrypt.readthedocs.org/en/latest/using.html#where-are-my-certificates
Para perceber melhor o conceito, pode dizer-se que toda a navegação feita em endereços URL que utilizam apenas http:// é aberta e pode ser facilmente acedida por qualquer "pessoa" na rede.
Quando se utilizam endereços URL que começam por https:// significa que existe uma negociação automática entre o servidor e o nosso browser, que lhes permite comunicar de uma forma que toda a informação que passa na rede está encriptada e ao ser apanhada não é perceptível o que lá está.
Para que se possa confiar no servidor, há muitos anos criou-se um esquema de empresas de certificação que se responsabilizam pela validade da identidade do servidor e pela segurança e fiabilidade das chaves utilizadas. Este processo envolvia quase sempre o pagamento dos certificados.
Sempre foi possível a criação de certificados manuais, que cada administrador criava para os seus servidores, contudo como eram manuais e não havia nenhuma entidade externa a validá-los, quase todos os browsers exibem avisos que o site é potencialmente perigoso e afins. Tornando-se assim uma solução pouco aceitável para uma utilização generalizada pois, apesar de as comunicações serem muito mais seguras, os utilizadores eram alertados para os perigos de segurança do certificado não ser reconhecido...
Com o projeto Let's Encrypt, grandes empresas como a Mozilla, Cisco, Akamai, Facebook, entre muitas outras, decidiram tornar o processo de criação e atribuição de certificados para servidores muito mais rápido, fácil e económico, permitindo assim que a proteção de todas as comunicações feitas online esteja ao alcance de todos.
Instalação do cliente
Para obter e instalar o software cliente do Let's Encrypt, a forma mais rápida é através do git:git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Para instalar:
./letsencrypt-auto
Na documentação do projeto há imensas referências que permitem cobrir grande parte das configurações básicas [2], designados de plugins e que estão muito bem documentados.
Criação de um certificado manual
No meu caso particular tenho o tráfego HTTP (porta 80) a ir para um servidor e o HTTPS (porta 443) a ir para outro servidor. Assim, não é possível utilizar os plugins disponibilizados pelo cliente, pois este pressupõe que ambos os serviços são assegurados pela mesma máquina.Desta forma foi instalado o cliente Let's Encrypt no servidor para HTTPS e executado como root:
./letsencrypt-auto certonly --manual
De seguida é necessário indicar o domínio alvo do certificado, podendo ser incluídos diversos domínios separados por vírgulas ou espaço, por exemplo: dominio.my.to
Depois é indicado que o nosso IP público será registado e associado ao pedido de certificado.
E são depois apresentadas algumas informações que deverão ser seguidas:
Make sure your web server displays the following content at
http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande before continuing:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134
Como se pode observar pelas indicações dadas, o serviço do Let's Encrypt vai tentar aceder a um ficheiro em HTTP no mesmo domínio, assim é necessário criar as pastas necessários no servidor HTTP e criar o ficheiro indicado com o conteúdo pretendido:
mkdir -p /var/www/html/.well-known/acme-challenge
printf "%s" coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134 > /var/www/html/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande
Para testar deve abrir-se o browser o endereço http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande e verificar se aparece o texto pretendido:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134
Quando isto estiver pronto, resta voltar ao cliente do Let's Encrypt e finalizar com enter e, caso tudo corra bem, aparecerá a seguinte informação:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/dominio.my.to/fullchain.pem. Your cert will
expire on 2016-03-07. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Configuração do apache para o certificado Let's Encrypt
Agora que existe um certificado válido, resta alterar a configuração do apache para que utilize este novo certificado.Os certificados estão disponíveis em /etc/letsencrypt/live/dominio.my.to/ e explicados na documentação [3].
No ficheiro de configuração do HTTPS no apache, por exemplo, /etc/apache2/sites-available/default-ssl.conf, deverão ser refletidos os novos certificados:
####Configuration for SSL #####
SSLEngine on
# LET'S ENCRYPT
SSLCertificateFile /etc/letsencrypt/live/dominio.my.to/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.my.to/privkey.pem
#### End of SSL Configuration ####
service apache2 restart
Ao aceder ao serviço HTTPS no browser já será apresentado como seguro sem as mensagens normais que o certificado não é válido.
[1] - https://letsencrypt.org/
[2] - https://letsencrypt.readthedocs.org/en/latest/using.html#installation
[3] - https://letsencrypt.readthedocs.org/en/latest/using.html#where-are-my-certificates
domingo, 8 de novembro de 2015
RF24 - Utilizar o nRF24L01+ para comunicações com Raspberry Pi e Arduino
O chip nRF24L01+ permite a comunicação sem fios na faixa dos 2.4GHz de forma económica [1] (menos de 1 euro, é questão de se procurar nos diversos sites).
Com dois desses chips é possível efetuar comunicações entre dois dispositivos eletrónicos, neste caso um Raspberry Pi 2 B e um arduino uno.
A primeira questão são so drivers necessários para ambas as plataformas. Existem diversas implementações, aqui será utilizada a RF24, fornecida por TMRh20 [2].
É necessário efetuar as ligações de um nRF24L01+ ao arduino UNO e de outro nRF24L01+ ao Raspberry Pi.
Abrir o arduino IDE e ativar a biblioteca RF24 (testado em 1.6.5):
Sketch > Include Library > Manage Libraries...
Pesquisar por RF24 e clicar em Install
Obter o exemplo [3] fazer o upload para o arduino e abrir a consola CTRL+SHIFT+M, introduzir T para começar a enviar pings.
Raspberry Pi
No Raspbian garantir que o sistema está atualizado:
sudo apt-get update
sudo apt-get upgrade
Ativar o SPI
sudo raspi-config
Advanced > enable the SPI kernel module
Instalar as bibliotecas RF24 do TMRH20 [4]:
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
chmod +x install.sh
./install.sh
Depois resta entrar no diretório de exemplos para o RPi e experimentar:
cd rf24libs/RF24/examples_RPi
make
sudo ./gettingstarted
Depois é necessário pressionr 0 (zero) para receber os pings do arduino.
[2] - http://tmrh20.github.io/RF24/index.html
[3] - http://tmrh20.github.io/RF24/GettingStarted_8ino-example.html
[4] - http://tmrh20.github.io/RF24/RPi.html
[5] - Projeto com comunicação entre o Raspberry Pi e o arduino (em inglês): https://www.coconauts.net/blog/2014/09/03/send-readings-from-arduino-to-raspberry-via-radio/
[6] - Referências para o arduino e o nRF24L01+ (em inglês): http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
[7] - Projeto mais antigo para comunicação entre o Raspberry Pi e o arduino (em inglês): http://blog.the-jedi.co.uk/2013/10/07/nrf24l01-and-raspberry-pi/
Com dois desses chips é possível efetuar comunicações entre dois dispositivos eletrónicos, neste caso um Raspberry Pi 2 B e um arduino uno.
A primeira questão são so drivers necessários para ambas as plataformas. Existem diversas implementações, aqui será utilizada a RF24, fornecida por TMRh20 [2].
Ligações
nRF24L01+ possui oito pinos mas apenas se utilizam os primeiros 7.| pin | nRF24L01+ | arduino UNO | RPi pin | RPi GPIO |
|---|---|---|---|---|
| 1 | GND | GND | 25 | GND |
| 2 | VCC | 3.3V | 17 | 3v3 |
| 3 | CE | D7 | 15 | GPIO22 |
| 4 | CSN | D8 | 24 | GPIO8 |
| 5 | SCKL | D13 | 23 | SCKL |
| 6 | MOSI | D11 | 19 | MOSI |
| 7 | MISO | D12 | 21 | MISO |
É necessário efetuar as ligações de um nRF24L01+ ao arduino UNO e de outro nRF24L01+ ao Raspberry Pi.
Instalação do Software
arduinoAbrir o arduino IDE e ativar a biblioteca RF24 (testado em 1.6.5):
Sketch > Include Library > Manage Libraries...
Pesquisar por RF24 e clicar em Install
Obter o exemplo [3] fazer o upload para o arduino e abrir a consola CTRL+SHIFT+M, introduzir T para começar a enviar pings.
Raspberry Pi
No Raspbian garantir que o sistema está atualizado:
sudo apt-get update
sudo apt-get upgrade
Ativar o SPI
sudo raspi-config
Advanced > enable the SPI kernel module
Instalar as bibliotecas RF24 do TMRH20 [4]:
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
chmod +x install.sh
./install.sh
Depois resta entrar no diretório de exemplos para o RPi e experimentar:
cd rf24libs/RF24/examples_RPi
make
sudo ./gettingstarted
Depois é necessário pressionr 0 (zero) para receber os pings do arduino.
Referências
[1] - http://www.aliexpress.com/w/wholesale-nrf24l01.html[2] - http://tmrh20.github.io/RF24/index.html
[3] - http://tmrh20.github.io/RF24/GettingStarted_8ino-example.html
[4] - http://tmrh20.github.io/RF24/RPi.html
[5] - Projeto com comunicação entre o Raspberry Pi e o arduino (em inglês): https://www.coconauts.net/blog/2014/09/03/send-readings-from-arduino-to-raspberry-via-radio/
[6] - Referências para o arduino e o nRF24L01+ (em inglês): http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
[7] - Projeto mais antigo para comunicação entre o Raspberry Pi e o arduino (em inglês): http://blog.the-jedi.co.uk/2013/10/07/nrf24l01-and-raspberry-pi/
terça-feira, 27 de outubro de 2015
Proxmox/OpenVZ contentor sem permissões de escrita em /dev/null
Algumas VPS OpenVZ ao reiniciarem ficavam com permissões erradas (rw- --- ---, ou seja, 600) em alguns devices:
/dev/null
/dev/full
/dev/zero
/dev/random
/dev/urandom
A partir daqui [1] foi possível obter uma regra para o udev aplicar sobre estes devices e permitir que a cada arranque as permissões sejam as corretas.
Como neste caso o ficheiro não existe é necessário criá-lo e adicionar o conteúdo abaixo.
# nano /etc/udev/rules.d/50-fix-permission.rules
SUBSYSTEM=="mem", KERNEL=="null|zero|full|random|urandom", MODE="0666"
Guardar com CTRL + X e Y
[1] - https://bbs.archlinux.org/viewtopic.php?pid=1123209#p1123209
/dev/null
/dev/full
/dev/zero
/dev/random
/dev/urandom
A partir daqui [1] foi possível obter uma regra para o udev aplicar sobre estes devices e permitir que a cada arranque as permissões sejam as corretas.
Como neste caso o ficheiro não existe é necessário criá-lo e adicionar o conteúdo abaixo.
# nano /etc/udev/rules.d/50-fix-permission.rules
SUBSYSTEM=="mem", KERNEL=="null|zero|full|random|urandom", MODE="0666"
Guardar com CTRL + X e Y
[1] - https://bbs.archlinux.org/viewtopic.php?pid=1123209#p1123209
sábado, 11 de julho de 2015
VPN: Criar chave para cliente android e configuração
0. Introdução
As vantagens na utilização de um servidor VPN têm duas vertentes essenciais:- Aumentar a segurança na utilização de redes inseguras (redes wireless avulsas ou sem encriptação)
- Ligar a uma rede local remota
O segundo aspeto permite que o nosso dispositivo esteja "fisicamente" ligado à rede remota. Muito útil no caso de aplicações de ISP que apenas funcionam dentro da rede local de cada cliente (por exemplo, aplicações para visualização da emissão de TV e afins).
Desta forma, com acesso à Internet e ativando a ligação VPN é possível navegar a partir de qualquer lugar como se estivéssemos na rede local do servidor VPN e, assim, utilizar as referidas aplicações como se estivéssemos fisicamente na rede local.
1. Requisitos
1. Acesso a um servidor VPN.2. Instalação da aplicação OpenVPN Connect no dispositivo cliente, designado de tabuleta
O teste foi feito com um sistema Android 4.x, mas existem diversas instruções para outros dispositivos ([1] ver Step 5 - Installing the Client Profile).
Para equipamentos Android de versões 2.x é necessário acesso root ao equipamento [2].
2. Criação de Certificados, Chaves e afins
Para cada dispositivo cliente é necessário criar um conjunto de ficheiros que permitem encriptar a ligação de forma muito segura.Assim, acedendo ao servidor VPN, basta utilizar:
cd /etc/openvpn/easy-rsa/
./build-key tabuleta
Serão perguntadas diversas questões que para utilização normal podem ser confirmadas todas com ENTER e no final com dois 'y' para confirmação.
Este processo cria vários ficheiros na pasta /etc/openvpn/easy-rsa/keys, nomeadamente: tabuleta.crt e tabuleta.key.
3. Criação de um Perfil para o OpenVPN Connect
A criação de um perfil permite combinar num único ficheiro todos elementos necessários para a configuração de um cliente VPN.1. Copiar o exemplo base de perfil:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/tabuleta.ovpn
2. Editar o perfil tablet.ovpn:
nano /etc/openvpn/easy-rsa/keys/tabuleta.ovpn
3. Alterar a linha remote my-server-1 1194 para ter o domínio do servidor, por exemplo qualquercoisa.no-ip.org:
remote qualquercoisa.no-ip.org 1194
4. Se o cliente não é Windows, devem descomentar-se as linhas:
user nobody
group nogroup
5. Deve comentar-se depois as linhas que fazem referência aos certificados e chaves:
#ca ca.crt
#cert client.crt
#key client.key
6. De seguida é possível acrescentar e copiar/colar de forma a que o ficheiro tabuleta.ovpn fique:
(conteúdo existente)
(colar conteúdo do ca.crt)
</ca>
(colar conteúdo do tabuleta.crt)
</cert>
(colar conteúdo do tabuleta.key)
</key>
Para auxiliar a este processo criei um bash script que está disponível aqui [3].
7. Copiar o perfil tabuleta.ovpn de forma segura para o cliente.
4. Configuração do OpenVPN Connect no cliente
Para que um dispositivo se possa ligar ao servidor VPN necessita ter um cliente instalado e configurado. Neste caso o dispositivo tabuleta é um equipamento Android 4.x.1. Instalar a aplicação OpenPVN Connect [4]
2. Abrir o OpenVPN Connect e importar o perfil copiado anteriormente com a opção:
Import > Import Profile from SD card
3. Selecionar o ficheiro tabuleta.ovpn e posteriormente deverá aparecer o perfil na aplicação
4. Quando estiver com acesso à Internet é possível fazer Connect e todo o tráfego passará pelo servidor VPN.
Referências
[1] - Página com muita informação sobre criação e configuração do servidor e dos clienteshttps://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04
[2] - Instruções para instalação no GingerBread 2.3
https://my.hostvpn.com/knowledgebase/15/OpenVPN-for-Android-rooted-Gingerbread-23x.html
http://librehacks.blogspot.pt/2015/07/vpn-script-para-criacao-de-perfis.html
[4] - Aplicação OpenVPN Connect
https://play.google.com/store/apps/details?id=net.openvpn.openvpn
VPN: Script para a criação de perfis OpenVPN
O script seguinte permite criar um perfil para um cliente OpenVPN após serem criados os seus certificados e chaves (./build-key tabuleta).
Deve ser guardado em /etc/openvpn/easy-rsa/keys/mergeKeys.sh
E deve ser invocado a partir dessa localização com o argumento do nome do cliente. Por exemplo:
./mergeKeys.sh tabuleta
Para criar tabuleta.ovpn, a partir de ca.crt, tabuleta.crt e tabuleta.key.
Deve copiar-se o perfil de exemplo OVPN para template.ovpn e configurá-lo de acordo com o servidor.
# Check for client name
echo -e "Checking for client name... "
if [ $# -eq 0 ]; then
echo -e "ERROR: No client name provided.\nAborting."
echo -e "\nYou have to supply the client name for the certificate. eg:\n$0 client1\n"
exit 1
else
echo -e "Using $1 to find certificates..."
fi
# Check for client.ovpn
if [ -f "$1.ovpn" ]; then
echo -e "WARNING: $1.ovpn already exist."
echo -e "\nAborting."
exit 1
fi
FILE=template.ovpn
echo -e "Checking for template profile $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE=ca.crt
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE="$1.crt"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE="$1.key"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
# All files exist
echo -e "All files exist.\n"
FILE=client.ovpn
echo "Creating $1.ovpn base file with $FILE..."
cp "$FILE" "$1.ovpn"
if [ ! -f "$1.ovpn" ]; then
echo -e "ERROR: $1.ovpn couldn't be created. Check permissions."
echo -e "\nAborting."
exit 1
fi
FILE=ca.crt
echo "Append $FILE to $1.ovpn..."
echo "<ca>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</ca>" >> "$1.ovpn"
FILE="$1.crt"
echo "Append $FILE to $1.ovpn..."
echo "<cert>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</cert>" >> "$1.ovpn"
FILE="$1.key"
echo "Append $FILE to $1.ovpn..."
echo "<key>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</key>" >> "$1.ovpn"
echo -e "Done.\n"
Deve ser guardado em /etc/openvpn/easy-rsa/keys/mergeKeys.sh
E deve ser invocado a partir dessa localização com o argumento do nome do cliente. Por exemplo:
./mergeKeys.sh tabuleta
Para criar tabuleta.ovpn, a partir de ca.crt, tabuleta.crt e tabuleta.key.
Deve copiar-se o perfil de exemplo OVPN para template.ovpn e configurá-lo de acordo com o servidor.
mergeKeys.sh
#!/bin/bash# Check for client name
echo -e "Checking for client name... "
if [ $# -eq 0 ]; then
echo -e "ERROR: No client name provided.\nAborting."
echo -e "\nYou have to supply the client name for the certificate. eg:\n$0 client1\n"
exit 1
else
echo -e "Using $1 to find certificates..."
fi
# Check for client.ovpn
if [ -f "$1.ovpn" ]; then
echo -e "WARNING: $1.ovpn already exist."
echo -e "\nAborting."
exit 1
fi
FILE=template.ovpn
echo -e "Checking for template profile $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE=ca.crt
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE="$1.crt"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
FILE="$1.key"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
echo -e "ERROR: $FILE not found."
echo -e "\nAborting."
exit 1
fi
# All files exist
echo -e "All files exist.\n"
FILE=client.ovpn
echo "Creating $1.ovpn base file with $FILE..."
cp "$FILE" "$1.ovpn"
if [ ! -f "$1.ovpn" ]; then
echo -e "ERROR: $1.ovpn couldn't be created. Check permissions."
echo -e "\nAborting."
exit 1
fi
FILE=ca.crt
echo "Append $FILE to $1.ovpn..."
echo "<ca>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</ca>" >> "$1.ovpn"
FILE="$1.crt"
echo "Append $FILE to $1.ovpn..."
echo "<cert>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</cert>" >> "$1.ovpn"
FILE="$1.key"
echo "Append $FILE to $1.ovpn..."
echo "<key>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</key>" >> "$1.ovpn"
echo -e "Done.\n"
Subscrever:
Mensagens (Atom)



