Boas práticas de segurança básica em SO Linux
Por Eden Caldas : www.linuxfacil.org
Aumentando a segurança do Linux
- Use senhas fortes, exemplo: no mínimo –> LETRA,LETRA,letra,letra,num,num,simb,simb ( 8 caracteres);
- Rode o mínimo de serviços possíveis:
- Rode apenas os serviços necessários para realizar a tarefa desejada;
- Para descobrir os serviços em execução digite: netstat –plantu;
- Finalize os serviços usando /etc/init.d ou kill;
- Desinstale-os usando seu gerenciador de pacotes da distribuição ou remova caso tenha sido instalado independentemente;
- Utilize uma distribuição destinada a grandes implementações (UBUNTU LTS, CENTOS, RED HAT, SUSE ENTERPRISE, DEBIAN, SLACKWARE, GENTOO);
- Mantenha essa distribuição sempre atualizada apt-get update && apt-get upgrade;
- Dimensione bem seus seguimentos de rede, separando-os fisicamente, usando DMZ e firewalls;
- Não faça quebra galhos. Ex ( “ Já que esse servidorzinho web em nossa LAN está funcionando tão bem, vamos torna-lo externo para facilitar o acesso de casa ” );
- Não confie cegamente no software, mesmo no linux! (ex: Colocar serviços web, dns, smtp, proxy no firewall confiando no iptables e na configuração de cada serviço);
- Não coloque suas aplicações na internet, e sim uma forma segura de acessar as aplicações. (ex: Não abra sua porta de banco de dados para um DBA remoto, forneça uma conexão ssh);
- Evite usar VPN que dá acesso em sua rede local. Faça-o somente quando não tiver alternativas e quando realmente for necessário;
- Cuidado com ex-funcionários! (desabilite ou delete as contas não utilizadas);
- Utilize firewall local;
- Faça LOG! (Habilite-o ou mantenha habilitado);
- Utilize IDS (Sistema de detecção de intrusosou também conhecido como Sistema de detecção de intrusão em inglês: Intrusion detection system - IDS);
- Utilize IPS (Intrusion Prevention System ou Sistema de Prevenção de Intrusão);
- Blindando o SSH:
“AllowUsers fulano sicrano beltrano”
“AllowGroups admin dba suporte”
16.Usando o Squid:
Instale-o no seguimento de rede que necessita do serviço de proxy;
-
- Utilize “http_port ip:porta” no arquivo de configuração squid.conf, ex: http_port 192.168.0.254:3128
- Utilize autenticação.
- Faça as regras de acordo com as normas da empresa. Quando possível, evite exceções.
- Configure o Iptables ( firewall nativo do Linux):
- Defina todas as regras padrão como DROP;
- Evite spoof de endereços, informe sempre as interfaces que o tráfego precisará usar para passar. Ex: iptables -A INPUT -s 192.168.0.0/24 -p tcp –dport 3128 -j ACCEPT
- Ficaria melhor desta forma: iptables -A INPUT -s 192.168.0.0/24 -i eth1 -p tcp –dport 3128 -j ACCEPT
- Utilize a tarefa LOG do iptables (assim ragistra-se os bloqueios e liberações ocorridos);
- Adicionando Segurança no Postfix e Dovecot:
- MTA – Mail Transfer Agent. Envia mensagens. Implementado pelo SMTP. Neste caso o Postfix.
- MDA – Mail Delivery Agent. Recebe a mensagem do MTA e entrega no mailbox do usuário. Exemplos, Procmail, maildrop, dovecot lda. (Configuração opcional);
- MUA – Mail User Agent. Programa cliente de e-mail usado para se conectar em servidores smtp, pop, imap para envio e recebimento de mensagens.
- Dicas de segurança:
- Não anuncie a versão do POSTFIX;
- Preferencialmente não utilize nomes triviais para seus servidores de e-mail. Ex: mail, mx, correio, email.
- Use autenticação, criptografia, e restrinja redes que podem usar seu servidor.
- Cheque listas negras para impedir spam de entrar no MUA de seus usuários.
- Não permita que a rede local tenha acesso à porta 25 TCP na internet. Evite exceções.
- Cheque o DNS reverso do smtps que fazem conexão com seu servidor.
- Use greylist (lista cinza)
- Lembre-se que o servidor passará igualmente por todas esses filtros quando tentar entregar mensagens na internet, então configure-o corretamente.
- Lembre-se que o servidor de e-mail e DNS estão interligados.
- Configure seu DNS corretamente, fechando o máximo possível.
- Seu servidor smtp precisa ter registros MX, A, PTR no DNS.
- Cheque a configuração de sua zona na internet utilizando DNS Reports na internet.
- DNS com BIND9:
- Entenda que DNS local e DNS externo têm propósitos diferentes.
- O DNS externo visa responder ao mundo consultas DNS a respeito de sua zona de internet. (ex: linuxfacil.org, especializa.com.br)
- O DNS local visa responder à sua rede local consultas a respeito de hosts em sua rede local e possívelmente hosts na internet. (ex: lab3-01, lab3-02, www.uol.com.br, www.google.com)
- Por padrão o BIND9 já é um resolvedor de consultar recursivas, ou seja, ele não tem nenhuma zona sua configurada e vai perguntar aos DNS raiz sobre toda consulta que seu computador fizer (ex: quem é www no domínio google.com ?)
- É interessante então, que esse servidor fique no mesmo seguimento de rede da LAN. Caso seu proxy tenha recurso disponível, ali seria um bom local para coloca-lo.
- Para restringir acesso ao DNS em apenas alguma rede, faça o seguinte: No arquivo /etc/bind/named.conf.options, faça:
- allow-query { endereço }; allow-recursion{ endereço };
- A primeira linha define os endereços que podem consultar o DNS
- A segunda define mesma coisa apenas para consultar recursivas
- Endereço pode ser um endereço ip de host ou de rede separados por ponto e vírgula. Ex: allow-transfer { 192.168.2.7; 192.168.22.0/24;};
- Transferências de zona também são perigosas, assim qualquer host pode fazer download do arquivo de zona e saber a informação de nome/ip de toda a rede do qual o DNS conhece.
- Na rede local isso não oferece problemas graves porém na internet isso não é desejável.
- Um DNS externo, deve, na maioria dos casos, responder consultas apenas sobre sua zona, não responder consultar recursivas nem oferecer sua lista completa de hosts para qualquer um.
- No arquivo /etc/bind/named.conf.options:
allow-recursion { 127.0.0.1; };
allow-recursion { 127.0.0.1; 192.168.0.0/24; };
allow-transfer { none; };
allow-transfer { 172.16.0.33; };
A primeira linha permite consultas recursivas apenas feitas pelo próprio servidor DNS. A segunda permite a rede local também fazer o mesmo. A terceira, desabilita a transferência de zonas. A quarta libera a transferência para um DNS slave no IP informado.
- É possível também configurar o DNS para fazer consultas recursivas encaminhando para um outro DNS, evitando assim ter que ir perguntar para um Servidor DNS raiz. No arquivo /etc/bind/named.conf.options:
forwarders { 8.8.8.8; 8.8.4.4; };
forward ( first );
forward (only );
A primeira linha informa os IPs dos servidores DNS que serão consultados. A segunda define que nosso servidor DNS vai encaminhar a consulta primeiro, caso não obtenha resposta, vai tentar ele mesmo resolver com os servidores raiz. A terceira define para apenas fazer o encaminhamento da consulta e pronto, não tentar mais nada.
- Aumentando a segurança do Apache2:
- Esconder a versão do apache
- Habilitar criptografia em certos sites.
- Restringir sites a certos IPs
- Restringir sites com senhas geradas pelo comando htpasswd
- Importante: Instale pelo repositório o apache / php / mysql e tudo mais que vá se integrar ao apache.
- Mais importante ainda: A programação dos sites que serão hospedados também deve utilizar boas práticas! Exemplo (ex: De nada adianta a segurança do servidor se o site em php permite SQL Injection, ou se o site programado requer, para funcionar, permissão 777 nos diretórios);
- Removendo o anúncio de versão do apache e seus módulos suportados: No arquivo /etc/apache2/conf.d/security, trocar para as seguintes opções:
ServerSignature Off
ServerTokens Prod
- Para descobrir a versão de um servidor apache, use telnet na porta 80: telnet servidor 80 HEAD / HTTP/1.0
- Proteja com senha alguns diretórios: htpasswd -c /etc/apache2/ .htpasswd fulano
- Entre no diretório onde quer proteger com senha e crie o arquivo .htaccess com o conteúdo: AuthUserFile /etc/apache2/.htpasswd AuthType Basic AuthName "Site Protegido por senha" Require valid-user
- Caso precise proteger apenas uma página: AuthUserFile /full/path/to/.htpasswd AuthType Basic AuthName "Página Protegida por senha" <Files "mypage.html"> Require valid-user </Files>
- Restringindo por endereço de rede:
No arquivo de configuração do site:
Order Deny,Allow Deny from all Allow from 176.16.0.0/16
Ou por IP de host:
Order Deny,Allow Deny from all Allow from 127.0.0.1
- Adicionar o suporte a https no debian/ubuntu é mais fácil, pois os arquivos de configuração já estão todos prontos, basta habilitar o módulo e o site padrão: a2enmod ssl a2ensite default-ssl /etc/init.d/apache2 reload
- Pronto, agora seus usuarios já podem acessar por exemplo, seu webmail, por uma conexão criptografada. Lembrando que o certificado usado é o padrão do debian / ubuntu, que apresentará aquela mensagem no navegador informando que “o certificado não pôde ser reconhecido”.