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/

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.

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

Modificarea fusului orar și sincronizarea timpului în Linux (Centos și Debian)

Verificare

În sistemele linux, ora curentă și fusul orar se afișează prin comanda:
$ date

Rezultatul ar trebui să fie:
Thu Apr 25 14:10:15 EEST 2013
Pe timp de vară (EEST – Eastern European Summer Time) sau:
Thu Dec 13 14:10:15 EET 2012
Pe timp de iarnă (EEST – Eastern European Time).

Dacă fusul orar este greșit, atunci trebuie corectat.

Debian

În Sistemul de Operare Debian procedura este extrem de simplă. introduceți în consolă următoarea comandă:

dpkg-reconfigure tzdata

Centos

Înlăturăm valoarea curentă:
$ sudo rm /etc/localtime

Atribuim valoarea corectă:
sudo ln -s /usr/share/zoneinfo/Europe/Chisinau /etc/localtime
sau
sudo ln -s /usr/share/zoneinfo/Europe/Bucharest /etc/localtime

Este util de instalat/actualizat pachetul de sistem tzdata:
$ yum install tzdata
sau
yum update tzdata

Acum corectăm și ora.

Instalăm ntp:
yum install ntp

Activăm pornirea automată pentru ntp:

chkconfig --level 2345 ntpd on

Sincronizăm ora:
ntpdate pool.ntp.org

Adăugăm servere implicite pentru sincronizare:

$ vim /etc/ntp/step-tickers

Aici copiem:

server 3.md.pool.ntp.org
server 3.europe.pool.ntp.org
server 0.europe.pool.ntp.org

Pornim ntp:
/etc/init.d/ntpd start

Afișăm ora curentă și fusul orar pentru verificare:
date