Stroopwafels and Raspberry Pie (Joomla on Raspberry Pi with Nginx)

Embed Size (px)

DESCRIPTION

The Raspberry Pi (RPi) is a very small and efficient (3.5 watts) mini Linux computer based on an ARM processor. Originally the single board computer was developed for educational purposes. They expected to sell 10,000 devices in the 1st year. Instead they sold 400,000! Probably due to its versatility and low price ($ 35) it has become an instant success...Connected to a modern TV the RPi functions as a mini computer. Connected to a network it can function as a (web)server. And that's where Joomla fits in...In this presentation done at the international Joomla conference JandBeyond 2013, Peter will demonstrate how to set up the RPi as a web server for Joomla. How to use the command line to install & configure Raspbian (Debian Linux optimized for RPi), Nginx, PHP, MySQL, phpMyAdmin and, of course, Joomla. Finally some information about how to increase your websites security & performance.

Citation preview

PowerPoint Presentation

Stroopwafels & Raspberry Pie

Peter Martin, twitter: @pe7er
JandBeyond.org 2013, Sat June 1st 2013

Joomla & Raspberry Pi

Peter Martin, twitter: @pe7er
JandBeyond.org 2013, Sat June 1st 2013

Overview Presentation

1. IntroductionLAMP Stack:

2. Raspbian

3. Nginx

4. MySQL

5. PHP

6. phpMyAdmin

7. Joomla

8. Performance

9. Security

10. Geeky stuff

>>> Sheets at: www.db8.nl Profile Information




Browser plugins, e.g. Yslow

8. Performance

Test: Refresh (3x) new setting > Refresh (3x) & compare

8. Performance 10 ways to optimize

Nginx + PHP-FPM

8. Performance Nginx + PHP-FPM

PHP-FPMSocket vs Port?fastcgi_passunix:/var/run/php5-fpm.sock;

fastcgi_pass127.0.0.1:9000;

socket connections are around 10-15% faster than TCP/IP connections because it saves the passing the data over the different layers of TCP/IP stack

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

8. Performance Joomla gzip

Before1. Application 2.517 seconds (+0.037); 4.67 MB (+0.035) - afterRender

After
Global Configuration > Server > Gzip Page Compression1. Application 3.009 seconds (+0.038); 4.67 MB (+0.035) - afterRender

2. Application 2.503 seconds (+0.037); 4.67 MB (+0.035) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

8. Performance Joomla cache

BeforeApplication 2.707 seconds (+0.037); 4.67 MB (+0.035) - afterRender

After
Global Configuration > System > Cache* > ON Progressive caching

1. Application 2.718 seconds (+0.051); 4.69 MB (-0.027) - afterRender

2. Application 1.543 seconds (+0.114); 4.02 MB (+0.051) - afterRender

3. Application 1.426 seconds (+0.265); 3.95 MB (+0.334) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

8. Performance Nginx gzip


pi@rpi ~ $ sudo nano /etc/nginx/nginx.conf
# Gzip Settings
gzip on;
gzip_static on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 512;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml;

8. Performance Nginx gzip

BeforeApplication 1.447 seconds (+0.274); 3.95 MB (+0.334) afterRender

After gzip in Nginx

Application 1.421 seconds (+0.267); 3.95 MB (+0.334) - afterRender

Application 1.436 seconds (+0.274); 3.95 MB (+0.334) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

8. Performance Nginx cache


pi@rpi ~ $ sudo nano /etc/nginx/sites-available/petermartin.nl

server {

# caching of files
location ~* \.(ico|pdf|flv)$ {
expires 1y;
}

location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
expires 14d;
}

}

8. Performance Nginx cache

BeforeApplication 1.459 seconds (+0.301); 3.95 MB (+0.334) - afterRender

After

Application 1.464 seconds (+0.308); 3.95 MB (+0.334) - afterRender

