anúncios

sexta-feira, 20 de dezembro de 2019

Instalando e Configurando servidor CalDAV e CardDAV com Radicale

O que é Radicale?

Radicale é um servidor de calendário e lista de endereços, desenvolvido em Python e implementa os padrões CalDAV e CardDAV.

A configuração recomendada para uso em produção é atender ao Apache em todo o sistema via uWSGI com autenticação baseada em Apache.

Debian/Ubuntu

Instalação

$ sudo apt install radicale apache2-utils python3-bcrypt python3-passlib

Autenticação

Crie um arquivo "users" com todos os nomes de usuário e senhas

$ htpasswd -c -B /etc/radicale/users user
$ htpasswd -B /etc/radicale/users user2

Em seguida, para definir a autenticação como htpasswd com criptografia bcrypt, edite essas instâncias em /etc/radicale/config

[auth]
type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = bcrypt
O script de inicialização do SysV fornecido deve cuidar disso. Caso contrário, você pode fazê-lo manualmente, conforme abaixo:

$ sudo mkdir -p /var/lib/radicale
$ sudo chown radicale:radicale /var/lib/radicale
$ sudo chmod g-w,o-rwx /var/lib/radicale
$ sudo mkdir -p /var/log/radicale
$ sudo chown radicale:adm /var/log/radicale
$ sudo chmod g-w,o-rwx /var/log/radicale
Arquivo de log

Editar o arquivo /etc/radicale/config conforme abaixo:
$ sudo vim /etc/radicale/config

[logging]
config = /etc/radicale/logging

/etc/radicale/logging
[handlers]
#keys = console
keys = file

[formatters]
#keys = simple
keys = full

[logger_root]
#level = WARNING
#level = INFO
level = DEBUG
#handlers = console
handlers = file
[handler_file]
class = FileHandler
# Note: Debian logrotate handles /var/log/radicale/*.log, but not /var/log/radicale/log
# (the example given on radicale.org, including their own logfile rotation)
args = ('/var/log/radicale/radicale.log',)
formatter = full
[formatter_full]
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s
Adicionar o hostname do Radicale

Editar o arquivo /etc/radicale/config

[server]
hosts = 127.0.0.1:5232, hostname.local:5232
ssl = true
Habilitar o serviço Radicale no boot

$ sudo update-rc.d radicale enable
service radicale start
service radicale status
service radicale stop

Configuração do Vhost no Apache para o Radicale

$ sudo apt install apache2 libapache2-mod-wsgi
$ sudo vim etc/apache2/sites-available/radicale.conf

< VirtualHost *:80 >
  ServerName dav.dominio.com.br

WSGIDaemonProcess radicale user=www-data group=www-data threads=1
WSGIScriptAlias / /usr/share/radicale/radicale.wsgi

< Directory /usr/share/radicale>
WSGIProcessGroup radicale
WSGIApplicationGroup %{GLOBAL}
AllowOverride None
Order allow,deny
allow from all
< /Directory >
< /VirtualHost >
Ativar o Vhost

$ sudo a2dissite 000-default.conf
$ sudo a2ensite radicale.conf

Criar arquivo de log com usuário e grupo www-data

$ sudo mkdir -p /var/log/radicale/
$ sudo chown -R www-data /var/log/radicale/
$ sudo mkdir -p /var/lib/radicale
$ sudo chown -R www-data /var/lib/radicale/

Reinicie o serviço do Radicale e Apache

Ao acessar http://dav.dominio.com.br irá redirecionar por debaixo dos panos http://dav.dominio:5232

Agora, utilize o App CardDAV-Sync e adicione o servidor Radicale configurado para sincronizar os contatos.

Referências:

https://wiki.debian.org/Radicale

Feito!

quinta-feira, 19 de dezembro de 2019

Configurar certificado SSL com Let's Encrypt

O que é Let's Encrypt?

Let's Encrypt é uma autoridade certificadora gratuita, automatizada e aberta que se tornou possível graças à organização sem fins lucrativos Internet Security Research Group (ISRG)

O Certbot é o cliente do Let's Encrypt que facilita a emissão do certificado SSL no webserver Apache e Nginx.

O presente post, irá explicar os procedimentos de geração do certificado SSL com Let's Encrypt em paralelo com Certbot em um servidor com Debian.

Instalar o Certbot

No Apache

$ sudo apt-get install python-certbot-apache

No Nginx

$ sudo apt-get install python-certbot-nginx

Realizar a emissão e instalação do certificado SSL
Após instalar o certbot, execute a emissão do certificado de acordo com o webserver Apache ou Nginx que estiver utilizando em seu servidor.

No Apache

