Gentoo Logo

1.  Apache

Apache ha un buon file di configurazione, ma si devono migliorare alcune cose, come legare Apache a un indirizzo e prevenire l'uscita di informazioni. Sotto ci sono le opzioni che si dovrebbero applicare al file di configurazione.

Se non si è disabilitato ssl nel /etc/make.conf quando è stato installato Apache, si dovrebbe avere l'accesso a un server abilitato ssl. All'interno di /etc/apache2/vhosts.d si possono trovare dei file di configurazione d'esempio. Ci sono degli esempi funzionanti ed è sicuramente meglio verificare quelli o disabilitarli.

È importante definire la/le propria/e configurazione/i in modo che ascolti(no) su un particolare indirizzo IP (piuttosto che su tutti gli indirizzi IP disponibili sul proprio sistema). Per esempio, per il file 00_default_vhost.conf:

Codice 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf

#Fare in modo che ascolti sul proprio ip
Listen 127.0.0.1

Si raccomanda inoltre di disabilitare la visualizzazione al mondo intero di qualsiasi informazione riguardante la propria installazione di Apache. Come impostazione predefinita, la configurazione aggiungerà la versione del server ed il nome dell'host virtuale alle pagine generate lato server. Per disabilitare questo comportamento, cambiare la variabile ServerSignature in Off:

Codice 1.1: /etc/apache2/modules.d/00_default_settings.conf

ServerSignature Off

Apache è compilato con --enable-shared=max e --enable-module=all. Ciò abilita in modo predefinito tutti i moduli, pertanto si dovrebbero commentare, nel file di configurazioe principale /etc/apache2/httpd.conf, tutti i moduli nella sezione LoadModule (LoadModule e AddModule) che non si usano. Riavviare il servizio con /etc/init.d/apache2 restart.

La documentazione è disponibile nel sito http://www.apache.org.

1.  Bind

Si può trovare la documentazione in Internet Software Consortium. Il BIND 9 Administrator Reference Manual è anche in doc/arm.

I nuovi ebuild BIND supportano il chroot fuori dalla macchina. Emergere bind e seguire queste istruzioni:

Codice 1.1: Chroot BIND

# emerge --config bind
(Prima di eseguire il comando sopra, si potrebbe volere cambiare la
directory del chroot in /etc/conf.d/named. Altrimenti sarà usato /chroot/dns.)

1.  Djbdns

Djbdns è una implementazione DNS sulla sicurezza il cui autore sta scommettendo soldi. Funziona in modo molto differente rispetto a Bind 9, ma vale la pena provarlo. Sono disponibili altre informazioni sul sito http://www.djbdns.org.

1.  FTP

Generalmente, usare FTP (File Transfer Protocol) è una cattiva idea. Usa dati non criptati (es. le password sono trasmesse in chiaro), resta in ascolto su 2 porte (20 e 21), e gli attaccanti cercano login anonimi per scambiare warez. Poichè il protocollo FTP contiene molti problemi di sicurezza, si dovrebbe usare sftp o HTTP. Se questo non è possibile, rendere sicuri i servizi il più possibile e prepararsi ad eventuali problemi con la sicurezza.

1.  Mysql

Se si ha bisogno solo di applicazioni locali per accedere al database mysql, non commentare le seguenti righe in /etc/mysql/my.cnf.

Codice 1.1: Disabilitare l'accesso alla rete

skip-networking

Disabilitare l'uso del comando LOAD DATA LOCAL INFILE. Serve per prevenire letture non autorizzate da file locali. È rilevante quando sono trovate nuove vulnerabilità SQL Injection nelle applicazioni PHP.

Codice 1.1: Disabilitare LOAD DATA LOCAL INFILE nella [mysqld] sezione

set-variable=local-infile=0

Si deve rimuovere il database di esempio (test) e tutti gli account tranne il root locale.

Codice 1.1: Rimuovere il database di esempio e tutti gli utenti non necessari

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;

Avvertenza: Attenzione con i comandi sopra se si sono già configurati account utente.

Nota: Se sono state cambiate le password dal prompt MySQL, si dovrebbe sempre pulire ~/.mysql_history e /var/log/mysql/mysql.log, poichè immagazzinano i comandi eseguiti SQL con password in chiaro.

1.  Proftpd

Proftpd ha avuto molti problemi di sicurezza, ma la maggior parte di questi sembra sia stata riparata. È una buona idea applicare alcuni miglioramenti:

Codice 1.1: /etc/proftpd/proftpd.conf

ServerName "My ftp daemon"
#Don't show the ident of the server
ServerIdent on "Go away"

