Monitoring HaProxy

This is a work in progress, i have been given the task to monitor a haproxy load balancer, and i plan to collect some of my best tricks here.

Hatop

This is a cool ncurses library that will give you an overview over which backends are considered "up" and which are down. You also have some different ways of interacting with haproxy, for an instance you can put a backend into maintenance mode.

First add the following to you "global" block in haproxy.cfg:


stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
 And then: 
#apt-get install hatop
 And finally: 
hatop -s /run/haproxy/admin.sock

Log files:

By default all the log-lines are stashed away in the same file, which means that up- and down messages ends up in the middle of a lot of POST and GET requests, so i made a few changes to syslog: 
$AddUnixListenSocket /var/lib/haproxy/dev/log

if $programname startswith 'haproxy' and $msg contains 'POST' then  /var/log/haproxy.log
if $programname startswith 'haproxy' and $msg contains 'POST' then ~
if $programname startswith 'haproxy' and $msg contains 'GET' then  /var/log/haproxy.log
if $programname startswith 'haproxy' and $msg contains 'GET' then ~
if $programname startswith 'haproxy' then  /var/log/haproxy-extra.log
stop
 And then i can monitor /var/log/haproxy-extra.log for all but the POST and GET requests, i realise that an error mssage containing either "POST" or "GET" will be lost, but so far i havent discovered any false-negatives.

Nagios

Im not quite done here yet, i found this module (https://exchange.nagios.org/directory/Plugins/Clustering-and-High-2DAvailability/check_haproxy_backend/details) , and gotten it to work: 
# ./check_haproxy_backend
HAPROXY OK: Proxy = website. Current sessions = 1. Max sessions = 17. Maximum limit = 200|scur=1 smax=17 slim=200
 I had to comment out "use warnings;" in the perl file (line 19) and install some modules: 
apt-get install libwww-perl libdbi-perl libdbd-mysql-perl libgd-gd2-perl libtext-csv-xs-perl
 But i havent done any long time testing yet ... im going to though :-)
Udgivet i Knowledge Base | Skriv en kommentar

Brightness / backlight på din bærbare

Jeg er blevet rigtigt glad for i3wm, og er begyndt at bruge det som min primære workstation. Dog rendte jeg idag i et problem jeg ikke havde prøvet før ... af en eller anden årsag havde min bærbare skruet helt ned for brightness og jeg kunne næsten ikke se hvad jeg lavede.

Der var dog en super simpel fix:


root@tardis:~# cat /sys/class/backlight/acpi_video0/max_brightness
10
root@tardis:~# cat /sys/class/backlight/acpi_video0/brightness
1
root@tardis:~# echo 10 > /sys/class/backlight/acpi_video0/brightness
Udgivet i Knowledge Base | Skriv en kommentar

Owncloud filesync uden GUI

Jeg har rodet lidt med Owncloud på det sidste, og det er egentlig et ret sødt lille system. Det mangler bare en ordent sync-client til Linux, jeg har ikke prøvet den officielle fordi den kræver gui og alt muligt pjat.

Men jeg har hacket noget sammen der virker alligevel, der følger nemlig en cli applikation med der laver en enkelt synkronisering. Denne har jeg tænkt mig at køre en gang i minuttet ... det betyder at jeg skal vente et minuts tid på at mine ændringer bliver skudt afsted. Det kan jeg godt leve med.

/home/mike/.ocsync.sh

#!/bin/sh

if ps -ef | grep -v grep | grep owncloudcmd > /dev/null ; then
        echo Allready Running
        exit 0
else
        /usr/bin/owncloudcmd /home/mike/Owncloud/ https://BRUGERNAVN:PASSWORD@SERVER:/remote.php/webdav/ >  /dev/null
        exit 0
fi
 og denne her i min (unix bruger's) crontab: 
*/1 * * * * /home/mike/.ocsync.sh >  /dev/null
 Og så har jeg installeret owncloud-client pakken som beskrevet her: https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&package=owncloud-client
Udgivet i Knowledge Base | Skriv en kommentar

Hex-Dump funktion skrevet i PHP

Ikke rocket-science, men den er rar at have ved hånden :-)


