Arquivo da categoria ‘Linux’

1. Introdução
O Postfix tem recurso de conversão de endereços de email, o que é uma característica bastante importante do sistema de correio eletrônico. Isso é realizado através da criação de apelidos virtuais (“virtual aliases”). Esse recurso acarreta as seguintes facilidades:

  • redirecionar o e-mail para um ou mais endereços;
  • ter uma série de apelidos para uma mesma caixa postal de destino;
  • hospedar múltiplos domínios virtuais numa única máquina;
  • implementar endereços em grupos (listas de distribuição);
  • implementar domínios de apelidos virtuais (“virtual alias domains”) onde todos os endereços são apelidos (“alias”) para endereços em outros domínios.

Isso é implementado fazendo-se uso de uma tabela opcional de apelidos virtuais (“virtual alias”) que reescreve endereços de destinatários seja para caixas postais locais, para caixas postais virtuais ou para destinos de e-mail remotos. Isto é diferente da tabela de aliases que é usada apenas para entrega local, já tratado no primeiro post que fizemos sobre o Postfix. Este processo de “virtual aliases” é implementado pelo “daemon cleanup” do Postfix, antes das ações do daemon gerenciador de filas QMGR (“Queue Manager”) do Postfix.

Domínios virtuais (“virtual alias domains”) não devem ser confundidos com domínios de caixa de correio virtuais (“virtual mailbox domains”) que são implementados com o agente Postfix “virtual” de entrega local de correio para usuários de domínios virtuais. Domínios de caixa de correio virtuais (“virtual mailbox domains”) faz com que cada endereço de destinatário possa ter sua própria caixa de correio.

2. Problema que a facilidade “virtual aliases” resolve
Considere existir 3 (três) domínios virtuais hospedados em uma máquina, chamados: dominio1.com, dominio2.org e dominio3.net. Considere também que não se está usando a facilidade “virtual aliases”. Assim, ao se enviar 3 (três) emails para as seguintes pessoas: maria@dominio1.com, maria@dominio2.org e maria@dominio3.net, estes três e-mails acabariam caindo numa mesma caixa postal local chamada maria.

Pois, sem o uso de “virtual aliases”, todos os nomes de usuários de e-mail compartilharão um único espaço de nomes da parte local. Assim, para hospedar múltiplos domínios virtuais onde estes tenham áreas de nomes separadas, necessita-se lançar mão da facilidade “virtual aliases”.

3. Configurar o Postfix
O parâmetro virtual_alias_map especifica o arquivo responsável pela base de dados de aliases usados pelo MTA para entregar os emails. Por exemplo, abaixo temos como fazer a configuração desse parâmetro do Postfix apontando para uma tabela simples de pesquisa do tipo hash (poderia existir a indicação de mais de uma tabela de pesquisa, separadas por espaços em branco ou vírgulas):
# postconf -e 'virtual_alias_maps = hash:/etc/postfix/virtual'

Para um entendimento mais detalhado do processo de reescrita de endereços através de apelidos virtuais (“Virtual aliasing”), ver Postfix Address Rewriting – Virtual aliasing.

Agora o Postfix utilizará os aliases virtuais que estejam colocados em /etc/postfix/virtual. O formato desse arquivo “virtual” é muito simples: duas colunas onde a chave de pesquisa é o endereço do destinatário e o(s) endereço(s) convertido é o resultado. Abaixo um exemplo de conteúdo deste arquivo:


# Minha tabela de virtuais
sergio2@dois.netlivre.org	sergio
antonio2@dois.netlivre.org	antonio
redes2@dois.netlivre.org	redes
sergio3@tres.exemplo.org	sergio
sergio3@quatro.exemplo.org	antonio
admin@br.exemplo.org		antonio,sergio

Depois de editar o arquivo /etc/postfix/virtual, deve-se transformar este arquivo em um arquivo de hash (isto é, gerar o arquivo virtual.db):
# postmap /etc/postfix/virtual
# /etc/init.d/postfix reload

O formato das tabelas de pesquisa de aliases virtuais está descrito na página virtual(5). No exemplo acima, graças a facilidade “virtual aliases” teremos como resultados:
– todas as mensagens endereçadas para sergio2@dois.netlivre.org terminarão na caixa de correio do usuário “sergio”;
– todas as mensagens endereçadas para sergio3@tres.exemplo.org terminarão na caixa de correio do usuário “sergio”;
– todas as mensagens endereçadas para sergio3@quatro.exemplo.org terminarão na caixa de correio do usuário “antonio”;

Se quiser testar, usando o terminal basta enviar um e-mail como este exemplo a seguir:
$ mail -s "Mensagem de teste de virtual alias" sergio3@quatro.exemplo.org <<< "Este eh o conteudo da mensagem de teste do uso de virtual alias."

Referências:
1- Servidor de e-mail Postfix (parte 1 – instalação mínima)
2- Servidor de e-mail Postfix (parte 2 – logs e programas de suporte)

Anúncios

1) Introdução
Os procedimentos aqui realizados foram testados utilizando o Debian/Linux 8 (debian Jessie) com o Postfix 2.11. O intuito deste post é registrar o que seria uma configuração muito básica para funcionamento de um serviço de email com o Postfix.

Continuaremos aqui com a configuração do post anterior, Servidor de e-mail Postfix (parte 1 – instalação mínima), onde apenas estão instalados os pacotes postfix e ssl-cert, e com o smtp utilizando a porta 25.

2) As filas de mensagem do Postfix

As filas de mensagem do Postfix estão localizadas, por padrão, na pasta /var/spool/postfix/. Abaixo um exemplo de um conteúdo básico desta pasta:


drwx------  2 postfix root     active
drwx------  2 postfix root     bounce
drwx------  2 postfix root     corrupt
drwx------ 18 postfix root     defer
drwx------ 18 postfix root     deferred
drwx------  2 postfix root     flush
drwx------  2 postfix root     hold
drwx------  2 postfix root     incoming
drwx-wx--T  2 postfix postdrop maildrop
drwx------  2 postfix root     private
drwx--s---  2 postfix postdrop public
drwx------  2 postfix root     saved

Em destaque, as 5 (cinco) filas que o Postfix utiliza para o processamento de mensagens, conforme seu gerenciador de filas QMGR – “Queue Manager”:

  • incoming: basicamente, esta é a fila de e-mails que estâo entrando a partir da rede (/var/spool/postfix/incoming/).
  • active: esta é a fila de e-mails que foram abertos pelo gerenciador QMGR para entregas. Apenas um número limitado de mensagens podem entrar nesta fila (uma proteção quanto a limitação de taxas de entrega) (/var/spool/postfix/active/).
  • deferred: esta é a fila de mensagens que não puderam ser entregues na primeira tentativa. O gerenciador da fila vai seguir as configurações do main.cf para novas tentativas de entregas. Por padrão ele vai dobrando o tempo de intervalo entre as tentativas de entrega (/var/spool/postfix/deferred/).
  • corrupt: os arquivos das filas que não conseguem ser lidos ou que estão danificados são movidos para esta fila para uma inspeção (/var/spool/postfix/corrupt/).
  • hold: mensagens que são colocadas em espera (“on hold”) pelo administrador ficam nesta fila, até o instante que alguém a libere (/var/spool/postfix/hold/).

Como visualizar as mensagens nas filas do Postfix
# mailq
# postcat -vq mensagemID

Onde:
– o primeiro comando acima para identificar as mensagens que estão nas filas do Postfix, listando as suas “mensagemID”;
– o segundo comando para abrir uma determinada mensagem (identificada por “mensagemID”). Será possível visualizar o corpo do email na saída padrão.

2.1) Dinâmica de funcionamento das filas

O gerenciador de filas, qmgr, é responsável por agendar a entrega das mensagens. O gerenciador de filas utiliza alguns diretórios para diferentes propósitos. Novas mensagens irão parar na fila ativa (“active”). A fila ativa contém as mensagens que estão prontas para entrega. Se uma tentativa de entrega falhar, a mensagem será movida para a fila adiada (“deferred”). Esta fila será varrida de vez em quando e, se for o momento de tentar entregar uma mensagem novamente, o arquivo de fila para a mensagem será mais uma vez movido para a fila ativa (“active”). Se uma tentativa para entregar uma mensagem deve ou não ser feita novamente quando a fila for varrida dependerá de dois fatores: do tempo transcorrido a partir do momento em que a mensagem chegou e dos dois parâmetros de configuração que especificam um intervalo mínimo e máximo de tempo entre as novas tentativas.

