Usando o SSH over Tor

Colaboração: Alexandro Silva

Data de Publicação: 03 de dezembro de 2009

De vez em quando caimos naquela situação que precisamos conectar um servidor remoto com o ssh e um filho de Deus resolve bloquear o uso dessa porta no firewall.

Mas para nós guerreiros Super Sayajin nivel 4 isso é café pequeno. Tudo se resolve em minutos com o uso do connect-proxy

Sempre tenho o tor + privoxy rodando em minha máquina para situações especiais então ele será usado para criar um túnel permitindo minha conexão tão desejada.

Instale os pacotes necessários

aptitude install tor connect-proxy

Configure o ssh para usar o tor adicionando as seguintes linhas no arquivo config dentro do diretório .ssh no seu /home:

Host [ Nome do servidor]
ProxyCommand connect-proxy -S [ IP_Proxy:PORTA ] [ IP ou NOME SERVIDOR ] [ PORTA ]

Veja o exemplo

nano ~/.ssh/config

Host backup
ProxyCommand connect-proxy -S localhost:9050 backup.foo.bar 22

Neste caso foi usado um proxy socks 5, se for um proxy http use a opção -H

Para conectar faça o seguinte

ssh -l [usuário] backup

Por exemplo

ssh -l alexos backup

[Voltar]

Servidor de e-mails no Debian com Dovecot + Postfix + MySQL

01/12/2013 por Paulo H. Cazarotto

Este artigo irá explicar como configurar um servidor de e-mails desde o princípio em um ambiente Linux baseado na distribuição Debian. O texto é longo e há muitos passos, mas tentei resumir e explicar o que é mais importante para o funcionamento do serviço. Este passo a passo é baseado em vários artigos que li e por sinal é a solução de e-mails que uso hoje em alguns servidores, as principais referências estão no final do artigo.

O serviço de e-mail é composto por várias aplicações, cada uma com uma função específica, e a configuração do grupo de aplicativos é o maior desafio. Aqui irei abordar desde a configuração do hostname e DNS até a configuração do webmail e espero que ajude a qualquer um que queira montar seu próprio servidor de e-mails e largar de mão serviços gratuitos (que sempre lhe cobram/leem algo, mesmo sem você saber).

Que serviços estão envolvidos?

O funcionamento de um servidor de e-mail depende de vários serviços, e muitos são necessários para garantir uma boa qualidade do serviço, filtrando e identificando por exemplo SPAMs. Abaixo uma lista de aplicações e qual a responsabilidade de cada uma delas.

Postfix: O postfix é responsável por despachar os e-mails através do protocolo SMTP. Sua aplicação de e-mail e os servidores externos irão conectar neste serviço para enviar novos e-mails para sua caixa de e-mail ou encaminhar a outro servidor de e-mails;

Dovecot: O Dovecot é responsável por gerenciar as caixas de e-mail no seu servidor. Quando você conecta sua caixa de e-mail por IMAP ou POP3 é este serviço que estará utilizando. O Postfix também usa o Dovecot para armazenar novos e-mails recebidos;

MySQL: O MySQL é a base de dados utilizada pelo Postfix e Dovecot para armazenar as informações de caixas de domínios, caixas de e-mail e senhas destas caixas de e-mail;

Amavisd-new: Normalmente servidores de e-mail possuem um aplicativo de checagem de vírus e SPAM. O Amavisd-new é a interface entre o MTA (Mail Transfer Agent) e estes filtros. O Postfix encaminha um e-mail recebido ao Amavisd-new e este interage com um ou mais serviços para identificar e marcar possíveis problemas no e-mail.

ClamAV: Este serviço é um famoso anti-virus open source utilizado por muitos servidores para filtrar rapidamente uma grande quantidade de arquivos;

Postgrey: O Postgrey tem como função controlar e-mails suspeitos, os deixando em quarentena até que outros e-mails de mesma origem cheguem ou o tempo de identificação de novos vírus seja atingido. Isto evita que SPAMs ou vírus novos se propaguem rapidamente pela Internet enquanto outros serviços não tem suas assinaturas de vírus atualizadas;

SpamAssassin: O Postfix também usa o serviço do SpamAssassin para detectar com base em pontuação possíveis SPAMs. Este serviço é um dos mais utilizados e possui diversas formas de detecção, desde SPF até análise estatística de palavras suspeitas;

PostfixAdm: Esta aplicação web é usada apenas para gerenciar as caixas de e-mail na base MySQL. É através dela que você fará o cadastro dos domínios e das caixas de e-mail, podendo também criar aliases e limitar as contas;

Roundcube: O Roundcube é a aplicação web utilizada como webmail. Para que os usuários do servidor de e-mail não sejam obrigados a utilizar uma aplicação cliente como Thunderbird ou Outlook;

Apache: O Apache é um servidor web utilizado para servir outros dois serviços, o RoundCube e o PostfixAdm. Junto ao Apache também instalaremos os módulos do PHP, linguagem na qual ambos serviços web foram desenvolvidos;

OpenSSL: Esta aplicação é responsável por gerar os certificados e CSRs utilizados para garantir a criptografia tanto na conexão HTTP como nas conexões SSL/TLS do IMAP, POP e SMTP;

Iptables: Esta aplicação será utilizada para configurar o firewall do servidor.

Note que além destas aplicações todas você precisará configurar o DNS do domínio o qual irá criar as caixas de e-mail. Para tal você pode utilizar qualquer serviço que lhe permita configurar as entradas do tipo A, MX e TXT.

Configurando o ambiente

Como já citei no início do artigo, este tutorial é voltado a distribuição Debian (6 ou 7). Algumas variações devem acontecer em outras distribuições porém não há grandes diferenças, e o Google é seu amigo caso fique preso em algum dos passos. Esta configuração já utilizei para um VPS (Virtual Private Server)) de 512Mb de RAM e um vCore na DigitalOcean e acredito que suporta muito bem cerca de 50 contas de médio uso com IMAP, seu limite é apenas o espaço em disco. Em um servidor um pouco melhor como de 2Gb e 8 vCores do Linode você pode muito bem instalar este mail server e configurar várias páginas web de uso moderado sem medo de ter atrasos consideráveis no recebimento de e-mails.

Para começar, você precisa decidir qual será o nome do seu servidor de e-mails. Isto é importante pois você baseará toda sua instalação neste mesmo nome e configurará no DNS dos seus domínios este mesmo nome.

Normalmente domínios como exemplo.com possuem um servidor separado para gerenciar os e-mails, como mail.exemplo.com. Isto é natural visto que o serviço de e-mail é considerado crítico na maioria das empresas, sendo assim é ideal um servidor dedicado a esta função, tanto por segurança quanto por questões de desempenho. No nosso exemplo iremos considerar o nome mail.exemplo.com. Lembre-se que ter um servidor dedicado ou adicionar “mail” ao nome do domínio não é regra, só uma boa prática.

Comece acessando o servidor em modo root, e defina o hostname do servidor com o nome que escolheu para o seu mail server.

    1. echo “mail.exemplo.com” > /etc/hostname

 

  1. hostname F /etc/hostname

Note que em alguns serviços de hospedagem seu servidor irá trocar o hostname automaticamente devido ao DHCP instalado por padrão. Para evitar que o hostname mude edite o arquivo /etc/default/dhcpcd e comente a linha onde há algo parecido com SET_HOSTNAME='yes'.

Não esqueça de editar seu arquivo de hosts (/etc/hosts) e de configurar os nomes da própria máquina para o endereço loopback.

  1. 127.0.0.1 localhost mail mail.paulo.cc

Este artigo irá armazenar tanto as caixas de e-mail como as aplicações de webmail e configuração de contas em um diretório comum no /var do servidor chamado mailserver. Aproveite e atualize os pacotes instalados no servidor com o apt-get pois precisará instalar várias aplicações nos próximos passos.

    1. mkdir /var/mailserver

 

    1. aptget update

 

  1. aptget upgrade

Observe que neste tutorial estarei referenciando sempre o domínio exemplo.com e mail.exemplo.com. Substitua estes domínios pelos domínios que você escolheu para seu servidor!

Certificados digitais para a conexão SSL/TLS

Entenda que serviços de e-mails foram desenvolvidos em um tempo onde a preocupação com segurança não era o maior foco. Portanto os protocolos de comunicação comuns como SMTP, IMAP e POP3 não possuem nenhuma criptografia no nível de protocolo em sua implementação inicial, tanto que as senhas são passadas de forma aberta e qualquer usuário mal intencionado pode ler estas senhas. Com o tempo o SSL e o TLS foram desenvolvidos nestes protocolos para garantir um mínimo de proteção.

Neste artigo precisaremos utilizar um conjunto de certificado e chave privada para garantir esta segurança. O ideal seria que você adquirisse um certificado digital em uma autoridade certificadora, da mesma forma que faz com um certificado digital HTTP para o Apache por exemplo, porém isto irá lhe gerar um custo que pode variar entre 10 a 1000 reais dependendo muitas vezes da fama da autoridade certificadora.

Se você já tem um certificado digital SSL para seu servidor web você pode utilizar o mesmo para as configurações de e-mail. O único inconveniente é que você precisa usar o mesmo nome de domínio do seu servidor web para o servidor de e-mail. É claro que você pode também utilizar um certificado wildcard para utilizar em todos os casos, mas aí o valor do certificado é maior ainda.

