Hálózat 2.
Hálózat 2.
  Hálózati szintű hozzáférés-korlátozás
    Tűzfalak
      Típusai
        Hálózati szolgáltatási szint szerint
          csomagszűrő tűzfal
            állapot nélküli
            az áthaladó csomagok mintázata alapján dönt
            jellemzően egy memória nélküli táblázat
            érzékeny az IP spoofing támadásra
          stateful
            követi a TCP 3way handshake lépéseit
              SYN
              SYN-ACK
              ACK
            jellemzően egy állapottal bővített táblázat
            képes egy kimenő kérésre érkező válaszok feltételes átengedésére
            érzékeny a SYN flood DOS támadásra
            http://en.wikipedia.org/wiki/Stateful_firewall
          application level
            gyakorlatilag egy szoftveres átjátszó állomás (proxy)
            harmadik szereplőként közbelépül a TCP kapcsolatba
            képes "becsomagolt" csatornák ellenőrzésére
            a csatorna bizalmassága sérül (SSL)
            teljesítményérzékeny
            http://en.wikipedia.org/wiki/Application_layer_firewall
          "personal"
            az operációs rendszer hálózati funkcióiba épül be
            kritika: tudatos felhasználói döntések hiánya
            http://en.wikipedia.org/wiki/Personal_firewall
        Közbeépülés módja szerint
          Átjáró
          Transzparens
      iptables
        stateful
        moduláris felépítés
        hierarchikus döntési szerkezet
        user-space bekapcsolódási lehetőség
        connection tracking, marking
        quota, accounting
        http://www.netfilter.org/
      etables
        filtering tool for a bridging firewall
        http://ebtables.sourceforge.net/
      http://en.wikipedia.org/wiki/Firewall_(networking)
    TCP Wrappers
      host alapú ACL rendszer
      user space megoldás
      futás közbeni újrakonfiguráció
      IP, DNS és ident alapú azonosítás
      /etc/hosts.allow
/etc/hosts.deny
      http://en.wikipedia.org/wiki/TCP_Wrapper
  Linux hálózati tűzfal
    Csomagok útvonalai a Linux netfilterben (nat és filter táblák)
    felépítés
      táblák (tables)
        filter table
          csomagszűrő szabályok
          default tábla
          beépített: INPUT, OUTPUT, FORWARD chain
          lenny2# iptables -L -nv
        nat table
          címfordító szabályok
          beépített: PREROUTING, POSTROUTING, OUTPUT chain
          lenny2# iptables -t nat -L -nv
      láncok (chains)
        kezelésük
          listázás: -L, --list [chain]
          törlés: -Z, --zero [chain]
          számlálók nullázása: -Z, --zero [chain]
          létrehozás: -N, --new-chain chain
          törlés: -X, --delete-chain [chain]
          default policy: -P, --policy chain target
          átnevezés: -E, --rename-chain old-chain new-chain
        hívásuk
          -j, --jump target
          -g, --goto chain
        táblánként beépített láncok
        saját láncok
          lenny2# iptables -N myChain
          lenny2# iptables -I INPUT -j myChain
          lenny2# iptables -L
          lenny2# iptables -X myChain
          lenny2# iptables -L
      szabályok (rules)
        kezelésük
          lánchoz hozzáfűzés: -A, --append chain rule-specification
          láncból törlés:
            -D, --delete chain rule-specification
            -D, --delete chain rulenum
          láncba beszúrás: -I, --insert chain [rulenum] rule-specification
          szabály felülírása: -R, --replace chain rulenum rule-specification
        feldolgozási cél (target)
          hívásuk: -j, --jump target
          built-in policy targets
            ACCEPT
              a chain továbbengedi az adott csomagot
            DROP
              a chain eldobja az adott csomagot
            QUEUE
              a chain user-space irányába továbbítja a csomagot
            RETURN
              a chain visszatér a feldolgozásból
              a csomaggal nem történik közvetlenül semmi
              vagy a hívó chain folytatódik
              vagy ha nincs, a default chain policy lép életbe
            filter table FORWARD chain default policy
              lenny3# ping 192.168.1.1
              lenny2# iptables -P FORWARD DROP
              lenny2# iptables -P FORWARD ACCEPT
          target extensions
            DNAT
              célcím változtatása (Destination Network Address Translation)
              a chain a csomagot továbbengedi (ACCEPT)
              csak nat tábla PREROUTING és OUTPUT chain
              opciók
                célcím(ek) megadása: --to-destination [ipaddr][-ipaddr][:port-port]
                véletlenszerű terheléselosztás: --random
              példa
                lenny1# netcat -u -l -p 12345 &
                lenny1# netcat -u -l -p 12346 &
                lenny1# netcat -u -l -p 12347 &
                lenny2# iptables -t nat -I PREROUTING
