Wymiana firewalla w OpenWrt na własny
Ostatnia zmiana: 2019-12-17 21:25

Firewall począwszy od pierwszych wersji OpenWrt jest dość skomplikowany. Wymuszenie składni w pliku /etc/config/firewall zgodnej z uci spowodowało wymuszenie stosowania określonych zapisów bez możliwości wykonania bardziej skompilowanych składni.
Prezentowane poniżej rozwiązanie ma na celu zastąpienie wbudowanego firewalla standardowymi regułkami iptables.
UWAGA: jeżeli nie wiesz co to jest iptables, jak działa kształtowanie ruchu i co można zrobić za pomocą iptables w linuksie - ten poradnik nie jest dla Ciebie. Poniższe rozwiązanie z pewnymi modyfikacjami działa od jakiegoś czasu u mnie - co nie oznacza że będzie działać dobrze wszędzie i u każdego. Traktuj to jako wskazówki a nie ścisłe wytyczne których masz się trzymać. Początkową lekturą może być Lartc (PL).

Skrypt

Jeżeli ktoś jest obeznany z iptables może podobny skrypt napisać samodzielnie. Poniższy jest chyba najprostszy z możliwych. Wychodzimy z założenia, że dopuszczamy cały ruch wychodzący (przechodzący) a wszystko na wejściu jest odrzucane (przez polityki domyślne).


    #!/bin/sh /etc/rc.common
    
    WAN=$(uci get network.wan.ifname)
    IPT=/usr/sbin/iptables
    START=19
    
    start() {
        $IPT -F
        $IPT -F -t nat
        $IPT -F -t mangle
        $IPT -P OUTPUT ACCEPT
        $IPT -P FORWARD ACCEPT
        $IPT -P INPUT DROP
        $IPT -A INPUT ! -i ${WAN} -j ACCEPT
        $IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
        $IPT -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE
    }

    stop() {
        $IPT -P INPUT ACCEPT
        $IPT -P OUTPUT ACCEPT
        $IPT -P FORWARD ACCEPT
        $IPT -F
        $IPT -F -t nat
        $IPT -F -t mangle
    }

Plik trzeba zapisać w katalogu /etc/init.d pod nazwą firewall_custom.

Konfiguracja

Należy wyłączyć wbudowany firewall, włączyć nasz nowy i zrobić restart rutera


    # /etc/init.d/firewall disable
    # /etc/init.d/firewall stop
    # chmod 755 /etc/init.d/firewall_custom
    # /etc/init.d/firewall_custom enable
    # /etc/init.d/firewall_custom start

Modyfikacje

Oczywiście skrypt można dowolnie zmodyfikować - od zmian w stosie tcp/ip, poprzez ustawienie priorytetów czy znaczników QoS a na logowaniu skończywszy. Oto jedne z przydanych poleceń, najczęściej oczekiwanych (do dopisania na końcu w sekcji ))start__)

Otworzenie portu

Np. portu 22 - ssh


    $IPT -A INPUT -i ${WAN} -p tcp --dport 22 -j ACCEPT

Przekierowanie portu

Np. dla torrentów - port 12345 będzie przekierowany do komputera 192.168.1.100


    $IPT -t nat -A PREROUTING -i ${WAN} -p tcp --dport 12345 -j DNAT --to-destination 192.168.1.100:12345

Oczywiście w OpenWrt mamy szereg rozszerzeń iptables, więc będą działały opcje multiport/mac/limit itd. Można tu już robić dowolnie stosownie to potrzeb.

Zakończenie

Tak zbudowany firewall ma wszystko jest w jednym pliku, więc można się posiłkować gotowymi skryptami znalezionymi w internecie. Wadą tego firewalla jest to, że nie może być konfigurowany przez www/LuCI. Ten firewall to tylko zbiór reguł iptables - więc można odpowiedni firewall wygenerować sobie wieloma programami dostępnymi na linuksa.