OpenBSD

Da GolemWiki.

Indice

Storia

Nel Giugno del 1996 Theo de Raadt, uno dei primi sviluppatori del NetBSD, si allontana dal progetto a causa di attriti con il resto della comunità. Il suo fork prenderà il nome di OpenBSD e i suoi obiettivi saranno: sicurezza, rispetto degli standard e portabilità.


Creazione di un supporto d'avvio per l'installazione

In questo articolo mi occuperò solamente dell'installazione e configurazione di base del port di OpenBSD per piattaforma i386 nella sua ultima versione: la 5.5. Per non sovraccaricare il server primario è consigliabile utilizzare un mirror, il mirror italiano si trova a questo indirizzo: ftp://openbsd.mirror.garr.it/pub/OpenBSD/5.5/i386/

Possiamo scegliere tra diversi file d'immagine per installare il sistema:

  • floppy55.fs (Desktop PC) supporta la maggior parte delle periferiche PCI, ISA, dei controller IDE e SCSI e alcune schede PCMCIA.
  • floppyB55.fs (Servers) supporta diversi controller RAID e SCSI non presenti nel floppy39.fs.
  • floppyC55.fs (Laptops) contiene i driver CardBus and PCMCIA della maggior parte dei normali laptop.
  • cd55.iso è una immagine ISO9660 che può essere usata per creare CD d'avvio. Contiene la più numerosa selezione di driver, se la macchina in cui vogliamo installare OpenBSD ha il supporto per il CDROM questa è probabilmente la scelta migliore.
  • install55.iso immagine standard per l'installazione da CD-ROM, nella maggior parte dei casi è questo il file che conviene masterizzare
  • install55.fs immagine standard per l'installazione da USB

Creazione di un floppy di boot

Da sistemi BSD

Scaricare il file immagine desiderato (es. floppy55.fs)

Formattare un floppy

