Wednesday, October 28, 2009

Simple firewall for Ubuntu using iptables

Linux's built-in firewall iptables is very useful, but pretty hard to configure. I used to use lokkit, but this caused problems when moving between different networks. I was also having problems with the network configuration tools in Ubuntu, which work but aren't automatic enough for me. And I wanted to be able to switch the firewall and the network configuration simultaneously.

In the end, I bit the bullet and worked out how to write a simple iptables script. Here it is:
#!/bin/bash
# flush all chains
iptables -F
# set the default policy for each of the pre-defined chains
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# allow establishment of connections initialised by my outgoing packets
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# drop everything else
iptables -A INPUT -i eth+ -p udp -j DROP
iptables -A INPUT -i eth+ -p tcp -m tcp --syn -j DROP
# accept anything on localhost
iptables -A INPUT -i lo -j ACCEPT


I have network interfaces on eth0 and eth1, so this script has rules which cover both; if your interfaces have different names, you will need to edit the rules to cover that. This drops everything incoming, except for connections which were initially established by my outgoing packets (thanks Luke! - see comments); which means it's no good for servers.

I put this script in /opt/scripts/iptables.script and made it executable. Once you run it, you can find out whether it has worked by displaying your current iptables rules with:
sudo iptables -L -v


I then created a simple init script to start/stop the firewall (in /etc/init.d/firewall):
#!/bin/bash
if [[ $1 == start ]] ; then
sudo /opt/scripts/iptables.script
else
sudo iptables -F
fi

Then I symlinked this into my /etc/rc.* directories using the update-rc.d tool, so the firewall starts before the network comes up:
update-rc.d firewall start 20 2 3 4 5 . stop 99 0 1 6 .


I find having this script helps me a lot. I have it integrated with a start/stop script with my network, so I can easily switch network and firewall configuration from the command line.

Friday, October 23, 2009

How to Setup Transparent Squid Proxy Server in Ubuntu

Install Squid

Install squid and squid-common

sudo aptitude install squid squid-common

Edit the squid config file.

sudo vi /etc/squid/squid.conf

Set the allowed hosts.

acl internal_network src 192.168.0.0/24 (Where 192.168.0.0/24 is your IP range.)
http_access allow internal_network

Set the correct permissions.

sudo chown -R proxy:proxy /var/log/squid/
sudo chown proxy:proxy /etc/squid/squid.conf

You will need to restart squid for the changes to take affect.

sudo /etc/init.d/squid restart

Now open up your browser and set your proxy to point to your new squid server on port 3128

Authentication

If you wish to use authentication with your proxy you will need to install apache2 utilities

sudo aptitude install squid squid-common apache2-utils

To add your first user you will need to specify -c

sudo htpasswd -c /etc/squid.passwd first_user

Thereafter you add new users with

sudo htpasswd /etc/squid.passwd another_user

Edit the squid config file

sudo vi /etc/squid/squid.conf

Set the the authentication parameters and the acl
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid.passwd
auth_param basic children 5
auth_param basic realm NFYE Squid proxy-caching web server
auth_param basic credentialsttl 3 hours
auth_param basic casesensitive off

acl users proxy_auth REQUIRED

acl sectionx proxy_auth REQUIRED

http_access allow users

So this is what your squid.conf should look like.

acl all src 0.0.0.0/0.0.0.0
acl internal_network src 192.168.0.0/24
acl users proxy_auth REQUIRED
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl sectionx proxy_auth REQUIRED
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access allow users
http_access allow internal_network
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all

Redirect the all HTTP traffic.

If you would like to redirect the all HTTP traffic through the proxy without needing to set up a proxy manually in all your applications you will need to add some rules

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

Where eth1,eth0 are the LAN, WAN devices and 192.168.0.1 is the IP address of your LAN device.

Solved: 407 Proxy Authentication Required (Feisty)

In both :
1. System->Preferences->Network Proxy-> Set : Direct Internet Connection.
2. System->Administration->Synaptic Package Manager->Settings->Preferences->Network-> Set : Direct Internet Connection.

Then create a filename in:
/etc/apt/apt.conf

add the following lines:
Acquire::http::Proxy "http://username:password@proxy:port";
Acquire::ftp::Proxy "ftp://username:password@proxy:port";


and save the file.

In the terminal run:
sudo apt-get update

Both apt and synaptic should work now. (You might need to restart your networking or your PC)

Friday, September 11, 2009

Updatarea sistemului de porturi

Instalam:
/usr/ports/ports-mgmt/portaudit

Acest soft nu supraincarca memoria practic deloc si se starteaza ca un binar

portaudit -a -выводит отчет об уязвимости установленных портов
portaudit -C -выводит отчет об уязвимости порта, находящегося в текущей директории
portaudit -F -скачиваем последнюю базу по портам
portaudit -q - "тихий" режим
portaudit -d - смотрим,когда последний раз качалась база по портам
portaudit -V - покажет свою версию
portaudit -v - Verbose mode
portaudit -X days - загружает базу,если она старше "days"
portaudit -f - проверка пакетов,описанных(перечисленных) в файле
portaudit <пакет> - информация по дырам в конкретном пакете
portaudit -r - сам не понял.. Используется для тестирования новых включений.

In /etc/make.conf adaugam
DISABLE_VULNERABILITIES=yes


Mai instalam si
/usr/ports/ports-mgmt/portupgrade

acum putem updata porturile astfel:
potupgrade


portinstall

Pentru pachete aparte
portversion -v


Pentru crearea bazei de date necesare utilitarelor folosite in continuare, avem 2 posibilitati:
portsdb -Fu
- pe site-urile oficiale se reinoiesc fiecare 2 ore
sau
portsdb -Uu
- local, procesul ia ceva timp

Friday, July 3, 2009

Instalarea CPanel

Instalarea CPanel / WHM

In primul rand, conectati-va via SSH la server (Putty e foarte util).

Apoi din comand line, executati:

  • cd /home
  • wget http://layer1.cpanel.net/latest (va descarca ultima versiune CPanel)
  • sh latest (va executa instalarea arhivei)
  • /usr/local/cpanel/cpkeyclt (activeaza licenta dupa instalare)

Wednesday, March 11, 2009

Linux - acum 9 ani


lxf1.roundup.mandrake-2.pngCum arata Linux acum 9 ani? Mai tineti minte? GNOME era patratos, KDE arata ca scos din burta iar aplicatiile considerate la vremea aceea top-of-the-line ne starnesc acum zambete. Tin minte si acum cat de pierdut eram prin 2000, lucrand intr-un Mandrake, incercand sa fac XMMS sa recunoasca MP3-uri. Mi-a luat doua zile sa-mi dau seama ca trebuia sa activez un plugin. Deh - no net.
Click aici pentru o sesiune de craul in raul amintirilor.

Ubuntu 9.10 se va numi Karmic Koala

