2010-12-21

HyperTerminal? Minicom!

Sosem szerettem igazán HyperTerminalt, a Vista óta nem is része a Windows-nak, meg aztán jómagam inkább a Linux felé húzok, így nem meglepő, hogy egy-egy friss Linux telepítésen az első extra csomagok közé be szokott kerülni a Minicom. Ennek a programnak nincs grafikus felülete, ám gyakorlatilag mindennel tud kommunikálni, ami soros átvitelt használ, szóval ideális, akár egy rescue CD-ről is beindítható szöveges üzemmódban. Az első futtatáskor érdemes root-ként bekonfigurálni a soros eszközünkhöz (nálam ez például egy ATEN UC232A USB-Serial konverter), illetve beállítani az adatbit-paritás-stopbit hármast a minicom -s paranccsal.

   +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 9600 8N1                                  |
    | F - Hardware Flow Control : Yes                                       |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

Ha készen vagyunk a beállítással, akkor azt a "Save setup as dfl" menüponttal el is tudjuk menteni, a minden felhasználóra érvényes rendszerszintű alapbeállítások az /etc/minicom/minirc.dfl fájlba kerülnek:

root@futoszalag:~# cat /etc/minicom/minirc.dfl 
# Machine-generated file - use "minicom -s" to change parameters.
pu port             /dev/ttyUSB0
pu baudrate         9600
pu bits             8
pu parity           N
pu stopbits         1

Ezek után egy tisztességes rendszeren már mezei felhasználóként is el tudjuk indítani a minicom programot mindenféle kapcsolók nélkül, és a szokásos módon dolgozgathatunk konzolban. Ha épp olyan eszköz akad a kezünkbe, amelyik másféle soros beállítást igényel, felülvághatjuk a default beállításainkat parancssori kapcsolókkal vagy készíthetünk alternatív konfig fájlt, esetleg userként beállíthatjuk menün keresztül a "minicom -s"-sel. Futás közben a rendelkezésre álló parancsok listáját a Ctrl-A egyidejű lenyomását követően a "z" gombbal hívhatjuk elő:

+-------------------------------------------------------------------+
|                     Minicom Command Summary                       |
|                                                                   |
|          Commands can be called by CTRL-A <key>                   |
|                                                                   |
|               Main Functions                  Other Functions     |
|                                                                   |
| Dialing directory..D  run script (Go)....G | Clear Screen.......C |
| Send files.........S  Receive files......R | cOnfigure Minicom..O |
| comm Parameters....P  Add linefeed.......A | Suspend minicom....J |
| Capture on/off.....L  Hangup.............H | eXit and reset.....X |
| send break.........F  initialize Modem...M | Quit with no reset.Q |
| Terminal settings..T  run Kermit.........K | Cursor key mode....I |
| lineWrap on/off....W  local Echo on/off..E | Help screen........Z |
| Paste file.........Y                       | scroll Back........B |
|                                                                   |
|      Select function or press Enter for none.                     |
|                                                                   |
|             Written by Miquel van Smoorenburg 1991-1995           |
|             Some additions by Jukka Lahtinen 1997-2000            |
|             i18n by Arnaldo Carvalho de Melo 1998                 |
+-------------------------------------------------------------------+

Kilépni a Ctrl-A x kombinációval tudunk.

2010-12-20

Expect

Előfordul, hogy nincs jobb megoldás a kézi vezérlésnél, mert a központi management eszközben nincs olyan opció, amire szükségünk lenne, vagy van ugyan valami hasonló, de nem pontosan azt csinálja. Ilyenkor aztán marad az SSH, Telnet, command line. Viszont ha sok eszközön kell ugyanazt bepötyögni, hát, az bizony lélekölő feladat, nem is szívesen kezdek ilyesmibe. Helyette jöhet az Expect. Ez egy remek kis linuxos program, amivel bármilyen parancssoros interaktív kommunikációt le lehet szkriptelni, készíthetünk elágazásokat, használhatunk változókat, meghívhatunk külső programokat, igazi svájci bicska.