a) Existem 2 parâmetros que definem quanto tempo a mensagem fica na fila:

  • maximal_queue_lifetime (default: 5d): tempo máximo em que uma mensagem é enfileirada antes de ser enviada de volta como não entregue (“undeliverable”).
  • bounce_queue_lifetime (default: 5d): o tempo máximo em que uma mensagem devolvida (“bounced”) permanece na fila antes de ser considerada não entregue (“undeliverable”). Ou seja, é o tempo de vida de mensagens devolvidas (“bounced messages”). Se for parametrizado para o valor zero, significa que os e-mails que não forem imediatamente enviados serão rejeitados e devolvidos aos seus remetentes como não entregues (“undeliverable”)

Para ver os valores correntes destes parâmetros, veja os exemplos de comandos abaixo:
# postconf -d | grep maximal_queue_lifetime
# postconf -n | grep maximal_queue_lifetime

b) Existem 3 parâmetros que definem o tempo de verificação da fila:

  • queue_run_delay (default: 300s): tempo entre análises da fila “deferred” pelo gerenciador de filas. Seu valor deve ser definido menor ou igual ao parâmetro $minimal_backoff_time.
  • minimal_backoff_time (default: 300s): tempo mínimo entre tentativas de entrega de uma mensagem rejeitada (“deferred message”). Este parâmetro deve ser maior ou igual a $queue_run_delay.
  • maximal_backoff_time (default: 4000s): tempo máximo entre tentativas de entregar uma mensagem rejeitada (“deferred message”). Este parâmetro deve ser maior ou igual a $minimal_backoff_time.

c) Como alterar estes parâmetros?
Isso é feito facilmente, como os dois exemplos abaixo:
# postconf -e 'maximal_queue_lifetime = 1d'
# postconf -e 'delay_warning_time = 0h'

2.2) Relatórios de estado de entrega
O daemon qmgr mantém um olho nos relatórios de status de entrega por mensagem nos seguintes diretórios. Cada arquivo de relatório de status tem o mesmo nome do arquivo de mensagem correspondente (que é a própria mensagemID):

  • bounce: informação por-recipiente sobre o porquê o e-mail está com mensagem de erro (“bounced”: non-delivery status) (/var/spool/postfix/bounce/).
  • defer: informação por-recipiente sobre o porquê o e-mail está com o envio atrasado. (“delayed”: non-delivery status) (/var/spool/postfix/defer/).
  • trace: rastrear informações de status por destinatário conforme solicitado com o comando do Postfix “sendmail -v” ou “sendmail -bv” (delivery status).

Nestes arquivos de relatórios são guardadas informações de quanto tempo a mensagem está aguardando ser despachada, razão do atraso ou do erro, e outras mensagens de controle.

3) Logs
A definição dos locais dos arquivos de logs do postfix estão definidos através do rsyslogd daemon. Rsyslogd é um utilitário do S.O. que provê suporte para loggin de mensagens tanto dos sockets da internet e como do S.O. O arquivo de configuração para o rsyslogd está em /etc/rsyslog.conf

Por padrão, os logs do postfix estarão sendo guardados na pasta /var/log/:
/var/log/mail.err
/var/log/mail.info
/var/log/mail.log
/var/log/mail.warn

3.1) Notificações de erro
Além dos registros de logs, existe a possibilidade de notificações de problemas com o Postfix a um certo destinatário . Por padrão, este destinatário é o “postmaster”, como podemos ver:
# postconf | grep error_notice_recipient
error_notice_recipient = postmaster

Esse destinatário recebe notificações sobre problemas de entrega de correio que são causados por erros de política, recursos, software ou protocolo. Essas notificações são ativadas com o parâmetro notify_classes. Por exemplo:
# postconf -e 'notify_classes = bounce, delay, policy, protocol, resource, software, data'
# /etc/init.d/postfix reload

NOTA: as notificações podem conter informações confidenciais tais como “SASL passwords” ou conteúdo de mensagens. É da responsabilidade do administrador do sistema tratar tais informações com o cuidado exigido.

4) Programas de suporte do Postfix
O Postfix quando instalado oferece alguns programas de suporte que podem ser utilizados para controlar, testar e depurar o sistema Postfix. Vamos ver aqui os seguintes programas de suporte:

  • mailq: lista as mensagens na fila Postfix, as quais aguardam ainda serem despachadas.
  • qshape: mostra as mensagens em cada uma das filas de mensagens do Postfix.
  • postcat: mostrar o conteúdo de mensagens na fila do Postfix
  • postsuper: permite manipular a fila de mensagens do Postfix, como excluir ou enfileirá-las de novo.
  • postconf: mostrar/alterar os valores atuais dos parâmetros de configuração do Postfix
  • newaliases: reconstrói todos os arquivos de aliases locais.

5) Exemplos de comandos
a) Exemplo 1

$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
4CE54DA0064      319 Sat Sep 16 23:01:08  root@server17.netlivre.org
     (connect to alt2.gmail-smtp-in.l.google.com[108.177.96.26]:25: Connection timed out)
                                         marluce@gmail.com


0C363DA006B      318 Sat Sep 16 23:07:25  root@server17.netlivre.org
     (connect to mail.caldodecana.org[85.25.109.176]:25: Connection timed out)
                                         maria@caldodecana.org
-- 1 Kbytes in 2 Requests.

Comando útil: apresenta o número de mensagens enfileiradas que ainda aguardam serem despachadas.
$ mailq | grep -c "^[A-F0-9]"
$ mailq | tail -n 1

b) Exemplo 2
Para deletar todas as mensagens enfileiradas do Postfix.
# postsuper -d ALL
postsuper: Deleted: 2 messages
# mailq
Mail queue is empty

Para apagar as mensagens postergadas (“deffered”) da fila de mensagens do Postfix.
# postsuper -d ALL deferred

Para apagar alguma mensagem específica da fila de mensagens do Postfix.

# mailq | grep "email@example.com" ; primeiro identifica o ID da mensagem
056CB129FF0* 5513 Sun Feb 26 02:26:27 email@example.com
# postsuper -d 056CB129FF0 ; agora apaga a mensagem da fila

c) Exemplo 3
# postcat -vq 9681BDA0076
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS active/9681BDA0076 ***
etc..etc…etc…

# postcat -vq 71B86DA006F
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS deferred/7/71B86DA006F ***
etc..etc…etc…

No primeiro caso, a mensagem identificada com o ID=9681BDA0076 está na fila “active”. Já no segundo exemplo, a mensagem identificada com o ID=71B86DA006F está na fila “deferred”.

d) Exemplo 4
Colocando uma mensagem na fila “hold”:
# postsuper -h 9681BDA0076
postsuper: 9681BDA0076: placed on hold
postsuper: Placed on hold: 1 message

Comprovando que a mensagem está relmente na fila “hold”:
# postcat -vq 9681BDA0076
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS hold/9681BDA0076 ***
etc..etc…etc…

6) Outros parâmetros de configuração úteis
Não vamos aqui entrar em muitos comentários pois são configurações complementares e não essenciais. Para qualquer dúvida, consultar o documento Postfix Configuration Parameters. De qualquer forma, vamos listar já na forma de exemplos de como estabelcer tais parâmetros:

# postconf -e 'delay_warning_time = 10m'
# postconf -e 'mailbox_size_limit = 51200000'
# postconf -e 'message_size_limit = 10240000'
# postconf -e 'maximal_queue_lifetime = 5h'
# postconf -e 'bounce_queue_lifetime = 1h'
# postconf -e 'smtpd_recipient_limit = 100'
# /etc/init.d/postfix reload

Nota: verifique a saída de /var/log/mail.log ou de /var/log/mail.info se há qualquer aviso de problemas na configuração executada, após o último comando exemplificado acima para recarregar a configuração do Postfix.

