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.