vineri, 20 ianuarie 2012

phpMyAdmin printr-un tunel SSH ? Da, dar numai daca doriti securitate.

Imi place sa folosesc pentru administrarea bazelor de date phpMyAdmin. Si asta pentru ca o consider o scula foarte eficienta. Dar ca orice scula de administrare, utilizarea ei peste internet este periculoasa atunci cand cineva poate sa foloseasca un sniffer cu ajutorul caruia sa ne ghidoneze. Definitiv.
O solutie eleganta si sigura este accesarea phpMyAdmin printr-un tunel SSH. La prima vedere suna pompos. Dar este extrem de simplu.

Presupunem ca deja avem pe server instalat openssh-server iar pe client openssh-client.
Instalam pe server phpMyAdmin dupa care modificam /etc/phpmyadmin/apache.conf astel incat phpMyAdmin sa nu poata fi accesat decat local (pe 127.0.0.1). Pentru asta, dupa linia
<directory phpmyadmin="" share="" usr="">
adaugam urmatoarele :
Order deny,allow
Deny from all
Allow from 127.0.0.1
si apoi restartam apache.

Daca doriti sa nu mai faceti aceste modificari pe server manual puteti sa urcati scriptul de mai jos pe server, sa va conectati pe SSH si sa-l rulati. Va face el modificarile pentru voi (nu uitati ca trebuie sa il executati cu drepturi de root cu sudo).

#!/bin/bash

Red='\E[31m'
yellow='\E[33;47m'
green='\E[32;47m'
reset='\E[0m'

if [ $LOGNAME != "root" ] ; then
echo -e "${yellow}Trebuie sa fiti logat ca ${Red}root${yellow} sau sa folositi ${Red}[sudo]${yellow} pentru a executa acest script. Scriptul nu a fost executat...${reset}"
exit 1
fi

function inslin() {
# insereaza o linie noua continand stringul $2 dupa/inainte de linia care contine stringul $1 in fisierul $3
if [ -z $4 ]
then
# daca nu exista variabila $4 sau daca este egala cu ""
# insereaza o linie continand stringul $2 dupa linia care contine stringul $1 in fisierul $3
sed -i "/$1/ a\
$2" $3
else
# insereaza o linie continand stringul $2 inainte de linia care contine stringul $1 in fisierul $3
sed -i "/$1/ i\
$2" $3
fi
}

sudo apt-get update
sudo aptitude install phpmyadmin

# in /etc/phpmyadmin adaug urmatoarele:
#Order Allow,Deny Allow from 127.0.0.1
inslin "
<directory phpmyadmin="" share="" usr="">" "Allow from 127.0.0.1" /etc/phpmyadmin/apache.conf
inslin "
<directory phpmyadmin="" share="" usr="">" "Deny from all" /etc/phpmyadmin/apache.conf
inslin "
<directory phpmyadmin="" share="" usr="">" "Order deny,allow" /etc/phpmyadmin/apache.conf
/etc/init.d/apache2 restart

