[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian i korporacyjna siec wifi



Witam,
Musiałbyś napisać w PHP skrypt który pobierał by dane od usera (login
i hasło, czy jak tam chcesz) i jeśli wszystko się zgadza, wykonywał
odpowiednią regułę iptables. Natomiast akces pointy, musiały by być
nie zabezpieczone, jak w przypadku hotspotów.

Skrypt:
<?php
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\";>";
echo "<html xmlns=\"http://www.w3.org/1999/xhtml\"; xml:lang=\"en\">";
echo "<head>";
echo "<title>Logowanie do sieci</title>";
echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"/>";
echo "</head>";
echo "<body>";
if($_POST["zaloguj"] == "Zaloguj") {
	$login = $_POST["login"];
	$haslo = $_POST["haslo"];
	mysql_connect("localhost", "login", "haslo");
	mysql_select_db("baza");
	$zapytanie = mysql_query("SELECT internet, adres_ip FROM userzy WHERE
login='$login' AND haslo='$haslo'"); //1
	if(mysql_num_rows($zapytanie) == 1) {
		$wynik = mysql_fetch_array($zapytanie);
		if($wynik["internet"] == "tak") {
			$adres_ip = $wynik["adres_ip"]; //1
			exec("regułka iptables"); //3
			echo "ok";
		} else {
			echo "wyłączony net";
		}
	} else {
		echo "nieprawidłowy login lub hasło";
	}
} else {
	echo "<form method=\"post\">";
	echo "<table>";
	echo "<tr>";
	echo "<td align=\"right\">Login:</td>";
	echo "<td><input type=\"text\" name=\"login\"/></td>";
	echo "</tr>";
	echo "<tr>";
	echo "<td align=\"right\">Hasło:</td>";
	echo "<td><input type=\"text\" name=\"haslo\"/></td>";
	echo "</tr>";
	echo "<tr>";
	echo "<td></td>";
	echo "<td><input type=\"submit\" name=\"zaloguj\" value=\"Zaloguj\"></td>";
	echo "</tr>";
	echo "</table>";
	echo "</form>";
}
echo "</body>";
echo "</html>";
?>

Wewnątrz regułki iptables (linijka kończąca się na //3), możesz
wykorzystać uprzednio zdefiniowaną zmienną $adres_ip, zawierającą
adres IP użytkownika pobrany z bazy. Można też tak przerobić skrypt
żeby pobierał adres IP z zapytania HTTP, wtedy zamieniasz linijkę //2,
na: "$adres_ip = $_SERVER["REMOTE_ADDR"];". Możesz też wywalić
fragment zapytania (//1), odpowiedzialny za pobranie zawartości pola
adres_ip z bazy danych.

Nie wiem czy iptables ma możliwość dodawania reguł na określony czas,
jeśli nie to będziesz musiał dodać drugą funkcję exec() z komendą
dodającą do crona wyłączenie neta dla danej osoby po pewnym czasie.

Można było by również utworzyć drugi skrypt i dodać go do crona, tak
aby uruchamiał sieć automatycznie co godzinę (albo co 24 godz.) i
odejmował godzinę (lub 24 godz.) od czas dostępu do neta, a jeśli ten
będzie równy 1, dodatkowo zmieniał zawartość pola internet z bazy
danych na nie. Było by to wtedy łatwiejsze w obsłudze bo nie trzeba by
było ręcznie blokować dostępu do neta, dla każdego kompa.

Jeśli chcesz żeby dostęp był przyznawany na cały czas dla konkretnego
stałego adresu IP, bez logowania, to chyba prościej było by napisać
skrypt generujący dhcp.conf oraz skrypt firewalla, a następnie
resetujący serwer DHCP i wykonywający ponownie skrypt firewalla.

-- 
Pozdrawiam
Aleksander Kurczyk


Reply to: