Gentoo Logo

1.  Apache

O Apache (1.3.26) vem com um arquivo de configuração decente mas de novo, nós precisamos melhorar algumas coisas, como fazer bind do Apache em um endereço e impedir que ele vaze informações. Abaixo estão as opções que você deve aplicar ao arquivo de configuração.

Se você não desabilitou ssl em seu /etc/make.conf antes de instalar o Apache, você deve ter acesso a um servidor com acesso a ssl. Simplesmente adicione a seguinte linha para ativá-lo.

Listagem de código 1.1: /etc/conf.d/apache

HTTPD_OPTS="-D SSL"

Listagem de código 1.1: /etc/apache/conf/apache.conf

#Faça-o ouvir seu ip
Listen 127.0.0.1
BindAddress 127.0.0.1
#Não é uma boa idéia usar nobody ou nogroup -
#para todo serviço que não roda como root
#(simplesmente adicione o usuário apache com grupo apache)
User apache
Group apache
#Impedirá que o apache fale sobre a versão
ServerSignature Off
ServerTokens Prod

O Apache é compilado com --enable-shared=max e --enable-module=all. Isto irá por padrão carregar todos módulos, então você deve comentar todos módulos que você não usa na seção LoadModule (LoadModule e AddModule). Reinicie o serviço executando /etc/init.d/apache restart.

Documentação está disponível em http://www.apache.org.

1.  Bind

Pode-se encontrar documentação no Internet Software Consortium. O Manual de referências do administrador também está no doc/arm.

As novas ebuilds do BIND suportam chroot sem modificações. Depois de fazer emerge do bind siga essas simples instruções:

Listagem de código 1.1: Fazendo chroot do BIND