-p udp --dport 10000
-j DNAT --to-destination 192.168.1.1:12345-12347 --random
                lenny2# iptables -L -t nat -nv
                lenny2# tcpdump -n
                lenny3# echo hello world | netcat -u 10.0.2.2 10000
                lenny3# echo hello world | netcat -u 10.0.2.2 10000
                lenny3# echo hello world | netcat -u 10.0.2.2 10000
            LOG
              naplózási szolgáltatás
              a chain a csomag állapotát nem változtatja
              opciók
                syslog log level: --log-level szám
                naplóbejegyzés előtag: --log-prefix string
                tcp szekvencia szám naplózása: --log-tcp-sequence
                tcp opciók naplózása: --log-tcp-options
                ip opciók naplózása: --log-ip-options
                userid naplózása: --log-uid
              példa
                lenny2# iptables -I FORWARD -p ICMP -j LOG --log-prefix "!!! ICMP FW !!! "
                lenny2# tail -f /var/log/syslog
                lenny3# ping 192.168.1.1
            MASQUERADE
              automatikus címfordítás (dinamikus kimenő IP címre)
              csak nat tábla POSTROUTING chain
              interfész kikapcsolása esetén rögtön dobja a TCP kapcsolatokat!
              opciók
                forrásport tartomány (automatikus helyett): --to-ports port[-port]
                véletlenszerű portok: --random
              példa
                lenny1# tcpdump -n
                lenny3# ping 192.168.1.1
                lenny2# iptables -t nat -I POSTROUTING -j MASQUERADE
                lenny1# tcpdump -n
                lenny3# ping 192.168.1.1
            REDIRECT
              áthaladó csomagok eltérítése helyi gépre
              csak PREROUTING és OUTPUT chain
              opciók
                célport tartomány (automatikus helyett): --to-ports port[-port]
                véletlenszerű portok: --random
              példa
                lenny1# tcpdump -n
                lenny2# tcpdump -n -i any
                lenny3# ping 192.168.1.1
                lenny2# iptables -t nat -I PREROUTING -j REDIRECT
                lenny3# ping 192.168.1.1
                lenny2# tcpdump -n -i any
                lenny1# tcpdump -n
            REJECT
              csomagok visszautasítása
              kb.: DROP + ICMP ERROR
              opciók
                --reject-with type
              példa
                lenny1# tcpdump -n
                lenny3# ping 192.168.1.1
                lenny2# iptables -I FORWARD -j REJECT --reject-with icmp-net-prohibited
                lenny3# ping 192.168.1.1
                lenny1# tcpdump -n
            SNAT
              source network address translation
              csak nat tábla POSTROUTING chain
              opciók
                forráscím tartomány (automatikus helyett): --to-source ipaddr[-ipaddr][:port-port]
                véletlenszerű portok: --random
            stb... man iptables
        illesztési feltétel (match)
          beépített feltételek
            protokoll: -p, --protocol [!] protocol
            forrás IP: -s, --source [!] address[/mask]
            cél IP: -d, --destination [!] address[/mask]
            bejövő interfész: -i, --in-interface [!] name
            kimenő interfész: -o, --out-interface [!] name
            ip fragmens: [!] -f, --fragment
            számlálók beállítása: -c, --set-counters PKTS BYTES
          match extensions
            comment
              technikai megjegyzés
              --comment comment
              max 256 byte
            connbytes
              illesztés számontarott kapcsolatok forgalmára
              opciók
                forgalom határértékek: [!] --connbytes from:[to]
                adatforgalom iránya: --connbytes-dir [original|reply|both]
                számlálás módja: --connbytes-mode [packets|bytes|avgpkt]
              példa
                lenny1# netcat -l -p 12345
                lenny3# dd if=/dev/zero bs=10M count=1 | netcat 192.168.1.1 12345
                lenny2# iptables -I FORWARD -p tcp -m connbytes --connbytes 5000000:
--connbytes-dir both --connbytes-mode bytes --j REJECT --reject-with tcp-reset
                lenny1# netcat -l -p 12345
                lenny3# dd if=/dev/zero bs=1M count=1 | netcat 192.168.1.1 12345
                lenny1# netcat -l -p 12345
                lenny3# dd if=/dev/zero bs=10M count=1 | netcat 192.168.1.1 12345
            state
              illesztés állapotkövetési információk alapján
              opciók
                kapcsolat állapota: --state state
              példa
                lenny1# tcpdump -n
                lenny3# ping 192.168.1.1
                lenny2# iptables -P FORWARD DROP
                lenny1# tcpdump -n
                lenny2# iptables -I FORWARD -s 10.0.0.0/16 -j ACCEPT
                lenny1# tcpdump -n
                lenny2# iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
              conntrack
                bővített állapotinformációk
                SNAT/DNAT információkat is kezel
                opciók
                  kapcsolat állapota: --ctstate state
                  kapcsolat protokoll: --ctproto proto
                  eredeti forráscím: --ctorigsrc [!] address[/mask]
                  eredeti célcím: --ctorigdst [!] address[/mask]
                  válasz forráscím: --ctreplsrc [!] address[/mask]
                  válasz célcím: --ctrepldst [!] address[/mask]
                  belső conntrack állapot: --ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...]
                  hátralevő elévülési idő: --ctexpire time[:time]
            limit
              csomag gyakoriságra való illesztés
              opciók
                gyakoriság: --limit rate
                burst: --limit-burst number
              példa
                lenny2# iptables -P FORWARD DROP
                lenny2# iptables -I FORWARD -m limit --limit 2/sec -j ACCEPT
                lenny3# ping 192.168.1.1
                lenny3# ping -t 0.5 192.168.1.1
              hashlimit
                csomag gyakoriságra illesztés a cél és/vagy forrás figyelembevételével
                opciók
                  gyakoriság: --hashlimit rate
                  burst: --hashlimit-burst num
                  mit vegyen figyelembe: --hashlimit-mode dstip,srcip,dstport,srcport
                  /proc bejegyzés neve: --hashlimit-name foo
                  hash tábla mérete: --hashlimit-htable-size num
                  hash tábla bejegyzéseinek száma: --hashlimit-htable-max num
                  hash tábla elévülési sebesség (msec): --hashlimit-htable-expire num
                  hash tábla garbage collector időköz (msec): --hashlimit-htable-gcinterval num
            owner
              kimenő csomagok illesztése tulajdonos alapján
              csak az OUTPUT chain-ben
              opciók
                tulajdonos: --uid-owner userid
                csoport: --gid-owner groupid
                PID: --pid-owner processid
                SID: --sid-owner sessionid
                command name: --cmd-owner name
                SMP rendszerekben megbízhatatlanok
nem minden kernelben elérhetők
              példa
                lenny3# su - nonet
                nonet@lenny3$ ping 192.168.1.1
                lenny3# iptables -I OUTPUT -m owner --gid-owner nonet -j DROP
                nonet@lenny3$ ping 192.168.1.1
            quota
              illesztés akkumulált forgalom alapján
              opciók
                kvóta: --quota bytes
              más illesztésekkel együtt használva praktikus
            recent
              illesztés a /proc fájlrendszeren át is elérhető,
dinamikusan változtatható címlistára
              fontosabb opciók
                lista neve: --name name
                illeszkedés adott időintervallumon belül: [!] --seconds seconds
                illeszkedés adott gyakoriságú előfordulásra: [!] --hitcount hits
              http://snowman.net/projects/ipt_recent/
            string
              illesztés csomagtartalomra
              opciók
                illesztési algoritmus: --algo bm|kmp
                tól: --from offset
                ig: --to offset
                minta: --string pattern
                hexadecimális minta: --hex-string pattern
    egyéb iptables opciók
      részletes output: -v, --verbose
      numeric output: -n, --numeric
      kerekítések kikapcsolása: -x, --exact
      sorszámok megjelenítése: --line-numbers
    http://www.netfilter.org/
  Tematika
    Router gép kialakítása és feladatai –
firewall, web proxy, ip masquareding, NAT (9,9)
      Csomagszűrés és tartalomvizsgálat szerepe (K)
      Porxizás típusai – transparent proxy, alkalmazás szintű proxizás (K)
      Csomagszűrés és a NAT tevékenységek kapcsolata (K)
return nem hozzá tér vissza,
hanem a legutóbbi jump indítójához
csak user-defined chain esetében
type:
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited
protocol:
tcp, udp, icmp, all
az interfész nevében a "+" karakter joker
vagyis pl.: eth+ = eth0, eth1, eth2, stb...
state:
INVALID, ESTABLISHED, NEW, RELATED
rate: number
‘/second’, ‘/minute’, ‘/hour’, ‘/day’ suffix
default: 3/hour
bm = Boyer-Moore, kmp = Knuth-Pratt-Morris
http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
live demo:
http://www.ics.uci.edu/~goodrich/dsa/11strings/demos/pattern/