Puteti sa incercati sa deschideti browserul favorit si sa va convingeti (http://ip_server/phpmyadmin) ca nu puteti sa accesati phpMyAdmin aflat pe server.

Acum deschideti un terminal in care tastati:
ssh -L 40001:127.0.0.1:80 user@server
si dupa ce introduceti parola (in cazul in care nu folositi prechea de chei public/privat) lasati deschis terminalul apoi deschideti browserul si accesati
http://127.0.0.1:40001/phpmyadmin/
Minune ! Putem accesa phpMyAdmin. Si asta datorita tunelului pe care tocmai l-am deschis cu comanda:
ssh -L 40001:127.0.0.1:80 user@server
Bineinteles ca in loc de portul 40001 puteti folosi orice (sau aproape orice) port iar in loc de user/server folositi userul pe care il aveti pentru conectarea prin SSH si IP-ul serverului. Atunci cand inchideti terminalul ori inchideti conexiunea SSH tunelul este inchis si bineinteles accesarea phpMyAdmin nu mai este posibila. Dar puteti deschide un alt tunel atunci cand aveti nevoie ...

Spor la administrat baze de date ... securizat.

sâmbătă, 26 noiembrie 2011

Un server de mail in 4 minute ? Da, cu Postix-Courier-Squirrelmail ....

Cu totii ne-am dorit la inceputuri sa realizam un server de mail. Dar chiar daca exista o multitudine de tutoriale, realizarea efectiva de multe ori a esuat.
Va prezint mai jos un script care realizeaza instalare si totodata toate configurarile necesare unui server de mail (Postfix+Courier) precum si a unui webmail (Squirrelmail). Tot ce aveti de facut este sa rulati acest script iar dupa 4 minute aveti un server de mail configurat si perfect functional.
Pentru realizarea scriptului am folosit unii dintre pasii folositi in articolul
Virtual Users And Domains With Postfix, Courier, MySQL And SquirrelMail (Ubuntu 10.10) la care am facut unele modificari in functie de necesitati.


Ddescarcati de <<< AICI >>> scriptul numit servermail, il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda
sudo chmod +x /home/servermail
Acum deschideti fisierul /home/servermail cu editorul vostru preferat si modificati atribuirile din sectiunea ######### variabile initiale ######## cu valorile specifice voua (sectiunea in cauza se afla intre liniile 105-125). 
Salvati modificarile si lansati scriptul in executie cu comanda
sudo /home/servermail
Instalarea dureaza aproximativ 4 minute in urma careia veti avea un server de mail si un webmail gata sa fie folosite.

Acum puteti primi mail-uri cu ajutorul clientului de mail preferat (ex. Mozilla Thunderbird) utilizand la configurari:
Servername:                 domeniul_tau.ro            
Username:                    office@domeniul_tau.ro
Connection security:     SSL / TLS                      
Authentication method: Normal password           
Port: 
995 (Secure POP3 - SSL-POP) 
sau
993 (IMAP4 over SSL - IMAPS) 


Pentru trimiterea de email-uri folositi urmatoarele configurari la Outgoing Server (SMTP):

joi, 3 noiembrie 2011

Tribul Apache este atacat ! Cum il ajutam ?

Am vorbit articolul trecut despre cum folosim blocarea anumitor tari la nivelul unor porturi sau pentru toate porturile. Sa luam in discutie situatia in care chiar daca blocam accesul pe portul 80 a unor tari gen China, Ukraina, Rusia, etc. totusi trebuie sa admitem ca Google trebuie sa ajunga pe site-ul nostru. Asadar, cel putin  tari precum SUA, Canada si bineinteles Romania vor trebui sa aiba acces la portul 80. Se pune problema insa daca dorim sau nu ca vizitatorii din toate tarile carora le permitem accesul pe portul 80 sa pot sa posteze/inregistreze pe site-ul nostru. Daca nu avem aceasta intentie ori daca vom dori sa blocam accesul la anumite pagini sau sa redirectam cererile venite din alte tari putem folosi modulul mod_geoip.
Cateva exemple pe care le puteti folosi in .htaccess:

Intr-un forum phpBB3 nu permitem utilizatorilor din alte tari sa se inregistreze/autentifice/vizualizeze useri
SetEnvIf GEOIP_COUNTRY_CODE RO AllowCountry
<FilesMatch "^ucp.php|posting.php|memberlist.php">
    Order Deny,Allow
        Deny from all
Allow from env=AllowCountry
Allow from localhost
ErrorDocument 403 /errors/500.php
</FilesMatch>


luni, 31 octombrie 2011

Vor sa intre strainii la voi in casa? Trantiti-le usa in nas.

Daca va uitati prin loguri (sau chiar daca nu va uitati) sa stiti ca permanent serverul/desktopul dvs. este supus atacurilor. Majoritatea lor vin din China, Rusia, Ukraina dar si din Germania,SUA.Franta, etc.
Pentru ca sa restrangeti cat mai mult posibilitatea unei intruziuni puteti instala pachetul xtables cu ajutorul caruia puteti bloca anumite tari. Spre exemplu stiti ca nu veti pleca in strainatate ca sa va conectati prin SSH. Nimic mai simplu decat sa blocati accesul prin SSH tuturor tarilor in afara de Romania. Si posibilitatile de folosire sunt cu mult mai multe dar vi le voi prezenta la sfarsit prin exemple. Trebuie sa stiti insa ca Ubuntu nu are un suport prea grozav pentru xtables, asa ca oricat am incercat, instalarea de mai jos functioneaza numai pentru Ubuntu 10.04 Lucid Lynx. Solutia pe care am adoptat-o este un amalgam. Instalez pachetele suportate de Ubuntu (xtables-addons-1.21) iar pentru descarcarea, actualizarea si conversia bazei de date cu IP-urile tarilor folosesc doua executabile dintr-o versiune nesuportata inca de Ubuntu (xtables-addons-1.30). Va asigur insa ca veti avea totul perfect functional. Iar baza de date va fi actualizata automat lunar cu ajutorul lui cron.
Dar sa incepem cu instalarea.

sâmbătă, 29 octombrie 2011

Instalare Webmin in 2 minute ...

Ce este webmin ? "A web-based interface for system administration for Unix."
Webmin permite adimistratorilor sa stabileasca conturi de utilizator, Apache, MySQL,DNS,SSH, Postfix, precum si multe-multe altele folosind un browser web.
Ce trebuie sa faceti. Copiati continutul acestui script intr-un fisier numit webmin ( sau descarcati-l de <<< AICI >>>), il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda
sudo chmod +x /home/webmin
si il lansati in executie cu comanda
sudo /home/webmin
Instalarea dureaza aproximativ 2 minute. Dupa asta tot ce aveti de facut este sa tastari in browserul favorit https://localhost:10000 sau https://IP-ul_dvs:10000 si va bucurati de el.
Atentie: Cand faceti instalarea TREBUIE sa aveti deja instalat un server web Apache.
Daca aveti instalat un firewall in sistem, fiti siguri ca portul 10000 este nefiltrat.
In cazul in care doriti sa accesati webmin pe alt port, editati fisierul /etc/webmin/miniserv.conf iar pe prima pozitie unde scrie port=10000 modificati 10000 cu ce port doriti apoi reporniti webmin cu comanda sudo /etc/webmin/restart

Iata si scriptul:

vineri, 28 octombrie 2011

Nu va gasiti cuvintele ? Nimic mai simplu.

De multe ori cautam o expresie continuta intr-un fisier dar nu ne mai aducem aminte numele fisierului. Ori pur si simplu ne apare o eroare datorata unei expresii si vrem sa aflam care fisier contine acea expresie. Pentru asta utilizam scriptul de mai jos.


#!/bin/bash
Red='\E[31m'
reset='\E[0m'
echo -e "${Red}Expresia cautata ${reset}"
read expresia
echo -e "${Red}Folderul in care caut ${reset}"
read folder
# sterg ultimul slash - daca exista
folder=${folder%/}
# verific daca directorul exista
if [ ! -d "$folder" ]; then
echo -e "${Red}Folderul $folder nu exista${reset}"
exit 1
fi
grep -r -n --color=always "$expresia" "$folder"/*
exit 0


Cum facem. Copiati continutul acestui script intr-un fisier numit cauta, il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda

joi, 27 octombrie 2011

Ai modificat permisiunile pe fisiere sau directoare si ai uitat ce ai schimbat? Nasol.

De multe ori suntem nevoiti sa modificam permisiunile pe anumite directoare sau fisiere. Iar de multe ori le aplicam recursiv in subdirectoare. Daca scopul pentru care am facut aceste modificari nu a fost atins, atunci dorim sa revenim la starea initiala, Iar de multe ori este imposibil. Pentru a evita acest neajuns am realizat scriptul de mai jos. Scriptul realizeaza salvarea recursiva a permisiunilor precum si a ownerului si grupurilor fisierelor si directoarelor continute in directorul pe care il indicati. Rezultatul executarii acestui script este un fisier executabil  si care prin executare restabileste toate permisiunile initiale salvate.
Ce trebuie sa faceti. Copiati continutul acestui script intr-un fisier numit permisiuni ( sau descarcati-l de <<< AICI >>>), il puneti pe server/desktop intr-un folder (de exemplu /home) , il faceti executabil cu comanda
chmod +x /home/permisiuni
si il lansati in executie cu comanda
sudo /home/permisiuni
Asta este tot. Veti fi intrebati care este directorul caruia doriti sa-i salvati permisiunile si tastati spre exemplu /etc. Asta inseamna ca vor fi salvate recursiv permisiunile tuturor fisierelor si directoarelor continute in directotul /etc.
Fisierul executabil pe care il veti utiliza pentru restaurarea permisiunilor il gasiti asadar TOT in directorul /etc, avand denumirea permisiuni_anul.luna.ziua-ora.minutul (spre exemplu permisiuni_2011.10.27-14.53). Pentru restaurare lansati in executie acest fisier cu comanda sudo /cale_catre_fisier/permisiuni_YY.MM.DD-HH.MM
(exemplu: sudo /home/permisiuni_2011.10.27-14.53)
Puteti asadar sa faceti varza permisiunile, proprietarii si grupurile corespunzatoare unui director si fisierelor incluse. Si asta pentru simplul motiv ca aveti la indemana acest script....

Iata codul :