OSI:NetSpy

Z HelpDesk
Verze z 16. 11. 2020, 14:58, kterou vytvořil Simekm (diskuse | příspěvky) (Initial)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

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