Application 1.459 seconds (+0.299); 3.95 MB (+0.334) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

APC

8. Performance Alternative PHP Cache


pi@rpi ~ $ sudo apt-get install php-apc php-pear php5-dev build-essential libpcre3-dev

{Settings in PHP.ini}
pi@rpi ~ $ sudo pear config-set php_ini /etc/php5/fpm/php_ini
pi@rpi ~ $ sudo pecl config-set php_ini /etc/php5/fpm/php_ini

{Download/compile/install APC}
pi@rpi ~ $ sudo pecl install apc

8. Performance Alternative PHP Cache

BeforeApplication 1.459 seconds (+0.299); 3.95 MB (+0.334) - afterRender

After install APC restart nginx AND php-fpm!!!$ sudo /etc/init.d/nginx restart

$ sudo /etc/init.d/php5-fpm reload

1. Application 1.813 seconds (+0.311); 4.52 MB (+0.403) - afterRender

2. Application 0.696 seconds (+0.198); 2.00 MB (+0.148) - afterRender

3. Application 0.727 seconds (+0.221); 2.00 MB (+0.148) - afterRender

8. Performance Alternative PHP Cache

APC GUI
$ sudo cp /usr/share/doc/php-apc/apc.php /var/www/petermartin.nl/apc.php

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

APC

JCH Optimize / jbetolo

8. Performance Joomla Plugins

Less data traffic:Combine CSS / JavaScript

Minify CSS / JavaScript

Gzip CSS / JavaScript

Joomla Plugins, e.g.JCH Optimize

Jbetolo

Yireo Script Merge

Plugins vs manual

8. Performance Joomla Plugins

JCH Optimize, beforeApplication 0.772 seconds (+0.071); 2.03 MB (-0.080) afterRender

After

Application 0.864 seconds (+0.341); 2.06 MB (+0.177) - afterRender

Application 1.723 seconds (+0.170); 2.43 MB (-0.019) - afterRender

Application 1.016 seconds (+0.118); 2.08 MB (-0.029) - afterRender

Application 0.691 seconds (+0.217); 2.05 MB (+0.172) - afterRender

8. Performance Joomla Plugins

jbetolo, beforeApplication 0.620 seconds (+0.165); 2.00 MB (+0.148) - afterRender

After

Application 1.810 seconds (+1.234); 2.31 MB (+0.233) - afterRender

Application 0.751 seconds (+0.222); 2.27 MB (+0.193) - afterRender

Application 0.769 seconds (+0.223); 2.27 MB (+0.193) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

APC

JCH Optimize / jbetolo

Memcached

8. Performance Memchached


pi@rpi ~ $ sudo apt-get install memcached php5-memcache

{Download/compile/install APC}
pi@rpi ~ $ sudo pecl install memcache

{Reboot}
pi@rpi ~ $ sudo service nginx restart
pi@rpi ~ $ sudo service mysql restart
pi@rpi ~ $ sudo service php5-fpm restart
pi@rpi ~ $ sudo service memcached restart

8. Performance Memchached

BeforeApplication 0.677 seconds (+0.198); 2.00 MB (+0.148) - afterRender

After

Application 1.673 seconds (+0.320); 4.52 MB (+0.403) - afterRender

Application 0.721 seconds (+0.199); 2.00 MB (+0.148) - afterRender

Application 0.705 seconds (+0.211); 2.00 MB (+0.148) - afterRender

Application 0.678 seconds (+0.199); 2.00 MB (+0.148) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

APC

JCH Optimize / jbetolo

Memcached

Overclocking

8. Performance Overclocking

$ sudo raspi-config

8. Performance Overclocking

BeforeApplication 0.678 seconds (+0.210); 2.00 MB (+0.151) - afterRender

AfterApplication 0.649 seconds (+0.171); 2.05 MB (+0.153) - afterRender

Application 0.579 seconds (+0.169); 2.00 MB (+0.151) - afterRender

