Spis treści

AL-ADMIN-S

Informacje o kursie na stronie stronie ALX.

Autorski kurs dla administratorów.

Listingi

Zawartość katalogu /etc komputera wykładowcy.

System do ćwiczeń

Systemy do kursów są teraz na stronie głównej.

Monitoring - Nagios

Proste skrypty do monitorowania dysków.

smart.sh

#!/bin/bash
set -o pipefail
CT=`/usr/sbin/smartctl -a /dev/sda | grep Reallocated_Sector_Ct | awk '{print $10}'`
if [ $? -ne 0 ]
then
	echo "UNKNOWN: SMART nie dziala"
	exit 3
fi
 
if [ "$CT" -gt 0 ]
then
	echo "CRITICAL: Uszkodzone sektory: $CT"
	exit 2
fi
 
echo "OK: $CT uszkodzonych sektorow"
exit 0

temp.sh: (to samo, ale inny atrybut)

#!/bin/bash
set -o pipefail
TEMP=`/usr/sbin/smartctl -a /dev/sda | grep Temperature_Celsius | awk '{print $10}'`
if [ $? -ne 0 ]
then
        echo "UNKNOWN: SMART nie dziala"
        exit 3
fi
 
if [ "$TEMP" -gt 40 ]
then
	echo "CRITICAL: Temperatura dysku zbyt wysoka"
	exit 2
fi
 
echo "OK: Temperatura $TEMP"
exit 0

Konfigurajca sudo; /etc/sudoers:

nagios	ALL=(root) NOPASSWD:/usr/local/bin/smart.sh
nagios	ALL=(root) NOPASSWD:/usr/local/bin/temp.sh

Konfiguracja nrpe.cfg: (tylko kluczowe dyrektywy)

command[check_users]=/usr/lib/nagios/plugins/check_users -w 10 -c 20
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 10% -c 3%
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_procs]=/usr/lib/nagios/plugins/check_procs -w 250 -c 500 
command[check_smart]=/usr/bin/sudo /usr/local/bin/smart.sh
command[check_temp]=/usr/bin/sudo /usr/local/bin/temp.sh
command[check_ntp]=LANG=C /usr/lib/nagios/plugins/check_ntp_time -H ntp.fiok.pl -w 0.5 -c 1
#command[check_raid]=/usr/lib/nagios/plugins/check_linux_raid
command[check_raid]=/usr/lib/nagios/plugins/check_dummy 0 "Tu nie ma raida." 
command[check_mail]=/usr/lib/nagios/plugins/check_mailq -w 200 -c 500

Drukarka

Sprawdzamy poziom tonera.

Drukarka to: HP4350 z printserwerem. Na stronie www jest stan tonera:

Źródło strony:

Możemy analizować na przykład następującym skryptem:

#!/bin/bash
set -o pipefail
CT=`wget -O - http://10.0.3.48/hp/device/this.LCDispatcher 2> /dev/null | grep "^Black Cartridge"  | sed -e "s/^Black Cartridge\(&nbsp;\)*\([[:digit:]]*\)%<br \/>$/\2/"`
if [ $? -ne 0 ]
then
	echo "UNKNOWN: Nie mozna odczytac"
	exit 3
fi
 
if [ "$CT" -le 4 ]
then
	echo "CRITICAL: Zostalo $CT%, zamow toner"
	exit 2
fi
 
echo "OK: Zostalo $CT%"
exit 0

Po stronie nagios-a drukarka jest hostem monitorowanym pasywnie, na której jest dodana usługa TONER (też pasywna). Konfiguracja wygląda tak: /etc/nagios3/conf.d/drukarka.cfg

define host {
      host_name   HP4350
      use         passive-host
}
define service {
      host_name                       HP4350
      service_description             TONER
      use                             passive-service
}

Skrypt uruchamiany z cron-a co 5 minut:

#!/bin/bash
set -o pipefail
WYNIK=$(/usr/lib/nagios/plugins/check_http -H 10.0.3.48 -p 631)
KOM="HP4350\t$?\t$WYNIK\n"
 
WYNIK=$(/usr/local/bin/printer.sh)
KOM="${KOM}HP4350\tTONER\t$?\t$WYNIK\n"
 
echo -e "$KOM" | /usr/sbin/send_nsca -H 10.0.2.122 -c /etc/send_nsca.cfg > /dev/null

