En håndfuld interesante tools

Her er lige et par hurtige fra sidebenet, enormt dejlige features som man sjældent vidste man manglede før man stod med dem.

Skift aktiv console på en maskine ude adgang til tastaturet, chvt står for CHAnge Virtual Terminal og det er så simpelt som at skrive: chvt 1 i f.eks. en ssh forbindelse på maskinen, hvorefter maskinens første skærm vil vise terminal 1 og chvt 7 vil vise den grafiske brugerflade.

Observer og overtag en eksisterende console session, hvis nu du ikke har sidet ved din server i mange måneder og bliver i tvivl om hvordan terminalen ser ud så skynd dig og fyr en : apt-get install conspy af på den og bagefter en conspy 1, det der mødte mig i umiddelbart det efterfølgende overblik var flg.

forbindelsen til maskinen afbrydes igen ved at trykke 3 gange hurtigt efter hinanden på ESC … det er også muligt at lave view only med parameteren “-v”.

Send taste-tryk til en igangværende X-Session
Lige i mit tilfælde handlede det om at fjernstyre en storskærm, men mulighederne er jo uendelige: apt-get install xdotool , giver os selve værktøjet mens flg. lille script:

#!/bin/sh
export DISPLAY=:0
xdotool key --clearmodifiers F11

Sender et F11 tastetryk til din grafiske terminal, jeg har haft meget glæde af muligheden for at kunne sætte vores overvågning i fuld skærm uden at skulle op og sætte keyboard til maskinen der viser resultater for vores overvågning på skærmen på væggen ?

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

Syntax hilighted printouts from vim

To print from vim, first set the following options in vimrc or directly in vim:

:set printoptions=paper:A4,portrait:n,wrap:y,syntax:y,duplex:long

if landscape mode is wanted, set portrait:n, else set portrait:y

next, from vim, create a postscript file using the hardcopy command:

ha > %.ps

Now transfer the postscript file to a box with a printer, and print it out, or convert it to pdf using ps2pdf.
Udgivet i Knowledge Base, Vim | Skriv en kommentar

High Availibility med Ucarp og Debian (Hsrp/Vrp/Carp)

Singlepoint of failures er en driftsmands største mareridt, derfor er der som bekendt flere forskellige måder hvorpå man kan sikre sig mod et altødelæggende takeout. En af de bedre af dem er ved hjælp af en delt-virtuel ip, det fungere ved at to servere f.eks. .1 og .2 tilsammen deler .3 og aftaler indbyrdes hvem der skal svare for ip adressen på et givent tidspunkt.

I Debian er det endda ret nemt at sætte op, i dette eksempel bruger jeg flg. antagelser:

gluster1 : 10.0.0.10
gluster2 : 10.0.0.11
gluster : 10.0.0.13

Både gluster1 og gluster2 er nyinstallerede debian maskiner, ucarp installeret:

root@gluster1:~# apt-get install ucarp
root@gluster2:~# apt-get install ucarp

og /etc/network/interfaces skal se således ud, med den eneste forskel at ip adressen skal rettes i linie 11:

o This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 10.0.0.10
        netmask 255.0.0.0
        gateway 10.0.0.1
        dns-nameservers 8.8.8.8

        ucarp-vid 3
        ucarp-vip 10.0.0.13
        ucarp-password foobar1982
        ucarp-advskew 0
        ucarp-advbase 1
        ucarp-master yes
        iface eth0:ucarp inet static
        address 10.0.0.13
        netmask 255.255.255.255

Genstart begge maskiner, og kør en ifconfig. Master-maskinen, og dermed den som pt. svarer på requests, er den som har flg. entry:

eth0:ucarp Link encap:Ethernet  HWaddr 7e:be:c6:4b:fb:4e
          inet addr:10.0.0.13  Bcast:10.255.255.255  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:8

Start nu en ping til 10.0.0.13 og riv netkablet ud af den maskine, det skulle nu gerne se lidt ala det her:

Mikkels-MacBook-Pro:~ mike$ ping 10.0.0.13
PING 10.0.0.13 (10.0.0.13): 56 data bytes
64 bytes from 10.0.0.13: icmp_seq=0 ttl=56 time=18.906 ms
64 bytes from 10.0.0.13: icmp_seq=1 ttl=56 time=21.460 ms
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
64 bytes from 10.0.0.13: icmp_seq=4 ttl=56 time=18.851 ms
64 bytes from 10.0.0.13: icmp_seq=5 ttl=56 time=20.590 ms
64 bytes from 10.0.0.13: icmp_seq=6 ttl=56 time=19.179 ms
^C
--- 10.0.0.13 ping statistics ---
8 packets transmitted, 5 packets received, 37.5% packet loss
round-trip min/avg/max/stddev = 18.851/19.797/21.460/1.045 ms