Para nosso tutorial vamos criar um certificado digital assinado por uma entidade certificadora criada por nós mesmos. Na prática só há dois problemas relacionados a isso. O primeiro é que todos os clientes que conectarem no seu servidor verão uma mensagem de certificado emitido por uma certificadora desconhecida (a famosa tela vermelha ou o aviso para confirmar a exceção de segurança, que há um risco). E o segundo é que certificados deste tipo não servem muito bem para conexões iniciadas em SSL/TLS.

Há três formas, falando em questões de segurança, de um cliente conectar ao serviço de SMTP/IMAP/POP3: [LIST] Insegura: Quando o cliente conecta e não pede por criptografia da conexão, deixando tudo se passar em conexão de texto puro, onde qualquer um pode ler a informação enviada;

Segura por STARTTLS: Que se parece muito com a insegura no início da conexão, porém logo que conecta pede por um “upgrade” na conexão. Nesta situação o cliente conecta como no primeiro caso e antes de enviar qualquer dado sensível o cliente solicita o início da comunicação criptografada (pelo comando STARTTLS);

Segura por SSL/TLS: Onde o cliente já conecta o servidor requisitando uma conexão 100% criptografada. Neste caso o servidor já inicia o processo de conexão enviando os dados de certificado com a chave pública para criptografia por parte do cliente; [/LIST]

O último método com certeza é o mais seguro, porém exige que o certificado digital tenha uma autoridade válida. Você pode tentar gerar certificados e instalar em todas as máquinas, porém ainda precisará distribuir os certificados para todos que usarem o servidor. Nesta situação o ideal é adquirir um certificado digital de uma autoridade certificadora. Neste artigo iremos garantir que ocorra pelo menos o nível de segurança do STARTTLS que em todo caso é suficiente para garantir que ninguém roube sua senha de e-mail. Para tal utilize os seguintes comandos para gerar um certificado que permite assinar outros certificados e também criar um certificado assinado por esta certificadora.

    1. # Você precisará informar o nome do seu servidor de e-mail (exatamente igual) quando a seguinte

 

    1. # pergunta for feita:

 

    1. # Common Name (e.g. server FQDN or YOUR name) []

 

    1. # No nosso caso preencheriamos com mail.exemplo.com

 

    1. openssl req x509 nodes days 365 newkey rsa:2048 \

 

    1. keyout /etc/ssl/private/mail.exemplo.com.key \

 

    1. out /etc/ssl/certs/mail.exemplo.com.crt

 

    1. # Ajustamos as permissões

 

    1. chmod 600 /etc/ssl/private/mail.exemplo.com.key

 

  1. chmod 600 /etc/ssl/certs/mail.exemplo.com.crt

Configurando o Apache+MySQL+PHP

Para instalar os pacotes necessários execute o comando seguinte. Em algum momento será solicitado que preencha uma senha para o usuário root do banco de dados, não perca esta senha!

  1. aptget install apache2 php5 php5cli mysqlserver php5curl php5gd php5imap php5mcrypt php5mysql php5intl

Ajustes finos no PHP

Após instalar todos os pacotes recomendo ajustar alguns parâmetros no PHP. Edite o arquivo /etc/php5/apache2/php.ini ajustando os seguintes valores.

    1. # Ajuste e mamória máxima que pode ser utilizada pelas aplicações web

 

    1. memory_limit = 128M

 

    1. # Ajuste o tamanho máximo do arquivo aceito pelo PHP. Importante para que o webmail aceite

 

    1. # anexos maiores que 2MB

 

    1. upload_max_filesize = 16M

 

    1. post_max_size = 16M

 

    1. # Ajuste básicos de segurança, para não identificar que você roda PHP no servidor

 

    1. expose_php = Off

 

    1. # Ajuste para não perder a sessão o tempo todo (tempo em segundos)

 

    1. session.gc_maxlifetime = 21600

 

    1. # Ajuste de fuso horário

 

    1. # Lista de timezones http://php.net/manual/en/timezones.php

 

  1. date.timezone = America/Sao_Paulo

Configuração do Virtualhost no Apache

Será preciso ativar alguns módulos do Apache para que o webmail funcione e o servidor aceite conexões HTTPS. Para tal ative tanto o módulo rewrite, que permite que URLs sejam sobrescritas como o módulo ssl.

  1. a2enmod rewrite ssl

No Apache também recomendo ajustar alguns parâmetros de segurança, evitando que identifiquem qual é a versão e tecnologia usada. Para tal edite o arquivo /etc/apache2/conf.d/security e ajuste os dois parâmetros abaixo.

    1. ServerTokens Prod

 

  1. ServerSignature Off

Após precisamos criar um Virtualhost para o webmail e também para o aplicativo usado para gerar as contas de e-mail. Crie um novo arquivo de texto chamado de mailserver dentro pasta de virtualhosts (/etc/apache2/sites-available/mailserver) e insira o seguinte conteúdo.

    1. <VirtualHost *:80>

 

    1. ServerAdmin seuemail@exemplo.com

 

    1. ServerName mail.exemplo.com

 

    1. DocumentRoot /var/mailserver/webmail

 

    1. <Directory /var/mailserver/webmail>

 

    1. Options Indexes FollowSymLinks MultiViews

 

    1. AllowOverride All

 

    1. Order allow,deny

 

    1. Allow from all

 

    1. </Directory>

 

    1. ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log

 

    1. LogLevel warn

 

    1. CustomLog ${APACHE_LOG_DIR}/access-mailserver.log combined

 

    1. </VirtualHost>

 

    1.  

 

    1. <IfModule mod_ssl.c>

 

    1. <VirtualHost *:443>

 

    1. # Se possuir um IP específico comente a linha acima e descomente abaixo

 

    1. # Ajustando o IP

 

    1. #<VirtualHost 1.2.3.4:443>

 

    1. ServerAdmin seuemail@exemplo.com

 

    1. ServerName mail.exemplo.com

 

    1. DocumentRoot /var/mailserver/webmail

 

    1. <Directory /var/mailserver/webmail>

 

    1. Options Indexes FollowSymLinks MultiViews

 

    1. AllowOverride All

 

    1. Order allow,deny

 

    1. allow from all

 

    1. </Directory>

 

    1. ErrorLog ${APACHE_LOG_DIR}/error-mailserver.log

 

    1. CustomLog ${APACHE_LOG_DIR}/ssl-mailserver.log combined

 

    1. SSLEngine on

 

    1. # Caminhos para os dados de certificado

 

    1. SSLCertificateFile /etc/ssl/certs/mail.exemplo.com.crt

 

    1. SSLCertificateKeyFile /etc/ssl/private/mail.exemplo.com.key

 

    1. # Em alguns casos é preciso ajustar os certificados de cadeia ou de autoridade,

 

    1. # verifique com sua certificadora os detalhes

 

    1. #SSLCACertificateFile /etc/ssl/certs/cacert.pem

 

    1. #SSLCertificateChainFile /path/to/my/ca-bundle.crt

 

    1. # Ajustes para o Internet Explorer

 

    1. BrowserMatch “MSIE [2-6]” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

 

    1. BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown

 

    1. </VirtualHost>

 

  1. </IfModule>

Em alguns casos é necessário configurar também o ServerName e instruir o apache de forma que ele use virtualhosts para os domínios. Para isso edite o arquivo /etc/apache2/ports.conf e ajuste conforme o conteúdo a seguir:

    1. ServerName mail

 

    1. NameVirtualHost *:80

 

    1. Listen 80

 

    1. <IfModule mod_ssl.c>

 

    1. # Se possuir mais de um IP na máquina e quiser usar um específico para o SSL

 

    1. # Não esqueça de ajustar o IP no arquivo do virtualhost e descomentar a linha abaixo

 

    1. # e comentar a liga abaixo dela

 

    1. # NameVirtualHost 1.2.3.4:443

 

    1. NameVirtualHost *:443

 

    1. # Nota: Clientes com Windows XP não suportam SNI e portanto você não pode usar um

 

    1. # mesmo IP para mais de um virtualhost!

 

    1. Listen 443

 

  1. </IfModule>

Não esqueça de criar a pasta do webmail e ativar o virtualhost criado.

    1. mkdir /var/mailserver/webmail

 

    1. a2ensite mailserver

 

  1. /etc/init.d/apache2 restart

Ajustes no MySQL e bases de dados

Após configurar os domínios e o PHP você precisa ajustar algumas configurações do MySQL, recomendo editar o arquivo /etc/mysql/my.cnf e comentar a linha do bind-address e também evitar que o MySQL consulte o nome de todos os clientes que consultam o banco de dados, adicionando o skip-name-resolv.

    1. #bind-address = 127.0.0.1

 

  1. skipnameresolv

Não esqueça de reiniciar o banco de dados para que ele carregue as configurações. Aproveite para conectar o banco de dados e criar a base de dados que armazenará as preferências do webmail e as próprias contas de e-mail.

    1. /etc/init.d/mysql restart

 

  1. mysql uroot p # Utilize a senha que inseriu na instalação do banco de dados

Após digitar a senha um terminal do MySQL irá abrir. Execute o SQL abaixo para criar tanto as bases como os usuários. Lembre-se do usuário, senha, e nome dos bancos. Você precisará destas informações nas configurações dos demais aplicativos.

    1. CREATE DATABASE mail;

 

    1. GRANT ALL ON mail.* TO ‘mail’@‘127.0.0.1’ IDENTIFIED BY ‘mailpass’;

 

    1. CREATE DATABASE roundcube;

 

    1. GRANT ALL ON roundcube.* TO ‘roundcube’@‘127.0.0.1’ IDENTIFIED BY ‘roundpass’;

 

  1. FLUSH PRIVILEGES;

Configurando o Dovecot