További magyarázatok helyett álljon itt egy példa, amely bejelentkezik Linux alól egy Cisco eszközre SSH-n keresztül (spawn ssh -l $ap_user $ap_ip) és beállít ezt-azt. Ha még soha nem jelentkeztünk be erre az eszközre, akkor ugye meg kell erősítenünk, hogy tényleg elfogadjuk azt az RSA kulcsot, amit az SSH szerver küld a kliensünk számára, viszont ilyesmire csak az első bejelentkezésnél kér minket az SSH kliens, minden további bejelentkezésnél a szerver RSA kulcsát a saját kis "known_hosts" fájljában lévő kulccsal veti össze, és nem kérdez alapból semmit. A kilencedik sor ezt a helyzetet kezeli le, küld egy "yes"-t, ha még nem látott ilyen RSA kulcsot, ellenkező esetben pedig csendben timeoutol az ötödik másodperc után és folytatja a következő sorral. Maga a konfiguráció egyébként, amit a szkript elvégez, az egy új, "minta" nevű SNMPv3 user felvétele a "MINTAcsoport" nevű SNMPv3 group-ba, illetve a hozzá tartozó jelszó beállítása, majd a teljes konfiguráció mentése:

#!/usr/bin/expect

set ap_user [lindex $argv 0]
set ap_pass [lindex $argv 1]
set ap_ip [lindex $argv 2]
set timeout 5

spawn ssh -l $ap_user $ap_ip
expect "Are you sure" { send "yes\r"} timeout {}
expect "password:"
send "$ap_pass\r"
expect "#"
send "conf t\r"
expect "(config)#"
send "snmp-server user minta MINTAcsoport v3 auth md5 MINTAjelszo\r"
expect "(config)#"
send "exit\r"
expect "#"
send "copy run start\r"
expect "Destination"
send "\r"
expect "#"
send "exit\r"
expect "closed"
A kódból látható, hogy ezt a szkriptet változókkal kell meghívni, a szkript neve után meg kell adnunk az admin user nevét, jelszavát, majd azt az IP-t is, ahová be szeretnénk jelentkezni. Ez a megoldás jelentősen megkönnyíti az expect szkriptünk ciklusból való meghívását, így ugyanis könnyen fabrikálhatunk olyan shell szkriptet köré, amivel minden adminisztrálandó eszközünkön el tudjuk végezni a kérdéses feladatot.

2010-12-16

RJ45-ös loopback dugók

Eljön szinte minden hálózati eszköz életében az a pillanat, amikor kifaggatják arról, hogy vajon hardver szinten rendben van-e rajta ez vagy az az interfész. A hálózati interfészek fizikai tesztjét a legegyszerűbben hurkolással, avagy loopback teszttel lehet letudni, minden loopback teszt lényege, hogy közvetlen, passzív TX-RX összeköttetést hozunk létre az áramkörön, az eszköz így elhiszi nekünk, hogy ő most valamilyen fizikai réteghez kapcsolódik, pedig valójában nem is. Érdemes megjegyezni, hogy ennek a fizikai loopback tesztnek nem sok köze van a TCP/IP stackekben implementált virtuális loopback interfészhez (127.0.0.1), az layer3, mi pedig most layer1-ben mocorgunk.


RJ45-ös dugó esetén eddig kétféle loopback bekötéssel találkoztam, az egyik Ethernethez való, a másik E1-es interfészekhez. Ethernet esetén a bekötés a következőképp alakul: 1-es eret visszahurkoljuk a 3-asra, a 2-est pedig a 6-osra. E1 esetében az 1-es a 4-esre a 2-es pedig az 5-ösre van kötve. Részletes E1 hard loopback útmutatót találhatunk egyébként a Cisco technote-ok közt.

2010-12-15

Netflow dekódolás Wiresharkban

Ki gondolta volna, hogy a Wiresharkban remek Netflow támogatás van? Egy pár napja szaladtam bele egy kis hülyeségbe és jól jött volna a ManageEngine Netflow Analyzert futtató szerverünkön egy másik Netflow szabványt értő program. Hát persze, hogy a Wiresharkhoz nyúltam először, és persze, hogy nem olvastam el előtte semmit, készítettem egy pár perces capture-t a vizsgálandó router forrás IP-jéről érkező csomagokról, utána meg lestem, hogy miért csak layer4-ig tudja dekódolni a Wireshark, micsoda disznóság már, hogy épp az engem érdeklő Netflow adatokat csak úgy, kódolatlanul jeleníti meg? Lehetséges, hogy nem ismeri a Netflow-t? Neeem, ilyesmit lazán tudnia kellene. Már néztem is a Help > Supported Protocols-ban, hm... nincs Netflow, nincs Nflow, bezzeg sFlow az van, de végül megtaláltam, CFLOW a protokoll dekóder neve (Cisco NetFlow/IPFIX).

