Squid – acces pe baza de utilizator si parola

Pentru a realiza o autentificare pe baza de utilizator si parola pentru proxy-ul vostru, puteti folosi programul de mai jos.

Datele de autentificare sunt tinute intr-o baza de date mysql.
Programul este realizat in C.
Tot ce trebuie sa modificati este hostul la care se conecteaza (cel pe care ruleaza serverul de mysql), numele bazei de date, userul si parola pentru conectare la baza de date. Userul respectiv trebuie sa aiba cel putin drept de select in tabelul respectiv.
Inainte de a utiliza programul trebuie sa va creati baza de date si/sau tabelul respectiv in aceasta.

1. Creati baza de date dorita, daca nu doriti sa utilizati una deja existenta:

CREATE DATABASE authproxy;

2. Creati tabelul in care se vor tine useri si parolele care se pot autentifica la proxy:

USE authproxy;
CREATE TABLE autentificare (
squid_utilizator VARCHAR(15) NOT NULL PRIMARY KEY,
squid_parola VARCHAR(15) NOT NULL
);

Este necesar sa pastrati denumirea tabelului si a campurilor squid_utilizator si squid_parola.

3. Inserati in tabelul respectiv o inregistrare de test:

INSERT INTO squid_users (squid_utilizator,squid_parola) VALUES (‘usertest’,’parola’);

4. Copiati programul urmator intr-un fisier cu numele proxyauth.c

#include <stdio.h>
#include <string.h>
#include <mysql.h>
MYSQL *conexiune, mysql;
MYSQL_RES *rezultat;
MYSQL_ROW linie;
/* — Modifica aici — */
char host[256]="localhost";
char numedb[256]="squid";
char userdb[256]="squid";
char paroladb[256]="squid";
/* — Nu modifica nimic mai jos de aceasta linie — */
int main(int argc, char **argv)
{
char buf[256], *utilizator, *parola, *p, interogare[200], my_buf_utilizator[100], my_buf_parola[100];
int state;
setbuf(stdout, NULL);
while (fgets(buf, 256, stdin) != NULL) {
if ((p = strchr(buf, ‘\n’)) != NULL)
*p = ‘\0’; /* strip \n */
if ((utilizator = strtok(buf, " ")) == NULL) {
printf("Eroare\n");
continue;
}
if ((parola = strtok(NULL, "")) == NULL) {
printf("Eroare\n");
continue;
}
mysql_init(&mysql);
conexiune = mysql_real_connect(&mysql, host, userdb, paroladb,numedb, 0, 0, 0);
(void) mysql_escape_string (my_buf_utilizator, utilizator, strlen (utilizator));
(void) mysql_escape_string (my_buf_parola, parola, strlen (parola));
sprintf (interogare, "SELECT squid_utilizator FROM autentificare WHERE (squid_utilizator = ‘%s’ && squid_parola = ‘%s’)", my_buf_utilizator, my_buf_parola);
state = mysql_query(conexiune, interogare);
rezultat = mysql_store_result(conexiune);
linie = mysql_fetch_row(rezultat);
if (linie) {
(void) printf("OK\n");
} else {
(void) printf("Eroare\n");
}
mysql_close(conexiune);
}
return 0;
}

5. Modificati

char host[256]="localhost";
char numedb[256]="authproxy";
char userdb[256]="squid";
char paroladb[256]="squid";

cu datele voastre, pentru a va putea conecta la baza de date.

6. Compialti fisierul:

gcc proxyauth.c -o proxyauth -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient

avand grija sa puneti caile corect, asa cum sunt ele in sistemul vostru.

7. Puneti in fisierul de configurare squid.conf urmatoarea linie:

auth_param basic program /calea/spre/executabilul/proxyauth

bineinteles cu calea corecta din sistemul vostru.

8. Restartati proxy-ul. (Reload nu este suficient)

Daca totul este in regula, atunci ar trebui sa apara in browser o fereastra ca si cea din figura de mai jos, in care trebuie sa introduceti userul si parola, in cazul nostru user: usertest si parola: parola

authsquid

Atentie: In baza de date, parola se tine in clar!

Articole asemanatoare:

Etichetat cu: , , , , ,

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*