Hálózat
Hálózat
  Hálózati alapok, konfiguráció
    Portok, címek, szolgáltatások
      A legtöbb internetes szolgáltatás TCP vagy UDP alapú
      IANA "well known ports" - http://www.iana.org/assignments/port-numbers
      Egy szolgáltatás azonosítása
        IP cím
        protokoll
        port
      Egy kapcsolat azonosítása
        protokoll
        Forrás IP
        Forrás port
        Cél IP
        Cél port
      Domain Name System (DNS)
        Hierarchikus, világméretű hálózat
        Strukturált névtér (pl: mail.tricon.hu)
          .hu ccTLD
          tricon.hu zóna
          mail.tricon.hu host
        Több fajta rekord
          SOA - zóna fejléc (lejárat, szériaszám, stb...)
          A - név -> IP
          CNAME - név -> név
          PTR - IP -> név ("reverse DNS")
          NS - névszerver
          MX - mail szerver
          TXT - megjegyzés
        Rekurzív névfeloldási szolgáltatás
          Jellemzően csak LAN-ra
          Gyökér névszerverektől elindulva az utolsó delegált zónáig
        http://en.wikipedia.org/wiki/Domain_Name_System
        DNSSec - http://en.wikipedia.org/wiki/Dnssec
    Linux network stack
      Az ISO-OSI rétegek nagy része a kernelben
        Ethernet driver
        IP packet and datagram layer
        TCP stream layer
        Network Device interface
        Application Socket interface
      robosztus és konfigurálható
        /proc interface
        ethtool
        ifconfig
        ip
        route
        iptables
        etables
        bridge-utils
        stb...
      Számos hálózati protokoll és szolgáltatás LAN-tól WAN-ig
      http://www.ibm.com/developerworks/linux/library/l-linux-networking-stack/
    Gyakori IP protokollok
      ARP
        Address Resolution Protocol
        IP cím -> MAC address megfeleltetés
        állapotmentes ("gratuitous ARP": kérdés nélküli válasz)
        RARP: Reverse ARP
        http://en.wikipedia.org/wiki/Address_Resolution_Protocol
      ICMP
        Internet Control Message Protocol
        datagram alapú
        stateless
        diagnosztika
          echo request/reply
          time exceeded
          traceroute
          stb...
        kontroll
          destination unreachable
          router advertisement
          address mask request/reply
          stb...
        http://wiki.hup.hu/index.php/ICMP
      UDP
        User Datagram Protocol
        datagram alapú
        stateless
        packet checksum van
        packet sequence nincs
        low latency
        nem megbízható
        http://en.wikipedia.org/wiki/User_Datagram_Protocol
      TCP
        Transmission Control Protocol
        stateful
        stream alapú
        3way handshake
        megbízható
        magasabb overhead
        http://wiki.hup.hu/index.php/TCP
      GRE
        Generic Routing Encapsulation
        stateless
        szekvencia opcionálisan van
        http://en.wikipedia.org/wiki/Generic_Routing_Encapsulation
      DHCP
        Dynamic Host Configuration Protocol
        hálózati konfiguráció központosítására
        tipikus DHCP protokoll lépések
          dhcp discover 255.255.255.255
          dhcp offer 10.10.2.3
          dhcp offer 10.10.10.4
          dhcp request 10.10.2.3
          dhcp ack 10.10.2.3
        http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
    Beállítások
      parancsok
        ifconfig
          egyszerű, szabványos "félautomata" eszköz
          "a mindennapos feladatokhoz" elegendő tudással
          nincs külső konfigurációs fájlja
          interfész alapkonfiguráció, address, netmask, broadcatst
          automatikus járulékos (pl.: route) beállítások
          ifconfig -a
        route
          egyszerű, szabványos eszköz az elsődleges route tábla manipulációjához
          nincs külső konfigurációs fájlja
          default route, host route, net route
          route -n
        ip
          komplex, szabványos network stack konfigurációs eszköz
          "a speciális feladatokhoz" elegendő tudással
          nincs külső konfigurációs fájlja
          tunneling, multicast routing, policy based routing, route tables, stb...
        arp
          egyszerű, szabványos eszköz az ARP tábla konfigurációjához
          arp cache listázása, törlése
          static arp
          http://wiki.hup.hu/index.php/ARP
          arp -n
        ifup/ifdown
          összetett parancssori konfigurációs eszköz
          a fenti eszközök kombinációját használja
          Debian: /etc/network/interfaces
      http://www.yolinux.com/TUTORIALS/LinuxTutorialNetworking.html
      NetworkManager - http://projects.gnome.org/NetworkManager/
    Hibakeresés, eszközök
      netstat
        a hálózati alrendszer státusza
          nyitott socketek
            minden: -a
            csak fogadó: -l
            tcp: -t
            udp: -u
            raw: -w
            unix: -x
            inet: --ip
            ipx: --ipx
          route tábla: -r
          ip interfészek: -i
          statisztikák: -s
          extended info: -e -ee
        netstat -l -u -t