# fdformat /dev/rfd0c
Format 1440K floppy `/dev/rfd0c'? (y/n): y
Processing VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV done.

Se il floppy dovesse avere dei settori danneggiati sostituitelo.

Adesso scriviamo l'immagine sul floppy

# dd if=floppy55.fs of=/dev/rfd0c bs=32k

Da Linux

# fdformat /dev/fd0
# dd if=floppy55.fs of=/dev/fd0


Da MS DOS o Windows

Formattazione del floppy

C:\> format a:

Scrittura dell'immagine con rawrite

C:\> rawrite
RaWrite 1.2 - Write disk file to raw floppy diskette
Enter source file name: floppy55.fs
Enter destination drive: a
Please insert a formatted diskette into drive A: and press -ENTER- : Enter


Creazione di una ISO personalizzata

Molti potrebbero avere bisogno di un'iso per cdrom contenente non solo il sistema base, ma anche i sorgenti o dei pacchetti precompilati.

Scaricate tutto il contenuto di ftp://openbsd.mirror.garr.it/pub/OpenBSD/5.5/i386/ in OpenBSD/5.5/ Io per eseguire queste operazioni uso wget con l'opzione mirror, ma è possibile utilizzare qualsiasi client ftp.

# wget -m ftp://openbsd.mirror.garr.it/pub/OpenBSD/5.5/i386/
# mv  openbsd.mirror.garr.it/pub/OpenBSD .
# rm -rf openbsd.mirror.garr.it
# cd OpenBSD/

Se ci interessa possiamo scaricare

Possiamo anche creare la directory packages/ e aggiungervi qualsiasi pacchetto precompilato si desideri installare dopo l'installazione del sistema di base. Naturalmente si dovrà fare attenzione alle dipendenze di ciascun pacchetto scaricato e a non superare lo spazio del supporto sul quale vogliamo andare a scrivere la nostra iso.

# mkdir packages
# cd packages
# wget -m ftp://openbsd.mirror.garr.it/pub/OpenBSD/5.5/packages/i386/


Se non ci siete tornate nella cartella OpenBSD/ e date un comando di questo genere per creare la vostra iso

# mkisofs -r -l -V "OpenBSD-5.5" -A "OpenBSD v5.5-Release, \
Custom ISO, 06-05-2014." -b 5.5/i386/install55.fs -c boot.catalog \
-o openbsd-i386-5.5.iso ../OpenBSD/


Per masterizzare l'iso va bene qualsiasi programma: K3B, Nero o da linea di comando:

# cdrecord -v -tao dev=/dev/il_vostro_masterizzatore -data driveropts=burnfree openbsd-i386-5.5.iso

Installazione

Le parole o le lettere in neretto corrispondono a quello che dovreste digitare per proseguire con l'installazione. Fate fare il boot da CDROM al vostro computer e se tutto va bene dovrebbe apparirvi questo:

Welcome to the OpenBSD/i386 5.5 install program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i

Selezionare it per la tastiera italiana e dare un nome al computer.

Choose your keyboard layout ('?' or 'L' for list) [default] it
System hostname? (short form, e.g. 'foo') puffy

Premere invio per configurare l'interfaccia di rete principale.

Available network interfaces are: em0 vlan0.
Which one do you wish to configure? (or 'done') [em0] Enter

Utilizzare dhcp o configurare un IP manualmente.

IPv4 address for em0? (or 'dhcp' or 'none') [dhcp] Enter

Salvo esigenze particolari è possibile saltare i prossimi due passaggi premendo Invio.

IPv6 address for em0? (or 'rtsol' or 'none') [none] Enter
Which one do you wish to configure? (or 'done') [done] Enter

Inserire la password di root. "Will not echo" significa che comparirà niente sullo schermo mentre si digita la password, per conferma dopo occorrerà ridigitarla)

Password for root account? (will not echo) PaSsWoRd
Password for root account? (again) PaSsWoRd

Configurazione dei demoni del sistema di base

Start sshd(8) by default? [yes] Enter

Il network time protocol daemon è un demone che sincronizza automaticamente l'orologio della vostra macchina con alcuni server su Internet. Se avete una connessione ADSL flat può essere una buona idea rispondere yes, se non vi interessa premete Invio.

Start ntpd(8) by default? [no] y
NTP server? (hostname or 'default') [default] Enter

Installazione del sistema grafico

Do you expect to run the X Window System? [yes] Enter

Inserire y per avviare X automaticamente all'avvio

Do you want the X Window System to be started by xdm(1)? [no] y

È possibile aggiungere un utente amministratore

Setup a user? (enter a lower-case loginname, or 'no') [no] Nome utente
Password for nome utente account? (will not echo) PaSsWoRd
Password for nome utente account? (again) 'PaSsWoRd

Selezionare la zona per il fusorario What timezone are you in? ('?' for list) [Canada/Mountain] Europe/Rome

Configurazione del disco

Available disks are: wd0.
Which one is the root disk? (or done) [wd0] Enter
Use DUIDs rather than device names in fstab? [yes] Enter

Se il sistema riconosce più di un disco (es. wd1) potete specificare un supporto diverso da wd0, probabilmente però dovrete installare un boot loader (es. GRUB) per poter avviare la partizione dove avete installato OpenBSD.

Premere Invio per utilizzare tutto il disco, altrimenti è possibile specificare manualmente le partizioni.

Use (W)hole disk or (E)dit the MBR? [whole] Enter

Se non si ha intenzione di usare l'intero hard disk si consiglia di partizionarlo da Linux con cfdisk o gparted (l'fdisk dell'OpenBSD sembra studiato ad arte per portare i neuroni dell'utente al suicidio di massa)'.

Premere E per non lasciare al sistema il compito di creare automaticamente le varie partizioni.

Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] E

Ora ci troveremo ad usare disklabel per creare le slice nella partizione dell'OpenBSD. Aggiungiamo una label per la /

> a a
offset: [63] Enter

Il punto di inizio della partizione, va bene il valore che ci dà lui.

size: [xxxxxxxxx] 2000m

A size possiamo indicare la grandezza della slice, nel caso dell'esempio 2000 Mb, specificando k per Kb, m per Mb o g per Gb dopo il valore numerico che abbiamo inserito.

Rounding to nearest cylinder: xxxxxx
FS type: [4.2BSD] Enter
mount point: [none] /


Aggiungiamo una label di swap

> a b
offset: [xxxxxx] Enter
size: [xxxxxxxx] 300m
Rounding to nearest cylinder: xxxxxx
FS type: [swap] Enter


Per uso server o multiutente sarebbe indicato aggiungere anche delle slice per: /tmp, /var e /home

> a d
offset: [xxxxxxx] Enter
size: [xxxxxxx] 200m
Rounding to nearest cylinder: xxxxx
FS type: [4.2BSD] Enter
mount point: [none] /tmp

E così via...

> p m

Per visualizzare la situazione definitiva con i parametri in Megabyte.

> q 
Write new label?: [y] Enter
OpenBSD filesystems:
wd0a /
The next step *DESTROYS* all existing data on these partitions!
Are you really sure that you're ready to proceed? [no] y


Installazione del sistema di base

Let's install the sets!
Location of sets? (cd disk ftp http or 'done') [cd] Enter
Available CD-ROMs are: cd0.

Se abbiamo usato un floppy di boot, se ci siamo scordati qualcosa nella directory /5.5/i386/ della nostra iso o per qualsiasi altro motivo è possibile installare il sistema di base anche via ftp, http o da un altro disco.

Which one contains the install media? (or 'done') [cd0] Enter
Pathname to the sets? (or 'done') [5.5/i386] Enter
Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-' to the set name, file name pattern or 'all'. Selected
sets are labeled '[x]'.
[X] bsd           [X] etc55.tgz     [X] xbase55.tgz   [X] xserv55.tgz
[X] bsd.rd        [X] comp55.tgz    [X] xetc55.tgz
[ ] bsd.mp        [X] man55.tgz     [X] xshare55.tgz
[X] base55.tgz    [X] game55.tgz    [X] xfont55.tgz

Premere invio per installare tutto Vi consiglio di selezionarli tutti ed installarli, ulteriori dettagli sono disponibili qui.

Set name(s)? (or 'abort' or 'done') [done] Enter

Ignorare l'avvertimento e proseguire con l'installazione

Directory does not contain SHA256.sig. Continue without verification? [no] y
Location of sets? (cd disk ftp http or 'done') [done] Enter
   

L'installazione è terminata, quando compare la shell scrivere reboot per avviare il sistema OpenBSD.

Rendere il sistema più user friendly

Inserite queste righe nel file: /etc/profile

export PS1="[\u@\h \W]\\$ "
alias ls='ls -a'
alias ll='ls -l'
alias free='top -n | head -5'
PKG_PATH="http://openbsd.mirror.garr.it/pub/OpenBSD/5.5/packages/i386/"
export PKG_PATH

Vi troverete una shell con un impatto visivo molto simile alla Bash di Linux, che volendo possiamo anche installare dato che è presente nei packages e nei ports.

[nomeutente@nomecomputer directory]$


Avendo esportato automaticamente il PKG_PATH, al prossimo login (non importa riavviare), per installare un pacchetto da Internet vi sarà sufficiente usare

# pkg_add nomepacchetto-versione.tgz


Create le directory /mnt/cdrom e /mnt/floppy dove montare i rispettivi device, su OpenBSD di default non vengono create.

# mkdir /mnt/cdrom
# mkdir /mnt/floppy

Successivamente aggiungete le seguenti righe al file /etc/fstab

/dev/fd0a /mnt/floppy msdos rw,noauto,nosuid 0 0
/dev/cd0a /mnt/cdrom cd9660 ro,noauto 0 0

OpenBSD non possiede un filesystem che supporti il journaling, ma si consiglia di aggiungere l'opzione softdep alle partizioni ffs

/dev/sd0a / ffs rw,softdep 1 1


Adesso per montare cdrom e floppy basteranno i comandi:

# mount /mnt/cdrom
# mount /mnt/floppy


Se come me avete un'immagine ISO di OpenBSD con una cartella 5.5/packages piena di pacchetti precompilati, per installarvi dovrete entrare in quella cartella e dare il comando:

# pkg_add pacchetto-versione.tgz

Per togliere un pacchetto invece:

# pkg_delete pacchetto-versione.tgz

L'albero dei port

Per compilare i pacchetti in maniera automatica possiamo decomprimere l'archivio ports.tar.gz nella directory /usr.

# cp /mnt/cdrom/5.5/ports.tar.gz /usr
# cd /usr
# tar -xzvf ports.tar.gz
# rm ports.tar.gz
# cd ports


Nella directory /usr/ports troveremo tutti i sorgenti dei pacchetti del software aggiuntivo disponibili per OpenBSD. Es.: per compilare ed installare nmap dovremo fare così:

# cd /usr/ports/net/nmap
# make install


Configurazione di alcuni demoni utili

Editando il file di configurazione /etc/rc.conf è possibile gestire l'avvio automatico dei server del sistema di base. Però come sostengono anche nel manuale ufficiale dell'OpenBSD sarebbe buona norma non toccare mai il file /etc/rc.conf. Per facilitare successivi upgrade è meglio creare al suo posto il file /etc/rc.conf.local che al boot ne sovrascrive le impostazioni e copiarvi solamente le linee che vogliamo modificare. In questo modo otteniamo un unico file contenente tutte le modifiche.

Per avviare automaticamente Apache (già sotto chroot)

# echo httpd_flags= >> /etc/rc.conf.local

Bind

# echo named_flags= >> /etc/rc.conf.local

Personalmente cerco sempre di avere un server dns di cache nella mia rete locale in modo da non essere dipendente da quello del mio ISP. Una volta avviato Bind per sfruttarlo dal computer dove è installato dovrete anche modificare il file /etc/resolv.conf ed aggiungere come prima riga:

nameserver 127.0.0.1

Per gli altri computer della rete sarà sufficiente indicare come server DNS l'indirizzo IP locale del vostro server Bind, oppure effettuare tutto tramite dhcp se lo avete installato sul server.


Server dhcp

Editare il file /etc/dhcpd.interfaces selezionando la scheda di rete dove vogliamo rendere attivo il server dhcp. Dovremmo scegliere una delle schede di rete della rete interna.

#    $OpenBSD: dhcpd.interfaces,v 1.1 1998/08/19 04:25:45 form Exp $
#
# List of network interfaces served by dhcpd(8).
#
ne0
#ep0
#de1

Adesso modifichiamo in questo modo il file /etc/dhcpd.conf

# $OpenBSD: dhcpd.conf,v 1.1 1998/08/19 04:25:45 form Exp $
#
# DHCP server options.
# See dhcpd.conf(5) and dhcpd(8) for more information.
#
# Network: 192.168.1.0/255.255.255.0
# Domain name: my.domain
# Name servers: 192.168.1.3 and 192.168.1.5
# Default router: 192.168.1.1
# Addresses: 192.168.1.32 - 192.168.1.127
#
shared-network LOCAL-NET {
option domain-name "openbsd.router";
option domain-name-servers 127.0.0.1;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
range 192.168.0.100 192.168.0.150;
}
}

option domain-name-servers 127.0.0.1 - indica il server DNS che nel nostro caso coincide con la macchina stessaper cui lo imposteremo con l'indirizzo 127.0.0.1

option routers 192.168.0.1; - indica l'indirizzo IP del gateway, corrisponde all'IP della scheda di rete sul quale vogliamo attivare il dhcpd.

range 192.168.0.100 192.168.0.150; - ci permette di selezionare un range di indirizzi IP per il dhcp. Secondo le mie impostazioni nella LAN posso utilizzare gli indirizzi da 192.168.0.1 a 192.168.0.99 staticamente come IP fissi, mentre quelli da 192.168.0.100 a 192.168.0.150 verranno assegnati dinamicamente dal demone dhcp. (Anche gli indirizzi sopra al 192.168.0.150 sono liberi).


Per attivare il servizio dhcpd dovremo editare nuovamente il file /etc/rc.conf sostituendo la riga

dhcpd_flags=NO        # for normal use: ""

con

dhcpd_flags=""        # for normal use: ""


Condivisione della connessione

Per condividere la connessione dobbiamo attivare l'IP forwarding in modo che i pacchetti possano passare dal router al client che li ha richiesti.

# sysctl net.inet.ip.forwarding=1

Per rendere questa modifica permanente dovremo modificare il file /etc/sysctl.conf modificando la riga

net.inet.ip.forwarding=0 

in

net.inet.ip.forwarding=1


Ed abilitare il routing da /etc/rc.conf sostituendo

routed_flags=NO        # for normal use: "-q"

con

routed_flags="-q"        # for normal use: "-q"

Adesso è la volta di vedere la configurazione del firewall /etc/pf.conf

Selezioniamo l'interfaccia di rete verso l'esterno

ext_if="pppoe0"

Adesso quella verso la LAN interna attraverso la quale condivideremo la connessione

int_if="ne0"


Impostiamo il nat dall'interfaccia esterna a tutte le altre nat on $ext_if from !($ext_if) -> ($ext_if:0)


Blocchiamo in ingresso dall'esterno la porta 53, quella del DNS, per quando riguarda il protocollo UDP così che nessuno da fuori possa sfruttare il nostro dns

block in on $ext_if proto udp to port = 53


Potremmo bloccare la porta UDP 53 anche solamente per un certo range di IP, ad esempio gli IP che non fanno parte della sottorete 150.xxx.xxx.0/24

block in on $ext_if proto { tcp, udp } from !150.xxx.xxx.0/24 to port = 53 keep state


Blocchiamo i pacchetti ICMP così non ci rompono le scatole con i ping

block in proto icmp from any to any


# scrub for NAT in PPPoE for using max mtu value
# questo parametro seve per far funzionare il nat con il pppoe
scrub out on pppoe0 max-mss 1440


Configurazione dell'interfaccia hostname.pppoe

OpenBSD permette una semplice configurazione di tutte le interfacce di rete. Dobbiamo creare dei file del tipo hostname.nome_device nella directory /etc

es. il file /etc/hostname.ep0 potrebbe contenere quanto segue:

inet 192.168.0.1 255.255.255.0 NONE

Oppure, se viene configurata tramite dhcp semplicemente avere questa riga:

dhcp


Significherebbe che la nostra scheda di rete /dev/ep0 ha l'indirizzo 192.168.0.1 e la netmask 255.255.255.0 I sistemi BSD identificano le schede di rete col nome del driver ed un numero, quindi possono coesistere più schede con il medesimo numeo. Non avremo come su Linux /dev/eth0, eth1, eth2... ma ne0, ne1 se abbiamo due schede NE2000 compatibile; ep0, ep1, ep2 per le 3Com e così via.

Un'impostazione tipica del file /etc/hostname.ppoe0

pppoedev ne0
!/sbin/ifconfig ne0 up
!/usr/sbin/spppcontrol \$if myauthproto=pap myauthname=testcaller \
myauthkey=donttell
!/sbin/ifconfig \$if inet 0.0.0.0 0.0.0.1 netmask 0xffffffff
!/sbin/route add default 0.0.0.1
up

ne0 è l'interfaccia di rete alla quale è attaccato il modem ethernet. myauthname e mayautkey sono rispettivamente l'username e la password.


Pure-ftpd

Pure-ftpd è un server ftp molto semplice, ma al tempo stesso altamente configurabile. Per installarlo lanciamo il comando:

# pkg_add pure-ftpd-1.0.20.tar.gz


Per eseguirlo automaticamente all'avvio è necessario aggiungere al file /etc/rc.local queste righe:

if [ -x ${PREFIX}/sbin/pure-ftpd ]; then
 echo Starting Pure-FTPd
 ${PREFIX}/sbin/pure-ftpd -A -B -H -u1000
fi


Questa sopra è la configurazione di default, ecco invece la mia:

if [ -x ${PREFIX}/sbin/pure-ftpd ]; then
 echo Starting Pure-FTPd
 ${PREFIX}/sbin/pure-ftpd -B -A -H -u 1000 -c 3 -C 5 -y 4:3 -n 40000:100 -k 95 \
-O stats:/var/log/pureftpd.log -I 5 -F /etc/welcome.msg -t 1:15
fi

Vi spiego brevemente a cosa servono tutti gli argomenti che ho impostato: -B demonizza il processo

-A fa il chroot del server

-H non risolve via dns gli IP delle connessioni, risparmiando banda e cpu

-u <valore> nessun utente con un gid inferiore a "valore" può loggarsi, utile per non far loggare root

-c limite di connessioni dallo stesso IP

-C limite totale di connessioni supportate

-y limite di connessioni per uno stesso utente:utente_anonimo

-n limite numero_files:Mb_occupati, permette di creare delle quote che l'utente non può superare

-k se il disco è pieno più del 95% non permette upload

-O stats:/var/log/pureftpd.log esegue il log del server nel formato stats sul file indicato

-I Timeout in minuti, nel mio caso se un utente rimane inattivo per più di 5 min viene disconnesso

-F permette di indicare un file col messaggio di benvenuto

-t limita la banda degli utenti anonimi upload:download

-T limita la banda utenti normali upload:download

-a permette di indicare un gid corrispondente ad un gruppo di utenti considerati trusted che di conseguenza non vengono chrootati. Non va usato insieme all'opzione -A.

Strumenti personali