OpenWrt - Własny firewall
Wymiana firwalla w OpenWrt na własnyOstatnia zmiana: 2009-09-08 17:49
1. Skrypt
2. Konfiguracja
3. Modyfikacje
3.1. Otworzenie portu
3.2. Przekierowanie portu
4. Zakończenie
Firewall w ostatnich wersjach OpenWrt Kamikaze jest dość skomplikowany. Wymuszenie składni w pliku /etc/config/firewall zgodnej z LuCI 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=44
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 state --state 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
}
Konfiguracja
Należy "wyłączyć" plik /etc/hotplug.d/iface/20-firewall który w tym przypadku nie spełnia swojej roli. Należy dodać jako pierwszą linię polecenie wyjścia, żeby wyglądało to w taki sposób
exit 0
. /lib/firewall/uci_firewall.sh
unset ZONE
...
/etc/init.d/firewall disable
chmod 755 /etc/init.d/firewall_custom
/etc/init.d/firewall_custom enable
reboot
Modyfikacje
Oczywiście skrypt można dowolnie zmodyfikować - od zmian w stosie tcpip, 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 startOtworzenie 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
Zakończenie
Tak zbudowany firewall robi dokładnie to samo co standardowy, ale 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.Czy taka modyfikacja ma sens? Im mniej regułek tym szybsze przesyłanie pakietów. Jeżeli oczekujemy bardziej skompilowanych rzeczy od firewalla to i tak musimy zakładać osoby plik, bo ten od LuCI składniowo nie wspiera żadnych innych zapisów. Więc wszystko zależy od konkretnego przeznaczenia.