Mark Shuttleworth a făcut public ieri numele şi ţintele versiunii 9.10 a distribuţiei Ubuntu, versiune care va avea denumirea de Karmic Koala. La fel ca şi versiunile anterioare, aceasta va fi disponibilă în două ediţii, una pentru servere şi cealaltă pentru desktop-uri. Din versiunea pentru desktop-uri se va trage şi o versiune destinată notebook-urilor: Ubuntu Netbook Edition.

Printre noutăţile care ne aşteaptă în noua versiune se numără un înlocuitor pentru Usplash (cel mai probabil Plymouth-ul celor de la Red Hat), o temă GTK nouă fără nuanţe maronii şi (ca de obicei) timpi de boot mai buni.

Versiunea 9.10 a Ubuntu va fi lansată (desigur) în luna octombrie a anului 2009.

Mirror MYLRo.org

 Carti Linux direct de pe mirror-ul MYLRo.org

Thursday, March 5, 2009

Monitorizarea retelei cu netstat

Incercati sa tastati in consola "netstat" si veti optine o lista imensa de informatii , chiar mai mult decat puteti da scrooll , si pt a lamuri lucrurile exista posibilitatea de a extrage numai informatia dorita din totalul informatiilor afishate de netstat
De exemplu, daca se doreste numai vizualizarea conexiunilor tcp se tasteaza comanda "#netstat --tcp" care afisiaza conexiunile tcp inspre si dinspre PC.
In exemplul de mai jos se poate intelege clar informatiile afishate
993 (imaps), 143 (imap), 110 (pop3), 25 (smtp), and 22 (ssh). 389 (ldap).

Nota: Pentru a acelera afishare se poate utiliza o optiune adaugatoare --numeric care va afisha numai IP-urile la care sa facut conexiunea.


% netstat --tcp --numeric
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.128.152:993 192.168.128.120:3853 ESTABLISHED
tcp 0 0 192.168.128.152:143 192.168.128.194:3076 ESTABLISHED
tcp 0 0 192.168.128.152:45771 192.168.128.34:389 TIME_WAIT
tcp 0 0 192.168.128.152:110 192.168.33.123:3521 TIME_WAIT
tcp 0 0 192.168.128.152:25 192.168.231.27:44221 TIME_WAIT
tcp 0 256 192.168.128.152:22 192.168.128.78:47258 ESTABLISHED

I cazul in care doriti sa vedeti cu ce se mai ocupa calculatorul in lipsa voastra si anume ce porturi sunt ascultate si de cine puteti utiliza comanda cu optiunea "#netstat --tcp --listening", la care se mai poate adauga si parametrul "--programs" care mai indica si ce proces este implicat in ascultarea si receptionare pe un anume port.
In exemplul de mai jos sunt implicate urmatoarele procese pe porturile 80 (www), 443 (https), 22 (ssh), si 25 (smtp);

# sudo netstat --tcp --listening --programs
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:www *:* LISTEN 28826/apache2
tcp 0 0 *:ssh *:* LISTEN 26604/sshd
tcp 0 0 *:smtp *:* LISTEN 6836/
tcp 0 0 *:https *:* LISTEN 28826/apache2

Nota: Utilizand optiunea adaugatoare "--all" afiseaza ambele, conexiunile si porturile ascultate.
Nota: Pentru a putea utiliza comanda sudo, acest pachet trebuie sa fie instalat in systemul Dumneavoastra.

Urmatorul exemplu "#netstat --route" ne va afisha tabela de route-are. Pentru un simplu utilizator aceasta comanda nu poate fi de mare folos dar pentru un administrator de retea poate fi foarte utila daca are pe sistem mai multe placi de retea sau pe o placa de retea sa fie atribuite mai multe adrese IP.

% netstat --route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 1 0 0 eth0

Ultimul exemplu netstat utilizeaza optiunea "--statistics" care afishaza statisticele de retea, folosind aceasta optiune de una singura va afisa toate statisticile IP, TCP, UDP, si ICMP, iar pt a sistematiza si organiza fluxul de informatii provenit de la aceasta optiune se pot utiliza sub otiuni ajutatoare care pot delimita anumite informatii necesari. De exemplu pentru a vizualiza statisticile output din " --row " combinate cu uptime se poate vizualiza genereaza masina voastra zilnic.

% netstat --statistics --raw
Ip:
620516640 total packets received
0 forwarded
0 incoming packets discarded
615716262 incoming packets delivered
699594782 requests sent out
5 fragments dropped after timeout
3463529 reassemblies required
636730 packets reassembled ok
5 packet reassembles failed
310797 fragments created
// ICMP statistics truncated

Nota: Pt cei care nu se impaca foarte bine cu consola se pot folosi abrevieri ale optiunilor prezentate mai sus. (e.g. netstat -tn, netstat -tlp, netstat -r, si netstat -sw).

Pentru a putea aprecia adevarata putere a acestui mic utilitar incercati #man 8 netstat।

SURSA

Desktop Firewall

1. Instalare
Presupunem un calculator Linux cu un kernel din seria 2.4 sau 2.6. Kernelul se configurează în prealabil setând opţiunea "netfilter" în "Network Options":

A 2.6.11 kernel:

< > The IPv6 protocol (EXPERIMENTAL)
[*] Network packet filtering (replaces ipchains) --->
SCTP Configuration (EXPERIMENTAL) --->


iar apoi în "Network packet filtering/Netfilter Configuration" setăm toate opţiunile pentru a fi compilate în kernel.

Trebuie apoi să instalăm pachetul iptables. În Gentoo comanda arată în felul următor:

# emerge iptables



2. O scurtă introducere în iptables
Primul lucru pe care îl facem este să vedem dacă este ceva deja activ - unele distribuţii setează reguli în iptables la startup:
# iptable -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- eqnjadvip3.doubleclick.net anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


iptable ne informează că există trei lanţuri active: INPUT pentru pachete care intră în calculator, OUTPUT pentru pachete care ies din calculator şi FORWARD pentru pachetele care sunt routate în cazul în care calculatorul funcţionează ca un router. Pentru fiecare lanţ, putem avea un număr de reguli active.

Regulile sunt relativ uşor de citit. Cea pe care o avem mai sus se referă la toate pachetele care vin de la un server doublecklick.net. Nu este o surpriză că aceste pachete sunt rejectate; acelaşi lucru poate fi obţinut mult mai uşor instalând extensia Adblock în Firefox.

Fiecare lanţ poate fi utilizat având ca default fie să accepte orice pachet cu excepţia celor specificate în regulile aferente, fie să rejecteze orice pachet cu excepţia celor specificate. Există astfel două tipuri mari de firewall-uri: default drop şidefault accept. Trecere de la un tip la altul se face uşor folosind opţiunea -P:
# iptables -P INPUT DROP
# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


3. Comenzi iptables
Parametrii comenzii iptables se împart în trei categorii:

# iptable [lanþ] [pachet] [acþiune]