ebuild /var/db/pkg/net-dns/bind-9.2.2-r2/bind-9.2.2-r2.ebuild config\`"
(Antes de rodar o comando acima talvez você queira mudar o diretório de
chroot em /etc/conf.d/named. Caso contrário /chroot/dns será usado.)
(Você pode ter que substituir o número de versão com o número da versão atual)

1.  Djbdns

Djbdns é uma implementação de DNS de segurança sobre a qual o autor está disposto a apostar dinheiro. É muito diferente de como o Bind 9 funciona, mas vale a tentativa. Mais informações podem ser encontradas em http://www.djbdns.org.

1.  FTP

Geralmente, usar FTP (File Transfer Protocol) é uma má idéia. Ele usa dados sem criptografia (isto é, senhas são enviadas em texto normal), ouve em 2 portas (normalmente porta 20 e 21), e indivíduos maliciosos estão freqüentemente procurando por log-ins anônimos para trocar warez. Já que o protocolo de FTP contém vários problemas de segurança você deve usar sftp ou HTTP. Se não for possível, faça a segurança de seus serviços o melhor que puder e prepare-se.

1.  Mysql

Se você somente precisa de que aplicativos locais acessem o banco de dados do mysql, descomente a seguinte linha em /etc/mysql/my.cnf.

Listagem de código 1.1: Desligando acesso de rede

skip-networking

Então nós desligamos o uso do comando LOAD DATA LOCAL INFILE. Isto é para impedir acesso não autorizado de leitura de arquivos locais. Isto é importante quando novas vulnerabilidades de injeção de SQL em aplicações PHP são encontradas.

Listagem de código 1.1: Desligando LOAD DATA LOCAL INFILE na seção [mysqld]

set-variable=local-infile=0

A seguir, precisamos remover um banco de dados de amostra (teste) e todas contas fora a conta de root local.

Listagem de código 1.1: Removendo banco de dados de amostra e usuários desnecessários

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not (host="localhost" and user="root");
mysql> flush privileges;

Aviso: Tenha cuidado com o feito acima se você já configurou contas de usuário.

Nota: Se você tem mudado senhas do prompt do MySQL, você deve sempre limpar o ~/.mysql_history e /var/log/mysql/mysql.log já que eles gravam os comandos de SQL executados com senhas em texto normal.

1.  Proftpd

O proftpd já teve vários problemas de segurança, mas a maior parte parece ter sido consertada. De qualquer jeito, é uma boa idéia colocar umas melhorias:

Listagem de código 1.1: /etc/proftpd/proftpd.conf

ServerName "Meu daemon de ftp"
#Não mostrar o ident do servidor
ServerIdent on "Vá embora"

#Torna mais fácil a criação de usuários virtuais
RequireValidShell off

#Usa senha e arquivo de grupo alternativo (o passwd usa formado criptográfico)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Permissões
Umask 077

# Timeouts e limitações
MaxInstances 30
MaxClients 10 "Só 10 conexões permitidas"
MaxClientsPerHost 1 "Você já vez um log-in"
MaxClientsPerUser 1 "Você já vez um log-in"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

#Fazer chroot de todos
DefaultRoot ~

#não rodar como root
User  nobody
Group nogroup

#registrar todas transferências
TransferLog /var/log/transferlog

#Problemas com globbing
DenyFilter \*.*/

Você pode encontrar documentação em http://www.proftpd.org.

1.  Pure-ftpd

Pure-ftpd é uma ramificação do original trollftpd, modificada por razões de segurança e funcionalidade por Frank Dennis.

Use usuários virtuais (nunca contas de sistema) ativando a opção AUTH. Configure-a para -lpuredb:/etc/pureftpd.pdb e crie seus usuários usando /usr/bin/pure-pw.

Listagem de código 1.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Outras coisas ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Configure seu ajuste de MISC_OTHER para negar conexões anônimas (-E), fazer chroot de todos (-A), impedir que usuários leiam ou escrevam arquivos começando com um . (ponto) (-X), tempo máximo ocioso (-I), limitar recursão (-L), e uma umask razoável.

Aviso: Não use as opções -w ou -W! Se você quiser ter um site de warez, pare de ler este guia!

Você pode encontrar documentação em http://www.pureftpd.org.

1.  Vsftpd

Vsftpd (diminutivo de very secure ftp) é um pequeno daemon de ftp rodando uma configuração razoavelmente padrão. Ele é simples e não tem tantas funções como o pureftp e o proftp.

Listagem de código 1.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#só leitura
write_enable=NO

#permitir registro de transferências
xferlog_std_format=YES

idle_session_timeout=20
data_connection_timeout=20
nopriv_user=nobody

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

Como você pode ver, não há jeito deste serviço ter permissões individuais, mas em relação aos ajustes anônimos ele é muito bom. Às vezes pode ser útil ter um servidor de ftp anônimo (para compartilhar código livre), e o vsftpd faz um bom trabalho nisso.

1.  Netqmail

O netqmail é freqüentemente tido como um servidor de correio muito seguro. É escrito com segurança (e paranóia) em mente. Ele não permite relaying por padrão e não teve um buraco de segurança desde 1996. Simplesmente faça emerge netqmail e vá configurá-lo!

1.  Samba

Samba é o protocolo para compartilhar arquivos com redes Microsoft/Novell e não deve ser usado na Internet. Todavia, ainda precisa de medidas de segurança.

Listagem de código 1.1: /etc/samba/smb.conf

[global]
  #Prender em uma interface
  interfaces = eth0 10.0.0.1/32

  #Certificar-se de usar senha criptografada
  encrypt passwords = yes
  directory security mask = 0700

  #permitir tráfego de 10.0.0.*
  hosts allow = 10.0.0.

  #Permitir autenticação de usuário
  #(não use o modo compartilhar)
  security = user

  #Proibir contas com privilégio
  invalid users = root @wheel

  #Tamanho máximo que o smb mostra para uma share (não um limite)
  max disk size = 102400

  #Manter a política de senhas
  min password length = 8
  null passwords = no

  #Usar PAM (se suporte for adicionado)
  obey pam restrictions = yes
  pam password change = yes

Certifique-se que as permissões estão configuradas corretamente em todas shares e lembre-se de ler a documentação.

Agora reinicie o servidor e adicione os usuários que devem ter acesso ao serviço. Isto é feito através do comando /usr/bin/smbpasswd com o parâmetro -a.

1.  ssh

A única medida de segurança que o OpenSSH precisa é ligar um método de autenticação baseado na criptografia de chaves públicas. Muitos sites (como http://www.sourceforge.net, http://www.php.net e http://www.apache.org) sofreram instrusões não autorizadas devido a senhas vazadas ou senhas ruins.

Listagem de código 1.1: /etc/ssh/sshd_config

#Só permitir a versão 2
Protocol 2

#Desligar log-in de root. Usuários devem usar su para root
PermitRootLogin no

#Ligar autenticação de chave pública
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Desligar autenticaçao de .rhost e senha normal
RhostsAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Só permitir que usuários nos grupos wheel ou admin façam log-in
AllowGroups wheel admin

#Nestes grupos só permitir os seguintes usuários
#O @<nomededomínio> é opcional mas substitui a
#antiga diretiva AllowHosts
AllowUsers kn@gentoo.org bs@gentoo.org

#Registros 
SyslogFacility AUTH
LogLevel INFO

ListenAddress 127.0.0.1

Também verifique que você não tem UsePAM yes em seu arquivo de configuração já que isso sobrepõe o mecanismo de autenticação de chave pública.

Agora tudo o que seus usuários tem que fazer é criar uma chave (na máquina em que querem fazer log-in) com o seguinte comando:

Listagem de código 1.1: Criando um par de chaves DSA

# /usr/bin/ssh-keygen -t dsa

E digite sua senha.

Listagem de código 1.1: Saída do ssh-keygen

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Aperte enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Digite a senha]
Enter same passphrase again: [Digite a senha novamente]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Isto irá adicionar dois arquivos no seu diretório ~/.ssh/ chamados id_dsa e id_dsa.pub. O arquivo chamado id_dsa é sua chave privada e deve ser mantida fora do alcance outras pessoas. O outro arquivo id_dsa.pub deve ser distribuído a todos servidores a que você tem acesso. Adicione a chave ao diretórios de home dos usuários em ~/.ssh/authorized_keys e o usuário deve poder fazer log-in.

Agora seus usuários devem guardar sua chave privadas bem. Coloque em mídia que sempre carregam com eles ou mantenham eu suas estações de trabalho (coloque isso na política de (senhas))

Para mais informações visite o website do OpenSSH.

1.  Usando o xinetd

O xinetd é um substituto do inetd (que o Gentoo não tem), o daemon de serviços de Internet. Ele suporta controle de acesso com base no endereço do host remoto e a hora de acesso. Ele também fornece capacidades de registros extensivas, incluindo hora de início do servidor, endereço de host remoto, nome de usuário remoto, tempo ativo do servidor, e ações pedidas.

Como com todos outros serviços é importante ter uma boa configuração padrão. Mas já que o xinetd é rodado com root e suporta protocolos que você pode não saber como funcionam, nós recomendados não usá-lo. Mas se você quiser usá-lo de qualquer jeito, aqui está como melhorar sua segurança:

Listagem de código 1.1: Instalando o xinetd

# emerge xinetd tcp-wrappers

E edite o arquivo de configuração:

Listagem de código 1.1: /etc/xinetd.conf

defaults
{
 only_from = localhost
 instances = 10
 log_type = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps = 25 30
}

# Isto irá configurar o pserver (cvs) via xinetd com as seguintes configurações:
# max 10 instâncias (10 conexões por vez)
# limitar o pserver para somente tcp
# usar o usuário cvs para rodar este serviço
# prender todas interfaces a só 1 ip
# permitir acesso de 10.0.0.*
# limitar o horário que os desenvolvedores podem usar o cvs de 8 horas até 17 horas
# usar wrappers de tpcd (controle de acesso controlado em
# /etc/hosts.allow e /etc/hosts.deny)
# max_load na máquina configurado para 1.0
# A opção disable é por padrão no mas eu gosto de tê-la
# caso deva ser desligada
service cvspserver
{
 socket_type = stream
 protocol = tcp
 instances = 10
 protocol = tcp
 wait = no
 user = cvs
 bind = 10.0.0.2
 only_from = 10.0.0.0
 access_times = 8:00-17:00
 server = /usr/sbin/tcpd
 server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load = 1.0
 log_on_failure += RECORD
 disable = no
}

Para mais informações leia man 5 xinetd.conf.

1.  X

Por padrão o Xorg é configurado para agir como um Xserver. Isto pode ser perigoso já que o X usa conexões de TCP sem criptografia e escuta xclients.

Importante: Se você não precisa deste serviço desligue-o!

Mas se você precisa usar sua estação de trabalho como um Xserver use o comando /usr/X11R6/bin/xhost com cuidado. Este comando permite que clientes de outros hosts conectem-se e usem seu display. Isto pode ser útil se você precisa de uma aplicação de X de uma máquina diferente e o único jeito é através da rede, mas também pode ser explorado por um indivíduo malicioso. A sintaxe deste comando é /usr/X11R6/bin/xhost +hostname

Aviso: Nunca use a função xhost +! Isto permitirá que qualquer cliente conecte-se e tome controle de seu X. Se um indivíduo obtiver acesso a seu X, ele pode registrar o que você digitar e tomar controle de seu desktop. Se você tiver de usá-lo lembre-se sempre de especificar um host.

Uma solução mais segura é desativar essa função completamente iniciando o X com startx -- -nolisten tcp ou desligando-a permanentemente na configuração.

Listagem de código 1.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Para ter certeza de que o startx não seja sobre-escrito na hora de instalar uma nova versão do Xorg, você deve protegê-lo. Adicione a seguinte linha ao /etc/make.conf:

Listagem de código 1.1: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Se você usa um gerenciador de login gráfico você precisa de um método diferente.

Para o gdm (Gnome Display Manager)

Listagem de código 1.1: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

Para o xdm (X Display Manager) e kdm (Kde Display Manager)

Listagem de código 1.1: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp 

Atualizado 31 de maio de 2005

A versão original deste documento foi atualizada em 13 de junho de 2008

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.