|
1.
Apache
Apache (1.3.26) conţine un fişier de configuraţie chiar decent dar, din nou,
trebuie să îmbunătăţim unele opţiuni, cum ar fi să determinăm apache să asculte
pe o singură adresă şi să prevenim scurgerea de informaţii de la acesta. Mai
jos sunt explicate opţiunile ce ar trebui aplicate fişierului de configurare.
Dacă nu aţi dezactivat ssl în fişierul dvs. /etc/make.conf
înainte de a instala Apache, ar trebui să aveţi acces la un server ce are
activat modul ssl. Trebuie doar să adăugaţi următoarea linie pentru a activa.
Cod 1.1: /etc/conf.d/apache |
HTTPD_OPTS="-D SSL"
|
Cod 1.1: /etc/apache/conf/apache.conf |
#Determinaţi-l să asculte pe adresa dvs. ip
Listen 127.0.0.1
BindAddress 127.0.0.1
#Nu este o idee bună să utilizaţi nobody sau nogroup -
#pentru fiecare serviciu ce nu rulează ca root
#(trebuie doar să adăugaţi utilizatorul apache cu grupul apache)
User apache
Group apache
#Va opri apache să îşi afişeze versiunea
ServerSignature Off
ServerTokens Prod
|
Apache este compilat cu --enable-shared=max şi
--enable-module=all. Implicit, aceasta va activa toate modulele, deci va
trebui să comentaţi toate modulele din secţiunea LoadModule
(LoadModule şi AddModule) pe care nu le utilizaţi. Reporniţi
serviciul prin execuţia /etc/init.d/apache restart.
Documentaţie este disponibilă la http://www.apache.org.
1.
Bind
Puteţi găsi documentaţie pe pagina Internet Software
Consortium. Manualu de Referinţă pentru Administrarea BIND 9 este, de
asemenea, în doc/arm.
Pachetele ebuild mai noi pentru BIND suportă mediul chroot în afara sistemului.
După ce instalaţi bind, urmaţi aceste instrucţiuni simple:
Cod 1.1: Mediul chroot pentru BIND |
ebuild /var/db/pkg/net-dns/bind-9.2.2-r2/bind-9.2.2-r2.ebuild config\`"
|
1.
Djbdns
Djbdns este o implementare DNS pe a cărei securitate, autorul este dispus să
parieze pe bani. Este
foarte diferit de modul de funcţionare al Bind 9, dar merită încercat. Mai
multe informaţii pot fi obţinute de la http://www.djbdns.org.
1.
FTP
În general, utilizarea FTP (File Transfer Protocol - Protocolul de Transfer de
Fişiere) nu este o idee bună. Acesta utilizează date necriptate (spre ex.
parolele sunt transmise în text clar), ascultă pe două porturi (în mod normal,
porturile 20 şi 21) şi atacatorii caută frecvent autentificări anonime pentru
tranzitul warez. Deoarece protocolul FTP conţine câteva probleme de securitate,
ar trebui să utilizaţi în loc sftp sau HTTP. Dacă această soluţie este
posibilă, securizaţi-vă serviciile în orice mod posibil şi pregătiţi-vă.
1.
Mysql
Dacă doriţi ca doar aplicaţii locale să vă acceseze baza de date mysql,
decomentaţi următoarea linie din /etc/mysql/my.cnf.
Cod 1.1: Dezactivaţi accesul la reţea |
skip-networking
|
Apoi, trebuie să dezactivăm utilizarea comenzii LOAD DATA LOCAL INFILE.
Aceasta, pentru a preveni accesul neautorizat la citirea fişierelor locale.
Aceasta este relevantă când sunt găsite noi vulnerabilităţi de tipul SQL
Injection în aplicaţiile PHP.
Cod 1.1: Dezactivarea LOAD DATA LOCAL INFILE în secţiunea [mysqld] |
set-variable=local-infile=0
|
Apoi, trebuie să ştergem baza de date exemplu (test) şi toate conturile, cu
excepţia contului root local.
Cod 1.1: Ştergerea bazei de date exemplu şi tuturor utilizatorilor nenecesari |
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;
|
Atenţie:
Fiţi atenţi la comenzile anterioare, dacă deja aveţi configurate conturi de
utilizator.
|
Notă:
Dacă aţi modificat parolele din promptul MYSQL, ar trebui întotdeauna să
ştergeţi ~/.mysql_history şi /var/log/mysql/mysql.log
deoarece acestea stochează comenzile SQL executate cu parolele în text clar.
|
1.
Proftpd
Proftpd a avut câteva probleme de securitate, dar majoritatea se pare că au
fost rezolvate. Chiar şi aşa, este o idee bună să aplicăm unele îmbunătăţiri:
Cod 1.1: /etc/proftpd/proftpd.conf |
ServerName "My ftp daemon"
#Nu afişaţi identificarea server-ului
ServerIdent on "Go away"
#Înlesneşte crearea de utilizatori virtuali
RequireValidShell off
#Utilizaţi fişierele de parolă şi grup (passwd utilizează formatul crypt)
AuthUserFile "/etc/proftpd/passwd"
AuthGroupFile "/etc/proftpd/group"
# Permisiuni
Umask 077
# Timpi de expirare şi limitări
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
#Toţi trebuie să efectueze chroot
DefaultRoot ~
#nu rulaţi ca root
User nobody
Group nogroup
#înregistraţi fiecare transfer
TransferLog /var/log/transferlog
#Probleme cu globalizarea
DenyFilter \*.*/
|
Puteţi găsi documentaţie la http://www.proftpd.org.
1.
Pure-ftpd
Pure-ftpd este o ramură a originalului trollftpd, modificat pentru scopuri de
securitate şi funcţionalitate de Frank Dennis.
Folosiţi utilizatori virtuali (niciodată conturi de sistem) prin activarea
opţiunii AUTH. Setaţi-o cu valoarea -lpuredb:/etc/pureftpd.pdb şi
creaţi utilizatorii prin comanda /usr/bin/pure-pw.
Cod 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"
|
Configuraţi setarea dvs. MISC_OTHER pentru a interzice autentificările
anonime (-E), toţi trebuie să utilizeze chroot (-A), preveniţi ca
utilizatorii să poată citi sau scrie în fişierele ce încep cu un . (punct)
(-X), timpul maxim de inactivitate (-I), limitaţi recursia
(-L), şi o mască de utilizator rezonabilă cu umask.
Atenţie:
Nu utilizaţi opţiunile -w sau -W! Dacă doriţi să aveţi un
site warez, încetaţi consultarea acestui ghid!
|
Se poate găsi documentaţie la http://www.pureftpd.org.
1.
Vsftpd
Vsftpd (prescurtarea de la very secure ftp - ftp foarte securizat) este o
aplicaţie daemon foarte mică ce conţine o configuraţie implicită rezonabilă.
Este simplă şi nu are aşa multe funcţionalităţi ca pureftp şi proftp.
Cod 1.1: /etc/vsftpd |
anonymous_enable=NO
local_enable=YES
#doar pentru citire
write_enable=NO
#activarea înregistrării transferurilor
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
|
Aşa cum puteţi observa, nu există nici o soluţie ca acest serviciu să deţină
permisiuni individuale, dar deţine unele setări pentru accesul anonim pentru
care este chiar bun. Uneori poate fi un lucru bun să avem un server ftp anonim
(pentru partajarea aplicaţiilor open source), iar vsftpd se descurcă chiar
bine.
1.
Netqmail
Netqmail este adesea considerat ca fiind un server de poştă electronică foarte
bun. Este scris având securitatea (şi paranoia) în minte. Nu permite relay
implicit şi nu a avut nici o breşă de securitate din 1996. Pur şi simplu
instalaţi rulând emerge netqmail şi configuraţi-l!
1.
Samba
Samba este un protocol pentru partajarea fişierelor cu reţele Microsoft/Novell
şi nu ar trebui utilizat pe internet. Chiar şi aşa, mai are nevoie de
securizare.
Cod 1.1: /etc/samba/smb.conf |
[global]
#Ascultă pe o interfaţă
interfaces = eth0 10.0.0.1/32
#Asiguraţi-vă că utilizaţi parole criptate
encrypt passwords = yes
directory security mask = 0700
#permiteţi traficul de la 10.0.0.*
hosts allow = 10.0.0.
#Activează autentificarea utilizatorilor
#(nu utilizaţi modul share)
security = user
#Interzice conturile privilegiate
invalid users = root @wheel
#Mărimea maximă afişată de smb pentru o resursă partajată (nu este o limită)
max disk size = 102400
#Confirmaţi politica de securitate
min password length = 8
null passwords = no
#Utilizaţi PAM (dacă aţi adăugat suport)
obey pam restrictions = yes
pam password change = yes
|
Asiguraţi-vă că permisiunile sunt setate corect pe fiecare resursă partajată şi
amintiţi-vă să consultaţi documentaţia.
Acum, reporniţi server-ul şi adăugaţi utilizatorii care ar trebui să aibă acces
la acest serviciu. Aceasta poate fi efectuată prin intermediul comenzii
/usr/bin/smbpasswd cu parametrul -a.
1.
ssh
Singura securizare pe care o necesită OpenSSH este activarea unei autentificări
mai puternice bazată pe encripţia cu chei publice. Prea multe site-uri (cum ar
fi http://www.sourceforge.net, http://www.php.net şi
http://www.apache.org) au suferit intruziuni neautorizate din cauza
pierderii parolei sau parolelor proaste.
Cod 1.1: /etc/ssh/sshd_config |
#Activaţi doar versiunea 2
Protocol 2
#Dezactivaţi autentificarea root. Utilizatorii trebuie să ruleze su pentru root
PermitRootLogin no
#Activaţi autentificarea cu chei publice
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#Dezactivaţi .rhost şi autentificarea cu parolă normală
RhostsAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
#Permiteţi doar utilizatorilor din grupul wheel sau admin să se autentifice
AllowGroups wheel admin
#În aceste grupuri, permiteţi doar următorilor utilizatori
#Opţiunea @<domainname> este opţională dar înlocuieşte
#vechea directivă AllowHosts
AllowUsers kn@gentoo.org bs@gentoo.org
#Înregistrarea în jurnal
SyslogFacility AUTH
LogLevel INFO
ListenAddress 127.0.0.1
|
De asemenea, verificaţi că nu aveţi UsePAM yes în fişierul dvs. de
configurare deoarece suprascrie mecanismul de autentificare cu chei publice.
Acum, tot ceea ce utilizatorii dvs. trebuie să facă este să-şi creeze o cheie
(pe maşina de pe care doresc să se autentifice) cu următoarea comandă:
Cod 1.1: Creaţi o pereche de chei DSA |
# /usr/bin/ssh-keygen -t dsa
|
Şi tastaţi fraza de autentificare.
Cod 1.1: Ce afişează ssh-keygen |
Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Apăsaţi Enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Introduceţi fraza]
Enter same passphrase again: [Introduceţi fraza din nou]
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
|
Aceasta va adăuga două fişiere în directorul dvs. ~/.ssh/ denumite
id_dsa şi id_dsa.pub. Fişierul denumit
id_dsa reprezintă cheia dvs. privată şi ar trebui ferită de alţi
utilizatori decât dvs. Celălalt fişier id_dsa.pub trebuie
distribuit pe fiecare server pe care aveţi acces. Adăugaţi cheia în directorul
home al utilizatorilor în ~/.ssh/authorized_keys şi utilizatorul
ar trebui să poată să se autentifice.
Cod 1.1: Adăugarea fişierului id_dsa.pub în fişierul authorized_keys |
$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password:
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys
|
Acum, utilizatorii ar trebui să îşi păzească şi cheia lor privată. Stocaţi-o pe
un suport media pe care îl purtaţi mereu cu dvs. sau păstraţi-o pe staţia de
lucru (puneţi acest paragraf în politica pentu (parole)).
Pentru mai multe informaţii vizitaţi site-ul OpenSSH.
1.
Utilizarea xinetd
xinetd înlocuieşte inetd (care nu este conţinut în Gentoo), aplicaţia
daemon pentru servicii internet. Suportă controlul accesului pe baza adresei
sistemului apelant şi timpului de acces. De asemenea, oferă capabilităţi
extinse de jurnalizare, incluzând timpul la care a pornit aplicaţia server,
adresa sistemului gazdă apelant, numele utilizatorului de la distanţă, timpul
de rulare şi acţiunile executate.
Ca şi cu celelalte servicii, este important să avem o configuraţie implicită
bună. Dar, deoarece xinetd este rulat ca root şi suportă protocoale ce
este posibil să nu le cunoaşteţi, vă recomandăm să nu îl utilizaţi. Totuşi,
dacă doriţi să-l utilizaţi, iată cum puteţi adăuga unele funcţionalităţi de
securitate în acesta:
Cod 1.1: Instalarea xinetd |
# emerge xinetd tcp-wrappers
|
Şi apoi editaţi fişierul de configurare:
Cod 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
}
# Aceasta va rula pserver (cvs) prin xinetd cu următoarele setări:
# maxim 10 instanţe (10 conexiuni în acelaşi timp)
# limitaţi pserver doar la tcp
# folosiţi utilizatorul cvs pentru a rula acest serviciu
# ascultaţi pe o singură adresă ip
# permiteţi accesul de la 10.0.0.*
# limitaţi timpul în care dezvoltatorii pot utiliza dvs de la 8am la 5pm
# utilizaţi aplicaţii wrapper tcp (controlul accesului se poate face din
# /etc/hosts.allow şi /etc/hosts.deny)
# variabila max_load pentru maşină este setată la 1.0
# Indicatorul disable este setat implicit pe no, dar mi-ar plăcea
# cazul în care ar trebui să fie dezactivat
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
}
|
Pentru mai multe informaţii consultaţi man 5 xinetd.conf.
1.
X
Implicit, Xorg este configurat ca aplicaţie Xserver. Aceasta poate fi
periculos, deoarece X utilizează conexiuni TCP necriptate şi ascultă pentru
aplicaţiile xclients.
Important:
Dacă nu aveţi nevoie de acest serviciu, dezactivaţi-l!
|
Dar, dacă depindeţi de utilizarea staţiei dvs. de lucru ca Xserver, utilizaţi
comanda /usr/X11R6/bin/xhost cu atenţie. Această comandă permite
clienţilor de pe alte sisteme gazdă să se conecteze şi să utilizeze terminalul.
Aceasta poate fi la îndemână dacă aveţi nevoie de o aplicaţie X de pe altă
maşină şi singura modalitate de rulare este prin intermediul reţelei, dar poate
fi, de asemenea, exploatată de un atacator. Sintaxa acestei comenzi este
/usr/X11R6/bin/xhost +hostname
Atenţie:
Nu utilizaţi niciodată xhost +! Aceasta va permite oricărui client să se
conecteze şi să preia controlul asupra aplicaţiei X. Dacă un atacator vă
poate accesa aplicaţiaX, vă poate înregistra tastele apăsate şi prelua
controlul asupra aplicaţiei dvs. desktop. Dacă trebuie să-l utilizaţi,
amintiţi-vă mereu să adăugaţi un nume de sistem gazdă.
|
O soluţie mult mai securizată este să dezactivaţi această funcţionalitate
definitiv, prin pornirea X cu startx -- -nolisten tcp sau să o
dezactivaţi permanent din configuraţie.
Cod 1.1: /usr/X11R6/bin/startx |
defaultserverargs="-nolisten tcp"
|
Pentru a vă asigura că startx nu va fi suprascris la instalarea
unei noi versiuni de Xorg, trebuie să îi protejaţi locaţia. Adăugaţi următoarea
linie în /etc/make.conf:
Cod 1.1: /etc/make.conf |
CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"
|
Dacă utilizaţi un manager de login grafic, trebuie să luaţi în considerare altă
abordare.
Pentru gdm (Gnome Display Manager)
Cod 1.1: /etc/X11/gdm/gdm.conf |
[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp
|
Pentru xdm (X Display Manager) şi kdm (Kde Display Manager)
Cod 1.1: /etc/X11/xdm/Xservers |
:0 local /usr/bin/X11/X -nolisten tcp
|
|