O que pode ser feito para proteger o servidor Ubuntu?

35

Eu tenho um projeto para proteger o Ubuntu Server o máximo possível. O servidor é um servidor de hospedagem na web. O servidor estará executando LAMP, Mail e DNS.

One Zero
fonte
Quais serviços estarão em execução?
Wojox
LAMP, Mail, DNS
Um Zero
Eu fiz uma folha de dicas do Ubuntu Server e gostaria de compartilhá-la com você. As primeiras páginas são comandos linux gerais, pacotes de servidores específicos e a última página é uma lista de verificação de segurança do servidor. A lista de verificação reúne dicas e reforços de muitos sites. Espero que ajude você! Licenciado sob a licença WTFPL . Você pode visualizar / baixar / qualquer que seja a lista de verificação aqui . Eu atualizo de vez em quando.
Noah Krasser

Respostas:

43

Aqui está uma lista de coisas que faço para proteger meu servidor.

  1. Ative UFW ( sudo ufw enable) e, em seguida, permita apenas portas que são realmente usadas. ( sudo ufw allow 80)
  2. Certifique-se de que o MySQL permita apenas conexões do host local.
  3. Habilite o TLS nos serviços de correio. Mesmo que seja um certificado autoassinado. Você não deseja que as senhas sejam enviadas de forma clara.
  4. Instale bloqueadores ssh bruteforce como denyhosts ou fail2ban. ( sudo apt-get install denyhosts)
  5. Procure criar apenas logins baseados em chave ssh.
  6. Aprenda AppArmor. Se você usa configurações razoavelmente completas, é extremamente fácil. Apenas verifique se está ligado. Isso ajudará a reduzir as explorações de dia zero.
  7. Dependendo do acesso físico ao servidor, você pode até querer criptografar os dados no disco rígido.
  8. Siga outras recomendações neste link. EDIT: esqueci de editar isso quando não tinha reputação suficiente para adicionar mais links. O link indicado aqui é o último link abaixo.
  9. Nunca confie em seus usuários. Se você estiver tendo vários usuários com acesso ao sistema, bloqueie-os. Se você precisar dar acesso ao sudo, dê apenas o que eles precisam.
  10. Use o senso comum. Pense bem em como você entraria se estivesse trancado. Depois feche esses orifícios.

Mais algumas coisas a considerar. A maioria das pessoas esquece do acesso físico. Todas as configurações de software do mundo não significam nada se eu puder entrar fisicamente com um LiveCD e roubar seus dados. Cuidado com a engenharia social. Faça perguntas para verificar quem está ao telefone e verifique se eles têm autorização para fazer a solicitação que estão fazendo.

Como ainda sou um usuário 'novo', não posso postar mais de dois links. Você pode ler mais sobre este assunto aqui: https://help.ubuntu.com/12.04/serverguide/index.html e prestar atenção especial a https://help.ubuntu.com/12.04/serverguide/security.html

Patrick Regan
fonte
2
Uma alternativa ao uso do UFW (enquanto ainda usa firewalls embutidos no Ubuntu) é bloquear seu sistema com iptablesregras extremamente específicas para impedir o acesso externo a qualquer serviço que você não utilize, se você tiver um problema. configuração de bola que requer roteamento avançado e outras coisas.
Thomas Ward
2
@LordofTime concordou. Na verdade, eu mesmo uso o iptables, mas o ufw é adequado para a maioria das instalações básicas. Além disso, o UFW é mais ou menos apenas um invólucro para as configurações mais comuns de iptables. O sistema subjacente ainda é o mesmo.
Patrick Regan
2
+1 para ufw, você não é um usuário novo, você é membro por 1 ano: p
Tachyons
1
Na verdade, eu só queria salientar que, em certos casos iptables terá uma melhor usabilidade sobre ufw em certos casos
Thomas Ward
1
Considere o BastilleLinux , também é um bom conjunto de proteção de segurança.
pl1nk
13

Memória compartilhada segura

/ dev / shm pode ser usado em um ataque contra um serviço em execução, como httpd. Modifique / etc / fstab para torná-lo mais seguro.