Og hvis du følger det op med at lave en ifconfig på den anden maskine vil du se at den nu er blevet master 🙂

Nu mangler du bare at installere din foretrukne service på begge maskiner 🙂

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

Layer2 bridge over ssh

De fleste bredbåndsudbydere har en eller anden ide om at “almindelige forbrugere” aldrig nogensinde kan have brug for mere end én ip adresse, hvis det er rigtigt slemt kan de lige anstrenge sig til at give dig 5 … men aldrig uden bøvl.

Derudover er 5 ip adresser da ved gud heller ikke særlig meget, jeg mener, hvis du skal emulere bare et mellemstort hosting-setup så løber du tør for ip adresser langt hurtigere end det.

Set i lyset af det, og så det at vi på vores nye kontor i Århus kun har en 111/11 mbit linie fra Stofa med én fast ip adresse på, så besluttede jeg mig at bruge lidt tid på at finde en elegant løsning på det problem, og jeg syntes selv det gik ret godt.

Jeg har købt en server hos Hetzner, nu havde vi i forvejen behov for en server men hvis ikke du har det kan du nøjes med at købe den mindste de har, de starter ved 19€/mdr dertil kommer 37 € for yderligere 32 IP-Adresser, eller dvs. det er ifølge prislisten, i realiteten er jeg aldrig blevet faktureret ekstra for IP-Adresser, jeg ved ikke om det er en fejl eller om det er politik ved gode kunder,men jeg har ihvertfald ikke tænkt mig at spørge dem, man kunne jo risikere det var en fejl ?

IP Adresserne får du tildelt i ranges og de bliver routed ind, i modsætning til mange andre steder hvor udbyderen enten har ét stort netværks segment eller laver routingen for dig. Jeg fik rangen 78.46.137.32/27, hvilket betyder at jeg har ip adresserne 78.46.137.32 – 78.46.137.63 tilrådighed, og så får man selvfølgelig også en fin whois med eget navn og adresse i, samt mulighed for at skrive en note om f.eks. abuse:

inetnum:         78.46.137.32 - 78.46.137.63
netname:         MIKJAER-APS
descr:           www.mikjaer.com
country:         DE
admin-c:         MC18471-RIPE
tech-c:          MC18471-RIPE
status:          ASSIGNED PA
remarks:         For abuse and security related questions please 
                 contact abuse@mikjaer.com
mnt-by:          HOS-GUN
source:          RIPE # Filtered
 
person:          Mikkel Christensen
address:         Mikjaer Aps
address:         Vesterbrogade 74, 3sal
address:         1620 Koebenhavn V
address:         DENMARK
phone:           +4544401337
nic-hdl:         MC18471-RIPE
mnt-by:          HOS-GUN
source:          RIPE # Filtered

I den modsatte ende har jeg et netværk, med en router leveret af min udbyder som jeg ikke kan (vil) pille ved eller skifte ud, derfor har jeg valgt at jeg vil lave en Layer 2 bridge til mine ip-adresser, det gør jeg ved at tage en Linux maskine som sider på mit netværk og lave en tunnel til min maskine hos Hetzner, og eksponere min range overfor min bridge.

Først scriptet, og så gennemgår jeg det bagefter:

#!/bin/sh
echo Setting up interfaces
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 up
ifconfig br0 up
ifconfig br0 10.0.1.38/24 up
ifconfig br0:0 78.46.137.35/27 up
ip route add 85.10.210.229 via 10.0.1.1 dev br0
echo Waiting 10 seconds for bridge to settle
 
ping -c 4 85.10.210.229 > /dev/null
sleep 2
ping -c 4 85.10.210.229 > /dev/null
sleep 2
 
echo Tunneling to offshore
ssh -o Tunnel=ethernet -f -w 0:0 85.10.210.229 true
ifconfig tap0 up
brctl addif br0 tap0
sleep 3
echo Setting up routing
ssh 85.10.210.229 ifconfig tap0 78.46.137.34/27 up
route add default gw 78.46.137.34

Scriptet forudsætter at der er installeret SSH-Keys således at ssh kan etablere forbindelse uden at du skal taste din kode hver gang.

