Handleiding 'Proxy bouwen voor Soekris'

0. Aanpak:

- opzetten van een chroot jail op FreeBSD6.2 host machine
- installeren van minibsd 6.2 in de jail
- bouwen en maken van image voor Soekris, inclusief ssh
- schrijven van image naar compact flash
- installeren en configureren apache, volgens 'handleiding Dennis'


1. Wat je nodig hebt

- voor de hostmachine: (oude) pc met cdrom drive en usb voor een kaartlezer voor CF-kaartjes (ingebouwd kan natuurlijk ook);
- cf-kaartje van minimaal 64 MB, (de kleinste die nog hier en daar te koop zijn zijn 256 - 512 MB);
voor het testen op Soekris:
- Soekris 4501 of 4801
- een nulmodem kabeltje, als de pc geen seriele poort heeft ook nog een usb-serieel adapter.
- installatie-cd's van FreeBSD6.2
- workshop cd met o.a. image van de www.ultradesic.com website en het script apache2.sh, of internet-toegang
- de handleiding van Dennis "InstallProxy16.odt" (zie http://svn.wirelessleiden.nl/svn/projects/proxy/)
- de file voor Apache 2.2.6. Het bestand httpd-2.2.3.tar.gz kan op deze plaats worden gedownload: http://httpd.apache.org/download.cgi. (Zie opmerking aan het eind van dit stuk over het installeren via ports.)

Het is handig als de host-pc een internetverbinding heeft. Ook een tweede pc met internet toegang is handig voor het raadplegen van de documentatie en voor het testen. Met wat kunst en vliegwerk kan het waarschijnlijk ook wel zonder?

2. Opzetten van chroot jail

- installeer FreeBSD6.2 op de host-pc gebruikmakend van de installatie-cd's. Je hebt geen X11 nodig (werken met command line gaat veel sneller); Je moet wel een 'developers' versie nemen, anders kun je niet compileren. Ports is ook handig, mits je vaste schijf groot genoeg is (10 GB).

- maak een chroot jail op de host machine volgens de handleiding op www.ultradesic.com ==> guides ==> minibsd6.x, de complete url naar de guides is:
www.ultradesic.com/index06ef-2.html?section=125
Deze url zou ook moeten werken vanaf de 'workshop cd' zonder internetverbinding. Ook de scripts moet je zo kunnen downloaden (TEST).

- chroot naar de jail (minichroot script in /root, dus 'cd /root' en  'sh minichroot.sh' ). Let op de correcte adressering van directories/files als je in de jail bent. Ga in en uit de jail ('exit') en zie het verschil. Hier zit een bron van vergissingen!

3. Bouw minibsd6.x in de jail, 

Volg de ultradesic guide. Binnen de jail komen de files voor de image te staan in de directory /usr/minibsd. Gebruik de scripts en de generic kernel. Let op de adressering van directories en files!! Check je 'working directory' met pwd als je relatief adresseert en wilt weten 'waar je bent'.

Test: zoek bijvoorbeeld de drie 'local' directories op die je inmiddels op je host-pc hebt staan. 

N.B. Als je de workshop cd gebruikt kun je ipv (bijvoorbeeld)
fetch http://www.ultradesic.com/pub/miniBSD_Files/copy-etc-6.sh
de files van de cd halen, voor dit voorbeeld:
cdrom/www.ultradesic.com/pub/miniBSD_Files/copy-etc-6.sh

Let op dat in /usr/minibsd/etc/fstab /dev/ad0a staat en niet /dev/ad0s1a zoals in /etc/fstab. Anders kan de Soekris niet het root filesysteem vinden.

Voor we een image gaan maken eerst een paar voorbereidingen:

4. Maken van een image.

- Eerst zorgen dat je kunt communiceren met je Soekris. Nog geen kaartje in de Soekris. Je (tweede?) pc aansluiten op de seriele poort. Monitor programma starten (tip op FreeBSD, minicom op Linux, hyperterminal op Windoos). Zorgen dat de communicatieparameters goed staan, met name de snelheid. Standaard gebruiken we 9600 baud, maar de Soekris staat ex-fabriek vaak op een andere, hogere snelheid bijv. 19200. Als het gelukt is een leesbare uitput van de Soekris te krijgen (door de snelheid op je pc aan te passen) kun je de Soekris op de standaard 9600 zetten. 

Het is handig om nu, voor we beginnen met het proxy-specifieke gedeelte te checken of we inderdaad een CF-kaartje kunnen maken dat werkt in de Soekris. Hier kun je dagen mee bezig zijn ;-).