Abra uma janela do terminal e digite o seguinte:

sudo vi /etc/fstab

Adicione a seguinte linha e salve. Você precisará reiniciar para que esta configuração entre em vigor:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Endurecer a rede com configurações sysctl

O arquivo /etc/sysctl.conf contém todas as configurações do sysctl. Impedir o roteamento de origem dos pacotes recebidos e registrar IPs malformados, digite o seguinte em uma janela do terminal

sudo vi /etc/sysctl.conf

Edite o arquivo /etc/sysctl.conf e retire o comentário ou adicione as seguintes linhas:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Para recarregar o sysctl com as alterações mais recentes, digite:

sudo sysctl -p

Evitar falsificação de IP

Abra um terminal e digite o seguinte:

sudo vi /etc/host.conf

Adicione ou edite as seguintes linhas:

order bind,hosts
nospoof on

Endurecer o PHP para segurança

Edite o arquivo php.ini:

sudo vi /etc/php5/apache2/php.ini

Adicione ou edite as seguintes linhas:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Firewall de aplicativos Web - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Proteger contra ataques DDOS (Denial of Service) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Verificar logs e banir hosts suspeitos - DenyHosts e Fail2Ban

@DenyHosts

DenyHosts é um programa python que bloqueia automaticamente ataques SSH adicionando entradas ao /etc/hosts.deny. O DenyHosts também informará os administradores do Linux sobre hosts ofensivos, usuários atacados e logins suspeitos.

Abra um terminal e digite o seguinte:

sudo apt-get install denyhosts

Após a instalação, edite o arquivo de configuração /etc/denyhosts.conf e altere o email e outras configurações, conforme necessário.

Para editar as configurações de e-mail do administrador, abra uma janela do terminal e digite:

sudo vi /etc/denyhosts.conf

Altere os seguintes valores conforme necessário em seu servidor:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

O Fail2ban é mais avançado que o DenyHosts, pois estende o monitoramento de log para outros serviços, incluindo SSH, Apache, Courier, FTP e muito mais.

O Fail2ban verifica os arquivos de log e proíbe os IPs que mostram os sinais maliciosos - muitas falhas de senha, buscando explorações etc.

Geralmente, o Fail2Ban é usado para atualizar as regras do firewall para rejeitar os endereços IP por um período de tempo especificado, embora qualquer outra ação arbitrária também possa ser configurada. Fora da caixa O Fail2Ban vem com filtros para vários serviços (apache, courier, ftp, ssh, etc).

Abra um terminal e digite o seguinte:

sudo apt-get install fail2ban

Após a instalação, edite o arquivo de configuração /etc/fail2ban/jail.local e crie as regras de filtro conforme necessário.

Para editar as configurações, abra uma janela do terminal e digite:

sudo vi /etc/fail2ban/jail.conf

Ative todos os serviços que você gostaria que o fail2ban monitorasse, alterando enabled = false para * enabled = true *

Por exemplo, se você deseja habilitar o monitoramento SSH e banir a prisão, localize a linha abaixo e altere a opção habilitada de falsa para verdadeira . É isso aí.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Se você deseja receber e-mails do Fail2Ban se os hosts forem proibidos, altere a seguinte linha para o seu endereço de e-mail.

destemail = root@localhost

e altere a seguinte linha de:

action = %(action_)s

para:

action = %(action_mwl)s

Você também pode criar filtros de regras para os vários serviços que você gostaria que o fail2ban monitore que não seja fornecido por padrão.

sudo vi /etc/fail2ban/jail.local

Boas instruções sobre como configurar o fail2ban e criar os vários filtros podem ser encontradas no HowtoForge - clique aqui para ver um exemplo

Quando terminar com a configuração do Fail2Ban, reinicie o serviço com:

sudo /etc/init.d/fail2ban restart

Você também pode verificar o status com.

sudo fail2ban-client status

Verifique rootkits - RKHunter e CHKRootKit.

O RKHunter e o CHKRootkit basicamente fazem a mesma coisa - verifique o seu sistema quanto a rootkits. Nenhum dano em usar os dois.