7) Quadro resumo dos comandos:

Comando Descrição
Mostrar mensagens
mailq Mostra as mensagens nas filas do postfix
qshape active Mostra o conteúdo da fila active.
qshape incoming Mostra o conteúdo da fila incoming.
qshape hold Mostra o conteúdo da fila hold.
qshape deferred Mostra o conteúdo da fila deferred.
qshape active incoming Mostra os conteúdos das filas active e incoming.
qshape -s Mostra os domínios de destino.
postcat -vq mensagemID Mostra o conteúdo de determinada mensagem.
postsuper
postsuper -h mensagemID Colocar uma mensagem na fila “hold”.
postsuper -H mensagemID Liberar uma mensagem da fila “hold”.
postsuper -d mensagemID Deletar uma mensagem da fila.
postsuper -d ALL Deletar todas as mensagens da fila do Postfix.
postsuper -p Fazer um purge na nos arquivos temporários da fila que podem ser sobras de um crash no sistema ou no postfix.
postsuper -s Verifica a estrutura das filas e repara a fila caso exista algum problema.
Enviar mensagens
mailq -q Iniciar entrega de todos as mensagens enfileiradas.
postfix flush Reenviar todos os emails da fila de mensagem, esvaziando o buffer.
postqueue -i mensagemID Iniciar entrega imediata de mensagem da fila “deferred”.
postqueue -s dominio.com.br Iniciar entrega imediata mensagens na fila para determinado domínio.
Ferramenta de configuração do Postfix:
postconf Mostra todos os parâmetros.
postconf -d Exibe os parâmetros padrão (valores defaults, independentemente das definições em main.cf).
postconf -n Exibe os parâmetros não padrão (configurados através de main.cf).
postconf -e ‘parâmetro = valor’ Adiciona um novo parâmetro no final do arquivo de configuração do postfix.

 

Referências:
1- Servidor de e-mail Postfix (parte 1 – instalação mínima)
2- Servidor de e-mail Postfix (parte 3 – Domínios de aliases virtuais)
3- Postfix Documentation
4- Postfix Bottleneck Analysis
5- Postfix Configuration Parameters
6- How To Configure Custom Postfix Bounce Messages

1) Introdução
Os procedimentos aqui realizados foram testados utilizando o Debian/Linux 8 (debian Jessie) com o Postfix 2.11. O intuito deste post é registrar o que seria uma configuração muito básica para funcionamento de um serviço de email com o Postfix.

2) Fazer duas configurações oportunas numa nova instalação
a) Atualizar data e hora do servidor:
# dpkg-reconfigure tzdata

Para verificar:
# date
Dom Set 17 13:14:05 -03 2017

b) Configurar a língua portuguesa para interface com o sistema e aplicativos
# apt-get install locales
# dpkg-reconfigure locales

…selecionando pt_BR.UTF-8 UTF-8

Para verificar:
# echo $LANG
pt_BR.UTF-8

3) Instalar o postfix

Para uma instalação mais completa de um ambiente de mensageria, são sugeridos os seguintes pacotes:
postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin dovecot-common resolvconf postfix-cdb ufw postfix-doc openssl-blacklist

Mas neste primeiro instante vamos instalar apenas os pacotes: postfix e ssl-cert

$ apt-cache policy postfix
# apt-get install postfix ssl-cert

Tela 1 de instalação do Postfix

Tela 2 de instalação do Postfix

Após as duas telas básicas de configuração que exemplificamos acima, a instalação deve ocorrer e a seguinte mensagem ao final é colocada:
Postfix is now set up with a default configuration. If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1).
After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

O que fora feito na instalação? As principais ações foram:
Adicionado novo grupo 'postfix' (GID 116)
Adicionado novo usuário 'postfix' (UID 109) com grupo 'postfix'
Criado o diretório '/var/spool/postfix' com seus subdiretórios
Adicionado novo grupo 'postdrop' (GID 117)
setting myhostname: server17.netlivre.org
setting alias maps
setting alias database
setting myorigin
setting destinations: server17.netlivre.org, localhost.netlivre.org, localhost
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_command
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all

Observações:
a) Cada máquina é identificada por um nome principal (ou “canônico”), the system’s host name, armazenado no arquivo /etc/hostname. Quando da instalação do S.O. da máquina, definimos para os exercícios deste post:
$hostname = server17

b) O nome de domínio (domain name) vem de um nome de máquina completo, adquirido através de resolução de nome, presente no arquivo /etc/hosts. Deve-se escrever neste arquivo /etc/hosts um nome completo para a máquina no começo da lista de nomes associada com o endereço da máquina, como no exemplo seguinte:
<ip-máqina> server17.netlivre.org server17

c) Para configuração do parâmetro myhostname do Postfix, o padrão é usar o “fully-qualified domain name (FQDN)”, no caso server17.netlivre.org.

d) Já “destinations” é formado pelo Postfix da seguinte forma: $myhostname, localhost.$mydomain, localhost. Assim, teremos no nosso caso o parâmetro correspondente do Postfix, que é mydestination, conformado da seguine maneira:
mydestination = server17.netlivre.org, localhost.netlivre.org, localhost

4) Iniciar o postfix e verificar se deamon postfix está ativo, bem como sua versão
# /etc/init.d/postfix start
$ /usr/sbin/postconf -d | grep mail_version
mail_version = 2.11.3

Para verificar se o deamon do postfix está ativo, proceder de quatro maneiras:
i) Procedimento 1: verificar os processos ativos


# ps -aux | grep --color postfix
postfix   3110  0.0  0.1  42460  5564 ?  S   Set17  0:00 tlsmgr -l -t unix -u -c
postfix  12157  0.0  0.0  38232  3796 ?  S   00:08  0:00 pickup -l -t unix -u -c
root     29139  0.0  0.1  36168  3904 ?  Ss  Set16  0:00 /usr/lib/postfix/master
postfix  29141  0.0  0.1  38392  4020 ?  S   Set16  0:00 qmgr -l -t unix -u

ii) Procedimento 2: invocar o status do deamon
# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 29139

iii) Procedimento 3

$ /etc/init.d/postfix status
● postfix.service - LSB: Postfix Mail Transport Agent
   Loaded: loaded (/etc/init.d/postfix)
  Drop-In: /run/systemd/generator/postfix.service.d
           └─50-postfix-$mail-transport-agent.conf
   Active: active (running) since Sáb 2017-09-16 22:23:26 -03; 2 days ago

iv) Procedimento 4: verificar o log do postfix
# cat /var/log/mail.log

Observações:
a) Para listar informações do subsistema de rede do Linux, pode-se usar o netstat. Assim, pode-se ver o estado das conexões de rede através da listagem dos sockets abertos. Os sockets ativos de todas as famílias de endereços configuradas serão identificados:

# netstat -ltunp | grep --color -E "smtp|master"
tcp        0      0 *:smtp           *:*        OUÇA       29139/master    
tcp6       0      0 [::]:smtp        [::]:*     OUÇA       29139/master 

Onde as colunas de saída deste comando representa:
protocolo, Recv-Q, Send-Q, Endereço Local, Endereço Remoto, Estado, PID/Program name

b) Um comando ainda mais seguro que o netstat seria usando nmap: nmap -A -T4 localhost (que pode demorar vários minutos para apresentar a resposta).

c) Portas associadas à lista oficial de serviços conhecidos:

# cat /etc/services
smtp	25/tcp	   mail
urd	465/tcp	   ssmtp smtps  # URL Rendesvous Directory for SSM

Onde as quatro colunas são: nome do serviço, porta/protocolo, aliases, comentários.

d) Se deseja descobrir quais portas os programas estão usando, deve-se usar o programa lsof para descobrir exatamente quais portas estão vinculadas a quais processos. Exemplos de comandos:
# lsof | grep --color smtpd
# lsof -i TCP:25
# lsof -i:25

e) Um pouco mais das diferenças entre Nmap, Netstat e lsof