Wat volgens mij werkt: 
- CF-kaartje formatteren in een camera (weet niet of dat echt nodig is, maar allerlei andere procedures, waarvan er vele te vinden zijn op internet werkten niet! Het schijnt dat een DOS partitie helpt om FreeBSD de goede geometrie te laten detecteren).
- CF-kaartje in de Soekris, Soekris laten opstarten en de CHS gegevens noteren.
Bereken het aantal sectoren: CxHxS. Voor een 256 MB kaartje is dat bijv. 500400.
- Het build-image.sh script van ultradesic (om een image te maken) aanpassen met deze CxHxS-waarde (voorbeeld: SECTORS="500400").
- Image script starten, er wordt een gezipte image gemaakt (geef een versienr mee, bijv. 0.1). Die file staat nu in je /root directory: minibsd-disk-0.1.bin/gz.
- Deze image unzippen en dd-en naar de CF-kaart:
dd if=minibsd-disk-0.1.bin of=/dev/da0 bs=8k
Aannemend dat de kaartlezer op /dev/da0 zit. 
- CFkaartje in de Soekris stoppen, terminalprogramma starten op je monitor-pc, voedingsspanning erop en kijken naar de boodschappen. Het opstarten duurt wel even. In het begin is de output niet leesbaar. Je moet uitkomen bij een login:

So far so good?

5. Toevoegen van ssh

Volg de guide van ultradesic. Dit is recht toe rechtaan.

Omdat de gebruiker root standaard niet mag inloggen over SSH, moet er een aanpassing gedaan worden om dit wel te mogen. Het bestand dat aangepast moet worden is sshd_config. Dit bestand kan worden gevonden in /etc/sshd_config.
Zie verder de handleiding van Dennis (paragraaf 3.3 op pag.13). 
Toevoegen:
###PERMIT ROOT LOGIN###
PermitRootLogin yes

Maak een nieuwe image en test of je kaartje werkt in de Soekris. Je kunt een pc via een crossover kabeltje aansluiten op de (eerste) ethernetpoort (of met 'rechte' kabeltje via een hub/switch) en kijken of je inderdaad in kunt loggen met ssh.

6. Apache installeren
Hiervoor heb ik de handleiding van Dennis gevolgd (dwz tar downloaden, compileren buiten de jail), maar het zou logischer zijn om de normale methode te gebruiken via ports. (Dit nog TESTEN). 
Let op: op een Soekris heten de ethernetpoorten sis0 en sis1 (dus anders dan bij Dennis die xl0 en xl1 gebruikt).

De complete apache directory kopieeren naar de /usr/jail/usr/minibsd/usr/local/apache2 directory.
Als je nu httpd start in de jail zie je dat er een aantal libraries missen. Kopieer de volgende libraries uit /usr/local/lib naar /usr/jail/usr/minibsd/usr/local/lib:
libapr-1.so.2
libaprutil-1.so.2
libdb-4.2.so.2
libexpat.so.6
libiconv.so.3

7. Apache configureren

