Konfiguracja Firewalla opartego o iptables w Ubuntu Server Edition (10.04 LTS)

Po instalacji systemu przyszła pora na zabezpieczenie się przed światem zewnętrznym, przecież jest pełen niebezpieczeństw. Należy szybko zamknąć niepotrzebnie otwarte furtki za pomocą zapory ogniowej (jak to śmiesznie brzmi po polsku ;-) wolę angielskie określenie lub ogniomurek :-D )

Ponieważ nie lubię natywnego formatu reguł iptables przy konfiguracji firewalla stworzę skrypt pośredni z poleceniami dla iptables. Ten format jest bardziej czytelny (przynajmniej dla mnie) w późniejszej edycji. Po stworzeniu konfiguracji wykonamy skrypt z konfiguracją a następnie zapiszemy reguły przy pomocy iptables-save. Przy starcie naszego linuxa będziemy wczytywać przygotowany w ten sposób zestaw reguł poprzez polecenie iptables-restore.

W konsoli dla wygody (edycja niektórych plików wymaga uprawnień root-a) przechodzimy na konto administratora systemu komendą sudo su.
Tworzymy plik z regułami IP, będzie on zawierał konfigurację w formacie akceptowanym przez program iptables-restore. Następnie musimy nadać prawa do wykonywania pliku (możemy sprawdzić uprawnienia ls -l zmodyfikowane prawa dla pliku: -rwxr-xr-x ).

Aby reguły były wczytywane podczas każdego uruchomienia systemu należy je dopisać do skryptu wykonywanego podczas startu – wykorzystamy plik z konfiguracją sieci /etc/network/interfaces.
Edycję pliku można dokonać dowolnym edytorem ja korzystam z menadżera plików Midnight Commander (polecenie mc – aby doinstalować aplikację  należy wykonać apt-get install mc)  dla wygody można użyć edytora ze środowiska graficznego gedit. Uruchomienie gedit z konsoli na prawach administratora powoduje, że edycja programem również następuje jako root (nie będzie problemu z dostępem do pliku).

W analogiczny sposób jak poprzednio tworzymy plik skryptu który będzie dla nas bardziej czytelny, będzie to nasz projekt firewalla.
Proponuję trzymać skrypt w katalogu użytkownika /home/user/iptables.rules.
touch /home/user/iptables.rules
chmod +x /home/user/iptables.rules
Edytujemy plik i wstawiamy naszą konfigurację.

Nasza konfiguracja firewall’a jest już gotowa. Ładujemy reguły poprzez wykonanie utworzonego przed chwilą skryptu.
Będąc w tym samym katalogu co skrypt wykonujemy polecenie ./iptables.rules w innym przypadku wywołujemy skrypt poprzez pełną ścieżkę /home/user/iptables.rules. Sprawdzamy czy reguły firewalla prawidłowo się załadowały (polecenie iptables -L)
następnie zapisujemy reguły firewalla załadowane w systemie do pliku, który będzie ładowany podczas startu systemu.
iptables-save > /etc/iptables.rules W celu późniejszej edycji wystarczy dopisać kolejne reguły wykonać skrypt i zapisać je do pliku /etc/iptables.rules. Po zmianach najlepiej jest przetestować efekt (tak dla pewności) jakimś skanerem portów w sieci jest dużo skanerów online, co umożliwi nam przetestowanie otwartych portów z zewnątrz. Jak dla mnie jest to najbardziej czytelna forma panowania nad ruchem sieciowym. Jeśli coś jest niejasne albo  „masło jest zbyt maślane” ;-) pisać w komentarzach. Postaram się poprawić.