Sprawdzamy, czy host działa łącząc się na port 631 (ipp).

Wrapper NSCA

Przykładowy skrypt, który pozwala przerobić dowolny skrypt, lub wtyczkę używaną z NRPE do pracy z NSCA.

#!/bin/bash
set -o pipefail
WYNIK=$(/usr/local/bin/printer.sh)
echo -e "localhost\tTEST\t$?\t$WYNIK" | /usr/sbin/send_nsca -H 10.0.2.122 -c /etc/send_nsca.cfg > /dev/null

Definicje: hosta i usługi monitorowanych pasywnie

define command {
        command_name    check-dummy
        command_line    /usr/lib/nagios/plugins/check_dummy $ARG1$
}

define host{
	name				passive-host
        use 	                        generic-host
	active_checks_enabled		0
	passive_checks_enabled		1
	check_freshness			1
	freshness_threshold		660	
	check_command                   check-dummy!3 "Host nie raportuje."
	max_check_attempts              1
        register                        0
}

define service{
	name				passive-service
        use                             generic-service
        active_checks_enabled           0
        passive_checks_enabled          1
        check_freshness                 1
	freshness_threshold		660
	max_check_attempts              1
        register                        0
	check_command			check-dummy!3 "Nie dziala zdalne raportowanie"
        }

Monitorowanie portów na switchu

Na przykładzie starego switcha 3com SUPER STACK 1100. Wysyłanie komunikatów SNMP Trap skonfigurowane w następujący sposób:

Konfiguracja snmpdtapd do odbioru komunikatów: (/etc/snmp/snmptrapd.conf)

snmpTrapdAddr 10.0.2.122
authCommunity log,execute monitor
traphandle IF-MIB::linkDown /usr/local/bin/trap.sh down
traphandle IF-MIB::linkUp /usr/local/bin/trap.sh up

W Debianie 5.0 należy jeszcze włączyć uruchamianie snmptrapd przy starcie: (/etc/default/snmpd)

TRAPDRUN=yes

Skrypt obsługujący komunikaty: (usr/local/bin/trap.sh)

#!/bin/bash
read HOST
read IP
while read oid val; do
	if echo $oid | grep "IF-MIB::ifIndex" > /dev/null ; then
		PORT=${val:1}
	fi
done
 
if [ "$1" == "up" ]; then
	STATUS=0
else
	STATUS=2
fi
 
#logger "TRAP *************************************** $HOST $1 $STATUS $cos"
echo -e  "${HOST}\tPORT-${PORT}\t${STATUS}\tPORT-${PORT} : $1\n" | /usr/sbin/send_nsca -H 10.0.2.122 -c /etc/send_nsca.cfg > /dev/null

Nagios ma zdefiniowany host, odpowiednie usługi oraz komendę do sprawdzania switcha: (/etc/nagios3/conf.d/snmp.cfg)

define command {
        command_name    check-snmp-link
        command_line    /usr/lib/nagios/plugins/check_snmp -H 10.0.2.250 -o IF-MIB::ifOperStatus.$ARG1$ -C public -P 1 -s "up(1)"
}

define host {
	host_name			3com
	address				10.0.2.250
	use				generic-host
}

define service {
        host_name                  	3com
        service_description             PORT-14
        check_command                   check-snmp-link!114
        use                             generic-service
}

define service {
        host_name                  	3com
        service_description             PORT-13
        check_command                   check-snmp-link!113
        use                             generic-service
}

#itd... kolejne porty

Porty na switchu są monitorowane synchronicznie (przez komendę check-snmp-link). Oprócz tego, nagios jest informowany asynchronicznie (NSCA) w momencie, gdy zostanie odebrany komunikat SNMP Trap o zmianie stanu na danym porcie.

MRTG - ruch wychodzący do Internetu

Problem: Chcemy zmierzyć ile danych jest wysyłanych przez nasz serwer na zewnątrz (do Internetu), ale urządzenie znajduje się w DMZ-cie lub w sieci lokalnej. Nie możemy po prostu mierzyć ruchu wychodzącego przez ethX, bo wpadnie tam też ruch do LAN-u/DMZ-tu.

Rozwiązanie (jedno z wielu oczywiście):

Dodajemy następujące reguły iptables:

iptables -t mangle -I POSTROUTING -d ! 10.0.2.0/24
iptables -t mangle -I POSTROUTING 2 -d 127.0.0.1

