Adresa IP reală în logurile Apache, care funcţionează în spatele unui Proxy

Dacă WEB serverul Apache funcţionează în spatele unui Proxy (de exemplu AWS Elastic Load Balancer, Nginx sau Varnish), atunci, implicit, el va înregistra în loguri adresa acestui Proxy server în loc de adresa reală.
Ceea ce face imposibilă blocarea diferitor atacuri şi monitorizarea traficului, de exemplu.

Una din cele mai simple soluţii este utilizarea modului mod_remoteip pentru Apache 2.4 (apache 2.2 utilizează modului mod_rpaf în acelaşi scop).

Setarea este următoarea:

  1. Se activează modului remoteip:
    a2enmod remoteip
  2. Se modifică fişierul /etc/apache2/apache2.conf (pentru Debian şi Ubuntu), înlocuind %h cu %a în următoarele rînduri:
    LogFormat „%v:%p %h %l %u %t \”%r\” %>s %O \”%{Referer}i\” \”%{User-Agent}i\”” vhost_combined
    LogFormat „%h %l %u %t \”%r\” %>s %O \”%{Referer}i\” \”%{User-Agent}i\”” combined
    LogFormat „%h %l %u %t \”%r\” %>s %O” common
  3. În acelaşi fişier de configurare se adaugă:
    RemoteIPHeader X-Forwarded-For
    RemoteIPTrustedProxy 1.2.3.4 (indicaţi adresa serverului Proxy)
    RemoteIPTrustedProxy 5.6.7.8 (indicaţi adresa serverului Proxy)
  4. Se reporneşte serverul Apache:
    service apache2 restart

Pentru CentOS: http://gurutek.biz/mod_rpaf-and-mod_remoteip/

Sincronizarea datelor între două servere cu LsyncD

Pentru sincronizarea datelor între servere, de obicei se folosește rsync pornit de un cronjob. Dar acesta presupune verificarea tuturor fișierelor dintr-o mapă ceea ce consumă resurse și timp în cazul unui volum mare de date.

LsyncD monitorizează fișierele modificate și le sincronizează doar pe ele, astfel impactul asupra performanței este practic nul. Pentru asta LsyncD utilizează inotify / fsevents.

Sincronizarea datelor este necesară cel mai des în cazul balansării sarcinii între două WEB Servere și mai multe, cînd conținutul dintre ele trebuie mențiunut identic.

Setările din acest tutorial au fost verificate pe sisteme Debian 7.9 și lsyncd 2.0.7.

Se instalează pachetele necesare:

apt-get install lsyncd pkg-config lua5.2 liblua5.2 rsync

Se adaugă mapă pentru setările lsyncd:

mkdir /etc/lsyncd/

Se adaugă fișierul de configurare:

vim /etc/lsyncd/lsyncd.conf.lua

Se inserează următorul conținut în el:

settings = {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status",
statusInterval = 10
}
sync {
default.rsync,
source="/var/www/",
target="server2.md:/var/www/",
delete = false,
rsync = {
compress = true,
acls = true,
verbose = true,
owner = true,
group = true,
perms = true,
delete = false,
rsh = "/usr/bin/ssh  -o StrictHostKeyChecking=no"
}
}

În loc de server2.md se indică numele sau adresa IP a celui de-al doilea server. Pentru source și target se indică dosarele corespunzătoare. Pentru al doilea server se procedează la fel, indicîndu-se corect numele/adresa primului server.

Parametrul delete = false este foarte important în cazul dat, pentru că în caz contrar foarte ușor s-ar putea pierde date în caz de careva probleme de sincronizare.

Pe primul server se generează o cheie de securitate pentru utilizatorul root:

ssh-keygen -t rsa

Se afișează conținutul cheiei private:

cat /root/.ssh/id_rsa.pub

