Optware Packages for Tomato Firmware...
|
Ampersand |
Dodano 24-07-2019 11:37
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Czy ktoś posiada u siebie działający moduł geoip z xtables-addons i podzieliłby się sposobem konfiguracji? Ewentualnie ipset celem blokady pól adresów ip za pomocą iptables. Będę wdzięczny za pomoc. Powyższe bazowane na entware oczywiście.
Połączony z 10 sierpień 2019 19:13:54:
Poradziłem sobie sam z ipset bazując na opisach tego narzędzie w necie. Dzięki niemu odciąłem m. in. takie kraje jak chiny i rosja więc w logach już mniej typków skanujących porty.
Edytowany przez Ampersand dnia 10-08-2019 19:13
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 31-12-2019 00:42
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Ampersand: Wiem z doświadczenia, że całe pule adresów IP są czasem transferowane pomiędzy providerami. W związku z tym zastanawiam się jak to dokładnie działa - taka blokada o jakiej piszesz.
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 31-12-2019 09:26
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
To co ja zastosowałem to blokada pul adresów w tablicy INPUT łańcucha filter:
Chain INPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere match-set nl.zone src
DROP all -- anywhere anywhere match-set ua.zone src
DROP all -- anywhere anywhere match-set xx.zone src
DROP all -- anywhere anywhere match-set iq.zone src
DROP all -- anywhere anywhere match-set in.zone src
DROP all -- anywhere anywhere match-set cn.zone src
DROP all -- anywhere anywhere match-set af.zone src
DROP all -- anywhere anywhere match-set ru.zone src
...
Nie wiem o co dokładnie pytasz. Tutaj po prostu przychodzące zapytania z adresów blokowanych są odrzucane.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 03-01-2020 19:42
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
haaa nie wiedziałem że tak można.
Możesz jakoś to opisać? albo podać jakiś link do guide jak to zrobić na tomato?
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 03-01-2020 20:28
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Dwa przykładowe linki, z których korzystałem: opis, skrypt.
Modyfikowałem to pod siebie więc skrypt musisz sobie pozmieniać.
Ampersand załączono następujące plik:
Nie masz uprawnień, by zobaczyć załączniki w tym wątku.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 03-01-2020 20:49
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Hmm no stronki spoko - aczkolwiek nie wiem czy ma sens ich zgłębianie jeśli jak widzę wrzuciłeś gotowca.
Jak rozumiem - wrzucić go do /opt/ipset i uruchomić z opcją 11?
Czy trzeba go wpisać jakoś do odpalenia po starcie WAN?
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 03-01-2020 21:12
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Nie pamiętam czy tworzyłem potrzebne foldery ręcznie więc jak odpalisz z 11 to mogą wyjść błędy ale możesz uruchamiać od początku. Przy okazji będziesz wiedział jak to działa.
Ja mam w Skryptach Admina w Wan up takie o to linijki:
/opt/scripts/build_ipset.sh 3
/opt/scripts/build_ipset.sh 5
ipset restore < /opt/etc/ipset.up.rules
a w Shutdown to:
/usr/sbin/ipset save > /opt/etc/ipset.up.rules
Dodatkowo mam stworzony alias do szybkiego dodawania ręcznie pojedynczych adresów z logów i potem kolejnym zapisuję do /opt/etc/ipset.up.rules.
Co do samego skryptu to nie ma znaczenia gdzie będzie. U mnie jest w /opt/scripts
Poza tym w skrypcie są wpisane pule adresów państw, które ja używam więc nie wiem czy i one nadadzą się Tobie. Musisz wziąć po uwagę też ilość RAM-u. Czym więcej list tym jego mniej. Ja używam to na R7000.
Generalnie skrypt wymaga dopieszczenia ale nie miałem czasu jak dotąd bo inne projekty na stole...
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 03-01-2020 21:58
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Dzięki za całokształt :)
Co do modyfikacji to tak:
1.stworzyłem brakujące katalogi:
/opt/ipset
/opt/ipset/Countries
/opt/ipset/Countries/zones
/opt/scripts
2. Twój skrypt wgrałem do /opt/ipset (taka jest podana lokacja w nagłówku skryptu) oraz do /opt/scripts (bo tego wymaga sam skrypt).
3. Zainstalowałem "coreutils-uniq" którego nie miałem w systemie, a do którego odwołuje się skrypt. Prawdopodobnie nie jest to niezbędne, ale w sumie dlaczegoby nie. (Przy okazji zaktualizowałem zainstalowane pakiety).
4. odpaliłem skrypt z parametrem 11
Co do skryptów init/shutdown które podałeś, to ten z shutdown to raczej mogę sobie podarować. Nie zamierzam ręcznie dodawać żadnych adresów, bo aż tak bardzo nie śledzę co się dzieje na łączach. Chcę odciąć nawiększe potencjalne zagrożenie - Chiny, Indie, Rosja - generalnie Twój zestaw mi odpowiada.
Jeśli chodzi o skrypty startowe, to zastanawiam się czy nie lepiej byłoby wyczyścić wszystko i pobrać i wygenerować wszystkie zony od nowa przy każdym reboocie - dawałoby to gwarancję posiadania w miarę aktualnej listy sieci.
Z drugiej strony jest to spore obciążenie - może więc faktycznie wystarczy taki reload jak proponujesz.
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 03-01-2020 22:06
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Wszystko jest do rozważenia w zależności kto co potrzebuje ale tworzenie stref trochę trwa a ja wolę widzieć co się dzieje tym bardziej, że robię aktualizację co jakiś czas a restart mam raz w miesiącu z automatu.
Całkiem możliwe, że coreutils-uniq wymagane. Nie pamiętam już po prostu co było na początku jak to instalowałem.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 03-01-2020 23:35
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Właśnie sprawdziłem sobie swój router na tej stronce i wychodzi na to, że nadal jest widoczny z Chin, a to oznacza że u mnie coś jest nie tak z tym skryptem.
https://www.websitepulse.com/tools/ch...wall-test#
Zrobię restart, może pomoże.
Połączony z 04 stycznia 2020 01:48:30:
Hmmm trochę się wyjaśniło. Coś nie działa w skrypcie odpalanym po starcie WAN.
Musiałem ręcznie odpalić i to trochę inaczej z kolejno parametrami 3, 5, 8, 4.
Problem w tym, że te same komendy, tak samo uruchomione tyle że z automatu, po prostu nie działają. Aczkolwiek po ręcznym odpaleniu działa ładnie.
Edytowany przez amikot dnia 04-01-2020 01:48
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 04-01-2020 13:10
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Ja nie mogłem sobie pozwolić na długie przerwy i testować działanie ze startem. Preferuję mieć kontrolę nad tym co się dzieje i dlatego importuję po starcie tylko wcześniej zapisane strefy.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 06-01-2020 16:15
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Po ciężkich bojach, udało mi się dokonać w skrypcie @Ampersanda kilka, mam nadzieję użytecznych zmian.
1. Największą zmianą jest dodanie alternatywnej metody blokowania. Zamiast blokować wyszczególnione strefy, teraz można zamiast tego zablokować wszystko poza wyszczególnionymi strefami.
2. Ponieważ duża ilość regół w IPtables nie jest wskazana, zdecydowałem się na połączenie wszystkich wybranych stref jako Blacklist lub Whitelist - w zależności od wybranej metody blokowania.
3. Opcje 1 i 11 automatycznie kasują starą zawartość katalogu /opt/ipset/Countries/zones/
4. Opcje 1 i 11 automatycznie tworzą wymagane podkatalogi (/Countries i /Countries/zones)
5. Aby zapobiec zablokowaniu sieci wewnętrznej i routera reguła blokowania została ograniczona jedynie do interfejsu vlan2 (WAN)
Jeśli ktoś używa multiwan, powinien odkomentować adekwatne linie w okolicach linii 80-88.
6. Zmienna Ruletype pozwala zdecydować czy skrypt działa jako bloker blackisty (0) czy wszystkiego poza strefami z whitelisty (1). Domyślnie blokuje wszystko poza whitelist.
7. Ze względu na wyszczególnienie interfejsu w regule IPtables, zmieniłem sposób listowania IPtables za pomocą opcji 9 i 11 - teraz dostajemy więcej informacji.
Instalacja skryptu:
0. Do działania wymagane środowisko entware i zainstalowany pakiet coreutils-uniq.
1. Należy utworzyć katalog /opt/ipset i skopiować tam skrypt.
2. Przed użyciem skrypt należy edytować ustawiając wartość parametru Ruletype na 0 lub 1 (linia 18) w zależności od porządanego działania skryptu. Należy też wyszczególnić które pliki stref mają zostać użyte w tworzeniu blacklisty/whitelisty (linia 44).
3. Pierwsze uruchomienie z parametrem 11. Generowanie wszystkiego może chwilę potrwać ale po zakończeniu wszystko powinno być gotowe do sprawdzenia. Po pierwsze trzeba sprawdzić czy sieć działa prawidłowo, po drugie należy sprawdzić czy to co miało być zablokowane faktycznie jest zablokowane.
4. Jeśli wszystko działa jak należy to można do skryptów dodać odpowiednie komendy:
Do skryptu WAN Up:
/opt/ipset/build_ipset.sh 5
sleep 2
/opt/ipset/build_ipset.sh 3
sleep 2
/opt/ipset/build_ipset.sh 8
Do skryptu Firewall:
sleep 2
/opt/ipset/build_ipset.sh 4
Do skryptu shedulera (do jednej z Custom jobs) proponuję również dodać:
/opt/ipset/build_ipset.sh 11
i ustawić na jakieś późnonocne godziny. Jest to przydatne, bo ze względu na małą liczbę wolnych adresów, pule adresów IP ciągle zmieniają właścicieli i przechodzą ze strefy do strefy.
PS. skrypt sprawdziłem na ile mogłem i miałem czas - wszystko jest jednak możliwe. Dlatego zaznaczam, żeby każdy przetestował go we własnym zakresie zanim doda wpisy do skryptów startowych. Nie odpowiadam za jakiekolwiek szkody wynikłe z działania skryptu, w szczególności za utratę konfiguracji jeśli w wyniku błędu router zostanie zablokowany i konieczny będzie reset do ustawień firmowych.
Pozdrawiam :)
Połączony z 07 stycznia 2020 16:06:25:
---------------------------------------------------------------------------------------------------------
Małe uaktualnienie zawierające 3 drobne zmiany:
- Ścieżka logu dla Monitora jest teraz wczytywana z NVRAM (dla tych co używają niestandardowej ścieżki)
- Dodałem do skryptu dwie nowe opcje które powinny uprościć wywoływanie build_ipset.sh z poziomu skryptów startowych:
12 - Przeładowanie regół firewalla - zadziała jeśli ipset jest już uruchomiony. Łączy opcje 5 i 4.
13 - Start/Restart skryptu - do zastosowania po reboocie. Łączy opcje 5,3,8,4.
- Teraz wywołanie bez wybranego parametru wypluwa również regóły INPUT iptables.
amikot załączono następujące plik:
Nie masz uprawnień, by zobaczyć załączniki w tym wątku.
Edytowany przez amikot dnia 07-01-2020 16:06
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 25-01-2020 15:18
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Wracając do opisywanego przeze mnie ipset-a to stworzyłem sobie generowanie listy na bazie wbudowanego serwera (nginx) i chciałbym aby przycisk do blokowania wpisywał automatycznie dany adres do pliku tekstowego np. w lokalizacji /opt/ipset/badass.txt.
Moje próby okazały się daremne i nie mogę sobie z tym poradzić. Testowałem skrypciki w java czy php ale się nie udało. Jeśli ktoś ma taką wiedzę jak to zrobić to chętnie skorzystam.
Ampersand załączono następujące plik:
Nie masz uprawnień, by zobaczyć załączniki w tym wątku.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 26-01-2020 23:56
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Tworzysz sobie plik addbadass.php który będzie zajmował się dopisywaniem do pliku badass.txt:
// Pobierasz dane POST przesłane przy uruchomieniu skryptu.
$badass_address = html_entity_decode($_POST['badass_address'],ENT_NOQUOTES,'UTF-8');
// Wskazujesz ścieżkę pliku (musi mieć uprawnienia do zapisu dla wszystkich)
$file = '/opt/ipset/badass.txt'
// Wczytujesz obecną zawartość pliku do zmiennej $current
$current = file_get_contents($file);
// Dopisujesz nowy adres do zmiennej.
$current .= $badass_address."\n";
// Zapisujesz zmienną $current jako plik (następuje nadpisanie pliku) i zwracasz komunikat.
if (file_put_contents($file, $current) != FALSE) {
echo "Success: Address ".$badass_address." has been added to ".$file;
} else {
echo "Something went wrong";
}
?>
Plik badass.txt musi mieć prawa zapisu dla wszystkich - inaczej nginx nie będzie go widział i nie będzie mógł do niego dopisywać.
Następnie do strony której screenshot podrzuciłeś - po stronie HTML dodajesz funkcję javascipt:
Funkcja ta korzysta z framework jQuery - więc musisz go zlinkować w sekcji .
Link do jquery może być urlem lub może odwoływać się do pliku na serwerze (jak tu) - w tym drugim wypadku musisz sobie pobrać stosowny plik z netu.
Teraz tylko do każdego przycisku "blokuj" (np do eventu OnClick) podpinasz funkcję "block_badass('');" gdzie jest generowany dla każdego przycisku osobno i jest adresem w formacie takim jak ma być zablokowany - znaczy gotowy string do zapisania.
Skrypt PHP sprawdziłem na routerze, AJAXa nie, ale powinien zadziałać - raczej nie zrobiłem błędu.
Samo dopisanie do pliku można uprościć i zamiast wczytywania pliku, dodania nowej linii i nadpisania starego, można ustawić przy zapisie po prostu flagę FILE_APPEND (jako trzeci parametr w file_put_contents()). Wczytywanie zawartości daje jednak możliwość dodania np. sprawdzenia czy np. inny adres z tej samej puli nie był wcześniej blokowany albo wprowadzając dodatkowy parametr i wykorzystując pewne funkcje można usuwać wskazane adresy z listy.
Mam nadzieję, że pomogłem :)
Pozdrawiam
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 27-01-2020 11:13
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Dzięki za chęć pomocy. Niestety nie działa. W logach mam tylko odniesienie do:
Cytat 192.168.2.2 - - [27/Jan/2020:10:55:26 +0100] 405 "POST /addbadass.php HTTP/1.1" 157 "http://192.168.2.1:8889/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0" "-"
Nic więcej więc ciężko mi tu coś szukać bo nie mam punktu zaczepienia. Być może wspomniany ajax nie działa. Mam już kodzie odwołanie do:
HTML wygląda tak:
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|
|
amikot |
Dodano 27-01-2020 13:18
|
Power User
Posty: 298
Dołączył: 14/12/2018 18:24
|
Jeśli masz w logach że wysłano POST do pliku addbadass.php - to znaczy że AJAX działa. Pytanie czy plik addbadass.php jest tam gdzie go nginx szuka no i pozostaje kwestia uprawnień.
Poza tym - jak zgaduję, wypadałoby z poziomu PHP jeszcze odpalić buildipset.sh z parametrem reload czy jak tam to było :) - tak aby nowododany adres automatycznie się włączał do blokowania. W tym celu należałoby dodać do addbaddass.php w razie sukcesu linijkę:
shell_exec('/opt/ipset/buildipset.sh ');
Jeśli chodzi o to dlaczego nie działa to trzeba by debugować:
// Dla testów zamieniasz _POST na _GET - tak aby parametry można było przesyłać w pasku adresu przeglądarki.
$badass_address = html_entity_decode($_GET['badass_address'],ENT_NOQUOTES,'UTF-8');
// Zobaczmy czy dane przeszły:
echo $badass_address." (pobrany adres) ";
// Wskazujesz ścieżkę pliku (musi mieć uprawnienia do zapisu dla wszystkich)
$file = '/opt/ipset/badass.txt'
// Wczytujesz obecną zawartość pliku do zmiennej $current
$current = file_get_contents($file);
// Sprawdźmy zawartość pliku:
echo $current." (aktualna zawartosc pliku) ";
// Dopisujesz nowy adres do zmiennej.
$current .= $badass_address."\n";
// I to samo po dopisaniu nowej pozycji.
echo $current." (dane przygotowane do zapisu) ";
// Zapisujesz zmienną $current jako plik (następuje nadpisanie pliku) i zwracasz komunikat.
if (file_put_contents($file, $current) != FALSE) {
echo "Success: Address ".$badass_address." has been added to ".$file;
} else {
echo "Something went wrong";
}
?>
Taki plik wywołujesz bezpośrednio:
http://192.168.2.1:8889/addbadass.php?badass_address=201.145.149.156
I widzisz co ci wyrzuci - czy nie widzi pliku, czy nie ma uprawnień, czy co.
Przy okazji - ponieważ jest to adekwatny temat - zauważyłem, że dostępny w optware iotop nie działa na tomato, bo wymaga nowszego kernela. Niby nic, ale IOtop jest przydatny. Miałby ktoś może jakieś rozwiązanie?
ZTE MF286D - Stock Firmware (Vodafone UK)
ASUS TUF-AX3000 V2 - AsusWRT/FreshTomato 3.0.0.4.2023_4-gb6923ed
Acer Aspire E1-571 - OMV 6
|
|
|
|
Ampersand |
Dodano 27-01-2020 13:44
|
User
Posty: 191
Dołączył: 08/05/2013 13:21
|
Już działa. Zapomniałem włączyć PHP. :o
Dzięki za pomoc. Co do przeładowania reguł to wydaje mi się, że nie jest to konieczne bo dodając IP za pomocą:
jest on już w strefie a dodanie załatwia mi już inny skrypt, który obserwuje zawartość badass.txt.
Wszystko wymaga jeszcze dopracowania ale wielkie dzięki za pomoc raz jeszcze.
Netgear R7000: FreshTomato 2023.4 AIO-64K
Linksys E4200: FreshTomato 2023.2 MIPSR2 K26 USB Mega-VPN
Linksys E2000: FreshTomato 2023.2-Max
Asus TUF AX3000v2: ...
|
|
|