|
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\`"
|
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
|
|