Cheia are următoarea formă:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAvmyHLLtwnZY9xDFOLV1oKteecmfukqgT+nK0Yr5DMySM7gvqNKiJbIjdxnYrpuQP1mNYWWCtvgf146LUiC9bVjeZIgjZZl93yi5PGKLGSknTNB0pQVNWx3aT6+UqbtEJVBUHWCu3KxWD5VIXD0gIpnqyPbIVft5hZXzmGZ2+F+TF6S++W5ygiYD47GkC9Ljs2iwvl6xKxlkRuZ4lrgsQng92AErBAjsH+dVGQx0I3niZEcCMagp4KOadxrEoqH/uEbr8i+MyaE1wG8opqsZ5KueCBvEdPS+K3S9DQ4D1MxHml2YVfgr/aGozb0rUpTJU9OQE1Qsy63HGt+VLTAOD root@server1.md

Se inserează această cheie în fișierul /root/.ssh/authorized_keys de pe cel de-al doilea server.

În același mod se generează o cheie pe serverul al doilea și se autorizează conexiunea pe primul server.

Aceeași procedură se folosește pentru a permite conexiunea dintre servere fără parole.

Se pornește serviciul LsyncD:

service lsyncd start

Se verifică logurile pentu a determina dacă sincronizarea funcționează:

cat /var/log/lsyncd.log

Pentru monitorizare continuă:

tail -f /var/log/lsyncd.log

Salvarea setărilor curente pentru iptables ca script sh

Pentru aceasta vom folosi un script perl.  Creați un fișier cu numele:

mkscript.pl

Adăugați în el următorul conținut:

#!/usr/bin/perl 
use strict;

if (@ARGV && $ARGV[0] =~ /^-/) {
	print 'converts an iptables-save file to a shell script',
	"\nUse: $0 [filename]\n";
	exit 0;
}

open I, shift || '-' or die $!;

my($table,$ipt);

print "#!/bin/sh
#iptables script, generated from iptables-save file
IPT='/sbin/iptables'
";

