Skip to content
Dariusz Kowalczyk edited this page Apr 21, 2022 · 18 revisions

Instalacja

Jeśli odpowiadają Ci domyślnie ustawione wartości katalogów i nazwy plików konfiguracyjnych:

~#curl -sS https://raw.githubusercontent.com/darton/fw/master/install.sh |bash

Jeśli przed instalacją chcesz wcześniej zmienić konfigurację:

~#wget https://raw.githubusercontent.com/darton/fw/master/install.sh

po wykonaniu zmian:

bash ./install.sh

Sposób użycia

/opt/gateway/scripts/fw.sh

Usage: fw.sh start|stop|restart|reload|stats|lmsd|qos|status|maintenance-on|maintenance-off

Przygotowanie plików konfiguracyjnych dla skryptu

Konieczne do uruchomienia skryptu pliki konfiguracyjne (domyślnie puste):

fw_public_ip

Zawiera listę hostów z publicznymi adresami IP w formacie: "grantedhost|deniedhost|warnedhost adres_ip" Plik fw_public_ip służy do prowadzenia rejestru adresów IP, które mają być rutowane (bez NAT) np

grantedhost 192.168.102.101 grantedhost 192.168.102.105 deniedhost 192.168.102.105

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile.

fw_public_ip

fw_nat_1-1

Zawiera listę hostów z prywatnymi adresami IP natowanymi 1-1 na adresy publiczne w formacie: "grantedhost|deniedhost|warnedhost prywatny_adres_ip publiczny_adres_ip"

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile.

fw_nat_11

fw_nat_1-n

Zawiera listę w formacie: "nazwa_pliku_z_lista_adresów_IP publiczny_adres_ip", opisującego powiązania plików z prywatnymi adresami IP i odpowiadającymi im publicznymi adresami IP na które będą NAT-owane. Nazwa "nazwa_pliku_z_lista_adresów_IP" jest także nazwą listy ipset stworzonej na podstawie adresów ip zamieszczonych w tym pliku.

Jeśli mamy wiele adresów ip na, które chcemy natować w systemie jeden do wielu, tworzymy osobne pliki dla nich np.: fw_nat_ip1, fw_nat_ip2, fw_nat_ip3, fw_nat_ip4, itd. Do każdego pliku wrzucamy listę adresów IP hostów wraz z ich statusami (denied| granted) Zaś w pliku fw_nat_1-n zapisujemy powiązania pomiędzy tymi plikami a adresami IP, na które ma odbywać się natowanie.

Przykładowa zawrtość pliku fw_nat_1-n:

fw_nat_ip1 172.16.0.1 fw_nat_ip2 172.16.0.111 fw_nat_ip3 172.16.0.222 fw_nat_ip4 172.16.0.253

Wtedy wszystkie adresy IP jakie zawiera plik fw_nat_ip1 będą natowane na adres 172.16.0.1, zaś wszystkie adresy IP zawarte w pliku fw_nat_ip2 będą natowane na adres IP 172.16.0.111 ... itd.

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile.

fw_nat_1n

fw_nat_ip1, fw_nat_ip1 ...

Pliki z adresami IP, które mają być natowane na jeden konkretny adres IP. Przykładowa zawartość:

grantedhost 192.168.102.96 deniedhost 192.168.102.99

Nazwy plików mogą być dowolne, muszą być tylko spójne z tym co zawiera plik fw_nat_1-n. W przykładzie opisane są nazwy jakie są skonfigurowane na zrzutach ekranu

Takie plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile. Poniżej przykład dla pliku o nazwie fw_nat_ip1

fw_nat_1n_ip1

fw_routed_ip

Służy to prowadzenia rejestru sieci oraz adresów IP bramek (gateway) na które te sieci mają być rutowane w formacie: Sieć/prefiks adres_IP_bramki, przykładowa zawartość:

172.16.0.128/30 172.16.1.7 172.16.1.128/30 172.16.1.8 172.16.3.128/30 172.16.1.9

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile.