O Dovecot cria uma determinada estrutura de pastas e arquivos para armazenar os e-mails no disco rígido. Porém é preciso criar as pastas básicas e criar um usuário específico do Linux. Note o UID 150 informado no comando useradd, é importante usar um UID não existente, caso não queira informar anote o UID criado pois você precisará dele para as configurações de segurança dos próximos passos.

    1. mkdir /var/mailserver/vmail

 

    1. useradd r u 150 g mail d /var/mailserver/vmail s /sbin/nologin c “Mailserver dir” vmail

 

    1. chmod 770 /var/mailserver/vmail

 

  1. chown vmail:mail /var/mailserver/vmail

Agora que criamos as pastas, você precisa usar o apt-get mais uma vez para baixar todos os pacotes relacionados ao Dovecot, aproveite para instalar os pacotes do Postfix, ClamAV, Amavis e SpamAssassin.

    1. aptget install postfix postfixmysql dovecotmysql dovecotimapd postgrey amavis clamav clamavdaemon spamassassin libnetdnsperl \

 

  1. pyzor razor arj bzip2 cabextract cpio file gzip nomarch pax unzip zip

Durante a instalação do pacote do Postfix você será questionado quanto ao tipo de mail server que estará configurando, selecione Internet Site. Também será questionado sobre o nome do mail server, digite no campo o seu hostname.