Linie 2 og 3 opretter bridge interfacet “br0” , du kan i princippet kalde det hvad du vil, men typisk kalder man det br0, bridge0 el. lign. Derefter (linie 5-8) upper vi vores interfaces og sætter ip adresser op på dem.

Som du kan se i linie 7 hedder mit lokalnet 10.0.1.1/24 og den ip adresse jeg har valgt til mit endpoint på kontoret hedder 78.46.137.35 og både interfaces og ip adresser skal helst være på plads før vores bridge etableres.

I linie 9 opsætter jeg en route til en enkelt ip adresse, nemlig ip adressen på vores server hos Hetzner, bemærk servere ligger helt uden for vores egen range. På den her måde kan vores lokale maskine nu kommunikere med vores server hos Hetzner, men også kún den. (hvilket inkluderer DNS, hvorfor vi netop bruger IP Adresser istedet for hostnames i scriptet).

Installer bridge-utils og kør scriptet:

# apt-get install bridge-utils

Broen skal nu have lidt tid til at finde til rette, jeg har ikke fundet nogen fornuftig forklaring på dette, ligesom jeg heller ikke kan svare på hvorfor mit workaround virker, men det virker ?

Så derfor i linie 10-16 holder vi brugeren lidt for nar mens vi pinger lidt og “sover” lidt, resultatet er at forbindelsen kommer op og bliver klar til linie 18 hvor vi opsætter selve Layer 2 tunellen til serveren.

Den kommando opretter automatisk et interface på hver maskine ved navn hhv. tap0 og tap0 (-w 0:0), i linie 19 up’er jeg interfacet og i linie 20 tilføjer jeg det til min bridge således at den nu “hænger sammen med” mit lan.

I linie 23 logger jeg på serveren i den anden ende igen, og opsætter tap0 interfacet på denne og til sidst afslutter jeg med at sætte default gateway … til maskinen i den anden ende. Efter et par sekunder burde du nu kunne pinge igennem vores fine nye “bro”, test evt. ved at pinge den ip der hos dig svarer til 78.46.137.35 fra en maskine ude på internettet eller evt. fra din telefon, næste skridt er at sætte det op til test på en af de maskiner i mit lab. som har behov for offentlige ip’er til test, og det blærede ved netop den her opsætning er at jeg nu kan sætte maskinerne op _fuldstændig_ som sad de direkte på de offentlige ip’er net.

# ifconfig eth0 78.46.137.45/27
# route add default gw 78.46.137.34

Og nu hvor broen er i luften kan jeg benytte samme fremgangsmåde til at få offentlige ip adresser på samtlige maskiner i kontoret / test lab.’et.

Hvis du gerne vil starte scriptet automatisk når maskinen booter så kald det fra /etc/rc.local … jeg orker ikke at skrive et initscript iaften, klokken er halv fire ?

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

Simpel overvågning af switch med MRTG

MRTG er et genialt værktøj der kan lave pæne grafer over “ting”, som regel er de ting trafik-grafer, men det kan også være varme, strømforbrug eller andre kvantitive ting. I det her indlæg kobler jeg MRTG op imod en af mine switche og gemmer rapporten på en webserver hvor den er nem at tilgå.

root@lab1:~# apt-get install apache2 mrtg

Svar “Yes” til at køre med mrtg.cfg ejet af root, og giv den nogen sekunder til at blive færdig.

root@lab1:~# mkdir /var/www/mrtg
root@lab1:~# mkdir /var/www/mrtg/switch1

Switchen har IP Adressen 10.0.0.3 og vi har sat SNMP Community name til “public” så laver vi en basal configfil således:

root@lab1:~# cfgmaker public@10.0.0.3 > /etc/mrtg-switch1.cfg

Rediger i /etc/mrtg-switch1.cfg og ret:

#  for Debian
WorkDir: /var/www/mrtg

til:

#  for Debian
WorkDir: /var/www/mrtg/switch1

Herefter skal mrtg køres et par gange, de første par gange får du advarsler, dette er normalt og stopper efter 2. eller 3. gennemkørsel:

root@lab1:~# env LANG=C /usr/bin/mrtg /etc/mrtg-switch1.cfg

og rund så af med at oprette en index.html fil:

root@lab1:~# indexmaker /etc/mrtg-switch1.cfg > /var/www/mrtg/switch1/index.html

Opret herefter et cronjob der kører hvert 5 minut og opdaterer din mrtg:

root@lab1:~# crontab -e

crontab:

# m h  dom mon dow   command
*/5 * * * *     env LANG=C /usr/bin/mrtg /etc/mrtg-switch1.cfg

Afslut, gem og gå ud og lav kaffe 🙂

Efter 5-10 min skulle du gerne kunne se de første par bider af grafen, efter en dags tid burde det se sådan her ud:

Typisk vil man give den en kærlig overhaling i en HTML Editor og så kan det f.eks. se sådan her ud:

Og i modsætning til standard opsætningen kan du opsætte flere MRTG-sessioner ved siden af hinanden. Jeg plejer at have en session pr. switch og/eller pr. lokation.
Copyright

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

4 hurtige, Webdruid, Logstalgia, Asql og Ip2host

Vi bevæger os mod inden med hastig skridt, og min liste med værktøjer, tips og tricks til Apache er stadig meter-lang, derfor får i idag som hjemmeopgave selv at fordybe jer i disse 4 værktøjer, som … ja ihvertfald de af dem, nok skal blive nyttige:

Webdruid

WebAlizer har fået en storebror, den her kan lave flotte diagrammer over dine besøgendes færd på din side:

Logstalgia
… er måske et af de mindre seriøse værktøjer, ikke destomindre meget imponerende at have kørende på en skærm på kontoret eller lign 🙂

Det kræver et 3D kort … så du skal nok ikke regne med at din server kan køre det native 🙂

Asql

Den understøtter flere logfiler samtidig … hvilket er smart på produktionsmaskiner med mange kunder:

root@lab1:~# asql
asql v1.5 - type 'help' for help.
asql> load /var/log/apache2/access.log 
Loading: /var/log/apache2/access.log
asql> select count(*) from logs where source="212.27.30.183";
137

Og det er bare ét eksempel … Du kan lave relativt komplekse sql queries, så du kan gennemsøge dine logfiler på kryds og tværs 🙂

Ip2Host

Har du tit ærget dig over at der ikke stod hostnames i dine logfier? Det har ihvertfald tit kunnet gøre livet surt for mig at holde rede i en masse numre istedet for en række navne, det var indtil jeg faldt over ip2host:

root@lab1:~# ip2host < /var/log/apache2/access.log > resultat.log

Nu er resultat.log en tro kopi af access.log, bortset fra at alle ip adresser er ændret til hostname 🙂

Der var ikke så meget kød på idag … tilgengæld fik jeg smidt en masse tools “out there” … håber det kan bruges ?

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

Flere webservere på 1 ip med mod_proxy

Hvis du nu kun har én offentlig ip men flere forskellige webservere du gerne vil have eksponeret så kan det godt blive svært, men der kommer mod_proxy heldigvis ind i billedet, det er også metoden du bruger hvis du f.eks. vil have en WordPress på domæne.dk/blog og dit Jsp basserede CRM system på domæne.dk/compiere.

Du skal sørge for at mod_proxy er aktiveret:

root@specialhosting:~# a2enmod proxy
Enabling module proxy.
Run '/etc/init.d/apache2 restart' to activate new configuration!
root@specialhosting:~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
root@specialhosting:~# a2enmod proxy_http
Considering dependency proxy for proxy_http:
Module proxy already enabled
Enabling module proxy_http.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Derefter sætter jeg mine proxy-url’s op i din virtual-host config:

<Virtualhost *:80>
        ...
        ProxyPass /server1 http://10.0.0.2/
        ProxyPassReverse /server1 http://10.0.0.2/

        ProxyPass /server2 http://10.0.0.3/
        ProxyPassReverse /server2 http://10.0.0.3/
        ...
</Virtualhost>

Nu vil alle forspørgsler til /server2 og /server1 blive omskrevet og videresendt til de interne servere på ip adresserne 10.0.0.2 og 10.0.0.3, selvfølgelig uden at slutbrugeren ude på internettet bemærker noget 🙂

Dette kan evt. med success bruges som ekstra lag af sikkerhed ovenpå IIS maskiner, således at websitet kun er tilgængelig igennem proxyen, og Windows maskinen på indersiden ikke har adgang til Internettet.

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

WordPress Cluster (Linux, Apache, Mysql, PHP, mysql-proxy)

Et cluster er en klump af maskiner der samarbejder om en bestemt opgave, dvs. vores CDN var faktisk en slags cluster, nu vil jeg tage den skridtet videre og lave vores CDN om til et reelt cluster der kører en WordPress installation.

