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

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

Despre calculator

Despre calculator, structură și componente, modul de operare, hardware și software, cod binar, unități de măsură a datelor.

calculator vechi

Probabil unora le va părea plictisitor sau simplist, alții vor zice că sînt tone de articole și cărți competente în care să fie redată acestă informație mult mai bine. Cu siguranță așa este, dar pentru o consistență logică a conținutului blogului, voi  bate apa în piuă, făcînd o incursiune prin teoria informaticii. Ca să nu fie textul prea academic, voi insera și bancuri tematice 😉

Calculatorul este un dispozitiv electronic de procesare a datelor, la care sînt conectate un șir de componente funcționale. De la ceasuri de mînă pînă la super-computere ce lansează rachete în cosmos sau asigură funcționalitatea unei centrale nucleare, funcționalitatea se bazează pe aceleași principii.

Un calculator e format din partea „grea” (în engleză hardware) – totalitatea componentelor fizice și partea „ușoară” (în engleză software) – totalitatea instrucțiunilor de cod. Structura unui calculator personal e prezentată succint AICI.

Partea hardware e formată din componente interne, care se găsesc în blocul/unitatea de sistem(cutia ceea mare de sub masă): memorie operativă, procesor, placa de bază, hard-disk, cabluri și bloc de alimentare și externe (dispozitive de intrare/ieșire și dispozitive externe de stocare). Partea software e formată din BIOS, Sistem de Operare, programe și aplicații (diferența dintre acestea două este foarte abstractă).

BIOS (Basic Input/Output System) este o aplicație foarte simplă care inițializează dispozitivele, testează funcționarea lor și transmite gestionarea calculatorului către Sistemul de Operare.

Sistemul de Operare (SO) este partea logică care permite transformarea instrucțiunilor utilizatorului în instrucțiuni de funcționare a calculatorului. Tot Sistemul de Operare este cel care gestionează totalitatea programelor.

Calculatorul „gîndește” în mod binar, deci tot setul de date pe care le prelucrează sau le stochează sînt pentru procesor, la nivel electric, secvențe de alternare a două stări. În exemplificări sînt folosite diferite reprezentări ale acestor două stări: conectat/deconectat, încărcat/descărcat, aprins/stins, magnetizat/nemagnetizat, etc – ceea ce nu schimbă esența. Lohic, în informatică aceste două stări sînt reprezentate ca 1 și 0. Unitatea minimă care poate stoca una din aceste două stări se numește bit. Opt biți formează un octet (bite). Bitul și octetul pot avea multiplicatori cu diferența de o mie: kilobit, megaoctet, gigabyte, terabyte etc. Detalii: AICI.

În cazul informației, este convenabil de a reprezenta cantitatea de informație în 2n, căci un număr n de „celule de biți” stochează 2n valori. Pentru 210 avem 1024 de valori, deci 1024 de biți. Din aproximația 210 ≈ 103, s-a convenit ca 1024 de biți să poarte numele de kilooctet (kilobyte), toți ceilalți multiplicatori se formează identic din alți 1024 de multipli mai mici, ceea ce generează o confuzie pentru începători, esența căreia o redă următoarea  înțelepciune populară:

„Un informatician începător crede că un kilobit are 1000 de biți,
un informatician avansat crede că un kilogram are 1024 de grame”

În format zecimal, după zero vine unu, apoi doi, trei … pînă la nouă, apoi, poziția curentă începe iarăși de la zero, iar poziția din stînga adaugă o unitate: 00 01 02 … 09 10. În formatul binar e la fel, dar fiind disponibile doar două cifre, numărul de simboluri pentru a reda aceeași valoare este mult mai mare decît în format zecimal (zecimal: 255, binar: 11111111). Dacă nu înțelegeți asta, nici sensul următoarei sclipiri de geniu nu veți percepe:

„Există 10 tipuri de oameni: cei care înțeleg codul binar și cei care nu-l înțeleg” 

 Numere în cod binar deseori se întîlnesc în informatică, cît și în viața de zi cu zi primprejurul calculatorului.

Următorul articol: Despre rețea, internet și Internet