Nie mają celu (-j …), będą tylko aktualizowały liczniki (dostępne po wydaniu polecenia: iptables -t mangle -S -v lub iptables -t mangle -L -v).

Pierwsza reguła wyłapuje wszystkie pakiety wychodzące do sieci innej niż LAN/DMZ (w przykładzie 10.0.2.0/24). Do tej kategorii trafiają też pakiety wysyłane na adres 127.0.0.1, które wyłapuje druga reguła. Wystarczy wydobyć z nich liczniki bajtów i odjąć pierwszą wartość od drugiej, co robi następujący skrypt: licznik.sh

#!/bin/bash
#
REG1="\-A POSTROUTING -d ! 10.0.2.0/24"
REG2="\-A POSTROUTING -d 127.0.0.1"

REG_NIE_LAN=$( iptables -t mangle -S POSTROUTING -v | grep "$REG1" )
REG_LO=$( iptables -t mangle -S POSTROUTING -v | grep "$REG2" )
BAJTY_NIE_LAN=$( echo "$REG_NIE_LAN" | awk '{ print $NF }')
BAJTY_LO=$( echo "$REG_LO" | awk '{ print $NF }')

BAJTY=$(( $BAJTY_NIE_LAN - $BAJTY_LO ))

echo $BAJTY
echo 0
echo "Ruch wychodzacy"
echo "Lokalny"

Na koniec konfiguracja MRTG do rysowania wykresu: /etc/mrtg.cfg:

Target[moj]: `/usr/local/bin/licznik.sh`
Title[moj]: "Ruch na zewnatrz"
Options[moj]: growright
MaxBytes[moj]: 12500000
PageTop[moj]: <h1>Ruch na interfejsie</h1>

XEN

Kopie zapasowe

Replikacja MySQL

Master → Slave

Konfiguracja opisana jest tu: replikacja_mysql

Poczta w bazie SQL

Stosowana niekiedy konfiguracja polegająca na przechowywaniu wszystkich informacji o użytkownikach w bazie SQL, niepowiązanej z systemowymi mechanizmami autoryzacji.

Użytkownik poczty jest jedynie wpisem (rekordem) w bazie danych, a nie kontem systemowym. Cała poczta jest przechowywana jako pliki należące do jednego użytkownika systemowego.

Dla większej czytelności pliki mają usunięte komentarze.

Jako ćwiczenie do wykonania samodzielnie pozostawiam sprawdzenie, co się stanie jeżeli spróbujemy autoryzować się (SMTP AUTH) jako dowolny użytkownik z pustym hasłem.

Poczta w bazie SQLite

* poczta.sqlite.tar.bz2

Amavis-new

To jest stare i nieuaktualniane - amavis nie powinien być używany, ponieważ istnieją lepsze metody konfiguracji filtra antyspamowego i antywirusowego. Chyba, że bardzo chcemy używać jednego z komercyjnych programów antywirusowych dostępnych pod Linuksa - wtedy jest to najprostsza metoda.

Stare listingi Amavis-a. Jak skonfigurować amavis-a, jak podłączyć go to exima i postfix-a. amavis.tgz

Przykładowa próbka maili do uczenia filtrów Bayes-owskich

Nadaje się tylko do testów, nie należy używać w zastosowaniach produkcyjnych. poczta.tar.bz2

SAMBA + LDAP

samba-vscan

Lokalne kopie plików do kompilacji modułu vscan-clamav:

LDAP Browser/Editor

Znakomita aplikacja do przeglądania/edycji katalogu.

Należy rozpakować, wejść do katalogu i uruchomić:

java -jar lbe.jar

W Windowsie, z dobrze skonfigurowaną javą - wystarczy dwuklik.

Korzystanie z katalogu LDAP na serwerze Windows 2008 (Standard)

Win2008 zainstalowany i skonfigurowane odpowiednie role (jak PDC).

Zdalne wyłączanie komputera z Windows

net rpc -U administrator%admin -I 10.0.3.9 shutdown -C "Komunikat do logow" -t 30

Wyłączenie można anulować, wysyłając abortshutdown zamiast shutdown, lub z linii komend w Windowsie:

shutdown -a

Dodawanie Windows 7 do domeny

Windows 7 wymaga następujących dodatkowych wpisów w rejestrze.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000