I forhold til CDN’et nuværende opsætning mangler vi support for PHP og en Mysql database før vi kan køre WordPress på clusteret. Jeg vil starte med at sætte mysql op på begge maskiner, og bagefter sætte master-slave replikation op.

Derefter vil jeg bruge mysql-proxy til at opdele læse/skrive queries og slutteligt vil jeg installere php og WordPress. Jeg vælger at lab1 skal være min master og lab2 skal være min slave.

Først mysql: (udføres på begge maskiner)

root@lab1:~# apt-get install mysql-server
root@lab2:~# apt-get install mysql-server

Du bliver bedt tildele et root-password til MySQL databaserne, hvorefter resten af installationen skulle køre af sig selv. Herefter opsætter jeg lab1 og lab2 ved at redigere /etc/mysql/my.cnf:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
#

rettes til:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
#

Hermed tillader vi MySQL at kommunikere via nettet, dvs indgående forbindelser til mysql-serveren er nu mulige, og på lab1 (kun lab1 … lab2 fortsætter vi med om lidt) fortsætter vi lidt længere nede i filen:

#server-id              = 1
#log_bin                = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name

rettes til:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db            = wordpress
#binlog_ignore_db       = include_database_name

Hver node i clusteret skal have et unikt server id, masteren hedder 1 (det er dog ikke et krav … masteren kan have et hvilket som helst nummer) og vi vælger at databasen “wordpress” skal replikeres.

Genstart nu mysql

root@lab1:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.

Derefter oprettet vi vores database og tilføjer replikation-privilegier:

root@lab1:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.1.61-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slavepass';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Intet af det ovenstående burde være svært på nuværende tidspunkt … vi opretter databasen, tillader replikation og flush’er privilegier. Du bør (selvfølgelig) vælge fornuftige password og sætte et hostname på din grant hvis du laver et offentligt produktionsmiljø.

Nu tager vi fat i lab2 og laver den modsatte øvelse, red følgende i /etc/mysql/my.cnf:

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id              = 1
#log_bin                        = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name

Til:

server-id               = 2
#log_bin                        = /var/log/mysql/mysql-bin.log
#expire_logs_days       = 10
#max_binlog_size         = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name

master_host=109.202.159.61
master_user=slave
master_password=slavepass
master_connect_retry=60
replicate_do_db=wordpress

Og opret databasen:

root@lab2:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.1.61-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

Genstart MySQL:

root@lab2:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.

Til sidst logger vi ind på mysql-consolen på lab2 og sætter det hele igang:

root@lab2:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.1.61-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CHANGE MASTER TO MASTER_HOST='lab1.mikjaer.com', MASTER_PORT=3307, MASTER_USER='slave', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;
Query OK, 0 rows affected (0.56 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

Hvis du vil tjekke at det virker kan du evt. prøve og fyre hhv. “show master status” og “show slave status” af, imellemtiden vil jeg teste at det virker:

Først “ingenting her”:

root@lab2:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.1.61-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use wordpress;
Database changed
mysql> show tables;
Empty set (0.00 sec)

Ingen ting der:

root@lab1:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.1.61-0+squeeze1-log (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use wordpress;
Database changed
mysql> show tables;
Empty set (0.00 sec)

Så opretter vi en sød lille tabel på lab1:

mysql> create table test (foo INT,bar INT);
Query OK, 0 rows affected (0.11 sec)

mysql> show tables;
+---------------------+
| Tables_in_wordpress |
+---------------------+
| test                |
+---------------------+
1 row in set (0.00 sec)

Og nu på lab2, viola:

root@lab2:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.1.61-0+squeeze1 (Debian)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_wordpress |
+---------------------+
| test                |
+---------------------+
1 row in set (0.00 sec)

Tada 😀 – Det virker, hvis ikke det gør er her et par nyttige queries til fejlfinding:

show slave status \G
show master status \G
SHOW VARIABLES LIKE 'server_id';

Næste skridt på listen er MySQL Proxy, opsætningen af denne foregår på samme måde på begge maskiner:

root@labX:~# apt-get install mysql-proxy

 

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

Bloker for angrebsforsøg med fail2ban

Når du har haft din første server på nettet i et par uger vil du uden tvivl opdage at alt muligt rakkerpak på nettet står og banker på døren konstant … det kan være alt fra rigtigt hackere til scriptkiddies og automatiserede bots, orme og vira … alt i alt en masse ting som vi rigtig gerne vil undgå at blive forstyrret af 🙂

Vi starter som altid med at installere software:

root@lab1:~# apt-get install fail2ban

Dernæst skynder jeg mig og white-liste min egen ip … særligt når jeg eksperimenterer med opsætningen, jeg redigerer /etc/fail2ban/jail.conf og i linie ca 15-20 ser du flg:

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 
bantime  = 600

Der tilføjer jeg min egen IP:

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.1.5
bantime  = 600

Derefter genstarter jeg fail2ban og starter en tail på logfilen:

root@lab1:~# tail -f /var/log/fail2ban.log 
2012-05-10 20:52:39,750 fail2ban.jail   : INFO   Jail 'ssh' stopped
2012-05-10 20:52:39,750 fail2ban.server : INFO   Exiting Fail2ban
2012-05-10 20:52:40,003 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.4-SVN
2012-05-10 20:52:40,004 fail2ban.jail   : INFO   Creating new jail 'ssh'
2012-05-10 20:52:40,004 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2012-05-10 20:52:40,016 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2012-05-10 20:52:40,017 fail2ban.filter : INFO   Set maxRetry = 6
2012-05-10 20:52:40,018 fail2ban.filter : INFO   Set findtime = 600
2012-05-10 20:52:40,018 fail2ban.actions: INFO   Set banTime = 600
2012-05-10 20:52:40,083 fail2ban.jail   : INFO   Jail 'ssh' started

Som du måske har regnet ud så handler fail2ban ligeså meget generelt om serveren som om selve Apache, og lige her i første omgang er den sat op til at tage sig af ssh-syndere … det er jo dejlig nemt at teste … jeg finder en offentlig maskine, som ikke er den jeg lige har whitelistet, og laver et ulovligt loginforsøg:

lab2:~# ssh lab1.mikjaer.com -l root
root@lab1.mikjaer.com's password: 
Permission denied, please try again.
root@lab1.mikjaer.com's password: 
Permission denied, please try again.
root@lab1.mikjaer.com's password: 
Permission denied (publickey,password).

og så modtager vi flg. på vores log:

2012-05-10 20:54:44,257 fail2ban.actions: WARNING [ssh] Ban 192.168.1.10

og mit næste forsøg resulterer i flg:

lab1:~# ssh lab1.mikjaer.com -l root
ssh: connect to host lab1.mikjaer.com port 22: Connection timed out

Kort og kontant … effektivt! Efter 600 sekunder (ban time) kommer den her automatisk:

2012-05-10 20:58:34,529 fail2ban.actions: WARNING [ssh] Unban 192.168.1.10

Lad os aktivere et af filtrene til apache, på linie ca. 152:

[apache]

enabled = false
port    = http,https
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

Det er meget svært og gætte hvad der skal ændres ikke? Korrekt!, enables = true:

[apache]

enabled = true
port    = http,https
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

Så genstarter jeg fail2ban … og forsøger at gætte mit htaccess password, og efter 6 forsøg bliver jeg blacklistet 😀

Det er nemt selv at skrive regler, og der er en masse forudefinerede relger 🙂 Så se og kom igang og vær proaktiv med sikkerheden.

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

Mere om loganalysering, GoAccess og Visitors

Loganalyseringsværktøjer er langt hen af vejen en smagssag, derfor har jeg besluttet mig for at bruge en dag mere på at give dig kendskab til et par stykker mere af slagsen, jeg håber ikke indlægget bliver for langt af den årsag, men selvom det ser voldsomt ud så skyldes det nok at screenshots fylder godt til 🙂

GoAccess er et console basseret interaktivt loganalyseringsværktøj, det er rigtigt rart hvis man f.eks. står i serverrummet udelukkende med console adgang til serveren , eller generelt hvis du bare godt kan lide at console værktøjer:

root@specialhosting:~# apt-get install goaccess

Værktøjet er rimelig selvforklarende så du får et par screenshots:

Ser det ikke lækkert ud ? ? Det syntes jeg, installer det og hyg jer med det ?

Til de lidt mere grafisk anlagte har vi “visitors”, det levere ud-data i form a pæn HTML du kan se i din browser:

root@specialhosting:~# apt-get install visitors
root@specialhosting:~# visitors /var/log/apache2/access.log > /var/www/test.html
--
2599 lines processed in 1 seconds
0 invalid lines, 0 blacklisted referers

og tag så et kig på http://www.specialhosting.dk/test.html (du skal selv-sagt bruge din egen servers adresse)

Det er pretty både på consol og på web … så hvad du foretrækker må være en smagssag, happy hunting ?

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