fw_routed_ip

fw_lan_banned_dst_ports

Zawiera listę portów TCP/IP w formacie: "numer_portu"

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile. fw_filtered_lan_dstp

fw_blacklist

Zawiera listę adresów IP i sieci

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie hostfile.

fw_blacklist

dhcpd.conf

Zawiera gotowy plik konfiguracyjny dla serwera dhcp.

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji LMSD o nazwie dhcp.

dhcp

Gdy już mamy gotowe pliki konfiguracyjne uruchamiamy zaporę poleceniem:

fw.sh start

Polecenie fw.sh start uruchomi zaporę odczytując parametry konfiguracyjne zawarte w plikach konfiguracyjnych, dokona restartu serwera DHCP oraz reguł shapera.

fw.sh stop

Wykonanie fw.sh stop zatrzyma zaporę, wyłączy forwardowanie pakietów, włączy domyślne polityki dla iptables (np FORWARD DENY).

fw.sh restart

wykona fw.sh start a potem ./fw stop czyli usunie wszystkie reguły iptables oraz ipset i utworzy je na nowo, powoduje to zerwanie wszystkich połączeń i przerwę w transmisji na kilka sekund.

fw.sh reload

wykona zmiany tylko tych reguł iptables, które się zmieniły: czyli np. usunie lub doda konkretną regułę iptables, lub podmieni tablice ipset. Aby uniknąć przerw w transmisji pakietów odczuwalnych dla wszystkich użytkowników należy korzystać właśnie z opcji reload przy wprowadzaniu zmian.

fw.sh lmsd