Nmap:
O Nmap é um scanner de portas, uma ferramenta de mapeamento de rede. Isso significa que é usado para descobrir informações sobre hosts em uma rede (seu ip, portas abertas, etc.). O Nmap obtém suas informações por experiência, tentando se conectar a cada porta por sua vez e exibindo o resultado da tentativa de conexão. Esse processo é muito mais lento, portanto, por padrão, ele só tenta os 1000 números de portas mais comuns. Ele pode investigar cada porta para determinar o tipo de serviço que está sendo executado nela, mas não pode mostrar o ID do processo. Nmap pode:

  • Mostrar portas abertas em um sistema remoto;
  • impressão digital da pilha TCP/IP de um alvo;
  • determinar informações sobre a versão do serviço e da aplicação;
  • e muito mais.

Então, quando se deve usar o Nmap?

  • quando se quer saber sobre portas abertas em um sistema remoto;
  • quando quiser mais informações sobre o serviço que está ouvindo em cada porta;
  • quando se precisa de uma segunda opinião sobre as portas de escuta;

Netstat:
Netstat (do pacote net-tools) é uma ferramenta de estatística de rede usada para listar conexões ativas, de e para, o seu computador. A lista pode ser bem longa já que inclui muitos soquetes Unix-domain (amplamente usados por daemons) que não tem nada a ver com redes (por exemplo, comunicação dbus, tráfego X11 e comunicações entre sistema de arquivos virtuais e o desktop). O Netstat obtém suas informações diretamente do sistema operacional. Ele pede ao kernel uma lista de todas as portas de escuta e as exibe. Pode mostrar quais endereços estão a ouvir que portas e, com o privilégio suficiente, quais IDs dos processos. Netstat pode:

  • mostrar as conecções correntemente-ativas;
  • mostrar informações das rotas;
  • mostrar estatísticas das interfaces de rede;
  • e muito mais.

Então, quando deve-se usar o netstat?

  • quando se quer saber o que está sendo ouvido em sua máquina local;
  • quando se precisa de informações de processo ou interface/endereço para cada porta;
  • quando se confia no sistema operacional para dar a resposta correta. Se você foi pirateado, um rootkit pode fazer o sistema operacional mentir para netstat sobre o que realmente está acontecendo. Ou seja, Netstat é menos confiável que Nmap (já que Netstat não conecta à máquina pela rede, mas checam o que está sendo executado no sistema. Por esta razão, esta aplicação pode ser alvo de substituição por atacantes).

Ons: quando se desejar um monitoramento interativo, pode-se fazer por exemplo:
# watch -n 1 netstat -ta

Lsof:
O Lsof (LiSt Open Files) é um utilitário de linha de comando que lista informações sobre arquivos abertos por processos, onde um arquivo aberto pode ser um arquivo regular, um diretório, um arquivo especial de bloco, um arquivo especial de caracter, uma referência textual de execução, uma biblioteca, um stream ou um arquivo de rede (soquete de internet, arquivo NFS ou soquete de domínio UNIX). Lsof é uma espécie de netstat + ps combinados.

5) Anatomia do Postfix
A figura a seguir mostra os principais componentes do sistema Postfix, e os principais fluxos de informação entre eles:

Anatomia do Postfix 1

5.1) Recebendo e-mails
Quando uma mensagem entra no sistema de correio Postfix, a primeira parada é a fila de entrada (“incoming queue”). A figura abaixo mostra os principais componentes que estão envolvidos com novas mensagens:

Anatomia do Postfix 2

  • e-mail postado localmente: o programa sendmail do Postfix invoca o programa postdrop que deposita a mensagem no diretório maildrop, onde a mensagem é retirada pelo daemon pickup. Este daemon faz algumas verificações de sanidade, a fim de proteger o resto do sistema Postfix.
  • e-mail entra a partir da rede: o servidor SMTP do Postfix recebe a mensagem e faz algumas verificações de sanidade, a fim de proteger o resto do sistema Postfix.
  • e-mail gerado internamente pelo próprio sistema Postfix para retornar o correio não entregue ao remetente: os deamons bounce (chamado também pelo nome defer) encaminha as más notícias.
  • e-mail encaminhado pelo agente de entrega local, seja através de uma entrada no banco de dados de alias do sistema, ou através de uma entrada em um arquivo .forward por usuário: isto está indicado com a seta não marcada.
  • e-mail gerado internamente pelo próprio sistema Postfix, a fim de notificar o postmaster de um problema (esse caminho também é indicado com a seta não marcada): o sistema Postfix pode ser configurado para notificar o postmaster de problemas de protocolo SMTP, violações de políticas UCE, e assim por diante.
  • o daemon cleanup implementa a fase final de processamento de novas mensagens. Ele adiciona na mensagem, quando ausente, o “From:” e outros cabeçalhos da mensagens, organiza a reescrita de endereços a forma padrão user@fully.qualified.domain e, opcionalmente, extrai os endereços de destinatários dos cabeçalhos das mensagens. O daemon cleanup insere o resultado como um arquivo na fila única de entrada e notifica o gerenciador de filas qmgr da chegada do novo correio. O daemon cleanup pode ser configurado para transformar endereços com base nas tabelas de pesquisas canônica e virtual.
  • a pedido do daemon cleanup, o daemon trivial-rewrite reescreve os endereços para a forma padrão user@fully.qualified.domain.

6) Arquivos de configuração do postfix
Os dois principais arquivos de configuração do postfix são:
/etc/postfix/master.cf; e
/etc/postfix/main.cf

Se alterar um desses arquivos, o postfix deve ser recarregado:
# /etc/init.d/postfix reload

Normalmente, o arquivo que se edita com maior frequência é “main.cf”, que é o arquivo onde estão definidos os parâmetros que controlam o comportamento dos processos daemon do Postfix. Se o valor de um parâmetro não for especificado no “main.cf”, o Postfix usará o valor padrão que está codificado diretamente no código-fonte.

O formato do arquivo de configuração main.cf pode ser encontrado em postconf(5), ou através de linha de comando via terminal:
$ man -e 5 postconf

Neste arquivo de documentação se descreve todos os parâmetros de configuração disponíveis.


7) Processo mestre do postfix: master

O daemon “master(8)” ($ man -e 8 master) é o processo residente que executa os daemons Postfix sob demanda: daemons para enviar ou receber mensagens via rede, daemons para entregar o correio localmente, etc. Esses daemons são criados sob demanda até um número máximo configurável por serviço.

O comportamento do deamon master(8) é controlado através do arquivo de configuração master.cf, como está descrito em master(5) ($man -e 5 master).

8) Caixas de correio para entregas locais
As caixas de correio podem ser de dois formatos: maildir e mbox. Por padrão, o Postfix entrega as mensagens locais (mensagens para os domínios listados no parâmetro de configuração, em main.cf, mydestination) no formato mbox. O formato mbox para caixas de correio armazena todas as mensagens de uma caixa de correio em um único arquivo de texto. Cada usuário terá sua caixa de correio.

O local onde estarão estas caixas de correio é definida através do parâmetro de configuração, em main.cf, chamado mail_spool_directory. Por padrão do Postfix no Debian, seu valor é /var/mail, conforme podemos ver:

# postconf | grep mail_spool_directory
mail_spool_directory = /var/mail

Vejamos um exemplo típico de conteúdo desta pasta:

$ ls -la /var/mail
total 16
drwxrwsr-x 2 root mail 4096 .
drwxr-xr-x 12 root root 4096 ..
-rw-rw---- 1 antonio mail 514 antonio
-rw-rw---- 1 sergio mail 1015 sergio

Temos dois arquivos que correspondem as caixas postais de destino de dois usuários: cada arquivo correspondendo a um usuário da máquina local. Ou seja, o arquivo de caixa de correio tem o mesmo nome do usuário do S.O. As mensagens que chegam para cada usuário vão sendo adicionadas uma após a outra dentro do arquivo de destino correspondente.

Caso se deseje alterar esta pasta padrão de entrega das mensagens do Postfix (que no caso do Debian é a pasta /var/mail), fazê-lo através do parâmetro de configuração home_mailbox (em main.cf).
Obs: o parâmetro home_mailbox só é eficaz para domínios locais quando o próprio Postfix realiza a entrega. Se a entrega for feita por algum outro agente de entrega como Procmail ou Maildrop, será necessário configurar esse software para entrega maildir.

