Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

iptables - prośba o ocenę firewalla

farmerro 17 Jan 2012 08:59 4147 19
  • #1
    farmerro
    Level 16  
    Witam!

    Dopiero zaczynam przygodę z iptables. Napisałem więc własny skrypt firewalla dla maszyny (serwera usług) z dwoma kartami sieciowymi. Prosiłbym bardziej doświadczonych userów o ocenę mojego firewalla (chodzi głównie o bezpieczeństwo).

    Code:
    #!/bin/sh
    

    #CICHY FIREWALL DLA SERWERA Z USLUGAMI NP. WWW
    #I PRACUJACEGO JAKO BRAMKA/ROUTER
    #eth0 - LAN 192.168.0.1
    #eth1 - WAN 192.168.2.6

    #CZYSZCZENIE STARYCH REGUL
    iptables -F
    iptables -X
    iptables -t nat -X
    iptables -t nat -F
    iptables -t mangle -F
    iptables -t mangle -X

    # USTAWIENIE DOMYSLNEJ POLITYKI NA DROP
    iptables -P INPUT DROP

    # SNAT - zamienia IP klienta z LAN'u na IP serwera (zewnetrzne)
    #WLACZENIE SOURCE NAT (SNAT) ZMIENIC IP 1.2.3.4 - na zewnetrzne IP
    iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.2.6



    #FORWARDOWANIE (przykładowe port 80 -> 8765)
    iptables -t nat -I PREROUTING 1 --protocol tcp --destination-port 8765 -j DNAT --to 192.168.0.1:80

    # AKCEPTOWANIE WSZYSTKICH PRZYCHODZCYCH POLACZEN OPROCZ eth1 (WAN)
    iptables -A INPUT ! -i eth1 -j ACCEPT

    # KONTROLA STANU PAKIETU, PRZEPUSZCZENIE PAKIETOW ISTNIEJACYCH POLACZEN
    # (KTORE WYSZLY Z eth0)
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #WLACZENIE DOSTEPU DO SERWISOW (porty)
    SERVICES="21 80 443 5832 5001 60000:65000"
    for x in ${SERVICES}
    do
    iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
    done

    #UDAWANIE ZE NIE MA URUCHOMIONYCH ZADNYCH SERWISOW i BLOKOWANIE PINGOW z
    #WAN'u
    iptables -A INPUT -p tcp -i eth1 -j REJECT --reject-with tcp-reset
    iptables -A INPUT -p udp -i eth1 -j REJECT --reject-with icmp-port-unreachable

    #WYLACZENIE ECN
    echo "0" > /proc/sys/net/ipv4/tcp_ecn

    #ZABEZPIECZENIE PRZED PODSZYWANIEM SIE - SPOOFING
    INTERFACES="lo eth0 eth1"
    for x in ${INTERFACES}
    do
    echo "1" > /proc/sys/net/ipv4/conf/${x}/rp_filter
    done

    #WLACZENIE FORWARDOWANIA
    echo "1" > /proc/sys/net/ipv4/ip_forward


    Za wszelkie sugestie i uwagi będę wdzięczny,
    pozdrawiam!
  • Helpful post
    #2
    User removed account
    Level 1  
  • Helpful post
    #3
    witux
    VIP Meritorious for electroda.pl
    Tu masz prosty skrypt chroniący z zewnątrz przed nmap'em i DoS.
    Code:

    # wlaczenie w kernelu forwardowania
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # czyszczenie starych regul
    iptables -F
    iptables -X
    iptables -t nat -X
    iptables -t nat -F
    # ustawienie polityki dzialania
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    # zezwolenie nna laczenie sie z naszym zewnetrznym ip po ssh

    iptables -A INPUT -i lo -j ACCEPT
    iptables -A FORWARD -o lo -j ACCEPT

    iptables -A INPUT -s 0/0 -d xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT
    iptables -A OUTPUT -s 0/0 -d  xxx.xxx.xxx.xxx  -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -s 0/0 -d  xxx.xxx.xxx.xxx  -p udp --dport 22 -j ACCEPT
    iptables -A OUTPUT -s 0/0 -d  xxx.xxx.xxx.xxx  -p udp --dport 22 -j ACCEPT
    # polaczenia nawiazane
    iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
    iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
    iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
    # udostepniaie internetu w sieci lokalnej
    iptables -t nat -A POSTROUTING -s yyy.yyy.yyy.yyy/zz -j MASQUERADE
    iptables -A FORWARD -s yyy.yyy.yyy.yyy/zz -j ACCEPT


    # Blokada atakow DoS oraz skanowania

    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j LOG --log-prefix "ACK scan: "
    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j DROP # Metoda ACK (nmap -sA)
    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j LOG --log-prefix "FIN scan: "
    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j DROP # Skanowanie FIN (nmap -sF)
    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH PSH -j LOG --log-prefix "Xmas scan: "
    iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH -j DROP # Metoda Xmas Tree (nmap -sX)
    iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG -j LOG --log-prefix "Null scan: "
    iptables -A INPUT -m conntrack --ctstate INVALID -p tcp ! --tcp-flags SYN,RST,ACK,FIN,PSH,URG SYN,RST,ACK,FIN,PSH,URG -j DROP # Skanowanie Null (nmap -sN)
    iptables -N syn-flood
    iptables -A INPUT -p tcp --syn -j syn-flood
    iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
    iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j LOG --log-prefix "SYN-flood: "
    iptables -A syn-flood -j DROP


    Dodano po 12 [minuty]:

    Legenda:
    xxx.xxx.xxx.xxx - adres WAN
    yyy.yyy.yyy.yyy - adres LAN
    zz - CIDR maski podsieci
  • #4
    farmerro
    Level 16  
    witux wrote:
    Tu masz prosty skrypt chroniący z zewnątrz przed nmap'em i DoS.


    OK, dzięki... ale czy przed nmapem i atakami DoS nie chroni mnie przypadkiem:
    Code:

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


    oraz:

    Code:
    iptables -A INPUT -p tcp -i eth1 -j REJECT --reject-with tcp-reset
    
    iptables -A INPUT -p udp -i eth1 -j REJECT --reject-with icmp-port-unreachable


    Jak skanuję nmapem to nic nie znajduję... po wyłączeniu tych regułek, nmap zaczyna wykrywać....


    Co do:
    Code:
    # udostepniaie internetu w sieci lokalnej
    
    iptables -t nat -A POSTROUTING -s yyy.yyy.yyy.yyy/zz -j MASQUERADE
    iptables -A FORWARD -s yyy.yyy.yyy.yyy/zz -j ACCEPT

    to nie mogę użyć, mam na WAN'ie adres statyczny...
  • Helpful post
    #5
    witux
    VIP Meritorious for electroda.pl
    Użyj nmap-a i jeśli nie wywali portów na wierzch to jest ok.
    Code:

    # udostepniaie internetu w sieci lokalnej
    iptables -t nat -A POSTROUTING -s yyy.yyy.yyy.yyy/zz -j MASQUERADE
    iptables -A FORWARD -s yyy.yyy.yyy.yyy/zz -j ACCEPT

    Jest dobrze.
  • #6
    User removed account
    Level 1  
  • #7
    farmerro
    Level 16  
    Wrzucam wynik z Zenmap-a (nakładki graficznej na nmapa, zwykły nmap mi się jakoś nie chciał uruchomić)

    Ponadto musiałem pominąć skanowanie UDP (program się zawieszał).

    nmap -sS -p 1-65535 -T4 -A -v 192.168.2.6

    Code:

    Starting Nmap 5.51 ( http://nmap.org ) at 2012-01-17 13:49 Środkowoeuropejski czas stand.

    NSE: Loaded 57 scripts for scanning.

    Initiating ARP Ping Scan at 13:49

    Scanning 192.168.2.6 [1 port]

    Completed ARP Ping Scan at 13:49, 0.42s elapsed (1 total hosts)

    Initiating Parallel DNS resolution of 1 host. at 13:49

    Completed Parallel DNS resolution of 1 host. at 13:50, 5.51s elapsed

    Initiating SYN Stealth Scan at 13:50

    Scanning 192.168.2.6 [65535 ports]

    Discovered open port 443/tcp on 192.168.2.6

    Discovered open port 80/tcp on 192.168.2.6

    Discovered open port 21/tcp on 192.168.2.6

    SYN Stealth Scan Timing: About 11.21% done; ETC: 13:54 (0:04:05 remaining)

    SYN Stealth Scan Timing: About 21.18% done; ETC: 13:54 (0:03:47 remaining)

    SYN Stealth Scan Timing: About 36.22% done; ETC: 13:54 (0:02:40 remaining)

    SYN Stealth Scan Timing: About 50.31% done; ETC: 13:54 (0:01:59 remaining)

    SYN Stealth Scan Timing: About 65.35% done; ETC: 13:53 (0:01:20 remaining)

    Discovered open port 5832/tcp on 192.168.2.6

    SYN Stealth Scan Timing: About 80.37% done; ETC: 13:53 (0:00:44 remaining)

    Completed SYN Stealth Scan at 13:53, 217.67s elapsed (65535 total ports)

    Initiating Service scan at 13:53

    Scanning 4 services on 192.168.2.6

    Completed Service scan at 13:53, 11.49s elapsed (4 services on 1 host)

    Initiating OS detection (try #1) against 192.168.2.6

    Retrying OS detection (try #2) against 192.168.2.6

    Retrying OS detection (try #3) against 192.168.2.6

    Retrying OS detection (try #4) against 192.168.2.6

    Retrying OS detection (try #5) against 192.168.2.6

    NSE: Script scanning 192.168.2.6.

    Initiating NSE at 13:54

    Completed NSE at 13:55, 30.07s elapsed

    Nmap scan report for 192.168.2.6

    Host is up (0.92s latency).

    Not shown: 65531 closed ports

    PORT     STATE SERVICE VERSION

    21/tcp   open  ftp     ProFTPD

    80/tcp   open  http    Apache httpd

    |_http-methods: No Allow or Public header in OPTIONS response (status code 200)

    |_http-title: phpMyAdmin

    |_http-favicon: Unknown favicon MD5: D037EF2F629A22DDADCF438E6BE7A325

    443/tcp  open  http    Apache httpd

    | http-methods: GET HEAD POST OPTIONS TRACE

    | Potentially risky methods: TRACE

    |_See http://nmap.org/nsedoc/scripts/http-methods.html

    |_http-title: 404 Not Found

    5832/tcp open  ssh     OpenSSH 5.1p1 Debian 5 (protocol 2.0)

    | ssh-hostkey: 1024 7b:c4:38:3e:12:54:45:64:3a:b9:f2:a0:d6:0b:6b:25 (DSA)

    |_2048 5a:28:7c:d2:53:b3:a7:7b:c7:28:ae:b2:b8:ec:dd:bd (RSA)

    MAC Address: 00:08:54:02:E5:BE (Netronix)

    Device type: general purpose|WAP|terminal|proxy server

    Running (JUST GUESSING): Linux 2.6.X|2.4.X (98%), PheeNet embedded (91%), Chip PC Linux (90%), SonicWALL embedded (89%), Gemtek embedded (89%), Siemens embedded (89%), Linksys embedded (89%), Aastra embedded (89%)

    Aggressive OS guesses: Linux 2.6.23 - 2.6.26 (98%), Linux 2.6.22 (SPARC) (95%), Linux 2.6.13 - 2.6.31 (92%), Linux 2.6.22 - 2.6.23 (92%), Linux 2.6.24 - 2.6.25 (92%), PheeNet WAP-854GP WAP (91%), Linux 2.4.21 (90%), Linux 2.6.22 (ARM) (90%), Linux 2.6.22 (90%), Chip PC XtremePC thin client (90%)

    No exact OS matches for host (test conditions non-ideal).

    Network Distance: 1 hop

    Service Info: OS: Linux



    TRACEROUTE

    HOP RTT       ADDRESS

    1   916.39 ms 192.168.2.6



    Read data files from: C:\Program Files (x86)\Nmap

    OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

    Nmap done: 1 IP address (1 host up) scanned in 311.18 seconds

               Raw packets sent: 65672 (2.899MB) | Rcvd: 100448 (4.485MB)

  • #8
    User removed account
    Level 1  
  • #9
    farmerro
    Level 16  
    192.168.2.6 - to jest mój adres zewnętrzny (na razie klasa C służy do testów w moim LAN'ie)
    192.168.0.1 - to jest adres LAN, któremu serwer zapewnia dostęp do WAN'u.

    Na razie wszystko testuje! Także skanowanie 192.168.2.6 ma jak najbardziej sens, docelowo adres ten może zostać zmieniony na publiczny i wpięty bezpośrednio w WAN.

    Na początku napisałem, że zaczynam przygodę z iptables / uczę się więc chciałem spytać o opinię doświadczonych userów na temat mojego firewall.

    Dyskusja zacieśniła się na temacie IPTABLES vs NMAP
    ... O.K. świetnie także chciał bym przetestować mojego firewall pod tym kątem.

    Wynik skanowania TCP (-sS) dałem wyżej.

    Wyniku z nmap -sU -p 1-65535 192.168.2.6 chyba nie wkleję... program wisi już jakieś 20minut...

    Skanuję od strony mojego "WAN'u" (chociaż to chyba nie ma znaczenia).
  • #10
    User removed account
    Level 1  
  • #11
    witux
    VIP Meritorious for electroda.pl
    Znasz swój publiczny adres IP (operatora)?
    http://ip.lanpolis.pl/
    Warto sprawdzić od strony Internetu. Tak jak napisał jurek.adam.
  • #12
    farmerro
    Level 16  
    Wiem co chcecie mi powiedzieć: że należało by sprawdzić firewalla z Internetu, tak jak go widzi napastnik.

    Chcę sprawdzić jak działa firewall mojej maszyny (bez wliczania w to firewalla operatora - na razie go pomińmy).

    Załóżmy więc, że teraz jestem napastnikiem i skanuję zewnętrzny adres IP mojego serwera, który na czas testów ma adres 192.168.2.6 i stoi w mojej sieci oraz jest w nią wpięty interfejsem, który docelowo będzie pracował z IP zewnętrznym (wpiętym bezpośrednio w WAN od ISP).

    Albo prościej: chcę sprawdzić firewall mojego serwera pracującego w LAN'ie z adresem 192.168.2.6, za serwerem jest druga sieć LAN z adresem 192.168.0.0...

    Nmap mi podał:
    Code:

    PORT     STATE SERVICE VERSION
    21/tcp   open  ftp     ProFTPD
    80/tcp   open  http    Apache httpd
    443/tcp  open  http    Apache httpd
    5832/tcp open  ssh     OpenSSH 5.1p1 Debian 5 (protocol 2.0)


    Więc czy mam rozumieć, że firewall działa poprawnie? Rozumiem, że nmap wykrył mi te porty, ponieważ:
    Code:
    #WLACZENIE DOSTEPU DO SERWISOW (porty)
    
    SERVICES="21 80 443 5832 5001 60000:65000"
    for x in ${SERVICES}
    do
    iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
    done


    Czy da się tak skonfigurować iptables, żeby nmap nie mógł skanować portów? Jeżeli zablokuję pakiety, np SYN to klient nie będzie mógł się połączyć z usługami mojego serwera...
  • #13
    witux
    VIP Meritorious for electroda.pl
    farmerro wrote:
    Czy da się tak skonfigurować iptables, żeby nmap nie mógł skanować portów? Jeżeli zablokuję pakiety, np SYN to klient nie będzie mógł się połączyć z usługami mojego serwera...

    Użyj mojej konfiguracji i sprawdź.
  • #14
    farmerro
    Level 16  
    witux wrote:
    farmerro wrote:
    Czy da się tak skonfigurować iptables, żeby nmap nie mógł skanować portów? Jeżeli zablokuję pakiety, np SYN to klient nie będzie mógł się połączyć z usługami mojego serwera...

    Użyj mojej konfiguracji i sprawdź.


    Tu właśnie użyłem Twojej konfiguracji...
  • #15
    User removed account
    Level 1  
  • #16
    witux
    VIP Meritorious for electroda.pl
    farmerro nie histeryzuj. Masz IP z puli prywatnej więc nie jesteś wystawiony na świat. Druga sprawa to raczej na pewno operator nie dopisał Cię do strefy DMZ.
  • #17
    farmerro
    Level 16  
    Ja cie kręcę, ale jaja.... nie rozumiecie mnie w ogóle....

    Mam pomysł ! Zapomnijcie o całej rozmowie powyżej (szkoda nowy temat zakładać)!

    Zaczynamy:

    Mam serwer, który pracuje tylko w sieci LAN1 (nie jest i nie będzie nigdy podłączony do WAN'u) Sieć LAN1 nie ma również połączenia z WANem. Serwer ten udostępnia we wspomnianym LANie pewne usługi (np. http, ftp, ssh) i jest do niego podłączony interfejsem eth1 o nr IP 192.168.2.6 . Mimo usług, serwer pełni również rolę bramy dla kolejnej sieci - LAN2 192.168.0.0/24.

    iptables - prośba o ocenę firewalla

    Na serwerze działa firewall (ten z pierwszego postu). Ma otwarte porty TCP np. 80, 21, ssh.
    Code:
    #WLACZENIE DOSTEPU DO SERWISOW (porty)
    
    SERVICES="21 80 443 5832 5001 60000:65000"
    for x in ${SERVICES}
    do
    iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
    done


    W sieci LAN1 pojawia się intruz z oprogramowanie nmap i zaczyna skanować porty TCP serwera 192.168.2.6 i otrzymuje wynik:
    Code:

    PORT     STATE SERVICE VERSION
    21/tcp   open  ftp     ProFTPD
    80/tcp   open  http    Apache httpd
    443/tcp  open  http    Apache httpd


    PYTANIA:

    1. Czy istnieją regułki dla iptables, które powstrzymają nmap'a? Podejrzewam, że nie - nmap skanuje TCP używając pakietu SYN, który jest wymagany przy ustanawianiu połączenia TCP (Three-way handshake).
    2. Co za różnica czy skanuję nmapem serwer działający w LANie czy w WANie? Przecież jak zmienię mu IP eth1 na zewnętrzne i wepnę od razu do WANu, nmap pokaże to samo...

    Mam nadzieję, że rozumiecie mnie teraz...
  • Helpful post
    #18
    witux
    VIP Meritorious for electroda.pl
    Jeśli włączasz dostęp do serwisów w firewall'u na nmap będziesz miał widoczne otwarte porty.
    U mnie wygląda to tak w przypadku włączonego serwisu ssh
    Code:

    root@debian:/home/witux# nmap 192.168.88.110

    Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-17 22:27 CET
    Interesting ports on 192.168.88.110:
    Not shown: 999 filtered ports
    PORT   STATE SERVICE
    22/tcp open  ssh
    MAC Address: 00:12:79:DB:D4:20 (Hewlett Packard)

    Nmap done: 1 IP address (1 host up) scanned in 5.10 seconds
    root@debian:/home/witux#


    Dodano po 4 [minuty]:

    W przypadku wyłączenia dostępu do ssh w firewallu będzie wyglądało tak:
    Code:

    root@debian:/home/witux# nmap 192.168.88.110

    Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-17 22:29 CET
    All 1000 scanned ports on 192.168.88.110 are filtered
    MAC Address: 00:12:79:DB:D4:20 (Hewlett Packard)

    Nmap done: 1 IP address (1 host up) scanned in 21.45 seconds
    root@debian:/home/witux#

  • Helpful post
    #19
    User removed account
    Level 1  
  • #20
    farmerro
    Level 16  
    Dobra! temat uznaję za rozwiązany

    Dzięki!