Abra um terminal e digite o seguinte:

sudo apt-get install rkhunter chkrootkit

Para executar o chkrootkit, abra uma janela do terminal e digite:

sudo chkrootkit

Para atualizar e executar o RKHunter. Abra um terminal e digite o seguinte

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Verificar portas abertas - Nmap

O Nmap ("Network Mapper") é um utilitário gratuito e de código aberto para descoberta de rede e auditoria de segurança.

Abra um terminal e digite o seguinte:

sudo apt-get install nmap

Examine seu sistema em busca de portas abertas com:

nmap -v -sT localhost

Digitalização SYN com o seguinte:

sudo nmap -v -sS localhost

Analisar arquivos de log do sistema - LogWatch

O Logwatch é um sistema de análise de logs personalizável. O Logwatch analisa os logs do sistema e cria um relatório analisando as áreas que você especificar. O Logwatch é fácil de usar e funcionará imediatamente na maioria dos sistemas.

Abra um terminal e digite o seguinte:

sudo apt-get install logwatch libdate-manip-perl

Para visualizar a saída do logwatch, use menos:

sudo logwatch | less

Para enviar por e-mail um relatório do watchwatch dos últimos 7 dias para um endereço de e-mail, digite o seguinte e substitua [email protected] pelo e-mail necessário. :

sudo logwatch --mailto [email protected] --output mail --format html --range 'between -7 days and today' 

Audite a segurança do seu sistema - Tiger.

O Tiger é uma ferramenta de segurança que pode ser usada como um sistema de auditoria de segurança e detecção de intrusões.

Abra um terminal e digite o seguinte:

sudo apt-get install tiger

Para executar o tigre, digite:

sudo tiger

Toda a saída do Tiger pode ser encontrada no diretório / var / log / tiger

Para visualizar os relatórios de segurança do tigre, abra um terminal e digite o seguinte:

sudo less /var/log/tiger/security.report.*

Para obter mais ajuda

One Zero
fonte
PHP: magic_quotes_gpc = On. Magic quotes foi primeiro obsoleto e, em seguida, removido: php.net/manual/en/security.magicquotes.whynot.php
Tim
13

Como você disse que este é um servidor de hospedagem na web ... eu gostaria de compartilhar minhas melhores práticas e experiência de 5 longos anos na linha de hospedagem na web.

  1. Pelas minhas experiências passadas, em vez de entrar no inferno imediatamente de configuração, você deve primeiro reunir as uvas baixas de segurança, conforme indicado no artigo fornecido.

  2. Como você está usando o LAMP, você deve ter muito cuidado com o PHP e suas configurações do php.ini. Este é um bom link para proteger o PHP. O PHP possui super poderes que podem se tornar um loop de segurança quando não configurados corretamente.

  3. Você pode usar um trabalho cron para verificar quando seus arquivos foram modificados sem sua permissão e possivelmente hackeados; usando este trabalho cron . Prefiro o Notepad ++ para comparar os resultados do cron (baixe diretamente o email do cron do seu servidor da web e abra no Notepad ++).

  4. Se você deseja instalar algum SEM, o cPanel é o melhor preferido (no entanto pago). Webmin e zpanel são muito boas alternativas gratuitas. O Webmin é melhor, pelo menos usa certificados autoassinados e adiciona segurança.

  5. Se você quiser que algo funcione imediatamente, você pode optar pelo Turnkey Linux. É baseado no Ubuntu, extremamente fácil de implementar e flexível para suas necessidades. Com muito pouco esforço, você obtém segurança imediata. Esta é a sua pilha LAMP . Eu pessoalmente uso e prefiro isso apenas.

  6. Se você estiver começando do zero, também poderá instalar o ISPconfig3. Instrução Aqui .

  7. você pode testar sua segurança tentando penetrá-la usando o Back-Track-Linux .

  8. mantenha senhas longas e aleatórias complexas . Não os guarde no PC. escreva-os. Use um CD ao vivo para acessar esses logins.

  9. obtenha um software de proteção de força bruta como o fail2ban.

  10. Não execute os daemons que você não precisa.

  11. Bloqueie todas as portas desnecessárias . tenha muito cuidado com a porta SSH (22).

  12. Obtenha um IP estático no sistema através do qual você gerenciará o servidor. Faça a maioria das coisas do bloco IP e permita apenas que seu IP específico acesse esses locais de configuração como a porta 22.