9) Apelidos locais (“local aliases”)
Tabelas de apelidos locais ($ man -e 5 aliases) fornecem um mecanismo ao sistema para redirecionar o correio (e-mail) para outros destinatários locais, ou pertencentes a qualquer domínio da internet. Essas tabelas de pesquisa são especificadas através do parâmetro do Postfix alias_maps. O valor padrão é mostrado a seguir:
# postconf -n | grep alias_maps
alias_maps = hash:/etc/aliases

É possível indicar mais de uma tabela de apelidos locais (“local aliases”). Para isso, estas devem estar listadas no parâmetro do Postfix “alias_maps” separadas por espaços em branco ou vírgula. As tabelas serão procuradas na ordem especificada até encontrar uma correspondência. Nota: estas procuras são recursivas.

Os redirecionamentos são processados pelo agente Postfix de entrega de e-mails “local“. Ou seja, só serão aplicados a apelidos de usuários locais (apelidos a nível do S.O.) e já na última etapa de trabalho do Postfix. O arquivo /etc/aliases é parte do sendmail ($ man sendmail), que é instalado no momento da instalação do Postfix. Esta tabela se encontra em /etc/aliases, podendo ser editada. Para que a tabela tenha efeito, é necessário executar o comando a seguir:
# newaliases

Esse comando serve para construir o arquivo de mapa /etc/aliases.db, que será lido e interpretado pelo Postfix. O arquivo aliases.db é um banco de dados em arquivo em formato BDB:
$ file /etc/aliases.db
/etc/aliases.db: Berkeley DB (Hash, version 9, native byte-order)

Um arquivo típico de apelidos (“aliases”) locais poderia ser:
# arquivo típico de aliases
# neste arquivo de aliases declaramos os apelidos e as contas de destino
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
operador: licia@comando.com
news: root
webmaster: root
security: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: sergio
redes: antonio, sergio

Pelo exemplo da tabela aliases acima, todas as mensagens enviadas para os usuários postmaster, nobody e hostmaster acabarão caindo na caixa postal do usuário local sergio. Já as mensagens destinadas ao operador serão reencaminhadas ao endereço licia@comando.com.
Obs: mailer-daemon, hostmaster e postmaster são endereços especiais de mail exigidos por vários RFC’s (em especial a RFC 2142, section 5).


10) Verificando a porta do serviço de e-mail

Uma maneira mundo fácil é utilizando a ferramenta Telnet. Telnet é uma ferramenta bastante útil para solucionar problemas relacionados ao SMTP e fluxo de mensagens. Por exemplo, Telnet pode ser usado para verificar se o SMTP está instalado corretamente e que ele possui todos os comandos necessários.

Verificaremos se o serviço de e-mail está funcionando, e em que porta ele está configurado para trabalhar (porta 25 ou a 465):

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)

$ telnet 127.0.0.1 465
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Pelas duas tentativas acima vemos claramente que a porta em uso é a porta 25.

11) Testando envio de e-mail para usuários locais com o aplicativo “mail”

Tem um aplicativo que envia e-mail via texto, chamado “mail” ($ man mail).
Exemplo de comando:
$ mail root -s teste10
digitar aqui o corpo da mensagem <Enter>
<Ctrl-D>

12) Testando envio de e-mail para usuários locais com o aplicativo “Telnet”
Supondo que a porta em uso é a 25, teremos:

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)
helo netlivre.org
250 server17.netlivre.org
mail from: antonio
250 2.1.0 Ok
rcpt to: sergio
250 2.1.5 Ok
rcpt to: root
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: teste com uso do telnet
Teste de envio de mensagem com Telenet. Vamos esperar que a mensagem seja enviada.
.
250 2.0.0 Ok: queued as 8DD22DA0072
quit
221 2.0.0 Bye
Connection closed by foreign host.

No exemplo acima, temos uma mensagem que foi enviada para os usuários sergio e root.

Verificando existência de usuários:
# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)
vrfy root
252 2.0.0 root
vrfy sergio
252 2.0.0 sergio
vrfy redes
252 2.0.0 redes
vrfy joao
550 5.1.1 <joao>: Recipient address rejected: User unknown in local recipient table

No caso acima, os usuários root, sergio e redes existem na máquina. Já o usuário joao é inexistente.

Referências:
1- Servidor de e-mail Postfix (parte 2 – logs e programas de suporte)
2- Postfix – Debian Wiki
3- Exemplo de um arquivo de configuração do Postfix main.cf
4- PostfixBasicSetupHowto

O filtro de conteúdo AMaViS

Publicado: 13/09/2017 em Linux, Serviços IP
Tags:,

1. Introdução
AMaViS = A Mail Virus Scanner
AMaViS é um filtro de conteúdo de código aberto para correio eletrônico, implementando transferência de mensagens, decodificação, alguns procedimentos de verificação, e interface com filtros de conteúdo externos para fornecer proteção contra spam, vírus e outros malwares. Pode ser considerada uma interface entre um remetente (MTA, Mail Transfer Agent) e o Antivírus.

O AMaViS por si só não é um antivírus, ele faz esta interface, chamando o antivírus, previamente configurado, para fazer a varredura dos e-mails que chegam ao servidor. Outro recurso que pode ser utilizado é o bloqueio de mensagens com arquivos anexos de extensão .exe, .com etc.


2. Entendendo um pouco mais o AMaViS

AMaViS pode ser usado para:

  • detectar vírus, spam, tipos de conteúdo banidos ou erros de sintaxe nas mensagens de correio;
  • bloquear, marcar, redirecionar (usando sub-endereçamento) ou encaminhar a mensagem dependendo do seu conteúdo, origem ou tamanho;
  • quarentena (e liberação), ou arquivar mensagens de correio para arquivos, para caixas de correio ou para um banco de dados SQL;
  • limpar as mensagens passadas usando um “sanitizante” externo;
  • gerar assinaturas do DKIM;
  • verificar as assinaturas do DKIM e fornecer uma lista branca baseada em DKIM.

Características notáveis do AMaViS:

  • fornecer estatísticas SNMP e monitoramento de status usando uma extensiva MIB com mais de 300 variáveis;
  • fornecer logs de eventos estruturados no formato JSON;
  • honrar adequadamente as configurações por destinatário mesmo em mensagens de vários destinatários, enquanto escaneia a mensagem uma única vez apenas;
  • suportar email internacionalizado (RFC 6530, SMTPUTF8, EAI, IDN).

Uma instalação de filtragem de correio comum com AMaViS consiste em um Postfix como MTA, SpamAssassin como classificador de spam e ClamAV como proteção anti-vírus, todos executados em um sistema operacional similar a Unix. Muitos outros scanners de vírus (cerca de 30) e alguns outros scanners de spam (CRM114, DSPAM, Bogofilter) também são suportados, bem como alguns outros MTAs.

 

3. Instalar o AMaViS
# apt-get install amavisd-new zoo unzip bzip2 arj unrar cpio lzop


4. Configurar o serviço

a) Colocar o Amavis para ouvir também na porta 10026, além do padrão 10024:
Editar /etc/amavis/conf.d/20-debian_defaults, e fazer:
$inet_socket_port = [10024,10026]; # default listening socket

Obs: reiniciar o Amavis

b) Veriifcar se o AMaViS está ativo:
# netstat -tap | grep amavis (ou ainda: netstat -tapun | grep amavis )
tcp 0 0 localhost.localdo:10024 *:* OUÇA 24341/amavisd-new (
tcp 0 0 localhost.localdo:10026 *:* OUÇA 24341/amavisd-new (

# ps -A | grep amavi
28142 ? 00:00:00 /usr/sbin/amavi
28167 ? 00:00:00 /usr/sbin/amavi
28168 ? 00:00:00 /usr/sbin/amavi

# /etc/init.d/amavis status -l
● amavis.service - LSB: Starts amavisd-new mailfilter
Loaded: loaded (/etc/init.d/amavis)
Active: active (running) since Ter 2017-09-12 21:45:18 -03; 1h 22min ago
Process: 28123 ExecStop=/etc/init.d/amavis stop (code=exited, status=0/SUCCESS)
Process: 28130 ExecStart=/etc/init.d/amavis start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/amavis.service
├─28142 /usr/sbin/amavisd-new (master)
├─28167 /usr/sbin/amavisd-new (ch3-avail)
└─28168 /usr/sbin/amavisd-new (ch2-avail)

# telnet 127.0.0.1 10024
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready

# telnet 127.0.0.1 10026
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready

Obs: <quit> para sair

Parar/reiniciar/status e outros:
# /etc/init.d/amavis stop|start|restart|debug|status

c) logs:
Por padrão os arquivos de logs do AMaViS está em: /var/log/mail.log

5. Interface com o Postfix

a) Configurar o servidor smtp (postfix) para enviar os emails a serem filtrados. Deve-se instruir o Postfix para enviar os emails para o amavisd-new, o que é feito no ficheiro /etc/postfix/main.cf inserindo as seguintes linhas:
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