Nadat Apache geïnstalleerd is moet het configuratiebestand van Apache aangepast worden. Deze aanpassingen zorgen ervoor dat de proxy module correct functioneert. Het configuratiebestand van Apache is httpd.conf en bevindt zich in /usr/minibsd/usr/local/apache2/conf. Stap voor het configureren in de jail en volg verder de richtlijnen van Dennis, pag. 17 e.v.
Samengevat:
###PUBLIC ADRESS###
Listen <IP-adres>:3128
(let op: de regel Listen :80 moet uitgecomment worden, dus # ervoor, anders staat aan de buitenkant poort 80 open).

###PROXY MODULES###
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

###SERVERNAME###
ServerName proxy0.wleiden.net:3128
(n.b. in de handleiding staat :80)

###LOGGING WEBSITES###    
#CustomLog logs/access_log common

###PROXY SERVER SETTINGS###
ProxyRequests On
ProxyVia On
AllowCONNECT 443
HostnameLookups Off

Het schrijven van log files moet op een Soekris naar een RAM-disk. We hebben er twee die gemount zijn op /var en /tmp.
De logs van apache moeten dus ook daar naar toe. Vervang daarom de logs directory door een symbolisch link naar de /var/log directory:
in de /usr/local/minibsd/usr/local/apache2 directory:
rmdir logs
ln -s ../../../var/log logs
Controleer of het gelukt is met 'ls -al'.

8. Aanpassen rc.conf

Blijf in de jail!

We moeten de netwerkpoorten configureren en apache laten starten. Dit gebeurt via aanpassingen van de configuratiefile /etc/rc.conf.
Ook kunnen we in rc.conf regelen dat apache gestart wordt bij boot, dmv het apache2.sh script

- Het bestand apache2.sh moet naar de map /usr/minibsd/etc/rc.d worden gekopieerd. (Controle:
'cd /usr/minibsd/etc/rc.d' en 'ls'

- Het bestand /usr/minibsd/etc/rc.conf aanpassen als volgt:

-------------------------------------------------------------------
# This file now contains just the overrides from /etc/defaults/rc.conf.
# Please make all changes to this file, not to /etc/defaults/rc.conf.

# Enable network daemons for user convenience.
# Created: Thu Nov  1 11:49:16 2007

gateway_enable="YES"
hostname="proxy4"

###  NIC TO INTERNET ###
ifconfig_sis0="DHCP"

###  NIC TO WLEIDEN  ###
ifconfig_sis1="inet 172.17.16.66/27"

###  ROUTE TO WLEIDEN NETWORK ###
static_routes="wl_network"
route_wl_network="-net 172.16.0.0/12 172.17.16.65"


keymap="us.iso"
sshd_enable="YES"
usbd_enable="YES"

###  APACHE WEBSERVER ###
apache2_enable="YES"
update_motd="NO"
--------------------------------------------------
 
LET OP: Dennis gebruikt een oude apache2.sh versie (2004). De nieuwe versie die in /usr/ports/www/apache22 staat kent de variabele apache22_http_accept_enable i.t.t. de oude versie. Dan kan hier de regel
apache22_http_accept_enable="NO"
worden toegevoegd. Het voorkomen van het laden van de betreffende kernel module kan ook in de boot loader geregeld worden:
in de jail
cp /usr/minibsd/boot/defaults/loader.conf naar /usr/minibsd/boot/
cd /usr/minibsd/boot
vi loader.conf, zoek de betreffende regel met /acc
verander in het gedeelte 'Other modules':
accf_http_load="YES"
write en quit vi

8. Klaar!

Maak een image via build-image.sh script, schrijf een CFkaartje en installeer in de Soekris. Er moet wel een dchp server draaien op ethernetpoort1-netwerk.
Kijk of httpd draait (ps ax | grep httpd) en herstart apache voor eventuele interessante boodschappen:
%cd /etc/rc.d
%sh apache2.sh restart
Performing sanity check on apache2 configuration:
Syntax OK
Stopping apache2.
Starting apache2.
[Wed Jan 02 05:45:51 1980] [warn] (2)No such file or directory: Failed to enablr
%cat /var/log/error_log 
[Wed Jan 02 05:38:53 1980] [notice] Apache/2.2.6 (Unix) configured -- resuming s
[Wed Jan 02 05:45:50 1980] [notice] caught SIGTERM, shutting down
[Wed Jan 02 05:45:51 1980] [notice] Apache/2.2.6 (Unix) configured -- resuming s
%

N.B. 
Laatste wijzigingen (zoals ip-adressen) kun je aanbrengen door via de ethernetpoort met ssh in te loggen op de Soekris.
Let er op dat het filesysteem 'read only' gemount is. Je moet dus voor je wat kunt veranderen het fs read-write mounten dmv:
'mount -uw -o noatime / '
Na het wijzigen weer read only mounten door:
'mount -ur / '

Het werkt wel handiger vind ik om het kaartje uit de Soekris te halen en te mounten via de kaartlezer.

Checken op openstaande poorten aan binnen en buitenkant van de proxy mbv 'nmap -A -T4' scan


9. Suggesties voor verder werk

- Apache installeren dmv ports, dan heb je een standaard configuratie (en variabelen in rc.conf zijn dan apache22 ipv apache2, zie boven).
- Time server toevoegen (ntpd), zodat nodes tijd kunnen synchroniseren via deze proxy. Er staat een extra poortje open voor ntpd, maar dat is geen groot veiligheidsrisico.
- Voor de hobbyisten: een gps aan de proxy seriele poort hangen (stratum 0 server configuratie).















