OpenBSD

Da GolemWiki.
Versione del 26 mag 2014 alle 11:09 di $pooky Hunter (discussione | contributi) (Creata pagina con 'Guida all'uso domestico di OpenBSD Configurazione di alcuni demoni dhcpd Condivisione della connessione Configurazione del pppoe Pure-ftpd ==Storia== Nel Giugno del 199...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search

Guida all'uso domestico di OpenBSD

Configurazione di alcuni demoni

   dhcpd

Condivisione della connessione Configurazione del pppoe Pure-ftpd

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 3.9. 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:

   floppy39.fs (Desktop PC) supporta la maggior parte delle periferiche PCI, ISA, dei controller IDE e SCSI e alcune schede PCMCIA. 
   floppyB39.fs (Servers) supporta diversi controller RAID e SCSI non presenti nel floppy39.fs.
   floppyC39.fs (Laptops) contiene i driver CardBus and PCMCIA della maggior parte dei normali laptop.
   cdrom39.fs è una combinazione delle tre precedenti immagini. Può essere usata per creare un floppy di boot da 2.88 Mb o più comunemente un immagine per cdrom personalizzati.
   cdemu39.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.


Creazione di un floppy di boot

Da sistemi UNI*

Scaricare il file immagine desiderato (es. floppy39.fs) (Nel caso stiate usando Linux dovrete sostituire "rfd0c" con il nome del vostro floppy device, probabilmente "fd0", es. # fdformat /dev/fd0.)

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=floppy39.fs of=/dev/rfd0c bs=32k


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: floppy39.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 di base, ma anche i sorgenti o dei pacchetti precompilati. Se vogliamo contribuire finanziariamente al progetto OpenBSD è possibile ordinare su http://www.openbsd.org/items.html i CD originali a 45 € + spese di spedizione. In caso non abbiate 45 € è possibile creare un'iso NON ufficiale a partire dal materiale disponibile su Internet.

Create le directory OpenBSD/ con al suo interno 3.9/

# mkdir -p OpenBSD/3.9/

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

# wget -m ftp://ftp.unina.it/pub/OpenBSD/3.9/i386/
# mv ftp.unina.it/pub/OpenBSD/ .
# rm -rf ftp.unina.it
# cd OpenBSD/

Se ci interessa possiamo scaricare

   ports.tar.gz - l'albero dei ports.
   src.tar.gz - i sorgenti del sistema operativo di base.
   sys.tar.gz - i sorgenti del kernel.
   XF4.tar.gz - i sorgenti del server grafico XFree86.

(e i vari file di testo ANNOUNCEMENT, HARDWARE... sempre presenti nella solita dir remota: ftp://.../3.9/i386/)

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
# ftp ftp://ftp.unina.it/pub/OpenBSD/3.9/packages/i386/pacchetto_che_vogliamo.tgz


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-3.9" -A "OpenBSD v3.9-Release, \
Custom ISO, 06-05-2006." -b 3.9/i386/cdrom39.fs -c boot.catalog \
-o openbsd-i386-3.9.iso ../OpenBSD/


OpenBSD è un OS incentrato sulla sicurezza, è evidente che il download di una iso NON ufficiale è un controsenso. Se però: siete molto pigri, vi fidate ciecamente di me, non è andata via la corrente nella server farm, lo CSIAF non si è di nuovo messo a giocare con le regole dei firewall e nessuno ha inciampato sul cavo di rete del server... allora potete scaricare la mia COSTUM ISO qui (non contiene i sorgenti, ma ha l'albero dei ports e diversi pacchetti precompilati fra i quali: java, KDE, Koffice, Mozilla...).


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-3.9.iso


Installazione

Partiamo dal presupposto che stiate usando un'iso "tipo" la mia. 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:

(I)nstall, (U)pgrade or (S)hell? i
Welcome to the OpenBSD/i386 3.9 install program.
This program will help you install OpenBSD in a simple and rational way. At
any prompt except password prompts you can run a shell command by typing
'!foo', or escape to a shell by typing '!'. Default answers are shown in []'s
and are selected by pressing RETURN. At any time you can exit this program by
pressing Control-C and then RETURN, but quitting during an install can leave
your system in an inconsistent state.


Specify terminal type: [vt220] Enter
kbd(8) mapping? ('?' for list) [none] it

Come da esempio premete prima Enter (a meno che non stiate usando una console seriale) per selezionare il terminale di default e poi it per selezionare il layout per la tastiera italiana.

IS YOUR DATA BACKED UP? As with anything that modifies disk contents, this
program can cause SIGNIFICANT data loss.
It is often helpful to have the installation notes handy. For complex disk
configurations, relevant disk hardware manuals and a calculator are useful.
Proceed with install? [no] yes
Cool! Let's get to it...


You will now initialize the disk(s) that OpenBSD will use. To enable all
available security features you should configure the disk(s) to allow the
creation of separate filesystems for /, /tmp, /var, /usr, and /home.


Available disks are: wd0.
Which one is the root disk? (or done) [wd0] 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.

Do you want to use *all* of wd0 for OpenBSD? [no] yes

Se invece non avete intenzione di usare l'intero hard disk vi consiglio di partizionarlo da Linux con cfdisk o con un qualsiasi altro tool grafico perché l'fdisk dell'OpenBSD è studiato per portare i neuroni dell'utente al suicidio di massa.

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


Configurazione del sistema di base

Enter system hostname (short form, e.g. 'foo'): nistagmo

Io in genere do alle mie macchine nomi della mitologia greca, ma c'è chi usa elementi della tabella periodica, enzimi, malattie infettive...

Configure the network? [yes] Enter
Available interfaces are: ne0
 Which one do you wish to initialize? (or 'done') [ne0] Enter
Symbolic (host) name for ne0? [nistagmo] Enter
The default media for ne0 is
media: Ethernet autoselect (10baseT)
Do you want to change the default media? [no] Enter
IP address for ne0? (or 'dhcp') 192.168.254.1

Se nella vostra lan c'è un server dhcp potere usare il dhcp client invece dell'indirizzo IP statico, basta scrivere dhcp.

Netmask? [255.255.255.0] Enter
IPv6 address for fxp0? (or 'rtsol' or 'none') [none] 
No more interfaces to initialize.
DNS domain name? (e.g. 'bar.com') [my.domain] example.com
DNS nameserver? (IP address or 'none') [none] IP.vostro.DNS
Use the nameserver now? [yes] Enter
Default route? (IP address, 'dhcp' or 'none') IP.vostro.gateway
add net default: gateway 192.168.254.254
Edit hosts with ed? [no] Enter

Do you want to do any manual network configuration? [no] Enter

Naturalmente dovete inserire i dati della vostra rete (IP, DNS, gateway...).

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

"Will not echo" significa che non vedrete comparire niente sullo schermo mentre digitate la password, niente lettere ne asterischi. Per conferma dopo dovrete ridigitarla.


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 /3.9/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') [3.9/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] bsd.rd
[ ] bsd.mp
[X] base38.tgz
[X] etc38.tgz
[X] misc38.tgz
[X] comp38.tgz
[X] man38.tgz
[X] game38.tgz
[ ] xbase38.tgz
[ ] xetc38.tgz
[ ] xshare38.tgz
[ ] xfont38.tgz
[ ] xserv38.tgz
File Name? (or 'done') [bsd.mp] all
File Name? (or 'done') [done] Enter

Vi consiglio di selezionarli tutti ed installarli, ulteriori dettagli sono disponibili qui.

Getting bsd ...
100% |**************************************************| 5157 KB 00:08
 [..]
Location of sets? (cd disk ftp http or 'done') [done] Enter


Ultimazione dell'installazione

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

Se volete che il demone ssh venga avviato automaticamente all'avvio premete invio.

Start ntpd(8) by default? [no] 

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.

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

Se pensate di utilizzare il sistema grafico confermate anche questa opzione.

Change the default console to com0? [no] Enter

A meno che non sappiate cosa state facendo rispondete di no.

What timezone are you in? ('?' for list) [Canada/Mountain] Europe/Rome
     


Adesso l'installazione è finita, quando compare la shell scrivete halt e godetevi la viosta OpenBSD box.

CONGRATULATIONS! Your OpenBSD install has been successfully completed!
To boot the new system, enter halt at the command prompt. Once the
system has halted, reset the machine and boot from the disk.
# halt
syncing disks... done


The operating system has halted.
Please press any key to reboot.


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'

  1. Italian mirror
  2. PKG_PATH="http://cdn.mirror.garr.it/mirrors/OpenBSD/3.9/packages/i386/"

PKG_PATH="ftp://ftp.unina.it/pub/OpenBSD/3.9/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 modificatefile: /etc/fstab aggiungendo le righe:

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

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 3.9/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/3.9/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

Per 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.


Configurare un 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.

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

ne0

  1. ep0
  2. de1


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

  1. $OpenBSD: dhcpd.conf,v 1.1 1998/08/19 04:25:45 form Exp $
  2. DHCP server options.
  3. See dhcpd.conf(5) and dhcpd(8) for more information.


  1. Network: 192.168.1.0/255.255.255.0
  2. Domain name: my.domain
  3. Name servers: 192.168.1.3 and 192.168.1.5
  4. Default router: 192.168.1.1
  5. 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

  1. Selezioniamo l'interfaccia di rete verso l'esterno

ext_if="pppoe0"


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

int_if="ne0"


  1. Impostiamo il nat dall'interfaccia esterna a tutte le altre

nat on $ext_if from !($ext_if) -> ($ext_if:0)


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

block in on $ext_if proto udp to port = 53


  1. Potremmo bloccare la porta UDP 53 anche solamente per un certo range di IP, ad esempio
  2. gli IP che non fanno parte della sottorete 150.xxx.xxx.0/24
  3. block in on $ext_if proto { tcp, udp } from !150.xxx.xxx.0/24 to port = 53 keep state


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

block in proto icmp from any to any


  1. scrub for NAT in PPPoE for using max mtu value
  2. 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.