4 thoughts on “Konfiguracja Firewalla opartego o iptables w Ubuntu Server Edition (10.04 LTS)

  • 26 sierpnia 2012 at 19:49
    Permalink

    Mam problem z firewall’em pod Ubuntu 12.04. Po napisaniu skryptu i załadowaniu reguł firewall odcina mi internet, żadne pakiety nie przychodzą i nie wychodzą. Niżej zamieszczam iptables i skrypt. Jak ktoś może to niech pomoże rozwiązać problem.

    IPTABLES

    #Początek firewalla
    iptables -P INPUT ACCEPT
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    #Blokujemy niechciane adresy IP.
    iptables -A INPUT -d 209.222.138.10 -j DROP
    #Otwieranie portów dla wybranych usług.
    iptables -A INPUT –protocol tcp –destination-port 21 -j ACCEPT
    iptables -A INPUT –protocol tcp –destination-port 22 -j ACCEPT
    iptables -A INPUT –protocol tcp –destination-port 80 -j ACCEPT
    iptables -A INPUT –protocol tcp –destination-port 443 -j ACCEPT
    iptables -A INPUT –protocol tcp –destination-port 3306 -j ACCEPT
    iptables -A INPUT –protocol tcp –destination-port 6667 -j ACCEP
    iptables -A INPUT –protocol tcp –destination-port 8080 -j ACCEPT
    #Akceptacja ruchu na loopback, usługi muszą mieć możliwość komunikowania się między sobą.
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A FORWARD -i lo -j ACCEPT
    ——————————————————————————

    SKRYPT

    1
    #!/bin/bashce
    auto lo
    iface lo inet loopback
    #deklaracja zmiennych
    IPTABLES=/sbin/iptables #ścieżka do iptables
    NO_ROUTING=1 #czy forwardować pakiety?
    #Usuwamy poprzednie reguły
    $IPTABLES -F INPUT
    $IPTABLES -F FORWARD
    $IPTABLES -F OUTPUT
    #Zapisujemy cały ruch w logach
    $IPTEBLES -A INPUT -j LOG -m limit –limit 15/hour #15 logów na godzine
    $IPTABLES -A OUTPUT -j LOG -m limit –limit 15/hour
    $IPTABLES -A FORWARD -j LOG -m limit –limit 15/hour
    #Wyłączamy odpowiedzi na pingi
    echo „1” > /proc/sys/net/ipv4/icmp_echo_ignore_all
    #Włączamy logowanie dziwnych pakietów (spoofed.source routed.redirectc)
    echo „1” > /proc/sys/net/ipv4/conf/all/log_martians
    #dla poniższych argumentów 1 udostępnia usługę,
    #każda inna wartość zabrania do niej dostępu
    OPEN_FTP=1 #czy udostępnić usługę FTP
    OPEN_SSH=1 #czy udostępnić usługę SSH
    OPEN_HTTP=1 #czy udostępnić usługę HTTP
    #ustawiamy domyślną politykę
    $IPTABLES -P INPUT DROP
    if [ „$NO_ROUTING” = „1” ]; then
    $IPTABLES -P FORWARD DROP
    fi
    if [ „$OPEN_FTP” = „1” ]; then
    $IPTABLES -A INPUT –protocol tcp –destination-port 21 -j ACCEPT
    fi
    2
    if [ „$OPEN_SSH” = „1” ]; then
    $IPTABLES -A INPUT –protocol tcp –destination-port 22 -j ACCEPT
    fi
    if [ „$OPEN_HTTP” = „1” ]; then
    $IPTABLES -A INPUT –protocol tcp –destinaton-port 80 -j ACCEPT
    fi
    #otwieramy jeszcze drogę powrotną pakietom FTP,HTTP,SSH…
    $IPTABLES -A INPUT –protocol tcp –source-port 21 -j ACCEPT
    $IPTABLES -A INPUT –protocol tcp –source-port 22 -j ACCEPT
    $IPTABLES -A INPUT –protocol tco –source-port 80 -j ACCEPT
    $IPTABLES -A INPUT –protocol tcp –source-port 8080 -j ACCEPT
    #droga do DNS-a
    $IPTABLES -A INPUT -s 85.193.224.2 -j ACCEPT

  • 13 maja 2012 at 23:16
    Permalink

    Bardzo ładnie i jasno napisany! – Nie mniej jednak taki z serii szybki i prosty. :)

    Może pomógłbyś w rozwikłaniu męczącego mnie problemu. Jak zablokować cały ruch dla danego IP i zezwolić mu wejść tylko na WWW (port:80) na strony, które są ujęte w regułce iptables dla tego IP ?? :)

  • 22 kwietnia 2012 at 07:49
    Permalink

    dzięki :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*