b) Configurar no Postfix o serviço para recebimento dos emails filtrados do amavisd-new, o que é feito no ficheiro /etc/postfix/master.cf:

amavis unix - - - - 2 smtp
      -o smtp_data_done_timeout=1200
      -o smtp_send_xforward_command=yes
      -o smtp_bind_address=

Onde:

  • unix: acessível para clientes locais apenas;
  • 2: número de instãncias simultâneas (que estará sendo programada no próprio arquivo de configuração do AMaViS para ouvir as portas 10024 e 10026).
  • smtp: comando a ser executado.

c) Reiniciar o postfix
# systemctl restart postfix

d) Entendendo um pouco mais

    • os arquivos main.cf e master.cf definem como as instâncias do postfix se conectarão aos serviços (amavis, dovecot, smtpd, smtps….), bem como define qual o programa daemon executará quando um serviço é solicitado.
    • verificar que os serviços estão funcionando:
# netstat -tap | grep 1002
   tcp    0   0 localhost.localdo:10023 *:*    OUÇA     850/postgrey.pid --
   tcp    0   0 localhost.localdo:10024 *:*    OUÇA     14157/amavisd-new (
   tcp    0   0 localhost.localdo:10025 *:*    OUÇA     24488/master    
   tcp    0   0 localhost.localdo:10026 *:*    OUÇA     14157/amavisd-new (
   tcp    0   0 localhost.localdo:10027 *:*    OUÇA     24488/master 
    • verificar que o amavisd-new aceita ligações:

# telnet 127.0.0.1 10024
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host
.

    • verificar que o postfix pode receber de volta os emails filtrados:

# telnet 127.0.0.1 10025
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 luna1016.startdedicated.com ESMTP Postfix (Debian/GNU)
quit
221 2.0.0 Bye
Connection closed by foreign host.

  • Próximo passo: fazer a instalação e configuração dos filtros.

6. Alguns comandos úteis do Postfix
Listamos a seguir alguns comandos úteis para administração das filas de mensagens do MTA Postfix.

Comando Descrição
mailq Visualizar a fila de mensagens do postfix
postfix flush Reenviar todos os emails da fila de mensagem, esvaziando o buffer.
postcat -vq message_id Visualizar o conteúdo de determinada mensagem.
postsuper -d message_id Deletar uma mensagem da fila.
postsuper -d ALL Deletar todas as mensagens da fila do Postfix.
qshape deferred Mostra a fila de mensagens deferred.
Ferramenta de configuração do Postfix:
postconf
postconf -n
postconf -e parâmetro=valor
Mostra todos os parâmetros.
Exibe os parâmetros não padrão.
Adiciona um novo parâmetro no final do arquivo.
postque -i message_id Iniciar a entrega imediata de uma mensagem da fila deferred.
postqueue -s nome_dominio Iniciar a entrega imediata de mensagens na fila para um domínio especifico.
qshape active Mostra o conteúdo da fila active.
qshape incoming Mostra o conteúdo da fila incoming.
qshape hold Mostra o conteúdo da fila hold.
qshape deferred Mostra o conteúdo da fila deferred.
qshape -s Mostra os domínios de destino.

 

Para enviar email direto pelo prompt:
$ mail “conta_de_email” <Enter>
Subject: meu assunto  <Enter>
corpo_da_mensagem  <Enter>
Para sair, pressione CTtrl + D.

7. Cuidados especiais:
Inicialize os daemons do ClamAV e do AMaViS e reinicialize o Postfix:

# /usr/local/sbin/clamd
# /usr/local/sbin/amavisd
# postfix reload

A seqüência de inicialização deverá ser preferencialmente esta, visto que o Postfix dependerá do AMaViS, e este do ClamAV, para fazer a verredura dos e-mails. Verifique os arquivos de log, para ver se todos os daemons estão funcionando corretamente.

7. Outras verificações de serviços de rede
# ps -A | grep fail2ban
# ps -A | grep dovecot
# ps -A | grep freshclam

 

Links:
1- PostfixAmavisNew
2- Proteção contra Vírus no Postfix
3- Manual postfix
4- sobre o DKIM
5- Controlando as filas do postfix
6- Manual comando qshape do Postfix
7- Manual comando postsuper do Postfix
8- Postfix FAQ

1) Introdução
Testamos este post na versão 7 do Debian (“wheezy”), e Mediawiki versão 1.19.20.

2)Instalar o MediaWiki (parte-1)

#apt-get install mediawiki

Esse comando instalará:
– apache2;
– mysql;
– php5;
– mediawiki,

e seus conjuntos de arquivos associados. Quando da instalação, será formulada a pergunta de qual a senha desejada para ser definida para o administrador do banco de dados MySQL (atenção: não tem nada haver com usuário root do S.O.; este usuário administrador do banco de dados será criado automaticamente na tabela mysql.user.). Veja abaixo:

Pedido de senha para usuario root MySQL

Após a execução do comando acima, o mediawiki estará disponível nas seguintes pastas (e subpastas):

  • /etc/mediawiki
  • /var/lib/mediawiki/ : contém, basicamente, links simbólicos para /usr/share/mediawiki
  • /usr/share/mediawiki/ : principal pasta. Onde estão os arquivos com o código do mediawiki

3) Uma primeira mensagem de alerta do Apache
Logo após a instalação do Apache, quando da execução do comando de recarregar a configuração do Apache (# /etc/init.d/apache2 reload) ou comando de reiniciar (# /etc/init.d/apache2 restart), uma primeira mensagem de alerta aparece:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Isso normalmente pode ser ignorado, pois não impede o bom funcionamento do Apache. Mas aquela mensagem significa que o daemon do Apache (httpd) não conseguiu obter um nome de host totalmente qualificado, fazendo uma pesquisa inversa no seu servidor de endereço IP. Uma alternativa simples para evitar estas mensagens é especificar “ServerName 127.0.0.1” no contexto do servidor global da configuração. Por exemplo, criando o arquivo /etc/apache2/conf.d/servername.local , tendo como conteúdo:

ServerName 127.0.0.1

4) Verificações básicas
a) verificar se o Apache está funcionando
Verificar se o servidor de páginas Apache está ativo, na forma exemplificada abaixo:
# ps -A | grep apache2
7561 ? 00:00:00 apache2
7706 ? 00:00:00 apache2
7707 ? 00:00:00 apache2
7708 ? 00:00:00 apache2
7709 ? 00:00:00 apache2
7710 ? 00:00:00 apache2

Acessar também a url http://localhost/ , onde uma página muito simples deverá ser mostrada no navegador, como esta abaixo (referente ao código em /var/www/index.html):
Tela inicial do Apache quando instalado

Dicas:
– para acompanhar as mensagens de erro do Apache, normalmente estas se encontram no arquivo /var/log/apache2/erro.log (quem define qual arquivo de erro é a variável ErrorLog, definida em /etc/apache2/apache2.conf).

– se desejar uma cópia local do manual da versão em uso do servidor de páginas Apache, fazer:
#apt-get install apache2-doc
Com isso, ao acessar a url http://localhost/manual/ teremos a documentação do Apache mostrada, como abaixo ilustrado:
Tela inicial do Manual do Apache

b) verificar se o PHP está funcionando
Criar o arquivo /var/www/index.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Reiniciar o Apache:
# /etc/init.d/apache2 restart