Innen már csak egy lépés beállítani a megfelelő UDP portra: Analyze > Decode as... > Decode UDP source X port(s) as > CFLOW. Annyi csavar van még a dologban, hogy Netflow v9 esetén már template alapú a dekódolás, nálunk pedig történetesen épp a v9 van használatban, így nem feltétlenül elegendő csupán egy-két UDP datagram, érdmes kicsit tovább várni, amíg megjön a Netflow template-ünk is a forrástól. Ha már megjött a template, a Wireshark ügyesen kibontja a datagramokat, és böngészgethetünk is a router által küldött forgalmi adatokban kedvünkre.



Szűrés is állítható bármelyik Netflow mezőre, nálam például a "cflow.direction" volt az érdekes (0=ingress, 1=egress), van ugyanis egy szolgáltatói routerünk, amelyik egyszerűen nem hajlandó egyik interfészéről sem OUT adatokat szolgáltatni Netflow-n keresztül, következetesen csak IN adatokról küld információt bármiféle beállítás, rábeszélés, rugdosás ellenére, de erről majd később, ha már lezárult az ügy, jelenleg még mindig vizsgálják a szolgáltatónál a hiba okát.

Fortigate jelszó-helyreállítás

Kezdjük egy friss élménnyel: jelszó-helyreállítás Fortigate tűzfalakon. Több ilyen eszközünk is van a cégnél, és ma úgy alakult, hogy egy teszthez fel szerettem volna használni egy régóta porosodó Fortigate masinát. Ahogy az lenni szokott, a rajta beállított jelszót már senki és sehonnan nem tudja előteremteni. Természetesen a jelszó-helyreállításról szemérmesen hallgat a gyártótól letölthető több száz oldalas dokumentáció is. Mivel a különböző fórumokon, blogokon egymásnak némileg ellentmondó információk találhatók a témában, talán teljesen nem haszontalan, ha közzéteszem a tudnivalókat egy posztban.

Természetesen, mint ahogy azt más gyártóknál is megszokhattuk a jelszó-helyreállításhoz konzolportos, fizikai hozzáférésre van szükség, a soros port beállításai a szokásosak: 9600, 8N1. Az eszköz bootolása során elfecsegi nekünk a serial számát is, ezt másoljuk ki magunknak jegyzettömbbe vagy bárhova ahol át tudjuk szerkeszteni és ahonnan újra vágólapra tehetjük:

Ver:04000000
Serial number:FGT-XXXXXXXXXXXX
RAM activation
Total RAM: 128MB
Enabling cache...Done.
Scanning PCI bus...Done.
Allocating PCI resources...Done.
Enabling PCI resources...Done.
Zeroing IRQ settings...Done.
Verifying PIRQ tables...Done.
Boot up, boot device capacity: 30MB.
Press any key to display configuration menu...
......

Reading boot image 1322895 bytes.
Initializing firewall...
System is started.


HOSTNEV login:


A kimásolt serial szám elé közvetlenül írjuk be a "bcpb" karaktereket (esetünkben tehát „bcpbFGT-XXXXXXXXXXXX”), így megkapjuk a jelszót a "maintainer" nevű felhasználóhoz. Többen is említik, hogy a jelszó case sensitive, erre tehát ügyeljünk.

HOSTNEV login: maintainer
Password: ********************
Welcome !

HOSTNEV #
Nincs túl sok időnk a felhasználónév/jelszó páros klimpírozására, egyes fórumok szerint 14 másodperc, mások szerint 30, megint mások szerint 60 másodperc áll rendelkezésünkre, hogy belépjünk a "maintainer" userrel, ezért érdemes előre összeszerkeszteni és vágólapra tenni a jelszót. Állítólag léteznek olyan Fortigate típusok is, amelyeknél egyáltalán nincs időkorlát. Ha idáig eljutottunk, akkor jelszó-helyreállítás fronton két lehetőségünk van: felülírhatjuk az "admin" felhasználó jelszavát, illetve törölhetjük a teljes konfigurációt (az alapértelmezett "admin" jelszó üres).

Az "admin" userhez tartozó jelszó új jelszóval való felülírása a konfiguráció egyéb részeinek megtartása mellett:

HOSTNEV # config system admin
HOSTNEV (admin) # edit admin
HOSTNEV (admin) # set password UJ-JELSZO
HOSTNEV (admin) # end
HOSTNEV #
A teljes konfiguráció törlése, gyári alapbeállításokra való visszaállás:

HOSTNEV# execute factoryreset
This operation will reset the system to factory default!
Do you want to continue? (y/n)y

System is resetting to factory default...

The system is going down NOW !!