În categoria lanţ avem următoarele opţiuni:
-N: (new)un nou lanþ este creat
-X: un lanþ fãrã reguli este ºters
-P: (policy) trecere de la default drop la default accept ºi invers
-F: (flush) ºterge toate regulile în lanþul respectiv
-Z: (zero) reseteazã contoarele pentru toate regulile din lanþ
-A: (add) adaugã o nouã regulã în lanþ
-I: (insert) insereazã o nouã regulã în lanþ
-R: (replace) schimbã o regulã existentã în lanþ
-D: (delete) ºterge o regulã existentã


În categoria care descrie pachetele avem:
-s, -d: adresã sursã/destinaþie IP
-p: protocol (tcp, udp, icmp)
-i: interfaþã (lo, eth0, eth1, ppp0, etc.)
-f: fragmentare


O serie de extensii sunt definite pentru unele din opţiunile pachet de mai sus:
Dacã '-p tcp' este specificat:
--sport, --dport: porturi sursã/destinaþie
--tcp-flags: flaguri tcp
--syn: echivalent cu '--tcp_flags SYN,RST,ACK SYN'
--tcp-option

Dacã '-p udp' este specificat:
--sport, --dport: porturi sursã/destinaþie

Dacã '-p icmp' este specificat:
--icmp-type: rulaþi '-p icmp --help' pentru o listã completã


Mai multe extensii pot fi încărcate ca module folosind opţiunea -m:
Dacã '-m mac' este specificat:
--mac_source: adresã sursã mac

Dacã '-m limit' este specificat:
--limit: limiteazã numãrul de pachete acceptate pe secundã/minut/orã/ziuã
--limit-burst

Dacã '-m owner' este specificat, pentru pachete generate local:
--uid-owner
--gid-owner
--pid-owner
--sid-owner

Dacã '-m state' este specificat:
--state: starea conexiunii (NEW, ESTABLISHED, RELATED, INVALID)


A treia categorie descrie acţiunea care trebuie îndeplinită când un pachet este recunoscut:
-j: DROP, ACCEPT, LOG


În continuare descriem un firewall default drop.

4. Un firewall simplu
Presupunem că suntem conectaţi la o reţea de Ethernet pe interfaţa eth0. Începem prin a curăţa toate regulile existente (comanda -F), şi setăm firewall-ul pentru default drop:
# iptables -F
# iptables -P INPUT DROP


Avem în acest moment un firewall perfect şi total nefolositor. Toate pachetele care ajung la noi vor fi făcute pierdute de către kernel. Adăugăm o regulă simplă care să ne permită să accesăm pachetele aparţinând acelor conexiuni care au fost iniţiate de către calculatorul nostru:
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Kernelul Linux are un modul numit conntrack care urmăreşte toate conexiunile care au loc la un moment dat. Fiecărei conexiuni îi sunt asociate una din cele patru stări posibile: NEW (o conexiune nouă), ESTABLISHED (o conexiune activă), RELEATED (conexiuni noi care sunt un rezultat al unei conexiuni existente) şi INVALID (conexiuni care au ajuns într-o stare defectă).

Revenind la comanda de mai sus, -A adaugă o nouă regulă pe lanţul INPUT. Această regulă se referă la toate pachetele care aparţin unei conexiuni în stare RELATED sau ESTABLISHED, iar aceste pachete sunt acceptate (-j). Observaţi aici lipsa stării NEW, adică toate conexiunile pornite din exterior sunt refuzate.

Apare însă o mică problemă: cineva din exterior încercând să se conecteze la calculatorul nostru poate în acest moment detecta că rulăm un firewall deoarece calculatorul nu răspunde cu pachetele standard TCP reset sau ICMP unreachable. Aceasta poate fi reparată foarte uşor adăugând următoarele două reguli:
# iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
# iptables -A INPUT -p udp -i eth0 -j REJECT --teject-with icmp-port-unreachable


O altă mică scăpare este următoarea: dorim uneori să rulăm pe calculator un server de HTTP numai pentru uzul nostru, invizibil în exterior. Cum regulile de mai sus vor rejecta pachetele pentru conexiunile în starea NEW trebuie să adăugăm o nouă regulă ACCEPT din care să excludem interfaţa publică de Ethernet eth0:
# iptables -A input -i ! eth0 -j ACCEPT


Punem totul la un loc şi construim un script simplu:
#!/bin/bash
# fwall.sh - un firewall simplu
# dupã un exemplu de Daniel Robbins

if [ "$1" = "start" ]
then
echo "Starting firewall"
iptables -P INPUT DROP
iptables -A INPUT -i ! eth0 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -i eth0 -j REJECT --reject-with icmp-port-unreachable
elif [ "$1" == "stop" ]
then
echo "Stopping firewall"
iptables -F INPUT
iptables -P INPUT ACCEPT
fi


Nu avem decât să rulăm scriptul şi să-l testăm:
# ./fwall.sh start
# iptables -v -L
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- !eth0 any anywhere anywhere
82 40719 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
1 60 REJECT tcp -- eth0 any anywhere anywhere reject-with tcp-reset
369 59386 REJECT udp -- eth0 any anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 31329 packets, 2004K bytes)
pkts bytes target prot opt in out source destination

O listă a conexiunilor existente poate fi găsită astfel:
# cat /proc/net/ip_conntrack


Dacă dorim să pornim acest firewall la startup, copiem fwall.sh în directorul /sbin iar apoi adăugăm linia "/sbin/fwall.sh start &" la sfârşitul fişierului /etc/conf.d/local.start. În mod asemănător, adăugăm "/sbin/fwall.sh stop &" la sfârşitul fişierului /etc/conf.d/local.stop.

scriptul original al lui Daniel Robbins este prezentat în Anexa 1, şi include o serie de îmbunătăţiri cum ar fi: disable ECN (explicit congestion notification), spoof protection, suport pentru routing (nu este necesar în cazul nostru simplu de desktop), suport pentru o serie de servicii precum ssh şi http.

5. Firewall dinamic - dynfw
Sub acest nume, gentoo.org publică un mic proiect care nu face parte oficial din distribuţia Gentoo. Constă într-o serie de scripturi original scrise de Daniel Robbins. Scopul acestor scripturi este acela de a adăuga/elimina reguli iptables fără a modifica scriptul iniţial de firewall care rulează pe calculator.

Pachetul se găseşte la http://tirpitz.iat.sfu.ca/~robbat2/dynfw-1.0.1.tar.gz. Download, dezarhivăm şi-l instalăm:
wget http://tirpitz.iat.sfu.ca/~robbat2/dynfw-1.0.1.tar.gz
tar -xzvf dynfw-1.0.1.tar.gz
cd dynfw-1.0.1
./install.sh


Sunt incluse următoarele scripturi:
ipdrop - rejecteazã toate pachetele care vin de la o adresã IP specificatã
ipblock - similar cu ipdrop, rãspunde însã cu TCP reset
tcplimt - limiteazã rata noilor conexiuni pentru un port local TCP specificat
host-tcplimit - limiteazã rata noilor conexiuni de la un host extern specificat
user-outblock - un user specificat nu este lãsat sã deschidã conexiuni în exterior