Agora, acessar o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP foram instalados corretamente e estão funcionando. Veja um exemplo de um pedacinho da página que deverá ser mostrada:

Tela de teste do funcionamento do interpretador PHP

c) verificar se o MySQL está funcionando.
Verificar se o processo MySQL server foi iniciado e está “ativo”:

$ ps -A | grep mysql
7391 ?        00:00:00 mysqld_safe
7720 ?        00:00:13 mysqld

Para ter acesso ao banco do MySQL, utilizar o seguinte comando:
$ mysql -u root -p
Este comando é destinado a fazer a autenticação no banco de dados MySQL. Será solicitado a senha do usuário “root” (que neste momento é o usuário administrador do MySQL) de acesso ao banco que fora definida anteriormente na instalação. Forneça a senha, conforme definida naquele momento da instalação.

Dicas:
– verificar se o servidor MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-server
– verificar se o client MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-client
– estando autenticando do servidor MySQL, são úteis os seguintes comandos básicos:
* status do banco: mysql> status;
* base de dados existentes: mysql> show databases;
* selecionar uma base de dados (exemplo: a BD mysql): mysql> use mysql;
* listar as tabelas de uma BD (que fora anteriormente selecionada): mysql> show tables;
* verificar os usuários existentes:


mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| User             | Host      | Password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | ::1       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| debian-sys-maint | localhost | *BEB671E4F154411B71BEEDA86385600449ED3346 |
+------------------+-----------+-------------------------------------------+

Neste caso, fora o próprio sistema operacional, apenas usuário do BD chamado “root” pode ter acesso, fornecendo senha, e partindo do própria máquina.
* para outros comandos do BD MySQL veja o post Tutorial MySQL.

5) Instalar o MediaWiki (parte-2)
5.1 Liberar acesso inicial para parametrizar o mediawiki
Editar o arquivo da configuração do Apache em /etc/mediawiki/apache.conf e remover o sinal de comentário ‘#’ presente na sua terceira linha, ficando desta forma:
Alias /mediawiki /var/lib/mediawiki
Reiniciar o Apache:
# /etc/init.d/apache2 restart

Obs: observar que existe o arquivo /etc/apache2/conf-available/mediawiki.conf com as diretivas de configuração para o Apache achar o mediawiki.

Nesse momento, já é possível acessar a página inicial do Mediawiki para iniciar seu processo de configuração. Ao acessar a url http://localhost/mediawiki/ a seguinte página deverá ser mostrada:
Tela inicial do Midiawiki, para iniciar sua configuração

5.2 Iniciar a parametrização do mediawiki
Clicar no link mostrado na figura anterior e iniciar a parametrização do Mediawiki. Algumas dicas úteis:
– nome do utilizador da base de dados: informar o nome do usuário já criado na BD do MySQL que será usado para ter acesso à BD durante o processo de instalação. Este usuário não é o do MediaWiki, e sim de um usuário da base de dados.
– conta de administrador, seu nome: o seu nome, por exemplo, “Joao Beltrao”. Este é o nome que irá utilizar para entrar na wiki.
– sobre o arquivo LocalSettings.php: automaticamente será gerado um arquivo de configuração que será disponibilizado ao usuário que está instalando o mediawiki. Salve este arquivo e coloque-o na mesma pasta do arquivo index.php do mediawiki (no caso deste post, esta pasta após iniciar os dois links simbólicos é a /etc/mediawiki/ .

Pronto, acesse a url http://localhost/mediawiki/ e observe que o Mediawiki estará funcionando normalmente. Faça o login através do usuário que fora criado (no caso, “Joao Beltrao”). Bom uso.

5.3 Parametrizações do arquivo LocalSettings.php
Este arquivo permite um grande número de parametrizações. Algumas dicas (no caso, acrescentar ao final do arquivo as seguintes linhas:
$wgGroupPermissions['*']['edit'] = false;
$wgLocalTZoffset = -180;
$wgGroupPermissions['*']['createaccount'] = false;

A primeira linha acima serve para evitar que usuários anônimos possam modificar o conteúdo do Wiki; a segunda linha para que o Wiki utilize o mesmo fuso horário do usuário no momento de uma edição (horário brasileiro: -3 horas = -180 minutos); a terceira linha desabilita a criação de novos usuários pelos próprios internautas, tarefa que será feita exclusivamente pelo administrador do wiki.

Se desejar, fazer:
$wgGroupPermissions['*']['read'] = false;
Com isso, só é permitido a leitura do wiki por usuários logados no wiki.

Obs: o logo do wiki é definido pela variável “$wgLogo” que por padrão está apontando para /usr/share/mediawiki/skins/common/images/wiki.png. Recomenda-se que se utilize uma figura com fundo transparente de 135×135 pixels. Uma rápida modificação dessa imagem visualizada nesta instalação, apenas altere o valor da variável “$wglogo” que está apontando para a imagem “wiki.png”, deixando-a apontando para a imagem “mediawiki.png” (que está na mesma pasta).

5.4 Dica de segurança
Caso o mediawiki for instalado em uma área pública, cuidado deve-se ter quanto a proibição do acesso de usuários ao arquivo de configuração. Assim, quando for esse o caso, a alteração da permissão do arquivo /etc/mediawiki/LocalSettings.php seria recomendável:

# chmod 600 LocalSettings.php
# chown www-data:www-data LocalSettings.php

Isto fará com que este arquivo não fique visível a outros usuários. É uma medida de segurança.
Se a configuração de segurança fora feita com sucesso, ao acessar a url http://localhost/mediawiki/LocalSettings.php uma página em branco ou uma página de erro deve ser mostrada.

5.5 Uma verificação da base de dados após mediawiki estar instalado
Para isso, faça a autenticação na base de dados. Assim:
a) verificar as bases de dados
Caso o nome da base de dados escolhida na instalação do wiki tenha sido “my_wiki”, tem-se:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| performance_schema |
+--------------------+

b) verificar as tabelas criadas para o wiki
Após chavear para a base de dados “my_wiki”, e durante a instalação do wiki escolheu-se “prefixo” para o nome dos prefixos das tabelas relativas as bases de dados do wiki, tem-se:

mysql> show tables;
+---------------------------+
| Tables_in_my_wiki         |
+---------------------------+
| prefixoarchive            |
| prefixocategory           |
| prefixocategorylinks      |
| prefixochange_tag         |
          .
          .
          .

5.6 Testar o funcionamento do mediawiki como um todo
Agora que o mediawiki está instalado, é hora de testar os passos executados. Pelo menos, teste as seguintes facilidades:

– edição de página;
– criação de página;
– criação de usuário.

5.7 Acessar o Mediawiki de outras máquinas
Para isto, basta alterar o valor da variável wgServer do arquivo LocalSettings.php: em vez de localhost (que é o default), coloque o IP de sua máquina. Exemplo:
$wgServer ="http://192.167.34.25";

6) Dicas adicionais para aqueles que desejam criar um domínio próprio para o wiki
A partir desse ponto, são dicas adicionais e não há obrigatoriedade de seguir para deixar o Mediawiki funcionando.

Copiar os apontadores do Mediawiki (e mais algumas pastas adicionais) para o diretório raiz do Apache

# cp -a /var/lib/mediawiki/ /var/www/wiki

6.1) Preparar o ambiente antes de continuar a instalação do Mediawiki

6.1.1) escolher um nome de domínio para acessar o mediawiki. Por exemplo: http://www.meuwiki.com
6.1.2) criar uma entrada no Apache para o novo domínio meuwiki
a) Criar um arquivo em /etc/apache/sites-available, por exemplo de nome ‘meuwiki’, com o seguinte conteúdo:

<VirtualHost *:80>
ServerName http://www.meuwiki.com
DocumentRoot /var/www/wiki
</VirtualHost>

obs: para facilitar, faça uma cópia do arquivo ‘default’ para o ‘meuwiki’, e edite suas diretivas.

b) Habilitar o dominio virtual

#a2ensite meuwiki

c) caso o novo domínio esteja hospedado na mesma máquina que o usuário esteja usando, crie uma entrada em /etc/hosts:

127.0.0.1 http://www.meuwiki.com

