Showing posts with label OpenBSD. Show all posts
Showing posts with label OpenBSD. Show all posts

Saturday, February 28, 2009

Tutorial instalare server Samba pentru FreeBSD

Lucruri necesare pe sistem 
1.Acces la masina pe care vrei sa instalezi samba, ori fizic, ori root prin ssh.
2.Un client ssh, daca configurezi remote, cum ar fi putty, pe care il gasiti la adresa : http://www.tartarus.org/~simon/putty-sn ... /putty.exe 
3.Editorul de text favorit (in tutorial vom folosi nano)
4.Un browser web, noi vom folosi lynx

Instalare
Pentru instalare trebuie sa aveti porturile instalate. Acestea le gasiti la adresa : ftp://ftp.freebsd.org/pub/FreeBSD/ports ... rts.tar.gz
Se ruleaza comenzile :
$ cd /usr/ports/net/samba
$ make install clean
Pe ecran va va apare un meniu din care puteti selecta mai multe optiuni, insa pentru acest ghid nu vom selecta nici una.

Configurare

Dupa ce instalarea s-a terminat, incepem configurarea server-ului :
Primul lucru care trebuie facut este editarea configuratiei inetd.
$ nano /etc/inetd.conf
Cautati in fisier urmatoarele linii si scoateti-le comentariul (#) :

Code:
netbios-ssn stream tcp nowait          root    /usr/local/sbin/smbd    smbd
netbios-ns dgram udp   wait            root    /usr/local/sbin/nmbd    nmbd
swat    stream  tcp     nowait/400      root    /usr/local/sbin/swat    swat

Salvati fisierul si restartati inetd

$ killall –HUP inetd

Intrati in Swat – Samba Web Administration Tool folosind browser-ul lynx de pe server :

$ lynx http://localhost:901

Sau puteti sa intrati de pe o statie aflata in retea cu server-ul folosind adresa:

http://ip_server:901

1.Va logati cu user-ul root, acelasi ca pe sistem.
2.Intrati in meniul ‘Globals’
3.Schimbati ‘netbios name’ cu numele care doriti sa va apara in My Network Places.
4.Verificati daca este setata valoarea ‘yes’ la encryptarea parolelor
5.Salvati modificarile folosind ‘Commit changes’
6.Intrati in meniul 'Shares'
7.Pentru a creea un nou share care sa fie vizibil pe retea tastati numele noului share(eu am folosit numele ‘fisier’) si apasati pe butonul ‘Create Share’.
8.Selectati modul in care doriti sa vedeti optiunile pentru share, advanced sau basic.
9.Selectati valorile dorite de dumneavoastra pentru proprieteatile share-ului, avand grija sa scrieti cu atentie calea catre fisierul de pe server pe care doriti sa il faceti public.
10.Selectati 'Commit Changes' pentru a salva
11.Intrati apoi in meniul 'Password Management'
12.Introduceti un user care exista pe sistem si implicit in /etc/passwd si parola pentru acesta
13.Apasati butonul ‘Add User’
14.Mergeti in meniul 'Status'
15.Restartati atat smbd cat si nmbd.

Observatii
Pentru a configura alte share-uri refaceti pasii 6->10
Pentru a creea un share cu parola trebuie mai intai sa creati user-ul defaul pe sistem si apoi sa il adaugati in samba.

Monday, January 26, 2009

Instalarea OpenBSD

Instalam OpenBSD.

OpenBSD este un sistem de operare Unix-like din familia BSD, axat in special pe securitate si portabilitate. OpenBSD suporta emularea binarelor din Linux,FreeBSD,SunOS,HPUX, etc.

OpenBSD poate fi instalat de pe un cd,floppy de boot.
Facem rost de iso imaginile cu OpenBSD de pe lista mirrorurilor oficiale
(nu gasim acolo isouri cu OpenBSD versiunea curenta, ele putand fi doar cumparate de pe site-ul oficial www.OpenBSD.org) , sau cream singuri iso-ul, downloadand cd[versiunea].iso
si creand un cd cu aceasta imagine de boot, pe care apoi punem pachetele disponibile, sau
floppy[versiunea].fs, si cream cu ajutorul rawrite sa dd o discheta de boot pentru instalare.
dd if=/home/grisha/floppy33.fs of=/dev/fd0

Urmatorul pas- bootarea de pe cd sau floppy de instalare.
Dupa initializarea hardware-ului calculatorului, avem urmatorul meniu:

Alegem I(Install),alegem tipul terminalului - vt220.
La intrebarea Proceed with install raspundem y.
Selectam diskul pe care vom face instalarea. In OpenBSD ide diskurile sunt notate cu wd0,wd1
(analog la hda,hdb in Linux) , iar SCSI - sd0,sd1 (repsetiv sda,sdb in Linux).

Urmatorul pas - crearea partitiilor cu ajutorul utilitarului disklabel, cu urmatoarea interfata:

Pentru crearea unei partitii tastam a,apoi alegem dimensiunea partitiei,tipul,respectiv locul unde va fi
montata, ca in exemplul de mai jos, unde este aratat cum se creeaza partitia principala , care va fi montata ca root / , si o partitie swap.

Pentru salvarea modificarilor tastam q si raspundem cu y la intrebarile Write new label? si Are you really sure that you`re ready to proceed?
Urmeaza introducerea hostului sistemului dat in forma scurta (daca masina va avea ca hostname gw.example.org , aici introducem gw), apoi raspundem cu y la intrebarea daca dorim sa configuram reteaua.
Introducem domeniul masinii date - in cazul nostru example.org
In continuare programul de instalare ne prezinta interfetele de retea pe care le-a gasit la bootare.
In OpenBSD , spre deosebire de Linux , interfetele de retea nu sunt notate cu eth0,eth1 , ci dupa driverul folosit
Sa presupunem ca in cazul nostru avem interfata le1.
Introducem adresa ip atribuita acestei interfete, sau daca adresa ip va fi atribuita automat de un dhcp server, introducem dhcp.
Introducem inca odata hostul sistemului in forma scurta, netmask-ul retelei, adresa ip a gateway-ului si a nameserverelor.

La urmatorul dialog suntem invitati sa introducem parola de root.

Urmeaza instalarea propriu-zisa. Putem instala pachetele de pe cdrom,hard disk, sau de pe un ftp,http sau nfs server.
Uzual, alegem cdrom - optiunea c si introducem calea unde sunt amplasate pachetele pe cd.

Urmeaza selectarea pachetelor care vor fi instalate , functie de rolul pe care il va avea masina respectiva.
Putem selecta toate pachetele disponibile , introducand all, putem deselecta un pachet punand prefixul - in fata denumirii pachetului.
Dupa ce am terminat cu selectarea pachetelor care vor fi instalate, introducem done.
Incepe procesul de instalare si sunt afisate pachetele care se instaleaza .

Urmeaza intebarea daca veti rula serverul XFree86 pe acest calculator .
La timezone selectati zona in care va aflati - Europe/Bucharest
Facem un reboot, dupa care se genereaza cheile criptografice ale sshd.
Pentru amanunte despre configurarea post instalare, man afterboot.
Felicitari ! Ati instalat cu succes OpenBSD.

Recompilarea kernelului in OpenBSD

Sunt cateva motive pentru a-ti compila un kernel propriu, diferit de cel standard.
1. Kernelul standard suporta o multime de hardware, si ocupa degeaba memoria sistemului.
2. Vreti sa incercati optiuni care nu sunt incluse in kernelul default, sau sa scoateti optiuni de care nu aveti nevoie ( de exemplu suport
de XFree86 sau pcmcia device-uri pe un server).
3. Vreti sa activati optiuni experimentale.
Un inconvenient - developerii ignora bug reporturile de pe masini cu kernel diferit de cel generic.
Pentru recompilarea kernelului avem nevoie de sursele sale in directorul /usr/src, pe care le putem lua de pe unul din serverele
ftp,http sau rsync, mirroruri ale openbsd.org.
Lista poate fi gasita pe openbsd.org/ftp.html
Sursele kernelului se gasesc intr-o arhiva de tipul sys.tar.gz.
Odata downloadate, sursa trebuie dezarhivata:
root@sh:/usr/src# cd /usr/src/root@sh:/usr/src# tar -xzvf sys.tar.gz
Urmeaza sa updatam sursele kernelului prin CVS.Daca nu avem setata variabila CVSROOT, o setam in fisierul ~/.profile,
sau prin comanda
export CVSROOT=anoncvs@anoncvs.openbsd.org.ua:/cvs
sau oricare cvs server mai apropiat.
root@sh:/usr/src# cvs get -rOPENBSD_3_4 -P sys
root@openbsd:/usr/src# cvs get -rOPENBSD_3_4 -P sys
cvs server: Updating sys
cvs server: Updating sys/adosfs
cvs server: Updating sys/altq
cvs server: Updating sys/arch
cvs server: Updating sys/arch/alpha
etc ...
root@sh:/usr/src# cd /usr/src/sys/arch/i386/conf/
root@sh:/usr/src/sys/arch/i386/conf# cp GENERIC mykernel

Urmeaza sa redactam cu editorul preferat fisierul mykernel (va mai dura mult pana ce cei de la OpenBSD vor scoate un utilitar comod,
cum este cel din Linux, bazat pe ncurses, la make menuconfig.
Comentand o linie cu # scoatem optiunea respectiva din kernel, respectiv decomentand o optiune, o activam in kernel.
Daca vrem sa deactivati o optiune deja activata anterior, puteti face asta creand o linie de tipul
rmoption [optiune]
Toate optiunile posibile pot fi vizualizate citind manul la options.
root@sh:/usr/src/sys/arch/i386/conf# man options
Voi comenta mai jos cateva optiuni pe care le-am considerat mai speciale.
Liniile de mai jos specifica tipul procesorului. Am nevoie doar de i686_CPU, asa ca restul le-am comentat.

#option I386_CPU # CPU classes; at least one is REQUIRED
#option I486_CPU#option I586_CPU
option I686_CPULa fel am comentat si linia
#option APERTURE # in-kernel aperture driver for XFree86fiindca nu am nevoie de X pe un server.

Daca avem nevoie de compatibilitate cu binarele altor OS, lasam liniile necomentate.In cazul meu am lasat:

#option COMPAT_SVR4 # binary compatibility with SVR4
#option COMPAT_IBCS2 # binary compatibility with SCO and ISC
option COMPAT_LINUX # binary compatibility with Linux
option COMPAT_FREEBSD # binary compatibility with FreeBSD
#option COMPAT_BSDOS # binary compatibility with BSD/OS
option COMPAT_AOUT #suport pentru binarele vechi a.out
Numarul aproximativ de useri pe masina:

maxusers 2000 # estimated number of users
Sistemul pe care am recompilat kernelul este un server ce ofera shell hosting, deci va avea un numar impresionant de useri.
In continuare urmeaza o multime de hardware, suport pentru care contine kernelul default.
Cititi cu atentie comentariile fiecarei linii, si lasati suport doar pentru hardwarele pe care il aveti acum, sau pe care il veti putea avea.
Eu am scos totul legat de usb,audio,firewire,pcmcia,joystickuri,etc... tot de ce nu am nevoie pe un server.
Daca doriti o configurare mai fina, puteti redacta si fisierul Makefile.i386, aflat in acelasi director.
Eu am modificat variabilele CPPFLAGS si CMACHFLAGS.
Dupa ce ati incheiat redactarile, urmeaza procesul de compilare propriu-zis.

root@sh:/usr/src/sys/arch/i386/conf# config mykernel
root@sh:/usr/src/sys/arch/i386/conf# cd ../compile/mykernel/
root@sh:/usr/src/sys/arch/i386/compile/mykernel# make clean
root@sh:/usr/src/sys/arch/i386/compile/mykernel# make depend
root@sh:/usr/src/sys/arch/i386/compile/mykernel# make
Pastram kernelul vechi pentru orice eventualitate ca bsd.generik
root@sh:/usr/src/sys/arch/i386/compile/mykernel# cp /bsd /bsd.generik
Schimbam kernelul generik cu cel compilat de noi:
root@sh:/usr/src/sys/arch/i386/compile/mykernel# cp bsd /bsd
Reboot.

Thursday, January 15, 2009

OpenBSD for first time users

OpenBSD is an ultra-secure, freely available, multi-platform BSD-based UNIX-like operating system. And is arguably the most secure operating system in the world.

This web site hopes to help out individuals who are experienced with UNIX systems but are not experienced with OpenBSD.

The goal of this site is to attract new users to OpenBSD by providing useful information for first time users covering the areas of:

    Installation - demonstration and explanation of a FTP installation
    Patching - patch files, source files and kernel building
    Updating - updating ports, Xenocara and system sources using cvsup
    Security - security suggestions for after the default install
    Tips and Tricks - suggestions and configurations for new users

Tuesday, January 13, 2009

Instalarea nginx cu suport PHP

Nginx este un server web mic, dar foarte eficient si performant.
Poate fi utilizat ca web server, suportand incarcari foarte mari in ceea ce priveste servirea paginilor statice, reverse proxy pentru a reduce incarcarea pe serverul backend.
Datorita faptului ca nu exista destula documentatie in engleza, nu este atat de popular.
Voi discuta despre instalarea sa cu suport PHP ca FastCGI .

Ultima versiune la momentul scrierii acestui document - 0.3.46 poate fi descarcata de pe http://sysoev.ru/nginx/nginx-0.3.46.tar.gz.

Pe FreeBSD - instalare din porturi


# cd /usr/ports/www/nginx
# make install clean


optiuni disponibile:
WITH_OPENSSL_MODULE - va compila nginx cu suport OpenSSL


# echo "nginx_enable=\"YES\"" >> /etc/rc.conf

Linux sau orice alt Unix based OS, din surse (pe un sistem Linux rpm-based ar trebui sa aveti instalate pcre-devel si gzip-devel pentru a profita
din plin de capacitatile nginx , plus adaugati optiunea --with-cc-opt=" -I /usr/include/pcre" la compilare ) :

# ./configure --prefix=/usr --error-log-path=/var/log/nginx/error_log --http-log-path=/var/log/nginx/access_log --user=nobody --group=nobody --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/spool/nginx/client_body_temp --http-proxy-temp-path=/var/spool/nginx/proxy_temp --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp --with-cc-opt="-I /usr/include/pcre"


# make && make install
# mkdir -p /var/spool/nginx/
# chown nobody:nobody /var/spool/nginx/



Urmeaza editarea fisierului de configurare /usr/local/etc/nginx/nginx.conf ( FreeBSD ) , /etc/nginx/nginx.conf (Linux) .
Fisierul implicit e suficient pentru a rula nginx .


events {
worker_connections 1024; #
use epoll; # Linux
use kqueue; # BSD
}


http {
include /etc/nginx/mime.types; # Linux
include /usr/local/etc/nginx/mime.types # FreeBSD
default_type application/octet-stream;

sendfile on; #
gzip on; #

server {

# presupunem ca docroot este /var/www/html

location / {
root /var/www/html;
index index.html index.htm index.php;
}


# suportul PHP
location ~ .php$ {
# PHP va rula ca FastCGI pe portul 9000
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built
# with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

}


}

}





Deoarece nu se poate rula PHP ca mod_php, e nevoie de a rula PHP ca FastCGI, ceea ce e posibil in doua moduri :

# folosind un FastCGI wrapper, ca de exemplu cel din lighttpd (spawn-fcgi + spawn-php.sh), vor fi posibile conexiuni prin socket, cat si TCP .
# pornind PHP implicit cu optiunea -b IP:PORT , in cazul dat vor fi acceptate conexiuni doar pe TCP .


Am ales prima varianta.
Instalati PHP prin metoda preferata, cu conditia ca la compilare sa fie indicate urmatoarele optiuni :

'--enable-discard-path' '--enable-force-cgi-redirect' '--enable-fastcgi'

Din documentatia PHP :

--enable-force-cgi-redirect
Enable the security check for internal server redirects. You should use this if you are running the CGI version with Apache.

--enable-discard-path
If this is enabled, the PHP CGI binary can safely be placed outside of the web tree and people will not be able to circumvent .htaccess security.

--enable-fastcgi
If this is enabled, the cgi module will be built with support for fastcgi also.


Am redenumit executabilul php in php-cgi din motiv ca rulez o PHP compilat ca fastcgi nu permite rularea scripturilor din shell, cron .


Instalarea wrapper-ului propriu-zis :

Linux

Descarcati lighttpd de pe pagina sa


# ./configure --prefix=/usr
# make

# cp doc/spawn-php.sh /usr/bin/spawn-php.sh
# cp src/spawn-fcgi /usr/sbin/spawn-fcgi





FreeBSD


# cd /usr/ports/www/lighttpd/; make<
# cp work/lighttpd-1.4.11/src/spawn-fcgi /usr/local/sbin/spawn-fcgi
# cp work/lighttpd-1.4.11/doc/spawn-php.sh /usr/local/bin/spawn-php.sh





Urmeaza editarea fisierului spawn-php.sh si setarea urmatorilor parametri :


## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/sbin/spawn-fcgi"

## ABSOLUTE path to the PHP binary
FCGIPROGRAM="/usr/local/bin/php-cgi"

## TCP port to which to bind on localhost
FCGIPORT="9000"

## number of PHP children to spawn
PHP_FCGI_CHILDREN=10
## maximum number of requests a single PHP process can serve before
## it is restarted
PHP_FCGI_MAX_REQUESTS=1000

## IP addresses from which PHP should access server connections
FCGI_WEB_SERVER_ADDRS="127.0.0.1"

# allowed environment variables, separated by spaces
ALLOWED_ENV="ORACLE_HOME PATH USER"

## if this script is run as root, switch to the following user
USERID=nobody
GROUPID=nobody





Pentru a manipula mai usor nginx pe un Linux RedHat based, am creat un init script simplu , care poate fi descarcat de
aici >>>

# wget http://www.unixro.net/art/nginx.init.txt -O /etc/init.d/nginx
# chmod 750 /etc/init.d/nginx

Pe FreeBSD se va folosi /usr/local/etc/rc.d/nginx

Nu uitati sa rulati si spawn-php.sh si sa-l adaugati in init-scripturi pentru a starta la bootare.

# /usr/bin/spawn-php.sh
spawn-fcgi.c.190: child spawned successfully: PID: 21547

In listingul proceselor va aparea ca

nobody 21562 0.0 0.1 4440 1316 ? Ss 19:23 0:00 /usr/local/bin/php-cgi
nobody 21563 0.0 0.1 4440 1324 ? S 19:23 0:00 /usr/local/bin/php-cgi

Daca totul a decurs fara probleme, un phpinfo() va returna :

Server API CGI/FastCGI

###


Informatie suplimentara la :

http://nginx.net/
http://blog.kovyrin.net/2006/04/04/nginx-small-powerful-web-server/
http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/
http://www.lighttpd.net/download/spawn-fcgi.txt
http://www.fastcgi.com/

Tuesday, December 23, 2008

Metode de filtrare PF

Exemplu de configurare PF

#vi pf.conf

#Interfata Wan 8x.xx.xx.130/32
ext_if="rl0"
#set loginterface $ext_if
#Interfata Privata 10.124.175.26
int_if="fxp0"
#Interfata Publica 8x.x.x.121/29
pb_if="rl1"
#Reteaua locala (subnet) 10.124.175.0/24
lcnet= $int_if:network
#Reteaua publica (subnet) 8x.x.x.120/29
pbnet=$pb_if:network
#lo0 are voie oriunde
set skip on lo0
#IP POP
rnet="10.124.175.20"
#IP Vincze
vnet="10.124.175.45"
#Ftp-proxy
proxy="127.0.0.1"
#OpenVPN
vpn="tun0"
vpn_net=$vpn:network
#normalizare pachetelor
scrub in all
#ICMP
icmp_types="{echoreq, unreach}"

##############################
#Testare tables
table persist file "/etc/autotop"
###############################

#Regula de NAT (pt ip dinamic se pune ($ext_if))
nat on $ext_if from $lcnet to any -> $ext_if

#Remote fara vpn - just in case
#rdr on $ext_if proto tcp from any to port 3389 -> 10.124.175.20

#Regula FTP - bata-l pula de ftp protocol de cacat
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021
#rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
#nu lasa nimic sa treaca
block all

#Porturi Acceptate
tcp_wan = "{smtp, www, domain, pop3, https, pop3s, 10000, 5000 }"
tcp_services = "{ssh, www, smtp, domain, pop3, auth, https, pop3s, ftp, ftp-data }"
udp_services = "{ domain }"
#tcp_lan = "{ssh, domain, 3128}"

###############################################################################
###############################################################################
#Deocamdata pt ip public!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#pass in on $pb_if proto tcp from $pbnet to any port $tcp_wan keep state
pass proto udp from any to any port $udp_services keep state
pass inet proto tcp from $pbnet to any port $tcp_services keep state
pass proto tcp from any to 8x.x.x.123 port $tcp_wan keep state
pass proto tcp from any to 8x.x.x.123 port 21 keep state
pass proto tcp from any to 8x.x.x.123 port > 32768 keep state #FTP

###############################################################################
###############################################################################
anchor "ftp-proxy/*"
#pass inet proto tcp from { lo0, $lcnet, $ext_if } to any port $tcp_services keep state
#pass inet proto icmp from { lo0, $lcnet, $ext_if, $pbnet } to any
pass quick proto tcp from { $vnet, $ext_if } to any keep state
pass quick proto udp from { $rnet, $ext_if } to any keep state
#########################################
#Test tables
pass log inet proto tcp from to any port $tcp_services keep state
#pass log inet from to any keep state

#Spre 2 vpn-uri
pass inet from $lcnet to 10.40.0.0/16 keep state
pass inet from $lcnet to 10.112.0.0/16 keep state

#########################################
#Regula pentru Traceroute
pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state
#regula FTP
pass out proto tcp from $proxy to any port 21 keep state
#Regula ICMP
pass in on $ext_if proto udp from any to port 1194 keep state
#pass in on $ext_if proto tcp from any to port 3389 keep state
pass inet proto icmp from any to any icmp-type $icmp_types keep state
#Openvpn - la liber
pass quick on tun0
#Remote dektop
pass on $int_if from any to $lcnet keep state


Statia este un FreeBSD7 pe care rulez pf + openvpn si niste rute spre un alt vpn.