OSI:NetSpy
Z HelpDesk
NetSpy
NetSpy je systém pro automatické sledování připojených koncových zařízeních v síti. Je založený na periodickém stahování základních informací (IP, MAC, VLAN, port) ze všech aktivních prvků v síti. Získané informace zpracovává (páruje IP a MAC) a ukládá spolu s časovou značkou. Administrátor má tak k dispozici přehled výskytu zařízení v průběhu času.
NetSpy využívá
pro rozšíření základní funkcionalitu tato externí data:
- ručně spravovaná databáze fyzického umístění,
- databáze systému Sauron pro synchronizaci registrovaných zařízení, notebookových poolů,
- databáze aktivních prvků spravovanou v nástroji NetManager.
NetSpy umožňuje
- hledat zařízení dle IPv4/IPv6 CIDR, MAC,
- hledat konflikty v síti (neregistrovaná zařízení, chybně registrovaná zařízení, zneužití notebookového poolu),
- vyčítat další užitečné informace o koncovém portu (portsecurity + překročení limitu max MAC, voice VLAN, CDP soused, stav portu),
- granularizovat úroveň oprávnění k datům/akcím dle uživatelského jména,
- provádět ACL operace na koncovém portu,
- shození/nahození portu, VLAN ACL na GW, vložení portu do karanténní VLAN,
- využívá bezpečnostní skupina přímo nebo přes vzdálené ACL operace systémem Mysphere2 pro správu bezpečnostních incidentů.
Technologie
- Perl, MySQL, PHP, HTML
Získávání dat
- SNMP (primárně)
- SSH (Cisco ASA, Linux, Fortigate)
- Telnet (alternativa k SNMP)
Řešení problémů
- pokud se zařízení neobjevuje v databázi, zřejmě nedochází ke správnému spárování IP adresy (ARP tabulka na GW) a MAC adresy na koncovém portu switche
- zapnout debug režim (v souboru NetSpy.conf dát debug = 1) a zkontrolovat, zda jsou požadované hodnoty získány pro spárování
- pokud jedno spuštění získávání dat trvá dlouho (nyní cca 10 minut), zřejmě některé zařízení odpovídá velmi pomalu (Cat6500 (VSS) se Sup2T na MAC i přes hodinu)
- zapnout debug rezim (v souboru NetSpy.conf dát debug = 1) a zkontrolovat, jak dlouho lze získat data z jednotlivých zařízení, případně v konfiguraci zařízení vyjmout ze zpracování (mac_ignore_devices, ip_ignore_devices)
- délku cyklu lze kontrolovat v DB v tabulce netspy_check_info
Známé nedostatky
- ACL operace (shozeni portu, nastaveni VLAN ACL, port do karanteny) je provadena pres nezabezpeceny protokol Telnet
- FIX: pouzit knihovny pro SSH pro ACL operace (knihovny jsou pouzity pro vycitani dat z Cisco ASA, Linux, Fortigate)
- data z Cisco ASA, Linux, Fortigate jsou vycitany pres SSH a dale parsovany
- FIX: pri dostupnem API vycitat data standardni cestou pres SNMP
- zjistovani zarizeni (GW) je odhadovano doplnenim .1 do posledniho oktetu, coz je specificke pro ZCU a funguje pouze pro podsite /24
- FIX: ze Saurona lze ziskavat informace o vychozi brane pro danou podsit
- WWW rozhrani nepodporuje snadnou manipulaci se zaznamy v sekci "Fyzicke umisteni"
- FIX: implementovat nove metody pro snazsi praci se zaznamy zalozenou na modernich technologiich (AJAX, ...)
- zpracovavani informaci z trunk portu
- FIX: neuvazovat trunk porty a tak zmensit mnozstvi vstupnich dat a tak zrejme zkratit cas jednoho cyklu
Adresářová struktura a skripty
Root je v adresáři /usr/share/netspy
- netspy_core - core skripty pro ziskavani dat
- netspy_www - www rozhrani pro zobrazeni dat
netspy_core
- conf - adresar obsahujuci konfiguraci - NetSpy.conf
- NetSpy - adresar s knihovnimi funkcemi
- aclOperations.pl - skript pro rizeni pristupu, blokovani portu, blokovani IP na GW, vlozeni portu do karanteny
- autoOperations.pl - skript pro automaticke operace, nejcasteji synchronizace s externimi zdroji (Sauron, NetManager), zalohovani konfigurace
- checkDevices.pl - hlavni skript pro ziskavani dat, parovani ziskanych IP a MAC
- fixdns.pl - pomocny skript pro opravu nazvu sitovych prvku v databazi, nazev musi byt spravne pro spravne parovani nactenych hodnot z CDP
- getCDPdata.pl - pomocny skript pro ziskavani CDP hodnot
- getPhysicalIf.pl - pomocny skript pro nacitani MAC adres fyzickych rozhrani (neni pouzivano v produkci)
- getPortData.pl - ziskvani dalsich pomocnych dat, prevazne pro techniky (CDP, voice VLAN, portsecurity, stav portu)
- getSTProot.pl - pomocny skript pro detekci spatne nastaveneho STP root
- importPhys.pl - skript pro importovani dat o fyzickem umisteni z textovych souboru, nutno vzdy rucne upravit ID lokace, ID prkvu :-/
- importVlans.pl - skript pro importovani IP rozsahu + VLAN z textoveho souboru
- insertPhys.sh - generator MySQL INSERT pro pridani novych prazdnych portu do fyzickeho umisteni
- locationDump.sh - pomocny skript pro generovani zalohy pro Baculu
- startScan.sh - wrapper pro spousteni hlavniho skriptu
Spouštění přes cron
Soubor /etc/cron.d/netspy
NETSPY_PATH=/usr/share/netspy/netspy_core # The main script for retrieving data from the devices */1 * * * * root cd $NETSPY_PATH; logname=`date +"\%F_\%T"`; ./startScan.sh $logname &> ./error.log; # Syncing registered hosts from Sauron (DNS & DHCP management) */15 * * * * root cd $NETSPY_PATH; ./autoOperations.pl -s &> /dev/null # Syncing dynamic notebook's pools from Sauron (DNS & DHCP management) */20 * * * * root cd $NETSPY_PATH; ./autoOperations.pl -p &> /dev/null # Backup & delete old data from database 0 0 1 * * root cd $NETSPY_PATH; ./autoOperations.pl -b &> /var/log/netspy/dump/error.log # Data backup of physical location 0 2 * * * root cd $NETSPY_PATH; ./locationDump.sh &> /dev/null # Retrieving additional information from access ports 23,53 * * * * root cd $NETSPY_PATH; ./getPortData.pl &> /var/log/netspy/portdata.log # Syncing active devices from NetManager 0 4 * * * root cd $NETSPY_PATH; ./autoOperations.pl -d &> /var/log/netspy/sync.log
Konfigurace
Soubor /usr/share/netspy/netspy_core/conf/NetSpy.conf
# Lokalni databaze db_local_database = "NetSpy" db_local_user = "netspy" db_local_pass = "password" db_local_host = "localhost" # Vzdalena databaze pro synchronizaci zarizeni (netmanager) db_netmanager_database = "netmanager" db_netmanager_user = "netspy_hc" db_netmanager_pass = "password" db_netmanager_host = "netmanager.civ.zcu.cz" # Vzdalena databaze pro synchronizaci registrovanych zarizeni (dns, registrace, notebooky) db_sauron_database = "sauron" db_sauron_user = "netman" db_sauron_pass = "password" db_sauron_host = "mordor.civ.zcu.cz" # Pristupove udaje pro vycitani dat pres telnet default_telnet_user = "netspy_hc" default_telnet_pass = "password" default_en_pass = "ENABLE_PASS_REAL" # DNS servery dns_nameservers = "147.228.3.3,147.228.52.11" # DNS aliasy pro zarizeni s vice DNS zaznamy, aby byly v DB vzdy pod stejnou IP dns_aliases = "147.228.255.1:ic-sp1-sw.zcu.cz,10.0.0.1:testovaci-gw.zcu.cz" # RO SNMP komunita default_community = "community" # Internal mezi jednotlivymi testy. Vyuziva se k dopocitani, zda se zarizeni objevilo nebo se mu ma prodlouzit interval default_check_interval = "10" # Cesta k ukladani logu default_logs_path = "/var/log/netspy/" # Cesta k PID souboru default_pid_file = "/var/log/netspy/netspy.pid" # Metoda pro vycitani dat, lze pouzit 'snmp' nebo 'telnet' default_read_type = "snmp" # Zkratky pro zkraceni nazvu rozhrani. Pouzivaji se pri parsovani vyctenych dat pres telnet ports_shortcuts = "TenGigabitEthernet:Te,GigabitEthernet:Gi,FastEthernet:Fa,Port-channel:Po,Ethernet:Eth" # Segmenty /24, ktere se odstrani z vyhledavani (WiFi, VoIP) skip_c_class_segments = "206-208,210-229" # ID skupiny notebooky v Sauronovi ntbk_pool_group = "128" # Cislo default gw pri znalosti /24 subnetu. (Bug: pri jinych nez /24 je detekce chybna, problem pri blokovani na GW) default_gw_number = "1" # Maximalni stari dat, ktere se uchovavaji v db [mesice] default_max_data_age = "8" # Cesta pro ukladani dat default_dump_path = "/var/log/netspy/dump" # Odesilatel e-mailovych upozorneni default_mail_from = "report@netspy.zcu.cz" # Prijemci e-mailovych upozorneni default_maillist_path = "./conf/mail_list" # Prefix do predmetu e-mailoveho upozorneni default_mail_subject = "INFO:" # Debug rezim. Ve log adresari se ukladaji vsechna nactena data debug = "1" # Zarizeni ktera nepodporuji MIB pro stahnuti pozadovanych dat ASA, LINUX-zcu-mobile-neptun no_snmp_devices = "147.228.232.2,147.228.52.9" # Zarizeni, u kterych se nevycitaji informace o MAC #mac_ignore_devices = "147.228.255.1,147.228.255.76" # Zarizeni, u kterych se nevycitaji informace o ARP #ip_ignore_devices = "147.228.250.69" # Fortigate FW fortigate_devices = "147.228.236.252" # Karantenni VLAN - podle prefixu GW (z DNS) se priradi konkretni VLAN quarantine_vlan_gw_pref = "ic:450,ul:451,ek:452,pc:453,kl:454,hj:455,jj:456,vc:457,ko:458,ta:459,ts:460,lk:461,cd:463,us:465,ec:466"
Databaze
NetSpy
- netspy_actions_log - log ACL operaci
- netspy_blocked_acls - aplikacni data k blokacim pres VLAN ACL
- netspy_blocked_data - data o blokovanych zarizenich
- netspy_blocked_ports - aplikacni data k blokacim shozenim portu
- netspy_blocked_quarantine - aplikacni data k portu v karatenni VLAN
- netspy_check_info - informace o delce behu a poctu sparovanych IP a MAC
- netspy_devices - seznam zarizeni (sychronizovano z NetManager)
- netspy_devices_physIf - seznam MAC na fyzickych zarizeni (nepouziva se v produkci)
- netspy_extend_data - hlavni tabulka s daty
- netspy_extend_data_temp - zaloha hlavni tabulky (prubezne plnena starymi daty z hlavni tabulky)
- netspy_ignore_rangeIP - ignorovane podsite ve funkcich pro hledani konfliktu na siti
- netspy_ignore_singleIP - ignorovane IP ve funkcich pro hledani konfliktu na siti
- netspy_ip_data - tabulka s IP
- netspy_last_mac_ip - pomocna tabulka poslednich vyskytu paru IP a MAC pro rychle hledani
- netspy_mac_data - tabulka s MAC
- netspy_physloc_devices - tabulka pro fyzicke umisteni - zarizeni
- netspy_physloc_places - tabulka pro fyzicke umisteni - umisteni
- netspy_physloc_ports - tabulka pro fyzicke umisteni - porty
- netspy_sauron_data - data o registrovanych zarizenich ze Saurona
- netspy_sauron_pools - data o notebookovych poolech ze Saurona
- netspy_users - tabulka s uzivateli a jejich pravy
- netspy_vlans_iprange - tabulka s vazbou IP sit ~ VLAN
Hlavní procedura
Hlavni procedura add_entry_ip7 ulozena v textove podobe v /usr/share/netspy/netspy_misc/add_entry_ip7.sql