No final do dia ... trabalhe com total tranqüilidade, não se emocione com a instalação e aplicar o bom senso leva muito além.

**My heartiest best wishes to you. good luck.**
Bhavesh Diwan
fonte
1
O PHP também pode ser perigoso ao confiar na entrada do usuário (injeção de sql, por exemplo).
NoBugs
@ NoBugs Concordo absolutamente com este ponto. Não é possível compactar tudo em uma única resposta. Minha resposta contém muitos hiperlinks e, como tal, esses sites que contêm essas páginas são realmente muito úteis. Espero que minha resposta e links incluídos ajudar a comunidade :)
Bhavesh Diwan
2
# 9: Não, as senhas ramdom são ruins, a chave está no comprimento , ou seja. "D0g ....................." é mais forte que "PrXyc.N (n4k77 # L! EVdAfp9". Explicação em explanxkcd.com/2011/08/10 / password-força
papukaija
2
@papukaija, sugiro que você pesquise no Google brute force attackse dictionary attacks... Senha longa aleatória é a única maneira de se proteger de tais ataques.
Bhavesh Diwan
6

Faça uso do projeto Bastille Linux.

Ele fornece uma ferramenta interativa para executar medidas adicionais de proteção de segurança para aumentar a segurança geral e diminuir a suscetibilidade de comprometimento do sistema Ubuntu (do Bastille Linux ).

Ele oferece uma funcionalidade de avaliação e relatório, para que você possa dizer quais partes do sistema não estão bloqueadas. Ele examina o sistema somente para leitura, relatando o status de cada um de seus itens de proteção. Por exemplo, o Bastille pode verificar se o servidor DNS está bloqueado em uma prisão chroot, se o telnet está desativado ou mesmo se as senhas precisam ter um bom tamanho. Você pode dar uma olhada em uma demonstração apenas na Web disso através deste link (mais informações ).

Você pode ter uma prévia da demonstração da Web (apenas) aqui .

BastillleLinux

pl1nk
fonte
1
Eu posso concordar com essa recomendação. Para executar hosts expostos (por exemplo, servidores Web), o bastille ajuda bastante na proteção do sistema.
Floyd
Isso se parece com o sistema SELinux que você encontra no CentOS / Redhat, mas aposto que o SELinux é mais moderno.
djangofan
3

Use nmapem todas as interfaces da máquina, para saber quais serviços você executa na sua máquina. Esta é uma ferramenta essencial para a segurança.

Remova todos os serviços que você não precisa nas suas interfaces externas. Você pode configurar o MySQL para escutar apenas em interfaces específicas, como localhost.

Use o ufw para proteger seu serviço SSH (e outros possíveis) para que ele não permita muitas conexões (com falha) por minuto da mesma máquina. Isso tornará os ataques de força bruta mais difíceis. Alterar o número da porta não é tão útil, apenas obscuridade, sem segurança.

Seja restritivo com o número de contas em sua máquina. Também não instale mais pacotes / programas do que você realmente usa. Instale apenas clientes X11, não um servidor X11.

Permita apenas o login ssh na máquina com certificados digitais, sem senha. Isso também tornará os ataques de força bruta difíceis / impossíveis.

Anders
fonte
0

A segurança sempre vem com um preço. Estabelecer limites realistas ajudará você a atingir seus objetivos. Eu consideraria os seguintes aspectos:

  • Contra o que você está se protegendo (que tipo de vilão, qual é o orçamento dele)?
  • Quais são seus vetores de ataque?

Verificando todos os links postados aqui, acho que este deve ser adicionado. Ele entra em detalhes não apenas sobre como configurar seu software, mas também sobre o plano de segurança. Como vantagem, todo comando a ser executado é explicado com uma fonte.

Protegendo um servidor Web Ubuntu no Xenial 16.04

Daan
fonte