Ten moduł służy do współpracy z LMS (http://lms.org.pl). Nasz router/firewall może wtedy pracować w sposób automatyczny. Sterowanie fw.sh odbywa się wtedy z poziomu LMS. fw.sh sprawdzi czy w LMS został ustawiony przez operatora status przeładowania danego hosta i wykona przeładowanie lub restart w zależności, które pliki konfiguracyjne i co w nich zostało zmienione. Jeśli pliki nie zostały zmienione, a w LMS został ustawiony status przeładowania, skrypt to wykryje, zmieni status przeładowania w LMS na wykonane, ale nie wykona restartu/przeładowania, zapisze tylko informacje w logach.

Po instalacji ./fw.sh lmsd jest uruchamiany co minutę przez cron. uruchamianie fw.sh z modułem lmsd wymaga odpowiedniej konfiguracji LMS, tak by LMS generował pliki konfiguracyjne dla fw.sh w odpowiednim dla niego formacie raz aby możliwe było sterowanie praca fw.sh z poziomu LMS.

fw.sh shaper_stop|shaper_start|shaper_restart|shaper_stats

ta opcja przydaje się jeśli mamy skonfigurowany LMS w ten sposób, że komputerom przypisane zostały taryfy. Skrypt obsługuje także taryfe nocną (opcja shaper_restart). Działanie Shapera jest zoptymalizowane dla dużych ilości komputerów i taryf.

fw.sh shaper_stop

Zatrzymuje Shaper

fw.sh shaper_stop

Uruchamia Shaper

fw.sh shaper_restart

Pobiera plik konfiguracyjny Shapera ze zdalnego serwera (LMS) a następnie zatrzymuje i ponownie uruchamia Shaper z nową konfiguracją.

Aby dostosować ustawienia zadań wykonywanych przez moduł shaper w cron do własnych potrzeb, należy edytować funcję fw_cron w pliku fwfunction, a jeśli już skrypt pracuje (został uruchomiony produkcyjnie) to także plik /etc/cron.d/fw_sh

Domyślne wartości ustawione dla funkcji fw_cron:

Terminy przeładowania skryptu ./fw.sh z opcją shaper_restart dla taryfy nocnej od 22:00 do 10:00:

"00 22 * * * /opt/gateway/scripts/fw.sh shaper_restart" "00 10 * * * /opt/gateway/scripts/fw.sh shaper_restart"

Format pliku konfiguracyjnego dla modułu Shapera, którego nazwę określa się w zmiennej "shaper_file" w pliku fw.conf:

Plik musi zaczynać się od deklaracji poniższych parametrów. Jeśli te parametry nie zostaną podane, zostaną użyte domyślne parametry określone w pliku fw.conf.

ISP_RX_LIMIT=470000kbit

ISP_TX_LIMIT=470000kbit

GW_TO_LAN_RATE_LIMIT=100kbit

GW_TO_LAN_CEIL_LIMIT=200000kbit

GW_TO_WAN_RATE_LIMIT=100kbit

GW_TO_WAN_CEIL_LIMIT=50000kbit

LAN_UNCLASSIFIED_RATE_LIMIT=16kbit

LAN_UNCLASSIFIED_CEIL_LIMIT=128kbit

WAN_UNCLASSIFIED_RATE_LIMIT=16kbit

WAN_UNCLASSIFIED_CEIL_LIMIT=128kbit

GW_TO_LAN_PRIORITY=2

GW_TO_WAN_PRIORITY=2

LAN_UNCLASSIFIED_PRIORITY=7

WAN_UNCLASSIFIED_PRIORITY=7

LAN_HOSTS_PRIORITY=2

WAN_HOSTS_PRIORITY=2

ISP_RX_LIMIT oraz ISP_TX_LIMIT to wynikające z kontraktu z operatorem nadrzędnym parametry łącza dostępowego do sieci Internet pomniejszone o ok 5-10% aby uniknąć zapełniania kolejki modemu operatora.

GW_TO_LAN_RATE_LIMIT to gwarantowana prędkość dla ruchu wychodzącego do sieci LAN, którego źródłem jest Gateway na którym pracuje skrypt fw.sh

GW_TO_LAN_CEIL_LIMIT to limit ruchu wychodzącego do sieci LAN, którego źródłem jest Gateway na którym pracuje skrypt fw.sh

GW_TO_WAN_RATE_LIMIT to gwarantowana prędkość dla ruchu wychodzącego do sieci WAN, którego źródłem jest Gateway na którym pracuje skrypt fw.sh

GW_TO_WAN_CEIL_LIMIT to limit ruchu wychodzącego do sieci WAN, którego źródłem jest Gateway na którym pracuje skrypt fw.sh

LAN_UNCLASSIFIED_RATE_LIMIT to gwarantowana prędkość dla ruchu wychodzącego do sieci LAN nie sklasyfikowanego, czyli komputerów urządzeń nie ujętych w pliku konfiguracyjnym dla modułu Shaper

LAN_UNCLASSIFIED_CEIL_LIMIT to limit dla ruchu wychodzącego do sieci LAN nie sklasyfikowanego, czyli komputerów urządzeń nie ujętych w pliku konfiguracyjnym dla modułu Shaper

WAN_UNCLASSIFIED_RATE_LIMIT to gwarantowana prędkość dla ruchu wychodzącego do sieci WAN nie sklasyfikowanego, czyli komputerów urządzeń nie ujętych w pliku konfiguracyjnym dla modułu Shaper

WAN_UNCLASSIFIED_CEIL_LIMIT to limit dla ruchu wychodzącego do sieci WAN nie sklasyfikowanego, czyli komputerów urządzeń nie ujętych w pliku konfiguracyjnym dla modułu Shaper

W siedmiostopniowej skali od 1 do 7 gdzie 1 oznacza najwyższy priorytet a 7 najniższy określane są także priorytety dla następujących grup.

GW_TO_LAN_PRIORITY - priorytet dla pakietów wysyłanych z GW do sieci LAN.

GW_TO_WAN_PRIORITY - priorytet dla pakietów wysyłanych z GW do sieci WAN.

LAN_UNCLASSIFIED_PRIORITY - priorytet dla pakietów nie sklasyfikowanych wysyłanych do sieci LAN.

WAN_UNCLASSIFIED_PRIORITY - priorytet dla pakietów nie sklasyfikowanych wysyłanych do sieci WAN.

LAN_HOSTS_PRIORITY - priorytet dla pakietów wysyłanych do sieci LAN, kierowanych do hostów dla, których ruchem zarządza moduł shaper.

WAN_HOSTS_PRIORITY - priorytet dla pakietów wysyłanych do sieci WAN, kierowanych z hostów dla, których ruchem zarządza moduł shaper.

Następnie dla każdego hosta powinny być określone parametry klas UP/DOWN HTB, przy czym kilka hostów może być przypisanych do jednej pary klasy HTB.

Przykładowa konfiguracja dla jednego hosta przypisanego do jednej pary klas UP/DOWN:

#konfiguracja komputerów klientów customer 1

class_up 8kbit 1024kbit

class_down 8kbit 5120kbit

filter 192.168.101.24

dla kilku hostów przypisanych do pary klas:

customer 2

class_up 8kbit 1024kbit

class_down 8kbit 5120kbit

filter 192.168.10.24

filter 192.168.10.25

filter 192.168.10.26

Klient może mieć kilka taryf (kilka umów na usługi) i przypisane do nich różne komputery. Wtedy dla każdej taryfy trzeba wygenerować odpowiedni zestaw rekordów. Np. jeśli klient o id 1 miałby jeszcze dwie dodatkowe umowy/taryfy z przypisanymi do nich po po jednym modemie/komputerze, należy dodać następujące rekordy

customer 1

class_up 8kbit 1024kbit

class_down 8kbit 5120kbit

filter 192.168.101.30

customer 1

class_up 8kbit 1024kbit

class_down 8kbit 5120kbit

filter 192.168.101.34

Znak "#" oznacza komentarz i nie jest parsowany przez moduł shaper. Cyfra po słowie customer to unikalne id klienta w LMS. Wyrażenia class_up oraz class_down mają jako parametry rate oraz ceil, gdzie RATE to jest minimalna gwarantowana prędkość, a CEIL to maksymalna niegwarantowana prędkość. Wyrażenie filter jako parametr ma adres ip hosta, którego dotyczy konfiguracja.

Taki plik może wygenerować odpowiednio skonfigurowany LMS z wykorzystaniem instancji lmsd o nazwie tc-new.

shaper

fw.sh shaper_stats

Ta opcja modułu shaper dostarcza szczegółowe statystyki dla każdego hosta, poprzez odczyt z liczników iptables.

Jeśli chcemy zaimportować statystki ruchu naszych klientów do LMS, należy na maszynie z LMS uruchamiać cyklicznie np. co 5 minut skrypt zapisujący statystyki do bazy danych LMS. Mmusi to być taki sam czas jaki jest ustawiony w phpui LMS w parametrze stat_freq Czyli jeśli wybierzemy uruchamianie co 5 minut to stat_freq=300 (sekund)

Skrypt powinien zawierać dwa polecenia:

ssh -p 222 root@192.168.100.1 '/opt/gateway/scripts/fw.sh stats' > /var/log/traffic.log bash /var/www/html/lms/bin/lms-traffic

gdzie 192.168.100.1 to adres IP naszego rutera na którym pracuje skryp fw.sh.

Polecenie pierwsze uruchomi zdalnie skrypt fw.sh z modułem stats, który odczyta liczniki przesłanych danych dla wszystkich hostów i zapisze je do pliku. Zaś drugie polecenie uruchomi skrypt, który odczyta plik /var/log/traffic.log i zaimportuje wartości do tabeli stats w bazie danych LMS.

fw.sh maintenance-on

W tym trybie wyłącza zaporę, wyłącza zadania uruchamiane w cron, wyłącza serwer DHCP, wyłącza interfejsy LAN i WAN, podnosi zaś interfejs zdefiniowany jako MGMT (management) i uruchamia na nim klienta DHCP .

fw.sh maintenance-off

Wykonanie tej komendy powoduje przejście do normalnego trybu pracy.

Kompletna lista instancji lmsd użyta w programie LMS do współpracy z fw.sh

lmsd_lista_instancji