function hexdump($packet)                                                              
{                                                                                      
    $line_hex=array();                                                                  
    $line_asc=array();                                                                  
    for ($i=0; $i<=count($packet); $i++)                                                
    {                                                                                  
        $line_hex[]=str_pad(dechex($packet[$i]), 2 , '0', STR_PAD_LEFT);                
                                                                                       
        if (ctype_print ( $c = chr($packet[$i])))                                      
            $line_asc[]=$c;                                                            
        else                                                                            
            $line_asc[]=".";                                                            
                                                                                       
        IF (($i+1) % 25 == 0)                                                          
        {                                                                              
            print implode("-",$line_hex)."     [".implode($line_asc)."]";              
            print "\n";                                                                
            $line_hex=array();                                                          
            $line_asc=array();                                                          
        }                                                                              
    }                                                                                  
}
Udgivet i Knowledge Base | Skriv en kommentar

Sporing af hændelser i filsystemet – Linux Auditd / Auditctl

Scenariet er at vi har et hacket website, en stor kodebase i PHP uden versionscontrol er kompromitteret og kunden har ingen kendskab til kodebasen. Altså synes eneste mulighed at være en gennemgang af kildekoden for at afdække eventuelle bagdøre. Dette var kunden ikke interesseret i at udføre og/eller financiere, men alligevel blev siden konstant hacket og uanset hvor grundige vi syntes vi var blev de ved med at komme ind.

Derfor besluttede vi os for at ty til andre midler, og derfor installerede vi auditd på maskinen. Bemærk at hvis du kører OpenVZ, som vi gjorde, så skal auditd installeres på host-maskinen. Installer auditd:

root@server:~# apt-get install auditd

Dernæst skal jeg oprette en regel, det kunne f.eks. se sådan her ud:

root@server:~# auditctl -w /var/www -p wa -k hack-alert

Derudover er der nogle default-regler som jeg ikke lige har luret hvor de kommer fra, det giver ihvertfald en masse junk i logfilerne, og når jeg lister reglerne:

root@server:~# auditctl -l

Så viste den kun den ene regel jeg selv havde lavet, men heldigvis kan man også lave exclude-regler:

root@server:~# auditctl -A exclude,never -Fmsgtype=LOGIN

Auditd indeholder sit eget logsystem, men det har jeg ærlig talt ikke noget at bruge til … jeg vil bare gerne have data i sikkerhed overpå min logserver, så hvis du redigerer /etc/audisp/plugins.d/syslog.conf og retter “active = no” til “active = yes” og genstarter auditd:

root@server~# /etc/init.d/auditd restart

Så ender log-entries i sysloggen, og hvis du derfra gerne vil have den videre til din logserver kan du oprette /etc/rsyslog.d/audit.conf og skrive:

if $programname == 'audispd' then @@syslog.server.com
& ~

Når det er sagt, så er det her kun en getting-quick-started-guide … hvis du vil bruge det her så læs manualen, og øv dig på en test-server inden du skal bruge det i produktionen 🙂

Dokumentationen: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/chap-system_auditing.html

Udgivet i Knowledge Base, Linux, Old Base | Skriv en kommentar

Nagios module for monitoring Postfix Queue Size

#!/usr/bin/php                                                                                                                                                                                          
<?                                                                                      
                                                                                        
$e=exec("postqueue -p|tail -n1");                                                       
if (preg_match("/empty/",$e))                                                           
{                                                                                       
        print "OK: Queue is empty | queue_size=0\n";                                    
        die(0);                                                                         
}                                                                                       
                                                                                        
preg_match("/([0-9]+) Requests/",$e,$m);                                                
if ($m[1]>100)                                                                          
{                                                                                       
        print "WARNING: ".$m[1]." mails in queue | queue_size=".$m[1]."\n";             
        die(1);                                                                         
} else {                                                                                
        print "OK: ".$m[1]." mails in queue | queue_size=".$m[1]."\n";                  
        die(0);                                                                         
}                                                                                       
?>
Udgivet i Knowledge Base | Skriv en kommentar

Nagios module for monitoring Postfix Queue Size

#!/usr/bin/php                                                                                                                                                                                          
<?                                                                                      
                                                                                        