6.2) Recarregar o Apache com as novas configurações

# /etc/init.d/apache2 reload

6.3) Complementar a instalação do Mediawiki pelo navegador
Na caixa de endereços de URL do navegador, digitar o endereço do Mediawiki e complementar sua instalação. O acesso ao Mediawiki deve ser pelo nome do domínio escolhido (isso é MUITO IMPORTANTE!!!, para que a instalação fique correta e o Mediawiki acessível de qualquer máquina da rede):

http://www.meuwiki.com

A tela mostrada é para iniciar a configuração do Mediawiki, pois ainda o arquivo de configuração LocalSettings.php ainda não fora criado na pasta /etc/mediawiki/. Este arquivo será criado quando for terminado o processo de complementação da instalação do mediawiki, realizado pelo usuário com o navegador clicando no hiperlink “Set up the wiki” (conforme figura anterior).

6.4) Setup do Wiki
Um exemplo de setup do wiki:

Wiki name: “Meuwiki”
Admin username: “wikiadmin”
Password: <senha_do_wikiadmin>
Databasehost: “10.200.70.5:3306” ou “localhost” (se base dados em outra máquina ou na mesma em que fora instalado o wiki, respectivamente)
DB name: “db_meuwiki”
DB username: “adm_wiki”
DB password: <senha do DB admin>
Database table prefix: “meuwiki_”
Storage Engine: “InnoDB”
Database character set: “MySQL4.1/5.0 UTF-8”

Após executar este “setup”, será criado o banco de dados “db_meuwiki“, e a tabela “mysql.user” terão os seguintes usuários criados:

User Host Password
adm_wiki % *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost.localdomain *07C2A823749F8D68A9758F74DDDC945DE57873F6

 

6.5) Disponibilizar o arquivo LocalSettings.php gerado na sua pasta definitiva
Após ter clicado no link “set up the wiki”, conforme mostrado na figura acima, respondido as questões apresentadas pelo aplicativo e, ao final, ter obtido uma mensagem de sucesso, complemente a instalação do Mediawiki disponibilizando este arquivo na sua pasta definida (a mesma que contém o arquivo com o código inicial do midiawiki – “index.php”). Na instalação exemplificada neste post, a pasta seria /var/lib/mediawiki:

# mv LocalSettings.php /var/lib/LocalSettings.php

Agora, garanta a segurança necessária ao ambiente:
# chmod 600 /var/lib/LocalSettings.php
# chown root:root /var/lib/LocalSettings.php

Links uteis:
1- Instalação do MediaWiki em sites pessoais em WebHostings
2- Instalação do MediaWiki no Debian Etch
3- Instalação do MediaWiki em sites pessoais em WebHostings
4- Instalando Apache+PHP+MySQL no Linux/Debian
5- Tutorial MySQL ( instalar em ambiente Linux – Debian )
6- Configurar domínios virtuais do Apache em máquina Linux/Debian
7- Instalar e configurar Módulos do Apache2 no Debian

Ao instalar uma imagem Debian (a que eu usei foi a versão 8 do Debian – “jessie”) no lap-top Lenovo E430 ThinkPad, nos deparamos com o problema da interface wifi não funcionar. Durante a instalação do Debian já temos a mensagem de que faltavam os firmwares rtl8168e-3.fw e bcm43xx-0.fw.

Para deixar a interface wifi funcionando precisamos instalar drivers proprietários (infelizmente!). Para isso, proceder assim:

a) Indicar os repositórios não livres
Adicionar as sessões de repositórios “contrib” e “non-free” na lista de repositórios (arquivo /etc/apt/sources.list). Um bom exemplo pode ser o seguinte arquivo sources.list:

deb http://ftp.br.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.br.debian.org/debian/ jessie main
#
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main
#
# jessie-updates, previously known as 'volatile'
deb http://ftp.br.debian.org/debian/ jessie-updates main
deb-src http://ftp.br.debian.org/debian/ jessie-updates main

b) Instalar o firmware
Instalar 3 (três) pacotes, conforme abaixo mostrados através da figura:
Pacotes com firmware broadcom

Referências:
1- Lenovo ThinkPad Edge E530
2- Debian: Lenovo Thinkpad Edge e530 – Drivers Wifi
3- Listagem de dispositivos wireless devices com informação sobre o seu chipset, e se são suportados em Linux

4- Instalar driver de Wifi no laptop HP Pavilion dv2040 usando Debian
5- Entendendo melhor como funcionam os drivers em máquinas Linux

1. Introdução
Youtube mudou a maneira com que passou armazenar os vídeos de alta qualidade, o que tornou mais difícil para baixá-los (mesmo utilizando o aplicativo Youtube-dl). O vídeo e o áudio estão agora em arquivos separados DASH. Os dois streams podem ser combinados através do aplicativo FFMpeg, que será providenciado por um script indicado neste post (script este que utilizará o Youtube-dl).

Uma dificuldade adicional neste momento para quem utiliza a distribuição Debian (Debian 6 Wheezy) é que o Youtube-dl não está empacotado nessa versão da distribuição.

Uma boa descrição de todo este processo pode ser visto através do vídeo tutorial em Youtube-DL fix to download HD1080P Videos.

2. Baixar o youtube-dl
O youtube-dl é um pequeno programa de linha de comando para fazer downloads de vídeos do YouTube.com e de alguns poucos outros síteos. No momento deste post, ele requer o interpretador Python (2.6, 2.7, ou 3.2+), e ele não é específico de nenhuma plataforma. O youtube-dl é liberado em domínio público, o que vem a permitir que ele seja modificado, redistribuído e utilizado na forma que o usuário desejar.

# curl https://yt-dl.org/downloads/2013.09.24.2/youtube-dl -o /usr/local/bin/youtube-dl
# chmod a+x /usr/local/bin/youtube-dl

obs:
– na forma acima, espera-se que este script Python não tenha falhas de segurança.
– a versão do youtube-dl que testei é a descrita acima. A última versão deste script está sempre em: https://yt-dl.org/latest/youtube-dl

3. Baixar o script para combinar os streams de vídeo e áudio
$ wget quidsup.net/sh/ytdl.sh

Para testar o script, verificar:
$ bash ytdl.sh
Usage: ytdl.sh url

4. Baixar arquivos de alta resolução desejados
$ bash ytdl.sh  <url do video>

Exemplo de interação:


$ bash ytdl.sh http://www.youtube.com/watch?v=G7uztVbg7CQ
 Setting language
 G7uztVbg7CQ: Downloading video webpage
 G7uztVbg7CQ: Downloading video info webpage
 G7uztVbg7CQ: Extracting video information
Available formats:
22	:	mp4	[720x1280]
18	:	mp4	[360x640]
43	:	webm	[360x640]
5	:	flv	[240x400]
36	:	3gp	[240x320]
17	:	3gp	[144x176]
137	:	mp4	[1080p] (DASH Video)
248	:	webm	[1080p] (DASH Video)
136	:	mp4	[720p] (DASH Video)
247	:	webm	[720p] (DASH Video)
135	:	mp4	[480p] (DASH Video)
244	:	webm	[480p] (DASH Video)
134	:	mp4	[360p] (DASH Video)
243	:	webm	[360p] (DASH Video)
133	:	mp4	[240p] (DASH Video)
242	:	webm	[240p] (DASH Video)
160	:	mp4	[192p] (DASH Video)
140	:	mp4	[128k] (DASH Audio)
171	:	webm	[128k] (DASH Audio)
...
Quality for Video (default 137): 137
Quality for Audio (default 141): 140

5. Extrair o áudio do filme
Muitas vezes desejamos extrair o áudio de um filme. Existem algumas formas de fazer isso, onde exemplificamos abaixo 3 maneiras. Escolha a mais conveniente.
a) Maneira 1
# apt-get install libav-tools
$ avconv -i arquivo_video.mp4 arquivo_audio.mp3

Obs: o aplicativo avconv integra o pacote libav-tools.

b) Maneira 2
$ mplayer -dumpaudio nome_do_filme.mp4 -dumpfile audio.mp3

c) Maneira 3
$ mplayer -vo null -hardframedrop -ao pcm:file=audio.wav nome_do_filme.mp4