Application 0.596 seconds (+0.167); 2.00 MB (+0.151) - afterRender

Application 0.620 seconds (+0.167); 2.00 MB (+0.151) - afterRender

Application 0.583 seconds (+0.167); 2.00 MB (+0.151) - afterRender

8. Performance 10 ways to optimize

Nginx + PHP-FPM

Joomla gzip

Joomla cache

Nginx gzip

Nginx cache

APC

JCH Optimize / jbetolo

Memcache

Overclocking

Cryogenics

8. Performance Cryogenics

Superconducting computersSuperconductivity in certain materials when cooled below a characteristic critical temperature

Cool down RPi?Fridge: RPi = small, but not enough room for beer :-(

Not cool enough... < 123 K ( = 150 C, 238 F)

Liquid nitrogen or liquid helium?Couldn't decide which...
performance gain when cooling down: N/A

8. Performance My RPi

Every server/site different configuration for performance

My RPi:PHP-FPM: fastcgi_pass to Unix Socket (not IP+port)

Joomla: (progressive) cache (2.7 -> 1.4 sec)

Alternative PHP Cache (1.4 -> 0.7 sec)

9. Security

9. Security 10 Aspects

Change default username pi & password

Backup !!!

Study logfiles (e.g. with Logwatch)

9. Security ssh logfiles

/var/log/auth.logApr 8 22:49:01 rpi sshd[10812]: reverse mapping checking getaddrinfo for 95.148.175.59.broad.wh.hb.dynamic.163data.com.cn [59.175.148.95] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 8 22:49:01 rpi sshd[10812]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.175.148.95 user=root
Apr 8 22:49:04 rpi sshd[10812]: Failed password for root from 59.175.148.95 port 43066 ssh2
Apr 8 22:49:04 rpi sshd[10812]: Received disconnect from 59.175.148.95: 11: Bye Bye [preauth]
Apr 8 22:49:07 rpi sshd[10816]: reverse mapping checking getaddrinfo for 95.148.175.59.broad.wh.hb.dynamic.163data.com.cn [59.175.148.95] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 8 22:49:07 rpi sshd[10816]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.175.148.95 user=root
Apr 8 22:49:09 rpi sshd[10816]: Failed password for root from 59.175.148.95 port 44636 ssh2
Apr 8 22:49:10 rpi sshd[10816]: Received disconnect from 59.175.148.95: 11: Bye Bye [preauth]
Apr 8 22:49:13 rpi sshd[10820]: reverse mapping checking getaddrinfo for 95.148.175.59.broad.wh.hb.dynamic.163data.com.cn [59.175.148.95] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 8 22:49:13 rpi sshd[10820]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.175.148.95 user=root
Apr 8 22:49:15 rpi sshd[10820]: Failed password for root from 59.175.148.95 port 46051 ssh2
Apr 8 22:49:16 rpi sshd[10820]: Received disconnect from 59.175.148.95: 11: Bye Bye [preauth]
Apr 8 22:49:19 rpi sshd[10824]: reverse mapping checking getaddrinfo for 95.148.175.59.broad.wh.hb.dynamic.163data.com.cn [59.175.148.95] failed - POSSIBLE BREAK-IN ATTEMPT!
Apr 8 22:49:19 rpi sshd[10824]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=59.175.148.95 user=root

9. Security ssh logfiles

peter@rpi ~$ whois 59.175.148.95% [whois.apnic.net node-5]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.htmlinetnum:59.174.0.0 59.175.255.255
netname:CHINANET-HB
descr:CHINANET Hubei province network
descr:Data Communication Division
descr:China Telecom
country:CNrole:CHINANET HB ADMIN
address:8th floor of JinGuang Building
address:#232 of Macao Road
address:HanKou Wuhan Hubei Province
address:P.R.China
country:CN
phone:+86 27 82862199
fax-no:+86 27 82861499
e-mail:[email protected]
remarks:send spam reports to [email protected]
remarks:and abuse reports to [email protected]
remarks:Please include detailed information and
remarks:times in GMT+8

9. Security 10 Aspects

Change default username pi & password

Backup !!!

Study logfiles (e.g. with Logwatch)

Block ssh root login !

Block portscans -> Firewall

9. Security Firewall


{check Firewall}
peter@rpi ~$ sudo iptables -LChain INPUT (policy ACCEPT)
targetprot opt sourcedestinationChain FORWARD (policy ACCEPT)
targetprot opt sourcedestinationChain OUTPUT (policy ACCEPT)
targetprot opt sourcedestination
{create rules for Firewall}peter@rpi ~$ sudo nano /etc/iptables.firewall.rules

9. Security Configure Firewall 1/2


*filter# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

9. Security Configure Firewall 2/2


# Allow SSH connections
# The -dport number should be the same port number you set in sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
-A INPUT -p icmp -j ACCEPT

# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

9. Security Activate Firewall 1/2


{activate Firewall}
peter@rpi ~$ sudo iptables-restore < /etc/iptables.firewall.rules
{check Firewall}
peter@rpi ~$ sudo iptables -L

Chain INPUT (policy ACCEPT)
targetprot opt sourcedestination
ACCEPTall --anywhereanywhere
REJECTall --anywhereloopback/8reject-with icmp-port-unreachable
ACCEPTall --anywhereanywherestate RELATED, ESTABLISHED
ACCEPTtcp --anywhereanywheretcp dpt:http
LOGall --anywhereanywherelimit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROPall --anywhereanywhere
[..]

9. Security Activate Firewall 2/2


{script: activate Firewall at reboot}
peter@rpi ~$ sudo nano /etc/network/if-pre-up.d/firewall

{put in /etc/network/if-pre-up.d/firewall}
#!/bin/sh/sbin/iptables-restore < /etc/iptables.firewall.rules

{set script permissions}
peter@rpi ~$ sudo chmod +x /etc/network/if-pre-up.d/firewall

9. Security Automate Firewall

9. Security Fail2Ban

Scan logfiles & take action automatically

Jail configurationIf in entry in logfile matches filter

n times

Put IP on blocklist for x minutes/etc/fail2ban/jail.conf default

/etc/fail2ban/jail.local override

Filters/etc/fail2ban/filter.d/

Regex ROOT LOGIN REFUSED, POSSIBLE BREAK-IN ATTEMPT!, Failed password etc...

9. Security Fail2Ban


{install Fail2Ban}
peter@rpi ~$ sudo apt-get install fail2ban
Reading package lists... Done
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 340 kB of archives.

{check failed login attempts}
peter@rpi ~$ cat fail2ban.log
2013-04-09 16:45:59,000 fail2ban.actions: WARNING [ssh] Ban 9.8.7.6
{check Firewall}
peter@rpi ~$ sudo iptables -LChain fail2ban-ssh (1 references)
targetprot opt sourcedestination
DROPall -- test123.example.comanywhere
RETURNall -- anywhereanywhere

9. Security 10 Aspects

Change default username pi & password

Backup !!!

Study logfiles (e.g. with Logwatch)

Block ssh root login !

Block portscans -> Firewall

Block scriptkiddies

9. Security Webserver access logs

/var/log/nginx/petermartin.nl.access_log198.7.57.74 - - [30/Mar/2013:16:47:49 +0100] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 1565 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:52 +0100] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 403 135 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:52 +0100] "GET /pma/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:52 +0100] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:53 +0100] "GET /MyAdmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:53 +0100] "GET /scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:54 +0100] "GET /typo3/phpmyadmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:55 +0100] "GET /phpadmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:55 +0100] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:55 +0100] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 403 135 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:55 +0100] "GET /phpmyadmin1/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:55 +0100] "GET /phpmyadmin2/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /pma/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /web/phpMyAdmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /xampp/phpmyadmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /web/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /php-my-admin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:47:56 +0100] "GET /websql/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:23 +0100] "GET /sqlmanager/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:23 +0100] "GET /mysqlmanager/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:23 +0100] "GET /p/m/a/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:23 +0100] "GET /PMA2005/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /pma2005/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /phpmanager/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /php-myadmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /sqlweb/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /webdb/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /mysqladmin/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"
198.7.57.74 - - [30/Mar/2013:16:48:24 +0100] "GET /websql/scripts/setup.php HTTP/1.1" 404 47 "-" "ZmEu"