netstat -s
        lsof
          list open files
          internet: -i
          lsof -i @localhost:ipp
      tcpdump
        sniffer: ip hálózati kommunikáció
        wireshark
        http://www.tcpdump.org/
      nmap
        "network security scanner"
        zenmap
        http://nmap.org/
      telnet
        egyszerű, gyors TCP próba
        telnet localhost 22
      netcat
        TCP, UDP kommunikáció kezdeményezése és fogadása
        vö: cat
        netcat -l -p 12345
echo "hello TCP" | netcat localhost 12345
        http://netcat.sourceforge.net/
      ping
        ICMP echo request-reply működési teszt
        ping localhost
  Hozzáférés-korlátozás
    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
    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)
  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/
  Virtualbox setup
    hálózati munkakörnyezet
      közös beállítások
        linux (debian)
        64M RAM
      lenny1
        adapter1
          internal network
          "internet"
          mac: FACE01000001
      lenny2
        adapter1
          internal network
          "internet"
          mac: FACE02000001
        adapter2
          internal network
          "intranet"
          mac: FACE02000002
      lenny3
        adapter1
          internal network
          "intranet"
          mac: FACE03000001
      boot után
        lenny1# mtr 10.0.3.1
        lenny3# mtr 192.168.1.1
      sematikus ábra
    desktop munkakörnyezet
      oktatolinux
        512M RAM
        linux (debian)
  Hálózati autentikációs szolgáltatások
    LDAP
      Lightweight Directory Access Protocol
      X.500 ITU szabvány
      könyvtár bejegyzésekből álló hierarchikus fa
      egy bejegyzés több sémához tartozhat
(objektum orientált adatbázis)
      http://en.wikipedia.org/wiki/LDAP
    Kerberos
      "megbízható harmadik fél" koncepció
      lehallgatás és visszajátszás ellen védett
      időszinkronizáció fontos
      összetett protokoll és konfiguráció
      alkalmazás-szintű támogatás kell a használathoz
      KDC - Key Distribution Center
        általában szimmetrikus kulcsokkal üzemel
        egyszeres hibapont és biztonsági kockázat
        http://en.wikipedia.org/wiki/Key_distribution_center
      http://en.wikipedia.org/wiki/Needham-Schroeder_protocol
      http://en.wikipedia.org/wiki/Kerberos_(protocol)#Description
    RADIUS
      Remote Authentication Dial In User Service
      Authentication, Authorization and Accounting (AAA)
      UDP alapú
      Authentication and Authorization
      Accounting
      Roaming támogatás (user@example.com)
      http://en.wikipedia.org/wiki/RADIUS
    TACACS+
      Terminal Access Controller Access-Control System Plus (TACACS+)
      Nem keverendő a TACACS protokollal!
      TCP alapú
      Autentikáció és Autorizáció külön lépésben
      http://en.wikipedia.org/wiki/TACACS+
    http://en.wikipedia.org/wiki/Name_Service_Switch
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/