$e=exec("postqueue -p|tail -n1");                                                       
if (preg_match("/empty/",$e))                                                           
{                                                                                       
        print "OK: Queue is empty | queue_size=0\n";                                    
        die(0);                                                                         
}                                                                                       
                                                                                        
preg_match("/([0-9]+) Requests/",$e,$m);                                                
if ($m[1]>100)                                                                          
{                                                                                       
        print "WARNING: ".$m[1]." mails in queue | queue_size=".$m[1]."\n";             
        die(1);                                                                         
} else {                                                                                
        print "OK: ".$m[1]." mails in queue | queue_size=".$m[1]."\n";                  
        die(0);                                                                         
}                                                                                       
?>

 

Udgivet i Monitoring, Nagios, Postfix | Skriv en kommentar

OpenBSD: Redundant statisk routing (Carp)

Min ISP Router en range ind til mig, den lander på 192.0.2.20 og rangen hedder 203.0.113.0/24. Jeg satte to OpenBSD maskiner op og tildelte dem ip adresserne 192.0.2.21 og 192.0.2.22

fw1# echo inet 192.0.2.21 255.255.255.0 NONE > /etc/hostname.em0
fw2# echo inet 192.0.2.22 255.255.255.0 NONE > /etc/hostname.em0
both# echo 192.0.2.1 > /etc/mygate
both# echo nameserver 8.8.8.8 > /etc/resolv.conf

Maskinen har kun et netkort, jeg behøver heller ikke flere. Jeg skal sætte ip adressen 192.0.2.20 op på begge maskiner med Carp, det vil sige at maskinerne taler sammen og aftaler indbyrdes hvem der svarer på IP Adressen på et givent tidspunkt, samtidig holder de øje med om modparten er i live og hvis modparten går ned overtager den automatisk IP’en.

Samtidig sætter vi 203.0.113.0.1 på CARP devicet også, på den måde vil Carp-Masteren svare på både inder- og ydersiden af netværket samtidig.

both# cat inet 192.0.2.20 255.255.255.0 192.0.2.255 vid 1 carpdev em0 pass password > /etc/hostname.carp1
both# cat net alias 203.0.113.1 >> /etc/hostname.carp1

Sidst men ikke mindst skal forwarding aktiveres ved at udkommentere flg. linie i /etc/sysctl.conf

net.inet.ip.forwarding=1

Genstart maskinen, og u kan du opsætte en client på indersiden der har en ip adresse på 203.0.113.0/24 og bruger 203.0.113.0.1 som default gateway.

Udgivet i Knowledge Base, Networking, Old Base, OpenBSD | Skriv en kommentar

Adgangskontrol med password ELLER ip-adresser i Apache

Vi tager udgangspunkt i et webdir med .htaccess, det har vi gennemgået på bloggen her et par gange før. Men du starter med at lave en password fil, det gøres således:

root@test.net /var/www/secured # htpasswd -c /htpasswd mike
New password: 
Re-type new password: 
Adding password for user mike

Hvis du vil oprette flere brugere skal du gentage kommandoen uden “-c” som står for “create file”, hvis du kører den igen med “-c” vil du overskrive filen og dermed slette alle tidligere brugere.

Herefter sætter du htaccess op, det er også lige ud af landevejen, /var/www/secured/.htaccess:

AuthType Basic
AuthName "Nothing here for you to see"
AuthUserFile /htpasswd
Require valid-user

Nu vil jeg gerne tillade 10.10.10.10 adgang _uden_ password, det gør jeg simpelthen ved at tilføje flg. to linier:

AuthType Basic
AuthName "Nothing here for you to see"
AuthUserFile /htpasswd
Require valid-user
allow from 10.10.10.10
satisfy any

And now you’re done 🙂

Udgivet i Apache, Knowledge Base, Linux, Networking, Old Base | Skriv en kommentar

Install APC on Debian

apt-get install php-apc
cp /usr/share/doc/php-apc/apc.php /var/www
/etc/init.d/apache2 restart

Visit: http://server/apc.php

To verify that apc is running.

Sorry for lynguide, jeg skal nok gøre det bedre en dag hvor klokken ikke er 3 om natten :p

Udgivet i Knowledge Base, Linux, Old Base | Skriv en kommentar