9. Security Fail2Ban configuration


{no w00tw00t for you ;-)}
peter@rpi ~$ sudo nano
/etc/fail2ban/filter.d/nginx-w00tw00t.conf

# Fail2Ban configuration file
# Author: Peter Martin
# $Revision: 001 $
[Definition]
# Option: failregex

failregex = ^ -.*GET.*(w00tw00t|\setup.php|\wp-login.php)

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

9. Security Fail2Ban configuration


{activate nginx-w00tw00t filter}
peter@rpi ~$ sudo nano /etc/fail2ban/jail.local


[nginx-w00tw00t]
enabled = true
port = http,https
filter = nginx-w00tw00t
logpath = /var/log/nginx/*access_log
maxretry = 0
bantime = 600


{restart Fail2Ban}
peter@rpi ~$ sudo /etc/init.d/fail2ban restart

9. Security 10 Aspects

Change default username pi & password

Backup !!!

Study logfiles (e.g. with Logwatch)

Block ssh root login !

Block portscans -> Firewall

Block scriptkiddies

SSL certificate for /administrator/

Block phpmyadmin (allow 1 specified IP)

Backup !!!

Passwordless login? SSH shared keys

10. Geeky stuff

10. Geeky Stuff - Webcam

Connect webcam to USB$ sudo apt-get install motion

Configuration$ sudo nano /etc/motion/motion.conf
change: daemon = ON & webcam_localhost = OFF

$ sudo nano /etc/default/motion
change the value start_motion_daemon=no to yes

$ sudo service motion start

Firewall$ sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT

RouterPortforwarding port 8081

10. Geeky Stuff - Webcam

Display webcamhttp://192.168.0.9:8081

In Joomla article

No time left for:

Send Email from RPi:Joomla's notifications & contact forms

Logwatch mails

Exim MTA (Mail Transfer Agent)

Questions?

Questions?

Presentation is available at www.db8.nl

Peter Martine-mail: info at db8.nlwebsite: www.db8.nl

Used photos

Chinese Raspberry Pie nr.1 1 - Koen Mol http://www.sxc.hu/photo/346723

Switched On Tech Design - www.sotechdesign.com.au

Bricks - Sharlene Jackson http://www.sxc.hu/photo/759981

Hotrod Dash - Peter Mazurek http://www.sxc.hu/photo/1341923

Greased Lightnin' - Donald Cook http://www.sxc.hu/photo/690214

File Overload - Bob Smith http://www.sxc.hu/photo/367985

Rusted Gears - Angelo Rosa http://www.sxc.hu/photo/1365696

Man Made - "csremedy" http://www.sxc.hu/photo/1267108

digital world - ilker http://www.sxc.hu/photo/1206711

Crazy Man in Shower - scott adams http://www.sxc.hu/photo/760765

laptop 2 - emre nacigil http://www.sxc.hu/photo/810741

Speedometer Abdulhamid AlFadhly http://www.sxc.hu/photo/1390189

Secure - Frank Khne http://www.sxc.hu/photo/962334

Professor Tiger - Gabriel Doyle http://www.sxc.hu/photo/526749

signs signs - Jason Antony, http://www.sxc.hu/photo/751034

Face - Questions - Bob Smith, http://www.sxc.hu/photo/418215