[Opção internet no Postfix](https://res.phcco.com/mailserver/postfix-internet.png)

Após instalar os pacotes recomendo ajustar as permissões da pasta do Dovecot para que o usuário vmail (que criamos anteriormente) possa ler estas informações também.

    1. chown R vmail:dovecot /etc/dovecot

 

  1. chmod R orwx /etc/dovecot

Agora o processo mais trabalhoso começa, você precisará criar/editar os arquivos de configuração do módulo SQL do Dovecot, para que ele leia os domínios e caixas de e-mail do banco de dados que criamos anteriormente. O primeiro passo é criar o arquivo /etc/dovecot/conf.d/auth-sql.conf.ext e preenche-lo com o seguinte conteúdo. Este arquivo irá definir os arquivos que contêm as Querys de banco para usuários e senhas.

    1. passdb {

 

    1. driver = sql

 

    1. args = /etc/dovecot/dovecotsql.conf.ext

 

    1. }

 

    1. userdb {

 

    1. driver = sql

 

    1. args = /etc/dovecot/dovecotsql.conf.ext

 

  1. }

O arquivo que referênciamos agora precisa ser criado. Crie /etc/dovecot/dovecot-sql.conf.ext e preencha com as informações abaixo. Note que neste arquivo precisamos passar o usuário e senha do banco de dados mail, que criamos anteriormente. Caso você tenha trocado a pasta das caixas de e-mail você também precisará ajustar as Querys de acordo.

    1. driver = mysql

 

    1. connect = host=localhost dbname=mail user=mail password=mailpass

 

    1. default_pass_scheme = MD5CRYPT

 

    1. password_query = \

 

    1. SELECT username as user, password, ‘/var/mailserver/vmail/%d/%n’ as userdb_home, \

 

    1. ‘maildir:/var/mailserver/vmail/%d/%n’ as userdb_mail, 150 as userdb_uid, 8 as userdb_gid \

 

    1. FROM mailbox WHERE username = ‘%u’ AND active = ‘1’

 

    1. user_query = \

 

    1. SELECT ‘/var/mailserver/vmail/%d/%n’ as home, ‘maildir:/var/mailserver/vmail/%d/%n’ as mail, \

 

    1. 150 AS uid, 8 AS gid, concat(‘dirsize:storage=’, quota) AS quota \

 

  1. FROM mailbox WHERE username = ‘%u’ AND active = ‘1’

Com as Querys configuradas precisamos alterar algumas configurações no arquivo /etc/dovecot/conf.d/10-auth.conf. Neste arquivo você pode configurar várias definições de autenticação do Dovecot. Por enquanto só altere as informações citadas abaixo. Não substitua o arquivo inteiro.

    1. disable_plaintext_auth = yes

 

    1. auth_mechanisms = plain login

 

    1.  

 

    1. # Comente a autenticação do auth-system e habilite a autenticação por sql

 

    1. # !include auth-system.conf.ext

 

  1. !include authsql.conf.ext

Agora você precisa ajustar as configurações de segurança do Dovecot, para que ele use apenas os arquivos que estão nas caixas de e-mail dele. Edite o arquivo /etc/dovecot/conf.d/10-mail.conf e ajuste os parâmetros abaixo.

    1. mail_location = maildir:/var/mailserver/vmail/%d/%n

 

    1. mail_uid = vmail

 

    1. mail_gid = mail

 

    1. # lembre-se do uid usado na criação do usuário vmail

 

    1. first_valid_uid = 150

 

  1. last_valid_uid = 150

O Dovecot irá servir também conexões criptografadas, para que isso aconteça corretamente você precisa configurar o arquivo /etc/dovecot/conf.d/10-ssl.conf, ajustando os caminhos para os certificados que criamos no início do artigo. Caso você tenha um certificado intermediário provido pela sua autoridade certificadora não se esqueça de configurar o ssl_ca. Este arquivo pode ser tanto um arquivo .pem como um .crt.

    1. ssl = yes

 

    1. ssl_cert = </etc/ssl/certs/mail.exemplo.com.crt

 

    1. ssl_key = </etc/ssl/private/mail.exemplo.com.key

 

    1. # Certificado com senha, descomente e preencha a linha abaixo

 

    1. #ssl_key_password =

 

    1. # Certificado intermediário, descomente e preencha a linha abaixo

 

    1. #ssl_ca = </etc/ssl/certs/cacert.pem

 

  1. ssl_verify_client_cert = no

Ajuste o arquivo /etc/dovecot/conf.d/10-master.conf para que o Postfix possa consultar as caixas de e-mail. Verifique o trecho onde há o service auth e substitua apenas o conteúdo deste bloco.

    1. service auth {

 

    1. unix_listener authuserdb {

 

    1. mode = 0600

 

    1. user = vmail

 

    1. group = mail

 

    1. }

 

    1. unix_listener /var/spool/postfix/private/auth {

 

    1. mode = 0660

 

    1. user = postfix

 

    1. group = postfix

 

    1. }

 

  1. }

A última configuração necessária do Dovecot é o e-mail do postmaster. Caso você não ajuste este parâmetro é bem provável que tenha vários erros a cada recebimento de e-mail /etc/dovecot/conf.d/15-lda.conf.

  1. postmaster_address = postmaster@exemplo.com

Quanto ao Dovecot, era isso pelo momento. O próximo passo é configurar o Postfix.

Configurando o Postfix

O Postfix também precisa que todas as SQLs responsáveis pelo mapeamento de caixas e e-mails sejam configuradas. Para isso edite os seguintes arquivos. Note que todos eles precisam do usuário, senha e nome da base mail que criamos anteriormente. Você pode substituir o conteúdo destes arquivos completamente caso eles já existam.

Arquivo /etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

    1. user = mail

 

    1. password = mailpass

 

    1. hosts = 127.0.0.1

 

    1. dbname = mail

 

    1. query = SELECT goto FROM alias,alias_domain

 

    1. WHERE alias_domain.alias_domain = ‘%d’

 

    1. AND alias.address=concat(‘%u’, ‘@’, alias_domain.target_domain)

 

  1. AND alias.active = 1

Arquivo /etc/postfix/mysql_virtual_alias_maps.cf

    1. user = mail

 

    1. password = mailpass

 

    1. hosts = 127.0.0.1

 

    1. dbname = mail

 

    1. table = alias

 

    1. select_field = goto

 

    1. where_field = address

 

  1. additional_conditions = and active = ‘1’

Arquivo /etc/postfix/mysql_virtual_domains_maps.cf

    1. user = mail

 

    1. password = mailpass

 

    1. hosts = 127.0.0.1

 

    1. dbname = mail

 

    1. table = domain

 

    1. select_field = domain

 

    1. where_field = domain

 

  1. additional_conditions = and backupmx = ‘0’ and active = ‘1’

Arquivo /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

    1. user = mail

 

    1. password = mailpass

 

    1. hosts = 127.0.0.1

 

    1. dbname = mail

 

    1. query = SELECT maildir FROM mailbox, alias_domain

 

    1. WHERE alias_domain.alias_domain = ‘%d’

 

    1. AND mailbox.username=concat(‘%u’, ‘@’, alias_domain.target_domain )

 

  1. AND mailbox.active = 1

Arquivo /etc/postfix/mysql_virtual_mailbox_maps.cf

    1. user = mail

 

    1. password = mailpass

 

    1. hosts = 127.0.0.1

 

    1. dbname = mail

 

    1. table = mailbox

 

    1. select_field = CONCAT(domain, ‘/’, local_part)

 

    1. where_field = username

 

  1. additional_conditions = and active = ‘1’

O Postfix também pode realizar uma limpeza de cabeçalhos no seu e-mail. Sempre que você envia um e-mail as aplicações costumam adicionar vários cabeçalhos identificando a aplicação que você usa de e-mails e o IP da sua máquina. Na configuração do Postfix iremos configurar para que alguns destes cabeçalhos sejam removidos, para tal crie o arquivo /etc/postfix/header_checks e adicione o seguinte conteúdo.

    1. /^Received:/ IGNORE

 

    1. /^UserAgent:/ IGNORE

 

    1. /^XMailer:/ IGNORE

 

  1. /^XOriginatingIP:/ IGNORE

Agora vamos para as configurações do Postfix de fato. Há muitos parâmetros ajustáveis, porém recomendo editar os seguintes no /etc/postfix/main.cf. Irei explicar brevemente os mais importantes através de comentários.

    1. # O banner é a mensagem apresentada quando algum usuário conecta na porta do Postfix

 

    1. smtpd_banner = $myhostname ESMTP $mail_name

 

    1. # Desative o biff, visto que nenhum usuário usará o e-mail diretamente pelo bash

 

    1. biff = no

 

    1.  

 

    1. # Desative a adição automática de e-mail, pois vamos servir mais de um domínio

 

    1. append_dot_mydomain = no

 

    1.  

 

    1. # Integração com o Dovecot

 

    1. smtpd_sasl_type = dovecot

 

    1. smtpd_sasl_path = private/auth

 

    1. smtpd_sasl_auth_enable = yes

 

    1. broken_sasl_auth_clients = yes

 

    1. smtpd_sasl_security_options = noanonymous

 

    1. smtpd_sasl_local_domain =

 

    1. smtpd_sasl_authenticated_header = yes

 

    1.  

 

    1. # Configurações de SSL/TLS

 

    1. # Configure aqui exatamente os certificados que você criou anteriormente e que foram configurados no dovecot

 

    1. smtpd_tls_cert_file=/etc/ssl/certs/mail.exemplo.com.crt

 

    1. smtpd_tls_key_file=/etc/ssl/private/mail.exemplo.com.key

 

    1. #smtpd_tls_CAfile=/etc/ssl/certs/cacert.pem

 

    1. smtpd_use_tls=yes

 

    1. smtpd_tls_security_level = may

 

    1. smtp_tls_security_level = may

 

    1.  

 

    1. # Algumas configurações adicionais do SSL/TLS, é importante pelo menos deixar o loglevel = 1 durante a instalação

 

    1. smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

 

    1. smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

 

    1. smtp_tls_note_starttls_offer = yes

 

    1. smtpd_tls_loglevel = 1

 

    1. smtpd_tls_received_header = yes

 

    1. smtpd_tls_session_cache_timeout = 3600s

 

    1. tls_random_source = dev:/dev/urandom

 

    1.  

 

    1. # Configuramos quais são os filtros usados para restringir o recebimento de e-mail

 

    1. # Note que há inclusive o endereço do Postgrey (na porta 10023)

 

    1. smtpd_relay_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit

 

    1.  

 

    1. smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit

 

    1.  

 

    1. # Configuramos quais são os filtros usados para restringir quem pode conectar ao servidor

 

    1. smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit

 

    1.  

 

    1. # Configuramos quais são os filtros usados para restringir quem envia e-mail

 

    1. smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit

 

    1.  

 

    1. # Restrições baseadas no contexto de quem já está conectado ao servidor

 

    1. smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org

 

    1.  

 

    1. # Restrições de filtragem de acordo com o conteúdo do e-mail

 

    1. smtpd_data_restrictions = reject_unauth_pipelining

 

    1.  

 

    1. # Algumas configurações de timeout

 

    1. unknown_local_recipient_reject_code = 450

 

    1. maximal_queue_lifetime = 7d

 

    1. minimal_backoff_time = 1000s

 

    1. maximal_backoff_time = 8000s

 

    1. smtp_helo_timeout = 60s

 

    1. smtpd_recipient_limit = 16

 

    1. smtpd_soft_error_limit = 3

 

    1. smtpd_hard_error_limit = 12

 

    1.  

 

    1. # Algumas configurações de segurança

 

    1. smtpd_helo_required = yes

 

    1. smtpd_delay_reject = yes

 

    1. disable_vrfy_command = yes

 

    1.  

 

    1. # Configuração de hostname e nome de origem

 

    1. myhostname = mail.exemplo.com

 

    1. myorigin = /etc/hostname

 

    1.  

 

    1. # Configuração de destino (se você tiver erros, preencha “.” ou deixe vazio)

 

    1. mydestination = localhost

 

    1. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

 

    1. mailbox_size_limit = 0

 

    1. recipient_delimiter = +

 

    1. inet_interfaces = all

 

    1. mynetworks_style = host

 

    1.  

 

    1. # Configurações de pastas e dos arquivos que permitem a leitura de domínios e caixas de e-mail

 

    1. virtual_mailbox_base = /var/mailserver/vmail

 

    1. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf

 

    1. virtual_uid_maps = static:150

 

    1. virtual_gid_maps = static:8

 

    1. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf

 

    1. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

 

    1.  

 

    1. # Indicamos quem irá armazenar os e-mails

 

    1. virtual_transport = dovecot

 

    1.  

 

    1. # Indicamos qual é o filtro de e-mail usado para antivírus e detecção de SPAM

 

    1. content_filter = amavis:[127.0.0.1]:10024

 

    1.  

 

    1. # Indicamos o arquivo de cabeçalhos que iremos remover

 

    1. header_checks = regexp:/etc/postfix/header_checks

 

    1.  

 

    1. # Indicamos que o Postfix não deve adicionar o cabeçalho com o nome da caixa de e-mail que enviou o e-mail

 

  1. enable_original_recipient = no

Você precisará editar também o arquivo /etc/postfix/master.cf. Este arquivo configura todos os processos que devem ser usados pelo Postfix para gerenciar o recebimento e envio de e-mails. Recomendo que faça um backup do arquivo original para consultar posteriormente e substitua todo o arquivo com o seguinte conteúdo.

    1. # Postfix master process configuration file. For details on the format

 

    1. # of the file, see the master(5) manual page (command: “man 5 master”).

 

    1. #

 

    1. # Do not forget to execute “postfix reload” after editing this file.

 

    1. #

 

    1. # ==========================================================================

 

    1. # service type private unpriv chroot wakeup maxproc command + args

 

    1. # (yes) (yes) (yes) (never) (100)

 

    1. # ==========================================================================

 

    1.  

 

    1. # SMTP na porta 25

 

    1. smtp inet n smtpd

 

    1.  

 

    1. # SMTP com STARTTLS na porta 587

 

    1. submission inet n smtpd

 

    1. o syslog_name=postfix/submission

 

    1. o smtpd_tls_security_level=encrypt

 

    1. o smtpd_sasl_auth_enable=yes

 

    1. o smtpd_enforce_tls=yes

 

    1. o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject

 

    1. o smtpd_sasl_tls_security_options=noanonymous

 

    1.  

 

    1. # SMTP com SSL/TLS na porta 465

 

    1. smtps inet n smtpd

 

    1. o syslog_name=postfix/smtps

 

    1. o smtpd_tls_wrappermode=yes

 

    1. o smtpd_sasl_auth_enable=yes

 

    1. o smtpd_tls_auth_only=yes

 

    1. o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject

 

    1. o smtpd_sasl_security_options=noanonymous,noplaintext

 

    1. o smtpd_sasl_tls_security_options=noanonymous

 

    1.  

 

    1. # Outros processos relacionados a limpeza da fila de e-mails e filtragens

 

    1. pickup fifo n 60 1 pickup

 

    1. o content_filter=

 

    1. o receive_override_options=no_header_body_checks

 

    1. cleanup unix n 0 cleanup

 

    1. qmgr fifo n n 300 1 qmgr

 

    1. tlsmgr unix 1000? 1 tlsmgr

 

    1. rewrite unix trivialrewrite

 

    1. bounce unix 0 bounce

 

    1. defer unix 0 bounce

 

    1. trace unix 0 bounce

 

    1. verify unix 1 verify

 

    1. flush unix n 1000? 0 flush

 

    1. proxymap unix n proxymap

 

    1. proxywrite unix n 1 proxymap

 

    1. smtp unix smtp

 

    1. relay unix smtp

 

    1. showq unix n showq

 

    1. error unix error

 

    1. retry unix error

 

    1. discard unix discard

 

    1. local unix n n local

 

    1. virtual unix n n virtual

 

    1. lmtp unix lmtp

 

    1. anvil unix 1 anvil

 

    1. scache unix 1 scache

 

    1.  

 

    1. # Configuração da interface com o maildrop/sendmail

 

    1. maildrop unix n n pipe

 

    1. flags=DRhu user=vmail argv=/usr/bin/maildrop d ${recipient}

 

    1.  

 

    1. # Configuração da interface com o UUCP (se desejável)

 

    1. uucp unix n n pipe

 

    1. flags=Fqhu user=uucp argv=uux r n z a$sender $nexthop!rmail ($recipient)

 

    1.  

 

    1. # Outros métodos de envio de e-mail

 

    1. ifmail unix n n pipe

 

    1. flags=F user=ftn argv=/usr/lib/ifmail/ifmail r $nexthop ($recipient)

 

    1. bsmtp unix n n pipe

 

    1. flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp t$nexthop f$sender $recipient

 

    1. scalemailbackend unix n n 2 pipe

 

    1. flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemailstore ${nexthop} ${user} ${extension}

 

    1. mailman unix n n pipe

 

    1. flags=FR user=list argv=/usr/lib/mailman/bin/postfixtomailman.py

 

    1. ${nexthop} ${user}

 

    1.  

 

    1. # Integração com o Amavis e o SpamAssassin

 

    1. amavis unix 3 smtp

 

    1. o smtp_data_done_timeout=1200

 

    1. o smtp_send_xforward_command=yes

 

    1. o disable_dns_lookups=yes

 

    1. o max_use=20

 

    1. 127.0.0.1:10025 inet n smtpd

 

    1. o content_filter=

 

    1. o local_recipient_maps=

 

    1. o relay_recipient_maps=

 

    1. o smtpd_restriction_classes=

 

    1. o smtpd_delay_reject=no

 

    1. o smtpd_client_restrictions=permit_mynetworks,reject

 

    1. o smtpd_helo_restrictions=

 

    1. o smtpd_sender_restrictions=

 

    1. o smtpd_recipient_restrictions=permit_mynetworks,reject

 

    1. o smtpd_data_restrictions=reject_unauth_pipelining

 

    1. o smtpd_end_of_data_restrictions=

 

    1. o mynetworks=127.0.0.0/8

 

    1. o smtpd_error_sleep_time=0

 

    1. o smtpd_soft_error_limit=1001

 

    1. o smtpd_hard_error_limit=1000

 

    1. o smtpd_client_connection_count_limit=0

 

    1. o smtpd_client_connection_rate_limit=0

 

    1. o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

 

    1.  

 

    1. # Integração com o Dovecot

 

    1. dovecot unix n n pipe

 

  1. flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecotlda d $(recipient)

As opções usadas neste arquivo sobrescrevem as configurações do arquivo principal. Portanto caso mude algo no arquivo de configuração e o parâmetro não parece ter efeito, verifique aqui se o parâmetro não foi sobrescrito.

Configurando o Amavis, ClamAV e o SpamAssassin

A configuração destes três aplicativos é bem mais simples comparadas as configurações do Dovecot e Postfix. Para iniciar adicione os usuários do clamav e amavis aos grupos de cada um deles.

    1. adduser clamav amavis

 

  1. adduser amavis clamav

Edite o arquivo /etc/amavis/conf.d/15-content_filter_mode para indicar ao Amavis quais são as filtragens que ele deve realizar.

    1. @bypass_virus_checks_maps = (

 

    1. \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

 

    1.  

 

    1. @bypass_spam_checks_maps = (

 

  1. \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

O Amavis também vai precisar consultar os domínios existentes no servidor. Edite o arquivo /etc/amavis/conf.d/50-user para ajustar o acesso ao banco de dados, indicar qual é o número máximo de processos paralelos e a pontuação de SPAM necessária (feita pelo SpamAssassin) para que o filtro adicione os cabeçalhos de pontuação. Neste caso colocamos um valor negativo para que o cabeçalho esteja sempre disponível.

    1. # Número de processos

 

    1. $max_servers = 3;

 

    1.  

 

    1. # Nível que irá apresentar

 

    1. $sa_tag_level_deflt = 9999;

 

    1. # Nível no qual irá considerar SPAM

 

    1. $sa_tag2_level_deflt = 5;

 

    1. # Sem isso nem todos os e-mails serão analisados

 

    1. @local_domains_maps = [‘.’];

 

    1.  

 

    1. @lookup_sql_dsn = (

 

    1. [‘DBI:mysql:database=mail;host=127.0.0.1;port=3306’,

 

    1. ‘mail’,

 

    1. ‘mailpass’]);

 

    1. $sql_select_policy = ‘SELECT domain from domain WHERE CONCAT(“@”,domain) IN (%k)’;

 

    1.  

 

  1. # $log_level = 2; # Nível de log, em produção deixe comentado

O SpamAssassin já está configurado para integrar com os outros aplicativos, basta editar o arquivo /etc/default/spamassassin para que o processo seja ativado e a rotina que atualiza as tabelas de probabilidade de SPAM sejam atualizadas automaticamente.

    1. ENABLED=1

 

  1. CRON=1

Reiniciando os serviços

Após toda a instalação reinicie todos os serviços que configuramos.

    1. service postfix restart

 

    1. service spamassassin restart

 

    1. service clamavdaemon restart

 

    1. service amavis restart

 

  1. service dovecot restart

Caso observe algum erro, verifique os arquivos /var/log/mail.log e /var/log/mail.err.

Instalando o PostfixAdm

Agora que todas as aplicações já foram configuradas podemos instalar o gerenciador de caixas de e-mail. Esta ferramenta open source é muito prática e basicamente gerencia as tabelas que foram criadas na base mail.

    1. cd /var/mailserver/webmail

 

    1. wget ‘http://bit.ly/1b7p2Cu’ O postfix.tar.gz

 

    1. tar xvzf postfix.tar.gz

 

    1. mv postfixadmin2.3.6/ postfixadm

 

  1. rm postfix.tar.gz

Você precisará configurar alguns parâmetros no arquivo /var/mailserver/webmail/postfixadm/config.inc.php para que a aplicação conecte a base de dados corretamente.

    1. $CONF[‘configured’] = true;

 

    1. $CONF[‘setup_password’] = ; // Deixe vazio por enquanto

 

    1. $CONF[‘postfix_admin_url’] = ‘http://mail.exemplo.com/postfixadm’;

 

    1. $CONF[‘admin_email’] = ‘root@mail.exemplo.com’;

 

    1. $CONF[‘database_type’] = ‘mysqli’;

 

    1. $CONF[‘database_host’] = ‘localhost’;

 

    1. $CONF[‘database_user’] = ‘mail’;

 

    1. $CONF[‘database_password’] = ‘mailpass’;

 

  1. $CONF[‘database_name’] = ‘mail’;

Entre em http://mail.exemplo.com/postfixadm/setup.php e digite algo no campo setup password (esta senha será útil apenas na instalação do PostfixAdm) e clique em criar administrador. Copie o Hash que será informado na tela e cole no parâmetro $CONF['setup_password'] conforme instruções.

[Chave de configuração do PostfixAdm (use a sua chave, esta é apenas um exemplo)](https://res.phcco.com/mailserver/setup-postfixadm.png)

Volte a página de setup (dê um F5 se já estiver nela) e crie o usuário administrador. Através deste usuário é que você poderá configurar os domínios e caixas de e-mail em http://mail.exemplo.com/postfixadm/login.php.

Acesse a URL de login e configure o domínio em Dominios > Adicionar. Depois clique em Virtual > Criar conta de e-mail para configurar sua primeira conta de e-mail.

Por segurança apague o arquivo setup.php, evitando assim que qualquer outro usuário tente configurar a conta de administrador.

  1. rm /var/mailserver/webmail/postfixadm/setup.php

Instalando o Roundcube

Para instalar o Roundcube o processo é simples. Baixe a versão atual e descompacte na pasta do webmail. Os comandos abaixo podem variar caso a versão do Roundcube seja outra (que não a 0.9.5).

    1. cd /var/mailserver/webmail

 

    1. wget ‘http://bit.ly/1c4eAtb’ O roundcube.tar.gz

 

    1. tar xvzf roundcube.tar.gz

 

    1. mv roundcubemail0.9.5/* .

 

    1. mv roundcubemail-0.9.5/.htaccess .

 

    1. rm -rf roundcubemail-0.9.5/ roundcube.tar.gz

 

    1. chown www-data:www-data temp/ logs/

 

  1. mysql -u roundcube -p -D roundcube < SQL/mysql.initial.sql

Acesse http://mail.exemplo.com/installer/ e verifique se há algum detalhe faltando na configuração do servidor. Não se preocupe com bases, você precisará apenas do MySQL.

[Apenas o banco MySQL é necessário](https://res.phcco.com/mailserver/check-round.png)

No próximo passo configure o SMTP/IMAP e banco de dados.

[Ajuste as configurações de SMTP](https://res.phcco.com/mailserver/smtp-round.png)

[Ajuste os parâmetros do banco de dados](https://res.phcco.com/mailserver/database-round.png)

Após as configurações clique em Create config. Será apresentada uma tela com dois arquivos de configuração. Crie e preencha ambos arquivos com os respectivos conteúdos apresentados na tela.

No caso edite o arquivo /var/mailserver/webmail/config/main.inc.php e /var/mailserver/webmail/config/db.inc.php. E depois de salvar ambos arquivos você já pode apagar a pasta do instalador do Roundcube, ela não é mais necessária.

  1. rm rf /var/mailserver/webmail/installer/

Garantindo o uso do HTTPS

Para garantir que nenhum usuário acesse o webmail sem estar em ambiente seguro (já que configuramos o SSL para HTTPS no passo de configuração do Apache) edite o arquivo /var/mailserver/webmail/.htaccess e adicione o seguinte conteúdo ao início do arquivo.

    1. RewriteEngine On

 

    1. RewriteCond %{SERVER_PORT} 80

 

  1. RewriteRule ^(.*) https://mail.exemplo.com/$1 [L]

Este redirecionamento forçará sempre o usuário a usar a porta 443 do Apache quando entrar no webmail. O que é o ideal, assim evitamos que um usuário desavisado tenha sua senha roubada por algum usuário mal intencionado.

Configurações de Firewall

Recomendo também a configuração de um Firewall, você pode ver o esquema de um Firewall básico aqui. E adicionar regras para liberar as portas importantes do serviço de e-mail. Nesta configuração que realizamos teremos as seguintes portas:

[LIST] 25 (SMTP): Porta de envio de e-mail sem criptografia;

80 (HTTP): Porta do servidor web, usada para acessar o Roundcube e o PostfixAdm sem criptografia;

110 (POP3): Porta do serviço POP3, usada normalmente para baixar e remover os e-mails baixados de uma caixa de e-mail, sem criptografia;

143 (IMAP): Porta do serviço IMAP, usada normalmente para consultar as caixas de e-mail, sem realizar o download e remoção dos e-mails baixados, com criptografia opcional por STARTTLS;

443 (HTTPS): Porta do servidor web, criptografada;

465 (SMTPS): Porta de envio de e-mails com camada de criptografia obrigatória por SSL/TLS;

587 (SMTP/SMTPS): Porta de envio de e-mail com camada de criptografia opcional por STARTTLS;

993 (IMAPS): Porta do serviço IMAP, com camada de criptografia obrigatória por SSL/TLS;

995 (POP3S): Porta do serviço POP3, com camada de criptografia obrigatória por SSL/TLS; [/LIST]

As regras do Iptables para liberar estas portas estão a seguir.

    1. iptables A INPUT p tcp m multiport destinationports 80,443 j ACCEPT

 

    1. iptables A INPUT p tcp m multiport destinationports 25,110,143 j ACCEPT

 

  1. iptables A INPUT p tcp m multiport destinationports 443,465,587,993,995 j ACCEPT

Observação importante sobre a porta 25: O Antispam.br indica que os provedores de Internet residenciais bloqueiem o acesso a porta 25 dos servidores, em uma medida para diminuir o uso de bots e ferramentas mal intencionadas que geram SPAM (veja mais aqui). Porém você não deve de forma alguma bloquear esta porta no seu Firewall. Caso você o faça poderá ter problemas no recebimento por parte de muitos domínios.

Configurações de DNS

Após toda a configuração do servidor ainda é importante configurar um serviço fora do seu servidor de e-mails. Neste caso o DNS. Este é responsável por indicar que seu servidor de e-mails para o domínio configurado no PostfixAdm (exemplo.com) é o mail.exemplo.com.

A primeira coisa que você deve fazer é configurar a entrada A e AAAA (se disponível IPv6) para o mail.exemplo.com. Recomenda-se usar uma entrada A ao invés de uma entrada CNAME por questões de verificação de antispam. Além desta configuração, você precisará configurar o DNS reverso.

DNS reverso é configurado através de uma entrada PTR, porém estas entradas só a empresa que lhe disponibilizou o IP pode configurar. É neste passo que algumas pessoas enfrentam problemas. Em provedores de serviço como Linode e DigitalOcean você possui uma opção no painel de controle para configurar você mesmo o nome do servidor. Em provedores como a Amazon AWS você precisará enviar um formulário requisitando a alteração do nome. Se você está tentando configurar um servidor em uma conexão ADSL com IP dinâmico você pode esquecer, seu provedor não irá atribuir um nome para seu IP.

Quando um serviço de e-mail recebe um e-mail informando que é de determinado IP com determinado domínio o servidor que recebeu o e-mail pode realizar uma consulta de DNS reverso, para tentar identificar o nome do seu servidor e associa-lo a uma lista de servidores “limpos” ou “sujos”, caracterizando como e-mail legítimo ou SPAM. Por isso é importante configurar o DNS reverso.

Após configurar o domínio exemplo.com no PostfixAdm você deve criar uma entrada MX neste domínio para o endereço mail.exemplo.com. Normalmente junto a esta configuração você terá a opção de definir um número relacionado a prioridade. Esta prioridade faz mais sentido quando você tem mais de um servidor de e-mails para um mesmo domínio (quando usar um servidor de backup) e quanto menor o valor, mais prioridade ele terá. Normalmente se usar apenas um servidor de e-mail configure com a prioridade 10.

Outra configuração muito importante para evitar que seus e-mails sejam caracterizados como SPAM é a configuração de uma entrada TXT chamada SPF. Esta entrada nada mais é que uma entrada TXT com um conteúdo similar ao informado abaixo.

"v=spf1 mx ip4:111.222.333.444 ip6:2600:aaaa::bbbb:cccc:dddd:eeee/64 a:exemplo.com -all"

Não vou explicar aqui a sintaxe do SPF pois é um pouco longa, você pode consultar EL{http://antispam.br/admin/spf/{a documentação completa do SPF no site do Antipam.br}LE. Basicamente o que indicamos acima é que se qualquer servidor de e-mail receber um e-mail do domínio onde este SPF está configurado, ele poderá confiar nos servidores MX configurados, ou no IPv4 indicado, ou no IPv6 indicado, ou ainda no IP do servidor exemplo.com. Caso contrário ele deverá considerar SPAM (-all).

Lembre-se que qualquer alteração de DNS que fizer você pode estar sujeito a esperar de 2 a 48 horas até que as regras de DNS propaguem pelos servidores de DNS. Então tente configurar certo de primeira =].

Testando o envio e recebimento de e-mails

Com tudo configurado, hora de testar o envio e recebimento de e-mails. Acesse https://mail.exemplo.com e faça login com o e-mail completo e a senha que você configurou quando criou a conta no PostfixAdm.

Tente enviar um e-mail para uma conta do Gmail ou de um e-mail que você já possui e verifique se o e-mail chega adequadamente. Depois tente fazer o processo reverso, respondendo o e-mail em questão. Caso veja alguma mensagem de erro ou o e-mail não chegue, tente observar os logs de erro. Com certeza eles lhe darão a pista do que está errado, se não lhe der exatamente o ponto que está falhando.

Você também pode tentar configurar o seu e-mail no Gmail ou no Thunderbird/Outlook. Mas preste atenção nos endereços usados e o tipo de criptografia. Caso não tenha configurado um certificado válido ou tenha algum bloqueio de Firewall você pode perder muito tempo tentando configurar o e-mail com SSL/TLS, use o STARTTLS.

Resolvendo problemas

Dê uma olhada nos logs, eles podem lhe ajudar a identificar qualquer problema. O mail.log lhe expõe exatamente o que acontece com os e-mails recebidos ou enviados, indicando inclusive a mensagem que o servidor destino enviou quando aceitou o e-mail enviado.

  1. tail f /var/log/mail.log /var/log/mail.err

Todos os e-mails enviados que estão pendentes de envio para outro servidor ficam na fila de envio chamada “mailqueue”. Para ver esta fila use o comando mailq no servidor.

Caso faça algum ajuste no postfix você pode forçar o reenvio dos e-mails na fila usando o comando sendmail -v -q.

Referências

Este artigo foi baseado principalmente nos artigos de ExRatione e Flurdy, que possui um dos artigos mais completos que já ví relacionados a servidores de e-mail baseados em Postfix.

Com certeza você encontrará outros tutoriais interessantes por aí caso não queira usar o Postfix ou o Dovecot. Na biblioteca do Linode há vários tutoriais.

Habilitando o apt-get no Damn Small Linux

Estava tentando instalar o DSL no QEMU rodando no Windows 7 só pra matar a saudades do Linux enquanto estou no trabalho, até ai tudo bem, feita a instalação na hora de usar o apt-get me deparei com o seguinte erro:

apt-get command not found

Beleza, pesquisei na internet como resolver isso e só encontrei isso:

sudo dpkg-restore

No fluxbox App -> Tools -> Enable Apt

Só que quando executei esses procedimentos me retornou a seguinte mensagem de erro:

wget: server return error 404: HTTP/1.1 404 not found
Download error!

E agora? Depois disso não achei nenhum tutorial que me explicasse isso, então comecei a tentar arrumar sozinho, até que encontrei uma solução, e vou passa-la para vocês agora para caso alguém tenha o mesmo problema que eu.

Primeiro vá para a raiz do Linux:

cd /

Então execute o comando:

sudo find | grep ‘dpkg-restore’

E a saída será mais ou menos assim:

./usr/sbin/dpkg-restore

Agora vamos editar o arquivo:

sudo vi ./usr/sbin/dpkg-restore

Saida:

#!/bin/sh
#(c) 2003 Robert Shingledecker
if [ -e /var/lib/dpkg/status ]; then
exit
else
#MIRROR=$(dslrc.lua Mirror)
#PROTOCOL=$(dslrc.lua Protocol)
sudo rm -f /var/lib/dpkg
echo “Grabbing the compressed dpkg database and programs…”
cd `cat /opt/.mydsl_dir || echo /tmp/`
wget -q “$PROTOCOL”://”$MIRROR”/mydsl/system/dsl-dpkg.dsl.md5.txt
wget “$PROTOCOL”://”$MIRROR”/mydsl/system/dsl-dpkg.dsl
if [ -s dsl-dpkg.dsl ]; then
md5sum -c dsl-dpkg.dsl.md5.txt
if [ $? == 0 ]; then
/etc/init.d/mkwriteable
/etc/init.d/mydsl-install dsl-dpkg.dsl
echo “Updating apt-get”
apt-get update
else
echo “Checksum error!”
fi
echo -n “Press Enter key to continue…”;read gagme
else
echo “Download error!”
echo -n “Press Enter to continue…”;read gagme
exit 1
fi
exit
fi

Então vamos comentar as duas linhas que tem wget, e adicionar os diretórios deste site http://www.ftp.be/packages/damnsmalllinux/mydsl/system.

Deixando o código assim:
#!/bin/sh
#(c) 2003 Robert Shingledecker
if [ -e /var/lib/dpkg/status ]; then
exit
else
#MIRROR=$(dslrc.lua Mirror)
#PROTOCOL=$(dslrc.lua Protocol)
sudo rm -f /var/lib/dpkg
echo “Grabbing the compressed dpkg database and programs…”
cd `cat /opt/.mydsl_dir || echo /tmp/`
#wget -q “$PROTOCOL”://”$MIRROR”/mydsl/system/dsl-dpkg.dsl.md5.txt
#wget “$PROTOCOL”://”$MIRROR”/mydsl/system/dsl-dpkg.dsl
wget -q http://www.ftp.be/packages/damnsmalllinux/mydsl/system/dsl-dpkg.dsl.md5.txt
wget http://www.ftp.be/packages/damnsmalllinux/mydsl/system/dsl-dpkg.dsl
if [ -s dsl-dpkg.dsl ]; then
md5sum -c dsl-dpkg.dsl.md5.txt
if [ $? == 0 ]; then
/etc/init.d/mkwriteable
/etc/init.d/mydsl-install dsl-dpkg.dsl
echo “Updating apt-get”
apt-get update
else
echo “Checksum error!”
fi
echo -n “Press Enter key to continue…”;read gagme
else
echo “Download error!”
echo -n “Press Enter to continue…”;read gagme
exit 1
fi
exit
fi

Agora é só rodar novamente o comando:

sudo dpkg-restore

E já está tudo funcionando :)

Você pode testar instalando o lynx:

sudo apt-get -f install lynx

Vboxconfig não está funcionando? Veja como resolver

Atualizou o VirtualBox ou o Kernel do seu sistema, está tendo problemas com dos módulos de kernel desse virtualizador? Veja como resolver isso manualmente!

 

Ainda não está muito claro o porque dessa falha acontecer. Porém, isso só ocorre com pacotes baixados a partir do site ou repositório do VirtualBox.

Outro problema é que até o VirtualBox 5.0.8, para recompilar os módulos manualmente era preciso usar o comando

sudo /etc/init.d/vboxdrv setup

Mas com a versão mais recente, este comando foi substituído, e agora, a tela de erro do aplicativo afirma que é preciso executar o sudo /sbin/vboxconfig, ao invés do antigo comando.

No entanto, de acordo com relatos de alguns usuários, este comando parece não estar funcionando atualmente, ou pelo menos não em alguns casos (como em um Ubuntu 15.10).

Felizmente, se o /sbin/vboxconfig não está funcionando em seu sistema, a solução solução para isso é muito simples e consiste basicamente em abrir um terminal e executar o comando:

sudo /sbin/rcvboxdrv setup

Ao executar o comando acima, ele deverá recompilar o módulos de host (anfitrião) do kernel do VirtualBox e fazer com que o aplicativo volte a funcionar novamente.

Caso apareça alguma mensagem de erro relacionada a outro programa, anote o nome e tente instalar, pois pode ser que seja alguma dependência que ainda não está no sistema.

Por ser um problema um tanto quanto “obscuro”, deixe sua experiência nos comentários para que todos possam compartilhar das dificuldades e das soluções.

Se falhar, no shell aparecerá a mensagem de instalar os pacotes linux-headers-amd64 linux-headers-4.9.0-3-amd64. Basta instalar pelo apt-get e rodar o comando /sbin/rcvboxdrv setup . Dica original aqui

[Voltar]

Como gravar um vídeo da área de trabalho no Windows 10

Existe uma infinidade de programas disponíveis em toda a internet que oferecem serviços de captura de imagem em seu computador. Seja em formato estático ou de vídeo, não é difícil encontrar algo que realmente faça isso de maneira competente e simples, mas tudo seria ainda melhor se o próprio Windows trouxesse uma ferramenta assim, certo?

E foi pensando nisso que a Microsoft implementou um recurso nativo para gravar vídeos no Windows 10. Tudo bem que o foco da ferramenta é a gravação de jogos, afinal você já deve ter pensado em mostrar a sua jogatina para outras pessoas, fazer gameplays para postar no YouTube e tudo mais.

Contudo, apesar do foco nos games, o recurso de captura do Windows pode ser usado em basicamente qualquer janela aberta em sua área de trabalho. E o processo todo é extremamente simples, conta com suporte para atalhos e é personalizável. Enfim, passa longe de um bicho de sete cabeças e você aprende a usá-lo agora.

Passo 1
Abra o Menu Iniciar e procure pelo aplicativo do Xbox. Execute o app e aguarde até que ele seja carregado em sua tela. Aqui, você precisará fazer login com sua conta da Microsoft, então, informe seu e-mail e senha (ou, se ainda não tem, faça o seu cadastro).

Passo 2
Após abrir o programa do Xbox, basta clicar sobre a janela que deverá ter imagens capturadas e então pressionar o atalho Tecla do Windows + G. Em alguns instantes, uma pequena barra será carregada na parte inferior da tela, então clique em “Sim, isso é um jogo” para confirmar a sua execução.

Passo 3
Com a barra aberta, você pode arrastá-la por sobre a janela. Para iniciar uma gravação em vídeo, basta clicar sobre o botão vermelho. Neste instante, a barra é minimizada em uma das laterais da tela e basta clicar sobre ela novamente para interromper a gravação.

Se preferir, você pode usar o atalho Tecla do Windows + Alt + R para parar a gravação sem precisar usar o cursor do mouse. Nas configurações do programa é possível personalizar os atalhos e também alterar algumas configurações relacionadas à qualidade da gravação, captura de áudio e muito mais.

Acessando os vídeos
Agora, pelo aplicativo do Xbox, vá até o menu DVR de jogos (indicado pela seta vermelha na tela abaixo) e você pode conferir todos os vídeos gravados.

Ali, você pode assistir a qualquer um deles, realizar uma breve edição, excluir, renomear ou compartilhar cada item, bem como abrir a pasta do sistema na qual eles se encontram.

[Voltar]

Galaxy S9 Plus: modo desktop sem dock virá na atualização para Android 9 Pie

Lançada em 2017 junto ao Galaxy S8 e S8 Plusa DeX Station foi a primeira proposta da Samsung para que seus usuários pudessem carregar em seus bolsos mais do que um smartphone, uma estação de trabalho completa. A dock permite que o usuário conecte além do seu smartphone Galaxy, um teclado, um mouse e um monitor, e desfrute de toda a experiência que um desktop pode oferecer.

No entanto, por mais que a proposta seja boa, nem todos os usuários se sentem tentados a comprar uma Dex, seja pelo preço um tanto quanto salgado, seja pela falta de praticidade de carrega-la consigo.

Samsung Dex Station

Talvez por conta disso, a Samsung encurtou essa experiência com o lançamento do Galaxy Note 9, exigindo do usuário apenas um conversor de HDMI para USB-C para possibilitar usar o smartphone como um computador. Com o novo Note, basta utilizar o conversor para fazer a conexão com um monitor/TV e ligar teclado e mouse via Bluetooth – sendo possível usar também a tela do smartphone no lugar desses periféricos.

Agora, ao que parece, essa possibilidade será estendida para outros aparelhos da marca com a chegada do Android Pie 9.0 junto com a Samsung Experience 10. Além da nova interface e recursos, tudo indica que o Galaxy S9 Plus receberá funcionalidades vistas até então somente no Note 9, como a possibilidade de usar o Samsung DeX sem a dock e funções de câmera como Super Câmera Lenta, Emojis AR e Otimizador de Cena. Ainda não há confirmação de que o Galaxy S9 “comum” também receberá o suporte ao Samsung DeX sem a dock.

Confira no vídeo a seguir a demonstração da utilização do Samsung DeX no S9+ com a versão beta do Android Pie sem a necessidade da DeX Station.

Assim como relatamos várias vezes ao longo das últimas semanas, a Samsung está em um ativo período de testes da nova versão do sistema, com expectativa que ele chegue ao usuário final no começo do ano que vem. A etapa de testes da nova interface deverá começar muito em breve.

[Voltar]

Hardware

[Voltar]

Como instalar o módulo de segurança da caixa no Ubuntu, Debian e derivados

Para instalar o módulo de segurança da caixa no Ubuntu, Debian e derivados, você deve fazer o seguinte:

Passo 1. Abra um terminal;
Passo 2. Atualize o repositório de pacotes com o comando;

sudo apt-get update

Passo 3. Instale os pacotes libnss3-tools e libcurl3;

sudo apt-get install libnss3-tools libcurl3

Passo 4. Confira se o seu sistema é de 32 bits ou 64 bits, para isso, use o seguinte comando no terminal:

uname -m

Passo 5. Se seu sistema é de 32 bits, use o comando abaixo para baixar o programa. Se o link estiver desatualizado, acesse essa página, baixe a última versão e salve-o com o nome gbpcef.deb:

wget https://imagem.caixa.gov.br/banner/fgr/GBPCEFwr32.deb -O gbpcef.deb

Passo 6. Se seu sistema é de 64 bits, use o comando abaixo para baixar o programa. Se o link estiver desatualizado, acesse essa página, baixe a última versão e salve-o com o nome gbpcef.deb:

wget https://imagem.caixa.gov.br/banner/fgr/GBPCEFwr64.deb -O gbpcef.deb

Passo 7. Agora instale o programa com o comando:

sudo dpkg -i gbpcef.deb

Passo 8. Caso seja necessário, instale as dependências do programa com o comando;

sudo apt-get install -f

Passo 9. Depois, se precisar desinstalar o programa, use esse comando:

sudo apt-get remove warsaw

[Voltar]

Resolvendo problemas de permissão do WordPress

Procedimento em um ambiente com NGINX e Ubuntu.

Basicamente se você instalou o PHP com os pacotes padrões (apt-get install php5-fpm etc.) ou similar como root e após instalar/configurar via wget o WordPress viu aquelas mensagens irritantes “não foi possível criar o diretório” (Could not create directory) ao tentar instalar ou atualizar plugins, talvez as etapas abaixo resolva:

Edite o arquivo wp-config.php:

nano wp-config.php

Insira a constante:

define(‘FS_METHOD’, ‘direct’);

Salve e agora mude seu usuário para o ubuntu:

su – ubuntu

Execute na pasta raíz do seu wordpress os comandos (pode selecionar as 3 linhas, colar e dar ENTER):

sudo chown www-data:www-data -R *
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;

A primeira linha dará permissão de dono para usuário e grupo www-data. A segunda linha vai dar permissão 755 para todas as pastas, e a terceira dará permissão 644 para todos os arquivos.

Caso ainda não funcione, tente trocar as permissões 755 para 775 e 644 para 664. No meu caso, com 755 e 644 funcionou.

Jamais, em hipótese alguma dê permissão 777, mas isso você já sabe…

[Voltar]

A inteligência artificial que escreve programas

Colaboração: Alessandro de Oliveira Faria

Data de Publicação: 19 de setembro de 2018

Neste século XXI a profissão mais solicitada é a programação, que agora parece receber uma excelente ferramenta, a inteligência artificial. Veremos neste documento como utilizar um projeto de software livre que recorre aos recursos de inteligência artificial para criar programas, mais especificamente sub-rotinas, métodos e/ou funções.

O projeto denominado BAYOU foi criado por cientistas da computação da Universidade de Rice com o financiamento da Google e militares. A técnica utilizada é deep learning, tomando como princípio computacional a pesquisa para codificação baseado em tags/palavras-chave para o sistema desenvolver o software solicitado. O resultado do processamento é um código java criado pelo sistema conforme requisitado pelo “operador”.

Linux: A Inteligência Artificial que escreve programas

A tecnologia foi construída por técnicos da Universidade de Rice com verbas disponibilizadas pelo exército americano e Google. Resumidamente o sistema analisa cerca de 1500 código fontes de aplicativos Android, com aproximadamente 100 milhões de linhas.

Com toda esta base de informação, alimentou-se a inteligência artificial e o resultado foi um software para elaborar outro software. O aprendizado da informação contextual é o diferencial do projeto que permite obter linhas de código baseado apenas em tags/palavras chaves. Acredito ser uma excelente notícia, para o mundo da tecnologia, para melhorar cada vez mais a qualidade de código, obter ganhos de produtividade e utilizar o talento dos programadores para resolver problemas realmente complexo e não tarefas que exige uma simples CRTL+C CRTL+V.

O projeto ainda é embrionário, mas promissor e não tem o propósito de substituir programadores, como um corretor de texto não substituiu um escritor. Pelo menos neste momento, o projeto gera rascunho /sugestões de linhas de código relevantes para o trabalho que um desenvolvedor precisa elaborar. Mesmos assim acredito ser um passo muito importante para a ciência da computação e o projeto pode servir como base para um conceito muito inovador.

MÃO NA MASSA

Aqui veremos o que será necessário para executar o projeto BAYOU, desde os seus requisitos até a instalação e execução.

Requisitos:

  • Linux (CLARO!)
  • Maven
  • Mavn-jansi
  • Tensorflow
  • Scikit-learn

Para o texto tornar extenso, assumirei que o ambiente Linux com Java, Python e Maven está devidamente instalado e configurado.

Instalando os pacotes Tensorflow e Scikit-learn

Com o ambiente python funcionando corretamente, utilize os comandos abaixo como super-usuário para resolver as dependências python do projeto Bayou:

# pip install tensorflow
# pip install scikit-learn

Para testar o funcionamento adequado do tensorflow, utilize as instruções a seguir. Se o resultado for similar, significa que o ambiente python está devidamente configurado.

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

Agora efetue o download a partir do código fonte.

$ git clone https://github.com/capergroup/bayou.git

Após o download, siga o exemplo a seguir para resolver as dependências java:

$ cd bayou/tool_files/build_scripts
$ sudo ./install_dependencies.sh

A compilação é efetuada com o comando build:

./build.sh

Agora para executar o motor principal, entre na pasta out e execute o comando start_bayou.sh:

$ cd out/
$ ./start_bayou.sh 
2018-09-08 20:53:52.604:INFO::main: Logging initialized @2482ms to org.eclipse.jetty.util.log.StdErrLog
2018-09-08 20:53:52.896:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT
2018-09-08 20:53:52.992:INFO:oejs.AbstractConnector:main: Started ServerConnector@2cbb3d47{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
2018-09-08 20:53:52.993:INFO:oejs.Server:main: Started @2871ms
2018-09-08 20:53:52.994:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT
2018-09-08 20:53:52.995:INFO:oejs.AbstractConnector:main: Started ServerConnector@7ea37dbf{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2018-09-08 20:53:52.995:INFO:oejs.Server:main: Started @2873ms
===================================
   Loading Model. Please Wait.    
===================================
INFO:tensorflow:Restoring parameters from model49.ckpt
===================================
           Bayou Ready            
===================================
* Serving Flask app "ast_server" (lazy loading)
* Environment: production
  Use a production WSGI server instead.
* Debug mode: off

Agora crie um arquivo .java onde desejamos que a inteligência artificial atue, coloque a TAG FILEWRITE para escrita de arquivo utilizando BUFFER.

import java.io.*;
import java.util.*;
public class Test {
   void write(File file, String toWrite) {
       {
               /// call:write type:FileWriter type:BufferedWriter
       }
   }  
}

Agora utilize o comando synthesize para o sistema devolver o resultado do problema proposto:

./synthesize.sh exemplo/Test.java

Veja o resultado:

---------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(toWrite);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.newLine();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.IOException;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     try {
       fw1 = new FileWriter(toWrite);
       fw1.write(toWrite);
       fw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite) {
   {
     FileWriter fw1;
     try {
       fw1 = new FileWriter(file);
       fw1.write(toWrite);
       fw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite, boolean _arg11) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(toWrite, _arg11);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.newLine();
       bw1.flush();
       bw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite, boolean _arg11) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file, _arg11);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite, boolean _arg11) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file, _arg11);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.newLine();
       bw1.flush();
       bw1.close();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

—-------- BEGIN PROGRAM  ----------
import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileWriter;

public class Test {
 void write(File file, String toWrite, boolean _arg11) {
   {
     FileWriter fw1;
     BufferedWriter bw1;
     try {
       fw1 = new FileWriter(file, _arg11);
       bw1 = new BufferedWriter(fw1);
       bw1.write(toWrite);
       bw1.newLine();
     } catch (IOException _e) {
     }
     return;
   }
 }
}

Resumidamente, recebemos diversos exemplos de como escrever um método para escrever um arquivo! Genial…

A seguir um vídeo demonstrativo da implementação do Bayou no meu projeto Modoki de código aberto.

Comandos do Dropbox

Comando CLI Objetivo
autostart dropbox autostart [y/n] As opções aqui incluem:

  • n: o Dropbox não inicia automaticamente ao fazer login.
  • y: o Dropbox inicia automaticamente ao fazer login (padrão).

Observe que esse comando só pode funcionar nas distribuições Ubuntu compatíveis atualmente.

exclude dropbox exclude [list] Quando o comando list é usado sem argumentos, ele exibe uma lista de diretórios atualmente excluídos da sincronização.
  dropbox exclude add [DIRECTORY] [DIRECTORY] … Adiciona um ou mais diretórios à lista de exclusão e, em seguida, sincroniza o Dropbox.
  dropbox exclude remove [DIRECTORY] [DIRECTORY] … Isso remove um ou mais diretórios da lista de exclusão e, em seguida, sincroniza o Dropbox novamente. Observe que qualquer caminho especificado deve estar dentro da pasta Dropbox.
filestatus dropbox file status [-l] [-a] [FILE]… Exibe o status atual de cada ARQUIVO. As opções incluem:

  • -l ou –list: exibe informações em um formato semelhante ao comando ls nativo do Linux.
  • -a ou –all: não ignora entradas começando com “.”

Aliases incluem stat.

help dropbox help [comando] Sem argumentos, exibe uma lista de comandos e uma breve descrição de cada um. Com um comando, exibe uma descrição de ajuda para usar o comando.
lansync dropbox lan sync [y/n] As opções aqui incluem:

  • y: o Dropbox usará LAN sync (padrão).
  • n: o Dropbox não usará LAN sync.
ls dropbox ls [FILE]… Esse é um alias para filestatus -l.
proxy dropbox proxy MODE [TYPE] [HOST] [PORT]
[USERNAME] [PASSWORD]
Para definir manualmente as configurações de proxy para o Dropbox:

  • MODE Um dos seguintes modos: none, auto, manual
  • Válido apenas no modo manual:
    • TYPE Um dos seguintes tipos: http, socks4, socks5
    • HOST Host do proxy
    • PORT Porta do proxy
    • USERNAME Usuário do proxy (opcional)
    • PASSWORD Senha do proxy (opcional)
puburl dropbox puburl FILE Exibe uma URL de link público para ARQUIVO. Só se aplica se você tiver uma pasta Pública habilitada na sua conta. Esse comando só pode ser usado em arquivos na pasta Pública.
running dropbox running Resulta em 1 se o daemon estiver em execução e em 0 se não estiver em execução. Esse comando só pode ser usado em scripts para verificar se o Dropbox está em execução. O comando não resulta em nada na interface da linha de comando.
sharelink dropbox sharelink FILE Exibe um link compartilhado para o ARQUIVO.

  • ARQUIVO caminho absoluto para ARQUIVO
start dropbox start [-i] Inicia o Dropbox daemon. Se o daemon já estiver em execução, o comando não resulta em nada. As opções são -i ou i–install para autoinstalar o Dropbox daemon se não estiver disponível no sistema.
status dropbox status Exibe o estado atual do Dropbox daemon.
stop dropbox stop Encerra o Dropbox daemon.
throttle dropbox throttle DOWNLOAD UPLOAD Define limites de largura de banda para sincronização de arquivos:

    • DOWNLOAD Pode ser unlimited (ilimitado) ou um limite manual em KB/s
    • UPLOAD Um dos seguintes: unlimited (ilimitado), auto (automático) ou um limite manual em KB/s

[Voltar]