$ sudo certbot --apache -d dominio.com.br -d dominio.com.br

No Nginx

$ sudo certbot --nginx -d dominio.com.br -d dominio.com.br

Neste exemplo, estamos emitindo um certificado tanto para o domínio principal quanto para o subdomínio www.

Após a execução do comando, precisa fornecer algumas informações solicitadas no próprio terminal, uma delas é o e-mail que será utilizado para enviar notificações sobre a renovação do certificado e eventuais alertas de segurança. Aceitar os termos de serviço e por fim escolha a opção para redicionar todo tráfego para executar sob o prototocolo HTTPS.

Com isso, o certificado já deverá estar funcionamento plenamente. Para verificar, acesse a URL raiz do seu domínio usando o protocolo seguro (https://seudominio.com.br). É bom verificar o diagnótico completo do certificado, acesse o endereço abaixo substituindo pelo seu domínio.

https://www.ssllabs.com/ssltest/analyze.html?d=saitam.com

Ativar a renovação automática

Todos os certificados emitidos pela Let's Encrypt têm duração de apenas 90 dias. O Certbot já vem programado para configurar a renovação automática do Let's Encrypt antes da data de expiração. Na prática, confere diariamente a data de expiração do certificado. Se for menor do que 30 dias, o certificado é renovado.

$ sudo certbot renew --dry-run

O comando certbot renew é o responsável por realizar a verificação do Let's Encrypt. Nesse caso, a flag --dry-run dispara o script, mas em modo teste. Assim, ele não realiza a renovação em si, apenas uma simulação.

A qualquer momento, se houver algum problema com a renovação do certificado, você receberá um aviso no e-mail que cadastrou no início do processo.

Referências:

https://letsencrypt.org/pt-br/docs/

Feito!

quarta-feira, 18 de dezembro de 2019

Configurar certificado Self-Signed SSL no Nginx

O que é certificado SSL ?

Certificado SSL é uma maneira de criar uma conexão mais segura criptografando as informações transmitidas entre o cliente e o servidor onde o certificado está instalado. Este certificado ainda exibe informações de identificação do servidor diretamente no browser do usuário.

Certificados SSL normalmente são emitidos por empresas chamadas de Certificate Authorities que verifica os detalhes do servidor, mas também é possível emitir Self-signed SSL certificate.

O presente post explica os procedimentos de como criar self-signed certificate e configurar no Nginx com Debian/Ubuntu.

Requisitos:

Ter o Nginx instalado.

Instalação do Nginx

$ sudo apt install nginx
Reiniciar o serviço Nginx

$ sudo systemctl restart nginx

Criar o certificado Self-Signed SSL (não assinado)

$ sudo mkdir /etc/nginx/ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

O comando acima irá criar dois arquivos nginx.key e nginx.crt necessários para configurar Nginx HTTPS server.
Esse certificado tem validade por 1 ano.
Ao executar o comando acima irá perguntar conforme abaixo:

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Nome do Estado
Locality Name (eg, city) []:Nome da Cidade
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nome da Empresa fictícia
Organizational Unit Name (eg, section) []:Departamento de TI
Common Name (e.g. server FQDN or YOUR name) []: nome definido no ServerName do Vhost
Email Address []:seu_email@dominio.com.br

Configurar o Nginx HTTPS server com certificado SSL no Vhost

$ sudo vim /etc/nginx/sites-available/projeto-ssl.conf

PS: Substituir o destacado em vermelho para o seu cenário de projeto do Vhost
server {
  listen       443 ssl;
  server_name  projeto.local;
  ssl_certificate     /usr/local/nginx/ssl/nginx.crt;
  ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
  ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         HIGH:!aNULL:!MD5;

  root  /var/www/html/projeto;
  index index.php;

  charset utf-8;

  location ~ /(\.ht) {
    deny all;
    return 404;
  }

  location ~ ^(.+\.php)(.*)$ {
    try_files $fastcgi_script_name =404;
    include        /etc/nginx/fastcgi_params;
    fastcgi_split_path_info  ^(.+\.php)(.*)$;
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO        $fastcgi_path_info;
  }
}

Reiniciar o Nginx

$ sudo systemctl restart nginx

Adicionar o Vhost no arquivo /etc/hosts

127.0.0.1 projeto.local

No browser acessa https://projeto.local

Feito!

terça-feira, 17 de dezembro de 2019

Configurar certificado Self-Signed SSL no Apache

O que é certificado SSL ?

Certificado SSL é uma maneira de criar uma conexão mais segura criptografando as informações transmitidas entre o cliente e o servidor onde o certificado está instalado. Este certificado ainda exibe informações de identificação do servidor diretamente no browser do usuário.

Certificados SSL normalmente são emitidos por empresas chamadas de Certificate Authorities que verifica os detalhes do servidor, mas também é possível emitir Self-signed SSL certificate.

O presente post explica os procedimentos de como criar self-signed certificate e configurar no Apache com Debian/Ubuntu.

Requisitos:

Ter o Apache instalado e os módulos ssl e mod_rewrite habilitados.

Instalação do Apache e habilitar os módulos ssl e mod_rewrite

$ sudo apt install apache2
$ sudo a2enmod ssl
$ sudo a2enmod rewrite

Reiniciar o serviço Apache

$ sudo systemctl restart apache2

Criar o certificado Self-Signed SSL (não assinado)

$ sudo mkdir /etc/apache2/ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
O comando acima irá criar dois arquivos apache.key e apache.crt necessários para configurar Apache HTTPS server.
Esse certificado tem validade por 1 ano.
Ao executar o comando acima irá perguntar conforme abaixo:

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Nome do Estado
Locality Name (eg, city) []:Nome da Cidade
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nome da Empresa fictícia
Organizational Unit Name (eg, section) []:Departamento de TI
Common Name (e.g. server FQDN or YOUR name) []: nome definido no ServerName do Vhost
Email Address []:seu_email@dominio.com.br

Configurar o Apache HTTPS server com certificado SSL no Vhost

$ sudo vim /etc/apache2/sites-available/projeto-ssl.conf

PS: Substituir o destacado em vermelho para o seu cenário de projeto do Vhost
< IfModule mod_ssl.c >
    < VirtualHost _default_:443 >
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html/projeto
        ServerName projeto.local

            RewriteEngine On

        < Directory "/var/www/html/projeto" >
            Options None
            Options +FollowSymlinks
            AllowOverride All
        < /Directory >

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile    /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

        < FilesMatch "\.(cgi|shtml|phtml|php)$" >
                SSLOptions +StdEnvVars
        < /FilesMatch >
        < Directory /usr/lib/cgi-bin >
                SSLOptions +StdEnvVars
        < /Directory >

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    < /VirtualHost >
< /IfModule >
Ativar o Vhost

$ sudo a2ensite projeto-ssl.conf

Reiniciar o Apache

$ sudo systemctl restart apache2

Adicionar o Vhost no arquivo /etc/hosts

127.0.0.1 projeto.local

No browser acessa https://projeto.local

Feito!

segunda-feira, 16 de dezembro de 2019

Habilitar o sudo no Debian

O que é sudo ?

O sudo é uma aplicação que permite a execução de comandos administrativos de segurança com usuário regular. Na política do Debian, o sudo não vem habilitado por padrão para o usuário regular, devido o fato ser uma distro destinada em servidor, mas se esteja utilizando o Debian em ambiente desktop, então não tem problema habilitar o sudo para o seu usuário regular.

Instalar o sudo
$ apt install sudo

Editar o arquivo /etc/sudoers

# vim /etc/sudoers

Na linha root ALL=(ALL:ALL) ALL substituir o root pelo nome do seu usuário
seu usuário ALL=(ALL:ALL) ALL

Feito!

domingo, 15 de dezembro de 2019

Instalando e Configurando servidor CalDAV e CardDAV com Baïkal

O que é Baïkal?

O Baïkal oferece acesso sincronizado aos seus calendários e catálogos de endereços pelo CalDAV e CardDAV. Assim os contatos e calendários inseridos nos smartphones são sincronizados no Baïkal em servidor próprio de CalDAV e CardDAV.

Pré requisitos do ambiente para o Baïkal

O Baïkal foi desenvolvimento em PHP, então o ambiente precisa ter como servidor web Apache/Nginx, PHP e SGBD MySQL.

Debian/Ubuntu:

$ sudo apt install apache2 libapache2-mod-php7.3 php7.3-dev php7.3-mysql php7.3-mbstring php7.3-gd mariadb-server

Download do Baïkal

$ wget -c "https://github.com/sabre-io/Baikal/releases/download/0.6.1/baikal-0.6.1.zip"
$ sudo unzip baikal-0.6.1.zip -d /var/www/html
$ sudo chown www-data:www-data /var/www/html/baikal/Specific

Criar o banco de dados no SGBD MySQL

$ sudo mysql -u root -p
mysql> create database baikal;
mysql> CREATE USER userbaikal@localhost IDENTIFIED BY 'secret';
mysql> GRANT ALL PRIVILEGES ON baikal.* TO userbaikal@localhost WITH GRANT OPTION;
mysql> quit

Configuração do Vhost
No Apache
Criar o arquivo /etc/apache2/sites-available/baikal.conf
< VirtualHost *:80 >
DocumentRoot /var/www/html/baikal/html
ServerName dav.dominio.com.br

RewriteEngine On
RewriteRule /.well-known/carddav /card.php [R,L]
RewriteRule /.well-known/caldav /cal.php [R,L]

< Directory "/var/www/html/baikal/html" >
Options None
Options +FollowSymlinks
AllowOverride All
< /Directory >
< /VirtualHost >
No Nginx
Criar o arquivo /etc/nginx/sites-available/baikal.conf
server {
  listen       80;
  server_name  dav.dominio.com.br;

  root  /var/www/html/baikal/html;
  index index.php;

  rewrite ^/.well-known/caldav /dav.php redirect;
  rewrite ^/.well-known/carddav /dav.php redirect;

  charset utf-8;

  location ~ /(\.ht|Core|Specific) {
    deny all;
    return 404;
  }

  location ~ ^(.+\.php)(.*)$ {
    try_files $fastcgi_script_name =404;
    include        /etc/nginx/fastcgi_params;
    fastcgi_split_path_info  ^(.+\.php)(.*)$;
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO        $fastcgi_path_info;
  }
}
Ativar o Vhost e o mod_rewrite
$ sudo a2ensite baikal.conf
$ sudo a2enmod rewrite

Reinicie o Apache ou Nginx
$ sudo systemctl restart apache2
OU
$ sudo systemctl restart nginx

No browser, acessar http://dav.dominio.com.br
STEP 1

Server Time zone: Escolher o seu fuso horário, no meu caso, selecionei America/Sao_Paulo.
Enable CalDAV: Marque a opção para habilitar a funcionalidade CalDAV do Baïkal.
Enable CardDAV: Marque a opção para habilitar a funcionalidade CardDAV do Baïkal.
WebDAV authentication type: Escolha Digest.
Admin password: Definir um password para interface de administração do Baïkal.
Admin password, confirmation: Confirme o password.

STEP 2

MySQL host: localhost
MySQL database name: Coloque o nome do banco de dados que foi definido, no caso foi baikal.
MySQL username: Coloque o nome de usuário do banco de dados, no caso foi userbaikal.
MySQL password: Coloque a senha do usuário do banco de dados que foi definida.

Clique em Start using Baïkal.

Baïkal instalado com sucesso. Clique em Start using Baïkal para a interface administrativa do Baïkal.

Use o Let's Encrypt para o certificado SSL.

Considerações finais

Com o servidor CalDAV e CardDAV instalado e configurado, crie um usuário CardDAV no servidor para sincronizar com os clientes (smartphones) pelo App CardDAV-Sync. Informe o domínio do servidor do Baikal que foi configurado com o usuário e password. Lembrar de marcar SSL e para isso ter ativado o Let's Encrypt no servidor.



No App CardDAV-Sync, adicione o domínio servidor que foi configurado o Baïkal e preencher conforme abaixo:

PS: Substituir o dav.dominio.com.br pelo nome do seu domínio que definiu no ServerName do Vhost com o domínio validado no Registro BR

Server name or URL: dav.dominio.com.br/card.php/addressbooks/usuario/default
Marque Use SSL (utilizar o Let's Encrypt no servidor)
Username: Colocar o nome de usuário que criou na lista de endereços no servidor Baïkal
Password: Colocar a senha definida do username

Feito!

sábado, 14 de dezembro de 2019

Desabilitar o case sensitive do MySQL no Linux

Se desenvolveu uma aplicação no ambiente de desenvolvimento com o SGBD MySQL em plataforma Windows, criou nome das tabelas e colunas do banco de dados em minúscula e na comunicação com a aplicação e banco de dados escreveu em maiúscula, a príncipio no Windows funcionou sem problemas, mas ao fazer o deploy no servidor de produção que é Linux, se deparou com erro, o nome da tabela não encontrou. O que ocorreu nesse caso, foi que no Windows o SGBD MySQL inclui o case sensitive habilitado por padrão e no Linux é case sensitive e obviamente o SGBD MySQL vem desabilitado o case sensitive , isto é, teste é diferente de TESTE.

E agora como resolver? Calma, esse é o objetivo desta postagem, explicar os procedimentos para desabilitar o case sensitive no SGBD MySQL em servidor Linux (Debian/Ubuntu/CentOS).

Segue os procedimentos:
  1. Parar o serviço do MySQL: $ sudo systemctl stop mysql
  2. Editar o arquivo de configuração do MySQL: $ sudo vim /etc/mysql/my.cnf
  3. Na seção [mysqld] adicione a linha lower_case_table_names=1
  4. Iniciar o serviço do MySQL: $ sudo systemctl start mysql
Feito!