while (<I>) {
	if (/^\s*(#|$)/) {
		print;
		next;
	}
	if (/^\*(.*)/) {
		$table = $1;
		$ipt = $table eq 'filter' ? '$IPT' : '$IPT -t '.$table;
		print "$ipt -F\n";
		print "$ipt -X\n";
		next;
	} elsif (/^COMMIT/) {
		$table = 0;
		next;
	}
	die unless $table;
	if (/^:(\S+) +([^- ]\S*)/) {
		print "$ipt -P $1 $2\n";
		next;
	} elsif (/^:(\S+)/) {
		print "$ipt -N $1\n";
		next;
	}
	s/^\[[0-9:]+\]\s*//;
	die unless /^-A/;
	print "$ipt $_";
}

Folosiți următoarea comandă pentru a genera scriptul:

iptables-save | mkscript.pl > /etc/firewall.sh

Convert iptables-save output to shell script.

Configurarea serverului ProFTPD pentru autentificare cu utilizatori de sistem şi conexiune SFTP

Implicit, serverul SSH pe sisteme GNU/Linux permite transferul de date prin protocolul SFTP. Pentru un sistem care nu implică conexiunea persoanelor cu drepturi restricţionate, e suficient.

Dar dacă este nevoie de a configura accesul unor persoane terţe, atunci apare necesitatea de izola aceşti utilizatori. Cea mai simplă şi funcţională soluţie în cazul dat este configurarea unui server FTP ce va lucra şi pe protocolul SFTP, pe un port aparte.

În acest exemplu vom utiliza ProFTPD şi un sistem de operare Ubuntu/Debian.

Instalăm serverul ProFTPD:

apt-get update && apt-get install proftpd

În fişierul /etc/proftpd/conf.d/sftp.conf adăugăm următorul conţinut:

<IfModule mod_sftp.c>
 SFTPEngine on
 Port 2222
 SFTPLog /var/log/proftpd/sftp.log
 SFTPHostKey /etc/ssh/ssh_host_rsa_key
 SFTPHostKey /etc/ssh/ssh_host_dsa_key
 SFTPAuthMethods password
 SFTPCompression delayed
 </IfModule>

În fişierul /etc/proftpd/proftpd.conf decomentaţi şi modificaţi (sau adăugaţi dacă lipsesc) următoarele rînduri:

DefaultRoot ~
 PassivePorts 50000 50010
 AuthOrder mod_auth_pam.c* mod_auth_unix.c

Dacă doriţi să dezactivaţi posibilitatea de conectare SFTP oferită de SSH (pe portul 22), atunci comentaţi (sau ştergeţi) în fişierul /etc/ssh/sshd_config următorul rînd:
Subsystem sftp /usr/lib/openssh/sftp-server

Reporniţi serverul ProFTPD:

service proftpd restart

Reporniţi serverul SSH (dacă aţi făcut modificări în el):

service ssh restart

Pentru autentificare se for folosi datele utilizatorilor din sistem. Pentru a adăuga un utilizator nou folosiţi instrucţiunea:

adduser numele_utilizatorul

Pentru conectare puteţi folosi FileZilla sau oarecare alt client. Setările sînt următoarele:
Host: hostname sau IP
Port: 2222
Protocol: SFTP
User: numele_utilizatorul
Password: parola_utilizatorului

Apache/PHP, Sendmail și SELinux împreună

SELinux este un modul de securitate a nucleului linux. Implicit, SELinux nu permite ca WEB-Serverul Apache să poată expedia mesaje prin intermediul componentei Sendmail, afișînd în mail.log următoarea eroare:
NOQUEUE: SYSERR(apache): can not chdir(/var/spool/clientmqueue/): Permission denied

Această eroare poate induce în eroare, pentru că e un banal mesaj ce indică permisiuni greșite asupra dosarului. Variabila SELinux care gestionează permisiunea de expediere este httpd_can_sendmail

Pentru a verifica ce valoare are, se folosește instrucțiunea:

getsebool -a | grep httpd_can_sendmail

Rezultat:

httpd_can_sendmail --> off sau httpd_can_sendmail --> on

Dacă rezultatul este off, atunci trebuie setat în on pentru a permite expedierea mesajelor. Se folosește instrucțiunea:

setsebool -P httpd_can_sendmail 1

Rapoarte zilnice despre activitatea postfix

Dacă aveți un server pe linux, care are configurat un server poștal postfix, puteți vedea zilnic statistica mesajelor. Unul din instrumentele care vă permit acest lucru este scriptul PFLogSumm: https://calomel.org/pflogsumm.html.

1. Înainte de a începe, asigurați-vă că aveți instalate componentele necesare.

Debian: aptitude install libdate-calc-perl mailutils

CentOS: yum install perl-Date-Calc mailx

2. Să purcedem!

Descărcăm: wget http://jimsun.linxnet.com/downloads/pflogsumm-1.1.3.tar.gz

Dezarhivăm: tar -zxvf pflogsumm-1.1.3.tar.gz

3. Copiem scriptul: cp pflogsumm-1.1.3/pflogsumm.pl /usr/local/bin/pflogsumm.pl

3′. Dacă rulați pe Debian, atunci trebuie să corectați numele fișierelor de logare a activităților postfix:

sed -i ‘s/maillog.0/mail.log.1/g’  /usr/local/bin/pflogsumm.pl

sed -i ‘s/maillog/mail.log/g’ /usr/local/bin/pflogsumm.pl

4. Redactăm crontab-ul: crontab -e

Adăugăm rularea scriptului pflogsumm.pl la urmă: /usr/local/bin/pflogsumm.pl -u 5 -h 5 –problems_first -d today /var/log/mail.log | mail -s „pflogsumm report `date`” root

După care obligatoriu lăsăm un rînd liber. Salvăm modificările.

5. Testăm dacă scriptul se execută fără erori – din consolă: /usr/local/bin/pflogsumm.pl -u 5 -h 5 –problems_first -d today /var/log/mail.log | mail -s „pflogsumm report `date`” root

Dacă nu apare niciun text – înseamnă că scriptul s-a executat cu succes.

6. Dacă nu aveți configurată readresarea scrisorilor de la utilizatorul root către un cont de e-mail valid, atunci puteți vedea e-mailurile direct din consolă, cu una din opțiunile: mail, mailx sau cone (pe asta v-o recomand, dacă nu este în sistem – se instalează cu: aptitude install cone) sau direct cu:  cat /var/spool/mail/root

În fiecare zi, la ora 23:59 veți primi un e-mail cu statistica detaliată pentru această zi.

Avantajul acestui script este că el doar prelucrează logurile mail.log(sau maillog), fără a se implica în funcționalitatea sistemului.

Montarea adițională a dosarelor în Linux (Permanent mount and bind)

Montare permanentă a unui dosar. fstab bind

Utilizînd un sistem de operare Linux, poate apărea necesitatea de a monta un dosar în altă locație.

Scop

Principalele motive sînt două: Pentru a oferi unui dosar spațiu de pe altă partiție fără a modifica structura partițiilor sau pentru a oferi unui utilizator acces într-un dosar în care el nu are acces direct. În primul caz se face montarea adițională atunci cînd conținutul unui dosar depășește spațiul alocat inițial și nu se dorește redimensionarea partițiilor, care implică mai multe cunoștințe, riscuri și timp. În cazul al doilea, montarea adițională reprezintă o modalitate eficientă și comodă de a oferi acces unor utilizatori sau programe în dosarele spre care ei/ele nu au acces direct, spre exemplu acces pentru un utilizator FTP în alt dosar decît dosarul gazdă. Montarea poate fi curentă, ceea ce înseamnă că la repornirea calculatorului va dispărea, sau permanentă.

Realizare

Pentru montarea curentă, în consola linux executați cu drepturile de administrator o comandă de tipul:
mount –bind /locație/nouă/ /dosarul/sursă/
Unde: /dosarul/sursă/ – este locul real unde se va afla tot conținutul, iar /locație/nouă/ – este dosarul în care conținutul se va afișa repetat.

Pentru montare permanentă, în fișierul de configurare /etc/fstab se adaugă pentru fiecare montare adițională cîte o înregistrare de tipul:
/dosarul/sursă/ /locație/nouă/ bind rw,bind 0 0

Atenție!

Dacă conținutul /etc/fstab va fi incorect, sistemul de operare nu va putea să se încarce! Orice modificare care o faceți în una din locații se va răsfrînge asupra conținutului real! Dacă la același dosar cu conținut au acces mai mulți utilizatori, modificați drepturile de acces conform necesităților!

 

Modificarea numelui și a numelui de domeniu complet în linux (CentOS și Debian)

Cîteva instrucțiuni simple pentru a modifica și a verifica setarea numelui de domeniu și a numelui de domeniu complet (FQDN) în sistemele de operare linux CentOS și Debian.
Instrucțiunile pentru CentOS ar trebui să fie lucreze și pentru sistemele de operare Fedora, ArchLinux sau RedHat, iar instrucțiunile pentru Debian ar trebui să lucreze și pentru Ubuntu sau alte sisteme derivate.

hostname FQDN

CentOS

În fișierul /etc/hosts, se adaugă pentru IPv4 o înregistrare de tipul:
123.123.123.123 server1.domeniu.md server1
Sau, dacă se folosește șiIPv6, atunci se adaugă:
::1 server1.domeniu.md server1
Dacă serverul trebuie să fie accesibil după ambele adrese IP – atunci adăugați ambele înregistrări.

În /etc/sysconfig/network se modifică/adaugă:
HOSTNAME=server1

Pentru ca schimbările să fie aplicate este nevoie de a restarta serviciul de rețea, o puteți face prin comanda:
service network restart

Debian

În fișierul /etc/hostname se adaugă numele serverului, fără numele domeniului:
server1

În fișierul /etc/hosts, se adaugă pentru IPv4 o înregistrare de tipul:
123.123.123.123 server1.domeniu.md server1
Sau, dacă se folosește șiIPv6, atunci se adaugă:
::1 server1.domeniu.md server1
Dacă serverul trebuie să fie accesibil după ambele adrese IP – atunci adăugați ambele înregistrări.

Pentru a aplica schimbările, rulați comanda:
/etc/init.d/hostname.sh

Verificare

Pentru a vedea numele curent al serverului, folosiți comanda:
hostname
Pentru a vedea nume de domeniu complet (FQDN – Fully Qualified Domain Name), folosiți comanda:
hostname -f

Uneori după modificare nu veți putea vedea schimbările, pentru a rezolva această problemă este suficient să vă logați din nou. În unele cazuri schimbările se aplică doar la repornirea serverului.

Instrucțiunile pentru CentOS ar trebui să fie lucreze și pentru sistemele de operare Fedora, ArchLinux sau RedHat, iar instrucțiunile pentru Debian ar trebui să lucreze și pentru Ubuntu sau alte sisteme derivate.

Curățare și optimizare Windows

Imediat după ce este instalat, Sistemul de Operare Windows merge rapid și nu face probleme (de obicei), dar cu timpul se transformă într-un adevărat coșmar.

Sînt mai multe cauze posibile: fișierele temporare care se acumulează în timpul instalării sau folosirii unor programe și navigării pe internet, multiplele erori în regiștrii sistemului, stocarea datelor utilizatorului(utilizatorilor) pe discul de sistem (de obicei C:\) pînă la epuizarea spațiului liber, numărul mare de programe care rulează automat la pornirea sistemului, gradul înalt al fragmentării fișierelor.

Voi încerca să prezint unele soluții/sfaturi pentru cele de mai sus.

1. Curățarea periodică (măcar o dată în lună) a sistemului de fișierele temporare și curățarea regiștrilor de chei rămase inutile. Cel mai accesibil mod este folosirea unui program specializat, de exemplu CCleaner. Ultima versiune întotdeauna poate fi descărcată de pe FileHippo (voi mai reveni la această resursă internautică). După descărcare și instalare (puteți dezactiva instalarea Google Chrome și Google Toolbar) – lansați programul.

Mai jos vă prezint setările pe care le aplic eu:

ccleaner

ccleaner

Am dezactivat ștergerea parolelor salvate în programele de navigare, Wipe free space (ștergerea ireversibilă a fișierelor șterse; da, la mutare în coșul de gunoi fișierele nu sînt șterse definitiv, chiar dacă a fost golit coșul), Network passwords (debifați dacă vă conectați în rețea, cu nume și parolă), Remote Desktop (dacă vă conectați la distanță la un calculator cu Sistemul de Operare Windows, prin componenta de bază a sistemului. Este irelevantă în cazul folosirii TeamViewer sau altui program asemănător). După aceste setări inițiale, apăsați pe „Analyze” și după scanare „Run Cleaner”, confirmați ștergerea datelor.

Urmează curățarea regiștrilor, aici lăsați setările inițiale, ceea ce înseamnă că vor fi eliminate toate cheile invalide. În meniul din stînga alegeți „Registry”, jos apăsați „Scan for issues”, apoi, după scanare, „Fix selected issues” (vor fi selectate automat toate), alegeți să nu salvați o copie a regiștrilor (sau puteți salva dacă tare doriți), apoi încă o dată „Fix selected issues” în caseta de dialog.

Atenție, unii utilizatori au întîmpinat probleme în funcționarea calculatorului după curățirea regiștrilor cu CCleaner! (Eu personal nu am întîlnit asemenea probleme, deși în ultimii doi ani am folosit acest program la peste 200 de calculatoare)

ccleaner

2. La fel puteți folosi un script clear.bat, mai puțin „inteligent”, care va șterge doar fișierele temporare ale utilizatorului și ale Sistemului de Operare. După ce îl descărcați, puteți face click drept pe el, apoi „Edit” și să vă convingeți că nu face careva chestiuni dăunătoare (la descărcare puteți primi avertizare de securitate, asta e normal, confirmați descărcarea). Dacă folosiți Windows Vista/7/8 – rulați-l și cu drepturi de utilizator, și cu drepturi de administrator (click drept, „Run as administrator”).

3. Urmăriți ca pe discul de sistem să fie întotdeauna minim 2GB sau 20% spațiu liber (la fel se recomandă și pentru celelalte discuri). De obicei, discul de sistem este C:/. Pentru confirmare, deschideți în cîmpul-adresă a unei ferestre de Windows:  „%SystemRoot%” fără ghilimele, trebuie să se deschidă C:\Windows – dacă e alt disc – acesta este de sistem. Păstrați datele personale pe celelalte discuri – D, E, etc. Implicit, conținutul suprafeței de lucru (Desktop) și MyDocuments tot pe C:/ se află! Apropo, discul C este mai mult predispus spre erori și pierdere de informație decît celelalte! Dacă țineți numaidecît să accesați informația de pe suprafața de lucru – creați referințe (shortcut).

Uneori nici nu observăm cum ajungem să instalăm o mulțime de programe, care epuizează spațiul disponibil (dacă avem un HDD/SSD de capacitate mică sau discului C:/ i-a fost alocat puțin spațiu). Puteți dezinstala programele pe care nu le folosiți, economisind spațiu. Dezinstalarea se face din Panoul de control, „Add or remove Programs” (în Windows XP) sau „Programs and Features” (în Windows 7).

4. Dacă aveți un procesor slab, un volum mic de memorie operativă sau pur și simplu nu vreți să irosiți resursele sistemului, cît și pentru optimizarea pornirii și funcționării calculatorului, este util să dezactivați pornirea automată a unor programe. Pentru aceasta, prin combinația de taste Windows+R deschideți fereastra de executare, acolo scrieți „msconfig” (fără ghilimele) și apoi „OK”.

La pagina „Startup” dezactivați programele care nu trebuie să pornească. Lăsați bifate înregistrările pentru Antivirus și Firewall (în română cică se numește „pasarelă” 😀 ); dacă setările le faceți pentru un laptop – programul driverului pentru touchpad Synaptics/ALPS/Elantech; dacă folosiți careva programe deocheate ce rulează aplicații adiționale la pornire – lăsați-le active; dezactivați reînnoirile de programe (dar asta înseamnă că va trebui să verificați periodic versiunile noi disponibile). Aceeași procedură aplicați-o și pentru pagina „Services”, aici obligatoriu înainte de a dezactiva ceva – bifați în partea de jos „Hide all Microsoft services” ca să nu dezactivați careva servicii esențiale ale sistemului. Cele neesențiale veți putea să le reactivați din nou.

5. În timpul funcționării sistemului de operare, fișierele pe care le folosește se fragmentează, adică un fișier este înscris pe bucăți în diferite regiuni ale discului, iar la citirea lui, sistemul este nevoit să parcurgă toate regiunile unde se află fragmente, ceea ce duce la încetinirea sistemului, dacă gradul de fragmentare este mare. Pentru „reîntregirea” fișierelor, se folosește procedura de defragmentare. Pentru aceasta puteți folosi instrumentele de sistem sau careva programe terțe.

Pentru defragmentare obișnuită, deschideți (My) Computer, click drept pe discul C:/, „Tools”, „Defragmentation”, „Defragment Now”, în fereastra nouă alegeți iar discul și apăsați „Defragment”. Ca alternativă puteți folosi un alt program, interfața diferă, însă rezultatul e tot același (deși unii pretind că ar defragmenta mai bine, mutînd anumite fișiere folosite des de sistem la început de disc, unde viteza de citire e mai mare), de exemplu: Auslogics Disk Defrag, Defraggler, MyDefrag, O&O Defrag 2000 sau UltraDefrag. Procedura este identică, după pornirea programului se alege discul și se lansează defragmentarea.

defragmentare

defraggler

Exact așa efectuați defragmentarea și pentru celelalte discuri. Defragmentarea se face după optimizarea spațiului, căci în timpul procedurii este nevoie de spațiu liber. Ca și curățarea de fișiere temporare, defragmentarea se recomandă o dată în lună, dar nu mai des, căci stresați prea mult Hard Discul.

Transfer de fişiere prin protocolul SFTP (alternativă pentru FTP)

Atunci cînd trebuie să vă conectați pentru a transfera fișiere la un server sau calculator obișnuit ce folosește Linux, dacă nu aveți configurat serverul FTP, puteți să vă conectați prin SFTP (SSH File Transfer Protocol). Acest protocol presupune autentificarea și transferul fișierelor prin SSH, deci absolut fără alte setări decît activarea serverului SSH, cunoașterea portului (dacă a fost modificat cel implicit – 22) și datele de autentificare.

În calitate de client puteți folosi pentru Windows: Filezilla, CoreFTP, WinSCP sau BitKinex, iar Linux are integrată posibilitatea de conectare SFTP chiar în managerul de fișiere a interfeței grafice (comanda: sftp://user@example.com:22) sau puteți folosi versiunea Filezilla pentru Linux.

Setările pentru Filezilla:

filezilla sftp

Setările pentru WinSCP:

winscp sftp