Johny pisze:
Również jestem tym bardzo zainteresowany, tym bardziej, że nie działa mi przekierowanie przez lms squid, a z kolei "czyste" przekierowanie nie pozwala na dalsze korzystanie z internetu po kliknięciu w informację mówiącą o tym, ze user zapoznał się z wiadomością. Przy squidzie dostaje taki błąd: The url_rewriter helpers are crashing too rapidly, need help Wie ktoś co to może być?
Mialem ten problem. Nie pamietam dokladnie jak go rozwiazalem, ale wydaje mi sie ,ze bylo to jedno z dwoch - zle uprawnienia do lms-squid lub brak dostepu squida do lms.ini. Zaloguj sie jako user squida i sprobuj odpalic lms-squid (jest to zreszta dobrze w README do lms-squid napisane)
A teraz moja teoria na temat innego rozwiązania (tylko i wyłącznie teoria bez jakiekolwiek poparcia w działaniu). Czy sądziecie, że byłoby możliwe coś takiego: Skrypt pobierający odpowiedni wpis z bazy, mówiący o statusie usera. W momencie gdy user ma być "ostrzegany" generuje odpowiedni wpis iptables i go odpala. Teraz user, klikając w uprzednio spreparowany link, tworzy plik (za pomocą kodu PHP), w którym jest ip denata. Z kolei skrypt (np w perlu? ) pobiera z owego pliku dane i przywraca internet użyszkodnikowi, kasując odpowiedni wpis w ipatables.
Strasznie do okola i wymaga albo: a) crona - sprawdza cyklicznie, czy jest cos w pliku i odpala skrypt kasujacy ostrzezenia) b) jakiegos daemona, ktory robi to samo, tylko stale monitoruje plik.
Witam, czy moglbys sie podzielic dokladniej jak masz to rozwiazane. Chcialbym korzystac z komunikatow jednorazowych ale bez uzycia squida.
Dobra dobra - pisze wtedy calosc. ALE BARDZO PROSZE - niech sie kazdy zastanowi jak to dziala zanim wlaczy u siebie. Chetnie oferuje pomoc, ale moja doba tez ma tylko 24h i przy parserach bankowych okazalo sie to troche malo.
A wiec a) Winietka - dostarczona z lms-squid:
index.php:
linia 155 wpisujemy: $nodeip = $forwarded_ip['0'];
(wiem, da sie lapiej pewnie i bardziej w duchu lmsa, ale dziala)
w lini 161:
$nodeid = $LMS->GetNodeIDByIP($nodeip);
W skrocie - do zmiennej $nodeip wpisujemy IP delikwenta (UWAGA na wszelkie proxy, DNATy itp. po drodze)
Jak ktos chce jeszcze userowi ip wyswietlac, to ja mam akurat w 167: $layout['ip'] = "$nodeip";
Potem linie 171 i 172 to: shell_exec("sudo /etc/lms/warn $nodeip"); header('Location: http://%27.$_GET%5B%27oldurl']);
(nie pamietam, czy ten header nie jest juz przypadkiem w oryginale) Czyli wykonuje my skrypt i przepuszczamy usera na strone, ktora chcial ogladac.
Linia 178: $layout['moveurl'] = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
(zeby nie bylo - numeruje linie w moim skrypcie, czyli po zmianach - wiem, ze nie ladnie).
W samej winietce (message.html czy co tam macie) link, ktory ma mowic, ze juz user przeczytal ma miec taki adres: http://<host>/index.php?readed=1&oldurl={$layout.moveurl}";
b) Skrypt wyglada tak:
#bin/bash <sciezka iptables> -t nat -D WARNING -p tcp -s $1 -j REDIRECT --to-port <port>
c) modul daemona, ktorego uzyjemy, to parser. Sekcja script:
{if (fileexists("/etc/lms/scripts/warn.daemon")) deletefile("/etc/lms/scripts/warn.daemon"); /if;}
/usr/local/sbin/iptables -t nat -F WARNING
{result = SELECT inet_ntoa( nodes.ipaddr ) as ip, nodes.name, nodes.warning FROM nodes, networks WHERE networks.address = ( nodes.ipaddr & inet_aton( networks.mask ) ) AND (networks.name = "GLINKI")}
{if (number(result)) for (i=0; i<number(result); i++) if (number(result[i].warning)) }/usr/local/sbin/iptables -t nat -A WARNING -s {result[i].ip} -p tcp -j REDIRECT --to-port 80\n{ /if; /for; /if}\n
/usr/local/sbin/iptables -t nat -A WARNING -j RETURN\n
Zwroccie uwage, ze nie tworze tutaj lancucha WARNING - u mnie tworzony jest on wczesniej - przy przeladowaniu calego daemona. Nie tworze tez odniesienia do tego lancucha. Przekierowanie wyglada tak:
$ipt -t nat -A PREROUTING -p tcp -m multiport --dport 80,443,3128,8080 -j WARNING
Jak se uzywa innego portu, to najwyzej sie nie dowie co od niego chce a w razie czego odciecie neta i tak go dotknie. Zamysl byl taki, by ostrzezenie nie blokowao np. poczty. Poza tym mam jeszcze dopuszczone nawet dla zablokowanych/z ostrzezeniami interfejsy WWW bankow.
TO chyba tyle, Jakis czas temu to tworzylem, wiec jak bym o czyms zapomnial, to dajcie znac. Zerkne i napisze.