#Makes it easier to create virtual users
RequireValidShell off

#Use alternative password and group file (passwd uses crypt format)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"

# Permissions
Umask 077

# Timeouts and limitations
MaxInstances 30
MaxClients 10 "Only 10 connections allowed"
MaxClientsPerHost 1 "You have already logged on once"
MaxClientsPerUser 1 "You have already logged on once"
TimeoutStalled 10
TimeoutNoTransfer 20
TimeoutLogin 20

#Chroot everyone
DefaultRoot ~

#don't run as root
User  nobody
Group nogroup

#Log every transfer
TransferLog /var/log/transferlog

#Problems with globbing
DenyFilter \*.*/

Si può trovare la documentazione in http://www.proftpd.org.

1.  Pure-ftpd

Pure-ftpd è una parte di trollftpd, modificato per ragioni di sicurezza e per funzionalità da Frank Dennis.

Usare utenti virtuali (mai account di sistema) abilitando l'opzione AUTH. Impostare questa a -lpuredb:/etc/pureftpd.pdb e creare gli utenti con /usr/bin/pure-pw.

Codice 1.1: /etc/conf.d/pure-ftpd

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

## Misc. Others ##
MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Configurare MISC_OTHER per non permettere login anonimi (-E), chroot per ognuno (-A), prevenire che utenti leggano o scrivano su file che iniziano con un . (punto) (-X), massimo tempo di occupazione (-I), ricorrenza di limite (-L), e ragionevole umask.

Avvertenza: Non usare le opzioni -w o -W. Se si vuole avere un sito per warez, non leggere questa guida.

Si può trovare la documentazione in http://www.pureftpd.org.

1.  Vsftpd

Vsftpd (very secure ftp) è un piccolo demone che esegue una configurazione predefinita. È semplice e non ha molte caratteristiche come pureftp e proftp.

Codice 1.1: /etc/vsftpd

anonymous_enable=NO
local_enable=YES

#read only
write_enable=NO

#enable logging of transfers
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

Come si può vedere, non c'è un modo per questo servizio di avere permessi individuali, ma le impostazioni anonime sono buone. A volte può essere utile avere un ftp server anonimo (per condividere open source), e vsftpd va bene.

1.  Netqmail

Netqmail è spesso considerato un mail server molto sicuro. È scritto tenendo in mente la sicurezza. Non permette come impostazione predefinita la trasmissione e non ha avuto un problema di sicurezza dal 1996. Dare un emerge netqmail e proseguire con la configurazione.

1.  Samba

Samba è un protocollo per condividere file con le reti Microsoft/Novell e non dovrebbe essere usato in Internet. Ha bisogno di alcune opzioni di sicurezza.

Codice 1.1: /etc/samba/smb.conf

[global]
  #Bind to an interface
  interfaces = eth0 10.0.0.1/32

  #Make sure to use encrypted password
  encrypt passwords = yes
  directory security mask = 0700

  #allow traffic from 10.0.0.*
  hosts allow = 10.0.0.

  #Enables user authentication
  #(don't use the share mode)
  security = user

  #Disallow privileged accounts
  invalid users = root @wheel

  #Maximum size smb shows for a share (not a limit)
  max disk size = 102400

  #Uphold the password policy
  min password length = 8
  null passwords = no

  #Use PAM (if added support)
  obey pam restrictions = yes
  pam password change = yes

Assicurarsi che i permessi siano corretti su ogni condivisione e ricordarsi di leggere la documentazione.

Riavviare il server e aggiungere gli utenti che dovrebbero aver accesso a questo servizio. Ciò viene fatto tramite il comando /usr/bin/smbpasswd ed il parametro -a.

1.  ssh

La sola sicurezza di cui OpenSSH ha bisogno è avere una autenticazione forte basata sulla crittografia a chiave pubblica. Troppi siti (come http://www.sourceforge.net, http://www.php.net e http://www.apache.org) hanno sofferto di intrusioni non autorizzate dovute a perdite di (o cattive) password.

Codice 1.1: /etc/ssh/sshd_config

#Only enable version 2
Protocol 2

#Disable root login. Users have to su to root
PermitRootLogin no

#Turn on Public key authentication
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Disable .rhost and normal password authentication
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Only allow userin the wheel or admin group to login
AllowGroups wheel admin

#In those groups only allow the following users
#The @<domainname> is optional but replaces the
#older AllowHosts directive
AllowUsers kn@gentoo.org bs@gentoo.org

#Logging
SyslogFacility AUTH
LogLevel INFO

(Cambiare questo con il proprio indirizzo)
ListenAddress 127.0.0.1

Verificare inoltre di non avere UsePAM yes nel file di configurazione poichè esclude il meccanismo di autenticazione delle chiavi pubbliche, oppure disabilitare una delle due voci PasswordAuthentication o ChallengeResponseAuthentication. Si possono trovare maggiori informazioni riguardo a queste opzioni nella pagina di manuale di sshd_config.

Tutti gli utenti devono creare una chiave (sulla macchina in cui vogliono loggarsi) con il seguente comando:

Codice 1.1: Creare le chiavi DSA

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

E digitare la pass phrase.

Codice 1.1: Output di ssh-keygen

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Press enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Enter passphrase]
Enter same passphrase again: [Enter passphrase again]
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

Questo aggiungerà due file nella directory ~/.ssh/, chiamati id_dsa e id_dsa.pub. Il file id_dsa è la chiave privata e non dovrebbe essere vista da altri utenti. Il file id_dsa.pub va distribuito a ogni server in cui si ha accesso. Aggiungere la chiave nella directory home dell'utente in ~/.ssh/authorized_keys e l'utente dovrebbe poter loggarsi:

Codice 1.1: Aggiungere il file id_dsa.pub al file authorized_keys

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys

Gli utenti dovrebbero proteggere la chiave privata. Metterla in un dispositivo che si porta sempre con sè o tenerla nella workstation (mettere questo nella politica delle (password)).

Per altre informazioni andare nel sito web OpenSSH.

1.  Usare xinetd

xinetd è un rifacimento di inetd (che Gentoo non ha), il demone di servizi Internet. Supporta controllo di accesso basato sull'indirizzo dell'host remoto e il tempo di accesso. Fornisce varie possibilità di login, incluso il tempo di avvio del server, indirizzo dell'host remoto, il nome dell'utente remoto, il tempo di esecuzione del server, e azioni richieste.

Come per tutti gli altri servizi è importante avere una buona configurazione predefinita. Poichè xinetd è eseguito da root e supporta protocolli di cui si potrebbe non conoscere il funzionamento, si raccomanda di non usarlo. Ma se comunque lo si volesse provare, ecco alcune opzioni di sicurezza:

Codice 1.1: Installare xinetd

# emerge xinetd tcp-wrappers

Modificare il file di configurazione:

Codice 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
}

# This will setup pserver (cvs) via xinetd with the following settings:
# max 10 instances (10 connections at a time)
# limit the pserver to tcp only
# use the user cvs to run this service
# bind the interfaces to only 1 ip
# allow access from 10.0.0.*
# limit the time developers can use cvs from 8am to 5pm
# use tpcd wrappers (access control controlled in
# /etc/hosts.allow and /etc/hosts.deny)
# max_load on the machine set to 1.0
# The disable flag is per default set to no but I like having
# it in case of it should be disabled
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
}

Per altre informazioni leggere man 5 xinetd.conf.

1.  X

Come impostazione predefinita Xorg è configurato per essere un Xserver. Può essere pericoloso poichè X usa connessioni TCP non criptate e resta all'ascolto di xclient.

Importante: Se non serve questo servizio, disabilitarlo.

Ma se si usa la workstation come Xserver, usare il comando /usr/X11R6/bin/xhost con cautela. Questo comando permette ai client di altri host di connettersi e di usare il proprio display. Può essere di aiuto se si fa uso di un'applicazione X da una macchina differente e il solo modo è usare la rete, ma può anche essere sfruttato da un attaccante. La sintassi di questo comando è /usr/X11R6/bin/xhost +hostname

Avvertenza: Non usare la caratteristica xhost +. Questa permette a ogni client di connettersi e prendere il controllo del proprio X. Se un attaccante ottiene accesso a X, può risalire ai propri comandi e prendere il controllo del desktop. Se si deve usarlo, ricordarsi sempre di specificare un host.

Una soluzione più sicura è disabilitare questa caratteristica avviando X con startx -- -nolisten tcp o disabilitarla nella configurazione.

Codice 1.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Per assicurarsi che startx non sia sovrascritto quando si emerge una nuova versione di Xorg, si deve proteggerlo. Aggiungere la seguente riga a /etc/make.conf:

Codice 1.1: /etc/make.conf

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

Se si usa un login manager grafico, serve un metodo diverso.

Per gdm (Gnome Display Manager)

Codice 1.1: /etc/X11/gdm/gdm.conf

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

Per xdm (X Display Manager) e kdm (Kde Display Manager)

Codice 1.1: /etc/X11/xdm/Xservers

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

Aggiornato il 13 giugno 2008

Donate to support our development efforts.

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