Să zicem că rulăm pe calculator un un server ftp (scriptul din Anexa 1 este activ cu SERVICES="ftp"), iar un utilizator de la adresa IP 1.2.3.4 insistă prea tare să încarce fişiere peste limitele acceptate, consumând o grămadă de bandwidth. Comanda arată în felul următor:
# /usr/local/sbin/ipdrop 1.2.3.4 on
# iptables -vL
Chain INPUT (policy DROP 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
2 96 DROP all -- any any 1.2.3.4 anywhere
0 0 ACCEPT all -- !eth0 any anywhere anywhere
324 182K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
3 144 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp state NEW
0 0 REJECT tcp -- eth0 any anywhere anywhere reject-with tcp-reset
1261 208K REJECT udp -- eth0 any anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- any any anywhere 1.2.3.4

Chain OUTPUT (policy ACCEPT 1652 packets, 129K bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- any any anywhere 1.2.3.4


Observăm cum o regulă DROP este adăugată pe toate cele trei lanţuri. Aceasta împedică efectiv orice fel de comunicaţie cu acest user. Pentru a curăţa aceste reguli şi a restaura firewall-ul iniţial dăm comanda:
# /usr/local/sbin/ipdrop 1.2.3.4 off


În mod similar se folosesc şi celelalte scripturi. Rulaţi comanda respectivă fără nici un parametru pentru o scurtă descriere.

6. Resurse
Articolul original al lui Daniel Robbins: http://www6.software.ibm.com/developerworks/education/l-fw/index.html(registration).

dynfw homepage: http://www.gentoo.org/proj/en/dynfw.xml

netfilter/iptable homepage: http://www.netfilter.org.

Tutorialul iptables al lui Oskar Andreasson: http://iptables-tutorial.frozentux.net/iptables-tutorial.html

HOWTO Iptables for newbies: http://gentoo-wiki.com/HOWTO_Iptables_for_newbies

Anexa 1

#!/bin/bash
#Our complete stateful firewall script. This firewall can be customized for
#a laptop, workstation, router or even a server. :)

#change this to the name of the interface that provides your "uplink"
#(connection to the Internet)
UPLINK="eth0"

#if you're a router (and thus should forward IP packets between interfaces),
#you want ROUTER="yes"; otherwise, ROUTER="no"
ROUTER="no"

#change this next line to the static IP of your uplink interface for static SNAT, or
#"dynamic" if you have a dynamic IP. If you don't need any NAT, set NAT to "" to
#disable it.
#NAT="1.2.3.4"
NAT=""

#change this next line so it lists all your network interfaces, including lo
#INTERFACES="lo eth0 eth1"
INTERFACES="lo eth0"

#change this line so that it lists the assigned numbers or symbolic names (from
#/etc/services) of all the services that you'd like to provide to the general
#public. If you don't want any services enabled, set it to ""
#SERVICES="http ftp smtp ssh rsync"
SERVICES=""

if [ "$1" = "start" ]
then
echo "Starting firewall..."
iptables -P INPUT DROP
iptables -A INPUT -i ! ${UPLINK} -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#enable public access to certain services
for x in ${SERVICES}
do
iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
done

iptables -A INPUT -p tcp -i ${UPLINK} -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -i ${UPLINK} -j REJECT --reject-with icmp-port-unreachable

#explicitly disable ECN
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi

#disable spoofing on all interfaces
for x in ${INTERFACES}
do
echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
done

if [ "$ROUTER" = "yes" ]
then
#we're a router of some kind, enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ "$NAT" = "dynamic" ]
then
#dynamic IP address, use masquerading
echo "Enabling masquerading (dynamic ip)..."
iptables -t nat -A POSTROUTING -o ${UPLINK} -j MASQUERADE
elif [ "$NAT" != "" ]
then
#static IP, use SNAT
echo "Enabling SNAT (static ip)..."
iptables -t nat -A POSTROUTING -o ${UPLINK} -j SNAT --to ${UPIP}
fi
fi
elif [ "$1" = "stop" ]
then
echo "Stopping firewall..."
iptables -F INPUT
iptables -P INPUT ACCEPT
#turn off NAT/masquerading, if any
iptables -t nat -F POSTROUTING
fi

O scurtă introducere în UTF8

1. Introducere
Acest articol este o scurtă introducere în UTF8 din perspectiva sistemului de operare Linux. Articolul este dedicat tuturor celor ce întâmpină în mod regulat dificultăţi în setarea caracterelor diacritice româneşti în diferite programe sub Linux. Toate exemplele de mai jos au fost încercate pe o distribuţie Gentoo, şi se presupune că pot fi replicate cu uşurinţă şi pe alte tipuri de distribuţii.

Scopul declarat al acestui articol este de a vă lăsa cu impresia că orice este posibil, inclusiv să folosiţi litere precum ş şi ţ pe un calculator pe care tocmai aţi cheltuit o sumă indecentă de bani, şi care "by default" nu ştie decât engleză.

2. Ce este UTF-8
Standardul ASCII (American Standard Code for Information Interchange) stă la baza seturilor de caractere folosite în toate sistemele de operare moderne. A fost adoptat în anul 1968 sub numele ANSIX3.4. Conform ASCII, caracterele limbii engleze sunt mapate în numere întregi pe 8 biţi. Această mapare acoperă 256 de caractere literare şi de control diferite. Bineînţeles, 256 de caractere nu acoperă toate limbile globului, aşadar în decursul timpului alte forme de mapare au fost definite. După o serie de iteraţii s-a ajuns la Unicode.

Originile standardului Unicode pot fi trasate către Bell Laboratories care ne-au adus în decursul timpului limbajul de programare C, sistemul de operare Unix iar mai târziu C++. Mecanismul a fost descris mai întâi de Ken Thompson şi Robert Pike în anul 1993, ca stând la baza sistemului de procesare de text în noul lor sistem de operare Plan9. A fost preluat apoi de X/Open Group şi inclus în ghidul de portabilitate intitulat XPG4 care stă la baza specificaţie Unix98.

Adoptat de către ISO în 1996 devine astfel standard internaţional sub numele de ISO-10646. Acest standard este suportat sub Linux, iar unele distribuţii (spre exemplu Fedora) sunt setate default pentru UTF8.

După cum se menţionează la http://www.unicode.org/, standardul Unicode prevede un cod numeric unic pentru fiecare caracter, pe orice platformă hardware, în orice program software, şi în orice limbă. Unicode este compatibil cu standardul ASCII astfel încât un document tipărit în ASCII poate fi interpretat corect în Unicode, dar nu şi invers.

Caracterele româneşti sunt reprezentate de următoarele coduri Unicode:

â - U00e2; Â - U00C2;

ă - U0103; Ă - U0102;

î - U00ee; Î - U00ce;

ş - U015f; Ş - U015e;

ţ - U0163; Ţ - U0162;





UTF8 este în esenţă o metodă de serializare a codurilor de caractere Unicode pe mai mulţi octeţi.
0x00000000 - 0x0000007F: 0xxxxxxx
0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Caracterele româneşti sunt serializate pe doi octeţi în UTF8 după cum urmează:

ă - 0xc3, 0xa2; Â - 0xc3, 0x82;

ă - 0xc4, 0x83; Ă - 0xc4, 0x82;

î - 0xc3, 0xae; Î - 0xc3, 0x8e;

ş - 0xc5, 0x9f; Ş - 0xc5, 0x9e;

ţ - 0xc5, 0xa3; Ţ - 0xc5, 0xa2;

Exista trei lucruri despre care trebuie să discutăm în ceea ce priveşte o setare de caractere diacritice româneşti sub Linux: setarea tastaturii, setarea fonturilor şi setarea variabilei "locale".

3. Setare tastatură
Majoritatea tastaturilor comercializate în România sunt tastaturi de tip US. Aceasta se datoreşte preţului dar şi modului în care ne-am obişnuit să avem literele aşezate. Pe o asemenea tastatură putem mapa caracterele diacritice după cum urmează: cu tasta Alt din partea dreaptă a barei de spaţiu apăsată, tastele a, s, t, i devin diacritice, iar tasta q devine â.

Pentru a obţine acest efect începem prin a copia fişierul .Xmodmap în directorul home/user curent:

#cp /usr/lib/X11/etc/xmodmap.std .Xmodmap



Apoi, într-un program de editare modificăm .Xmodmap (sau cut&paste de aici). Rezultatul este următorul:
!
! $XFree86: xc/programs/Xserver/hw/xfree86/etc/xmodmap.std,v 3.4 1996/02/04 09:09:12 dawes Exp $
!
! Standard key mapping for XFree86 (for US keyboards).
!
! This file can be fed to xmodmap to restore the default mapping.
!
! $XConsortium: xmodmap.std /main/7 1996/02/21 17:48:55 kaleb $
!
! First, clear the modifiers
!
clear shift
clear lock
clear control
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
!
! Set the mapping for each key
!
keycode 8 =
keycode 9 = Escape
keycode 10 = 1 exclam
keycode 11 = 2 at
keycode 12 = 3 numbersign
keycode 13 = 4 dollar
keycode 14 = 5 percent
keycode 15 = 6 asciicircum
keycode 16 = 7 ampersand
keycode 17 = 8 asterisk
keycode 18 = 9 parenleft
keycode 19 = 0 parenright
keycode 20 = minus underscore
keycode 21 = equal plus
keycode 22 = BackSpace
keycode 23 = Tab
keycode 24 = q Q 0x000e2 0x000c2
keycode 25 = w W
keycode 26 = e E
keycode 27 = r R
keycode 28 = t T U00163 U00162
keycode 29 = y Y
keycode 30 = u U
keycode 31 = i I 0x000ee 0x000ce
keycode 32 = o O
keycode 33 = p P
keycode 34 = bracketleft braceleft
keycode 35 = bracketright braceright
keycode 36 = Return
keycode 37 = Control_L
keycode 38 = a A U00103 U00102
keycode 39 = s S U0015f U0015e
keycode 40 = d D
keycode 41 = f F
keycode 42 = g G
keycode 43 = h H
keycode 44 = j J
keycode 45 = k K
keycode 46 = l L
keycode 47 = semicolon colon
keycode 48 = apostrophe quotedbl
keycode 49 = grave asciitilde
keycode 50 = Shift_L
keycode 51 = backslash bar
keycode 52 = z Z
keycode 53 = x X
keycode 54 = c C
keycode 55 = v V
keycode 56 = b B
keycode 57 = n N
keycode 58 = m M
keycode 59 = comma less
keycode 60 = period greater
keycode 61 = slash question
keycode 62 = Shift_R
keycode 63 = KP_Multiply
keycode 64 = Alt_L Meta_L
keycode 65 = space
keycode 66 = Caps_Lock
keycode 67 = F1
keycode 68 = F2
keycode 69 = F3
keycode 70 = F4
keycode 71 = F5
keycode 72 = F6
keycode 73 = F7
keycode 74 = F8
keycode 75 = F9
keycode 76 = F10
keycode 77 = Num_Lock
keycode 78 = Multi_key
keycode 79 = KP_Home KP_7
keycode 80 = KP_Up KP_8
keycode 81 = KP_Prior KP_9
keycode 82 = KP_Subtract
keycode 83 = KP_Left KP_4
keycode 84 = NoSymbol KP_5
keycode 85 = KP_Right KP_6
keycode 86 = KP_Add
keycode 87 = KP_End KP_1
keycode 88 = KP_Down KP_2
keycode 89 = KP_Next KP_3
keycode 90 = KP_Insert KP_0
keycode 91 = KP_Delete KP_Decimal
!keycode 92 = X386Sys_Req
keycode 93 =
keycode 94 =
keycode 95 = F11
keycode 96 = F12
! keycodes 97-107 are not available on 84-key keyboards
keycode 97 = Home
keycode 98 = Up
keycode 99 = Prior
keycode 100 = Left
keycode 101 = Begin
keycode 102 = Right
keycode 103 = End
keycode 104 = Down
keycode 105 = Next
keycode 106 = Insert
keycode 107 = Delete
keycode 108 = KP_Enter
keycode 109 = Control_R
keycode 110 = Pause
keycode 111 = Print
keycode 112 = KP_Divide
!keycode 113 = Alt_R Meta_R
keycode 114 = Break
! keycodes 115-117 are only available on some extended keyboards
! (e.g., Microsoft's ergonomic keyboard).
keycode 115 = Meta_L
keycode 116 = Meta_R
keycode 117 = Menu
!
! Set the modifiers
!
add shift = Shift_L Shift_R
add lock = Caps_Lock
add control = Control_L Control_R
add mod1 = Alt_L
! If you have ServerNumlock set in your XF86Config, you can comment out
keysym Alt_R = Mode_switch
add mod2 = Mode_switch
!
!
!
! If you use any of the special default key mappings in Xconfig, they should be
! duplicated in this file. Mappings should be added before the section above
! which sets the modifiers.
!
! For the key specs:
! LeftAlt => keycode 64
! RightAlt => keycode 113
! AltGr => keycode 113
! ScrollLock => keycode 78
! RightCtl => keycode 109
!
! For the mappings:
! Meta => Alt_L Meta_L
! Alt_R Meta_R
! Compose => Multi_key
! ModeShift => Mode_switch
! ModeLock => Mode_switch X386Mode_Lock
! ScrollLock => Scroll_Lock
! Control => Control_R
!
! If you use ModeShift or ModeLock, the following modifier must be set:
!
!add mod5 = Mode_switch
!
! For example, to get the equivalent of:
!
! ScrollLock ModeLock
! RightAlt ModeShift
! LeftAlt Meta
! RightCtl Compose
!
! use the following:
!
!keycode 78 = Mode_switch X386Mode_Lock
!keycode 113 = Mode_switch
!keycode 64 = Alt_L Meta_L
!keycode 109 = Multi_key
!
!add mod5 = Mode_switch

! When using ServerNumLock in your XF86Config, the following codes/symbols
! are available in place of 79-81, 83-85, 87-91
!keycode 136 = KP_7
!keycode 137 = KP_8
!keycode 138 = KP_9
!keycode 139 = KP_4
!keycode 140 = KP_5
!keycode 141 = KP_6
!keycode 142 = KP_1
!keycode 143 = KP_2
!keycode 144 = KP_3
!keycode 145 = KP_0
!keycode 146 = KP_Decimal
!keycode 147 = Home
!keycode 148 = Up
!keycode 149 = Prior
!keycode 150 = Left
!keycode 151 = Begin
!keycode 152 = Right
!keycode 153 = End
!keycode 154 = Down
!keycode 155 = Next
!keycode 156 = Insert
!keycode 157 = Delete



4. Setare fonturi
În marea lor majoritate, fonturile instalate de xorg suportă UTF-8. Este totuşi recomandat să încărcăm o serie de alte fonturi:

emerge freetype corefonts freefonts
artwiz-fonts sharefonts terminus-font
ttf-bitstream-vera unifont

Apoi modificăm /etc/X11/xorg.conf după cum urmează:
FontPath "/usr/share/fonts/misc:unscaled"
FontPath "/usr/share/fonts/100dpi:unscaled"
FontPath "/usr/share/fonts/75dpi:unscaled"
FontPath "/usr/share/fonts/ttf-bitstream-vera"
FontPath "/usr/share/fonts/corefonts"
FontPath "/usr/share/fonts/Type1"
FontPath "/usr/share/fonts/TTF"
FontPath "/usr/share/fonts/freefont"
FontPath "/usr/share/fonts/artwiz"
FontPath "/usr/share/fonts/sharefonts"
FontPath "/usr/share/fonts/terminus"
FontPath "/usr/share/fonts/unifont"



Din anumite motive, programele de genul xterm au nevoie să fie informate în mod exact care din fonturile din xorg să le folosească. Adăugăm/modificăm următoarea linie în fişierul .Xresources în directorul home curent (dacă este nevoie, creem un fişier nou cu acest nume):
xterm*font: -Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO10646-1

Trebuie apoi să adăugăm la începutul fişierului .xinitrc următoarele două linii:
xrdb -merge .Xresources
xmodmap .Xmodmap

Cu aceste modificări este timpul să pornim xorg pentru ca setarea de tastatură şi setarea de fonturi să aibă efect. Presupunând că totul a mers bine, deschidem o fereastră xterm iar în această ferestră introducem:
# xterm -u8&

(xterm rulează default fără suport UTF8). O nouă ferestră xterm se deschide, iar aceasta are suportul dorit:
# ãâºþîêÞÎ

O serie de alte emulatore de terminal sub X au suport pentru UTF8, de exemplu rxvt-unicode şi gnome-terminal. Majoritatea comenzilor de tip UNIX suportă utf8, iar ca editoare de text aş menţiona abiword şi gedit.

5. Setare "locale"
Pentru a facilita procesul de internaţionalizare a programelor de calculator, în standardul limbajului C au fost introduse aşa numitele "locales". Implementate ca environment variables, fiecare dintre ele specifică o convenţie privind modul în care un program trebuie să prelucreze un anumit tip de informaţie. Spre exemplu, LC_TIME este folosit pentru a formata timpul potrivit regulilor limbii respective, iar LC_MESSAGES este folosit pentru afişare textelor generate de program (cum ar fi meniurile, help, etc) în limba respectivă.

De menţionat că acestă setare pentru locale este opţională. În cazul în care nu o facem, programele respective vor continua să prelucreze mai departe text românesc fără probleme, dacă au suport iniţial pentru UTF8. Deci, dacă nu ne deranjează meniurile de genul Open/Save/Find, putem sării liniştiţi la capitolul următor.

Începem cu un mic experiment. Într-o fereastră de terminal introducem comanda locale:
# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=



Dacă arată ca mai sus, înseamnă că variabila locale nu a fost setată încă. Setarea se face în felul următor:
# export LANG=ro_RO.UTF-8
# locale
LANG=ro_RO.UTF-8
LC_CTYPE="ro_RO.UTF-8"
LC_NUMERIC="ro_RO.UTF-8"
LC_TIME="ro_RO.UTF-8"
LC_COLLATE="ro_RO.UTF-8"
LC_MONETARY="ro_RO.UTF-8"
LC_MESSAGES="ro_RO.UTF-8"
LC_PAPER="ro_RO.UTF-8"
LC_NAME="ro_RO.UTF-8"
LC_ADDRESS="ro_RO.UTF-8"
LC_TELEPHONE="ro_RO.UTF-8"
LC_MEASUREMENT="ro_RO.UTF-8"
LC_IDENTIFICATION="ro_RO.UTF-8"
LC_ALL=

O serie întreagă de programe au fost deja traduse în limba română (AbiWord, xmms, gedit, gnome-terminal, etc). Pornite din această fereastră xterm, textul românesc din meniurile programului va fi afişat corect.

6. Pentru programatori
Mesajul de la Bell Labs este deosebit de clar: îl lăsăm pe utilizator să-şi bată capul cu setarea de tastatură şi setarea de fonturi, iar instantaneu o serie întreagă de programe scrise cu mult timp în urmă vor funcţiona corect.
# cat test
Scopul declarat al acestui articol este de a vã lãsa cu impresia cã orice este
posibil, inclusiv sã folosiþi litere precum º ºi þ pe un calculator pe care
tocmai aþi cheltuit o sumã indecentã de bani, ºi care "by default" nu ºtie
decât englezã.
# grep ºtie test
tocmai aþi cheltuit o sumã indecentã de bani, ºi care "by default" nu ºtie
# sed s/ºtie/vrea/ test
Scopul declarat al acestui articol este de a vã lãsa cu impresia cã orice este
posibil, inclusiv sã folosiþi litere precum º ºi þ pe un calculator pe care
tocmai aþi cheltuit o sumã indecentã de bani, ºi care "by default" nu vrea
decât englezã.

Singurul lucru de care trebuie să ţinem cont este ca editorul pe care-l folosim să suporte UTF8:
// file test.c
#include

int main() {
printf("Salut, ºarpe!n");
return 0;
}

gcc este alt program căruia nu-i pasă dacă textul este unicode sau nu:
# gcc test.c
# ./a.out
Salut, ºarpe!
#

Aproape totul despre Backup

Continut
1 Backup la partitie in retea
2 Backup recursiv la directoare specifice utelizand tar & bash
3 Backup recursiv la directoare specifice utelizand flexbackup
4 Backup incremental cu Rsync
5 Backup Incremental in retea cu rdiff-backup
6 Pregatirea pentru Backup

1 Backup la partitie in retea
Pentru a face un backup la o partitie intreaga pe o masina remote ce se poate afla atat in reteaua interna cat si in Internet vom utiliza netcat si dd
Netcat il avem in doua variante :
# emerge gnu-netcat
sau
# emerge netcat

Pentru un backup a partitiei de pe hda "exemplu /dev/hda1" vom porni netcat in modul "ascultare" listen pe PC pe care vom copia backup-ul.
# netcat -l -p 10000 > image.gz

Pe PC care are nevoie de backup vom rula dd pt a citi partitia a a o comprima cu gzip si transfera cu netcat pe PC-ul ce asculta.
# dd if=/dev/hda1 | gzip | netcat -w 5 remote_ip 10000

Pentru informatii suplimentare cum a clona un Linux utelizand netcat consultati clone_linux

2 Backup recursiv la directoare specifice utelizand tar & bash
Voi prezenta un bash script foarte simplu de care am dat pe forums.gentoo.org ce face un backup "ne incrimental". La baza acestui script stau (bash, tar, xargs, etc.)
Acest script pote fi inclus in cron sa faca backup saptamanal sau lunar sau se poate rulat manul cand e nevoie.
#!/bin/sh
# for FULL backups
# this backs up the important stuffs listed in ${lists} to ${BKPDIR}
# the lists *should* be in ${BKPDIR} and named .lst
# the resulting backups will be ..tgz
# notes:
# - assumes ${BKPDIR} is unmounted and has an /etc/fstab entry
# - assumes /boot is unmounted and has an /etc/fstab entry
# - variables in CAPS are ok for you to set... change the other
# vars if you know what you're doing
# - you can get fancy in the lists... think xargs *wink*, but
# you can't use thes spanning feature to break up an
# archive to smaller pieces of arbitrary size
# - follow your security policy when setting perms on ${BKPDIR}
# written by razamatan
# DISCLAIMER: razamatan didn't write this if something goes wrong
BKPDIR=/mnt/.backup # where the backups go
BOOT=sys # list that has /boot
NUMBKPS=4 # how many backups to keep
if [ ! -d ${BKPDIR} ] ; then
echo ${BKPDIR} is not a valid directory or does not exist
fi
mount ${BKPDIR} # i have my backup directory on a seperate partition
lists=${BKPDIR}/*.lst
ext=tgz
for list in `ls ${lists}`; do
type=`basename ${list} .lst`
if [ ${type} = ${BOOT} ] ; then mount /boot ; fi
cat ${list} | xargs tar zlcf
${BKPDIR}/${type}.`date +%Y-%m-%d-%H%M`.${ext} > /dev/null 2>&1
if [ ${type} = ${BOOT} ] ; then umount /boot ; fi
num=${NUMBKPS}
for evict in `ls -t ${BKPDIR}/${type}.*.${ext}`; do
if [ ${num} -le 0 ] ; then rm -f ${evict}
else num=$((${num}-1)) ; fi
done
done
umount ${BKPDIR} # and i like to keep it unmounted

download script

3 Backup recursiv la directoare specifice utelizand flexbackup
Flexbackup este un script scris in perl ce poate face usor si rapid backup la directoarele importante.
# emerge flexbackup

Cam asa trebuie sa arate /etc/flexbackup.conf fisierul de configurare a lui flexbackup:
$set{'research'} = "/home/david/research /var/cvsroot/python /var/cvsroot/latex";
$set{'mail'} = "/home/david/.thunderbird";
$set{'etc'} = "/etc /home/david /var/www/davidgrant.ca/htdocs";
$prune{'/home/david'} = ".jpi_cache konserve-backup .cxoffice .wine .mozilla .kde3.1 .thunderbird";
$prune{'/home/david/.thunderbird'} = "Junk News";
$compress = 'gzip'; # one of false/gzip/bzip2/lzop/zip/compress/hardware
$compr_level = '6';
$device = '/mnt/sata/backup'

Puteti modifica fisierul de configurare in functie de ce directoare vreti sa fie salvate ca copie de rezerva
Fiecare director in "research" va fi salvat cu propriul tarball, cum ar fi "home-david-research.0.tar.gz", "var-cvsroot-python.0.tar.gz", si "var-cvsroot-latex.0.tar.gz".
$prune$ este o optiune foarte utila ce permite mask-area anumitor directoare pe care nu doriti sa le includeti in tarballs.
A fost setat $compress pe 'gzip' dar puteti uteliza de exemplu bzip2 daca vreti un tarball de dimensiuni mai mici . bzip2 este mai lent la arhivare si dezarhivare decat gzip. $compr_level=6 va executa compresi mai rapid ra se poate schimba intro alta valoare pt a creste nivelul de compresie.
Pentru a crea un Backup sistematic vom utiliza crontab
0 3 1-7 * * flexbackup -set all -full -w 7
0 3 * * 6 flexbackup -set all -differential
0 3 * * 1-5 flexbackup -set all -incremental

Aceasta inregistrare va efectua un backup complet la fiecare sambata a fiecarei luni si un backup incremental in fiecare zi a saptamanii la oara 3am
Pentru detalii vizitati Flexbackup home page

4 Backup incremental cu Rsync
In Internet este un tutorial foarte detaliat Easy Automated Snapshot-Style Backups with Linux and Rsync despre crearea si efectuare de backup utelizand rsync unde veti gasi si un script complet pentru crearea scripturilor.
Utelizand backup incremental, puteti crea multiple snapshot-uri a discului si tot odata eficientiza utelizarea spatiului pe disc si a consumului de resurse necesar crearii si mentenantei backup-urilor. Rsync ne ofera o modalitatea foarte comoda pentru a crea creating backup de tip snapshot.
Voi prezenta cateva scripturi simple pe care le puteti modifica pentru a va satisface nevoile proprii de backup
Backup la fiecare 7 zile ca va utiliza pe un server dedicat pentru stocare backup-urilor.
#!/bin/sh
# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com
# directory to backup
BDIR=/home/$USER
# excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes
# the name of the backup machine
BSERVER=owl
# your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current

Backup pe un Ald HDD
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY

Backup automat la /home/utelizator pe acelshi hdd
#!/bin/sh
cd ~susan
{
echo
date
dest=~/backup/`date +%A`
mkdir $dest.new
find . -xdev -type f ( -mtime 0 -or -mtime 1 ) -exec cp -aPv "{}"
$dest.new ;
cnt=`find $dest.new -type f | wc -l`
if [ $cnt -gt 0 ]; then
rm -rf $dest
mv $dest.new $dest
fi
rm -rf $dest.new
rsync -Cavze ssh . samba:backup
} >> ~/backup/backup.log 2>&1

Daca va simtiti incomod de a uteliza sau modifica scripturile bash vizitati rsnapshot unde veti gasi rsnapshot ce a ajuns la versiunea 1.2.1 si pe care puteti sa-l folositi cu incredere in prealabil citind documentatia de pe site.

Vom incerca cateva exepmle manuale pentru rsync
Sa presupunem ca vreiti sa
* creati o imagine exacta a discului sau partitie .
* Aveti deja un hdd separat pregatit pet backup ce poate fi IDE, USB in retea etc.(in examplu avem /mnt/usbharddrive):
Backup la intreaba partitie:
# rsync --progress --stats -avxzl --exclude "/mnt/usbharddrive/" --exclude "/mnt/usbharddriveboot/" --exclude "/usr/portage/" --exclude "/proc/"
--exclude "/root/.ccache/" --exclude "/var/log/" --exclude "/sys" --exclude "/dev" --exclude "tmp/" /* /mnt/usbharddrive

Dublicam partitia si stergem _update la fisierele ce au fost rescriese de la primul backup:
# rsync --progress --stats --delete -avxzl --exclude "/mnt/usbharddrive/" --exclude "/mnt/usbharddriveboot/" --exclude "/usr/portage/"
--exclude "/proc/" --exclude "/root/.ccache/" --exclude "/var/log/" --exclude "/sys" --exclude "/dev" --exclude "tmp/" /* /mnt/usbharddrive

Backup la partitia de boot:
# rsync --progress --stats -avxzl /boot /mnt/usbharddriveboot
# rsync --progress ---avxzl --stats --delete /boot /mnt/usbharddriveboot

Pentru restaurarea backup-ului putem utiliza Gentoo Live CD. Restaurarea se va efectia de pe exemplu /mnt/usbharddrive pe /mnt/driveRestore.

5 Backup Incremental in retea cu rdiff-backup
rdiff-backup este un utelitar foarte flexibil ce permite un backup total si/sau incrimental.rdiff-backup permite un control extins al backup-urilor prin pastrarea atat fisierelor vechi cat si integrarea celor noi care au fost modificate. rdiff-backupne permite crearea backup remote prin ssh. Pentru mai multe detalii rdiff-backup Main page.
Isntalam rdiff-backup
emerge rdiff-backup

Pentru a crea backup in retea pe ambele masini este necesara instalarea rdiff-backup. NU va fi necesar drepturile de root pe cand rdiff-backup poate fi utelizat si de utelizatori obisnuiti.
Dupa instalare ptem trece direct la utelizarea rdiff-backup
rdiff-backup ~/mydir remoteuser@remotehost.remotedomain ::mydir-backup

In cazul de mai sus subdirectorul mydir-backup este creat in HOME pe masina utelizatorului remoteuser la remotehost.remotedomain. Daca acest director este deja prezent in Home atunci directorul va fi update-at pentru a reflecta modificarile de pe masina sursa iar diferentele nu vor disparea ci vor fi salvate la randul sau. Pentru mai multe detalii si exemple concrete vizitat http://www.nongnu.org/rdiff-backup/examples.html.
In functie de configurarea serviciului sshd si schema de autentificare puteti fi intrebat de parola de acces a utelizatorului pe mashina pe care se va salva backup-ul.
Acest proces de autentificare poate fi evitat utelizand (ssh-agent) si este in special util cand utelizam backup ca proces automat in cron. In cazul in care nu aveti configurat (ssh-agent) vom proceda:
Primul lucru pe care il facem ne m,utam pe masina ce va stoca backup-urile si avem nevoie de passphrase-less key pair ce va fi folosita de rdiff-backup.
Creem passphrase-less key pair
ssh-keygen -t dsa

Vom salva cheia .ssh/backup_dsa si enter pentru passphrase.
Acum copiem cheia creata in mashina la care se va face backup
scp .ssh/backup_dsa.pub remoteuser@remotehost.remotedomain

Pe mashine care va crea backup vom adauga cheia copiat in lista authorized keys
ssh remoteuser@remotehost
cat backup_dsa.pub >> .ssh/authorized_keys
rm backup_dsa.pub

Acum a venit timpul sa-i specificm mashii ca cheia respectiva va fi utelizata numai pentru anumite actiuni care ne intereseaza. Editam .ssh/authorized_keys si specificam comanda inaintea fiecarei chei.
Exemplu
nano -w .ssh/authorized_keys sau remote machine
command="/usr/bin/rdiff-backup --server" ssh-dss ....

Acum putem trece la mashina la care trebuie facut backup-ul si ne asuguram ca rdiff-backup sa fie pornit, si vom configura mashina pentru utelizarea passphrase-less, key pair prin crearea ssh aliasing prin editarea .ssh/config si adaugam;
nano -w .ssh/config
Host remote-backup
Hostname remotehost.remodomain
IdentityFile ~/.ssh/backup_dsa
IdentitiesOnly yes

In acest fel cand vom uteliza remote-backup host identifier in ssh sau scp PC-ul ca contacta remotehost.remodomain si in loc sa utelizeze cheia defaul va fi fortat sa utelizeze /.ssh/backup_dsa.
Configurarile de mai susu ne permit crearea de remote backup prin conectarea ssh la o alta mashina specificata fara a mai fi nevoie de a introduce parolla utelizatorului la cere ne conectam.
Acum a venit timpul sa configuram rdiff-backup ca un cron job pentru un backup automat editam local cron table ce este separat la fiecare utelizator in parte.
File: cron table on local machine
01 1 * * * rdiff-backup /home/localuser/mydir remoteuser@remote-backup::mydir-backup[code]

6 Pregatirea pentru Backup
In anumite cazuri cand mashina ruleaza mai multe aplicatii sau demoni cum este mysql sau nu sunt montate anumite partitii la care trebuieste facut backup-ul cum este /boot avem nevoie de o pregatire prealabila a sistemului inainte de crearea bakupu-rilor. Vom crea un script ce va monta partitia in read-only mode pe durata crearii backup-ului.

[code]nano -w /etc/scripts/flexwrapper.sh
#!/bin/sh
# mount /boot pentru backup
mount /boot

# MySQL Read Only
# EXAMPLU!
# Aveti grija ca parola mysql va fi in plain-text sau utelizati criptarea cu shc ;)http://www.gentoo.ro/content.php?article.47
mysql -u root --password='yourpass' -e "SET GLOBAL read_only=1;"

# Rulam flexbackup, unde vom pasa si parametrii
flexbackup $*

# dam 10 secunde de respiro pentru un clean up
sleep 10

# MySQL Read/Write
mysql -u root --password='yourpass' -e "SET GLOBAL read_only=0;"

# umount /boot
umount /boot

Acum a venit timpul sa inregistram in cron job flexbackup:
0 3 1-7 * * /etc/scripts/flexwrapper.sh -set all -full -w 7
0 3 * * 6 /etc/scripts/flexwrapper.sh -set all -differential
0 3 * * 1-5 /etc/scripts/flexwrapper.sh -set all -incremental


Astep critici, aprecieri, completari daca sunt necesare.
Acet tutorial a fost tradus si adaptat dupa WiKi HOWTO_Backup