Kategória archívum: Linux (HowTo)

Conky rendszer-monitorozó alkalmazás

A Conky egy Linuxra írt rendszer-monitorozó alkalmazás, melynek célja nem más, mint különböző információk megjelenítése az asztalon. Ebben a cikkben megpróbálom összefoglalni mindazt, amit eddig tudok róla.
Az általam használt rendszer Ubuntu 10.10, így Gnome környezetben fogom bemutatni a fentebb írtakat.

Conky

Conky

A Titokzatos Terminál

Első lépések

Nem olyan nagyon régen kezdtem használni Ubuntut. Előtte hosszú évekig egerésztem már a Windows grafikus felületén, de mivel parancssoros felületen soha nem dolgoztam, a terminál használatával igencsak meggyűlt a bajom. Talán Te is épp most ebben a cipőben jársz, remélem a tapasztalataim közreadásával tudok Neked segíteni.

Játék az iptables-szel

Nem is olyan nagyon régen írtam egy cikket arról, hogyan érezhetnénk magunkat kicsit nagyobb biztonságban, ha online tartózkodik számítógépünk. A cikk születésében ötletekkel, lektorálással, teszteléssel segítségemre volt egy kollégám, akinek volt egy megjegyzése, ami szöget ütött a fejembe.

Az írásnak ugyanis része volt a tűzfal beállítása, amit én a saját gépemen az /etc/init.d könyvtárból – még inkább az /etc/rcS.d könyvtárból – indítottam. Ő erre azt mondta, hogy az ötlet jó, ámbátor abszolúte nem init scriptként viselkedik a tűzfal – ami igaz is. Mivel fogalmam sem volt, hogyan kellene legalább hasonlóvá tenni a tűzfal beállításait az init scriptekhez, nekiálltam kicsit tanulmányozni az ufw init-scriptjét. A látottak alapján úgy döntöttem, hogy hasonlóvá teszem a tűzfalam indítását, noha az nyilvánvalóan nem init-script.

Szem előtt tartottam azt is, hogy felmerülhetnek bizonyos egyéb igények az általam elképzelteken kívül, így az indítási paraméterek között felsoroltam néhány egyéb lehetőséget.

#!/bin/sh -e
 
### BEGIN INIT INFO
# Provides: firewall
# Required-Start:
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: start customized firewall
### END INIT INFO
 
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
 
# Az iptables parancs helye, igy nem kell mindig a teljes utvonalat beirni
IPTABLES=/sbin/iptables
 
[ -x /etc/init.d/firewall ] || exit 0 # futtathato-e a script, ha nem, kilepunk
 
case "$1" in
start)
echo "Starting customized firewall...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot DROP-ra allitjuk
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
# Kihasznaljuk, hogy lehetseges az allapot ellenorzese
# es csak olyan bejovo kapcsolatokat engedelyezunk, amelyeket mi inditottunk
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
echo "Customized firewall started... [OK].\n"
echo "Only user-initiated network connections are available (doesn't harm daily internet usage).\n"
;;
 
stop)
echo "Stopping customized firewall, all connections will be default...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot ACCEPT-ra allitjuk
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
 
echo "Customized firewall stopped, all connections set to default.\n"
;;
 
close)
echo "Stopping customized firewall, all connections will be closed...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot DROP-ra allitjuk
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
echo "Customized firewall stopped, all connections closed.\n"
;;
 
ssh)
echo "Starting customized firewall...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot DROP-ra allitjuk
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
# Kihasznaljuk, hogy lehetseges az allapot ellenorzese
# es csak olyan bejovo kapcsolatokat engedelyezunk, amelyeket mi inditottunk
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
# Engedelyezzuk az ssh szerver portjat
# termeszetesen igy az egesz vilag hozzaferhet
$IPTABLES -A INPUT -p tcp --dport 5353 -j ACCEPT
 
echo "Customized firewall started... [OK].\n"
echo "Only user-initiated network connections and ssh on port nr. 5353 are available (doesn't harm daily internet usage).\n"
;;
 
apache)
echo "Starting customized firewall...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot DROP-ra allitjuk
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
# Kihasznaljuk, hogy lehetseges az allapot ellenorzese
# es csak olyan bejovo kapcsolatokat engedelyezunk, amelyeket mi inditottunk
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
# Engedelyezzuk a webszerver portjat
# termeszetesen igy az egesz vilag hozzaferhet
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
 
echo "Customized firewall started... [OK].\n"
echo "Only user-initiated network connections and apache on port nr. 80 are available (doesn't harm daily internet usage).\n"
;;
 
ssh_apache)
echo "Starting customized firewall...\n"
 
# Toroljuk az eddigi szabalyokat
$IPTABLES --flush
 
# Minden meglevo extra lancot torlunk
$IPTABLES --delete-chain
 
# A harom alapertelmezett lancot DROP-ra allitjuk
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP
 
# Kihasznaljuk, hogy lehetseges az allapot ellenorzese
# es csak olyan bejovo kapcsolatokat engedelyezunk, amelyeket mi inditottunk
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 
# Engedelyezzuk a webszerver es az ssh portjait
# termeszetesen igy az egesz vilag hozzaferhet
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 5353 -j ACCEPT
 
echo "Customized firewall started... [OK].\n"
echo "Only user-initiated network connections, ssh on port nr. 5353 and apache on port nr. 80 are available (doesn't harm daily internet usage).\n"
;;
 
*)
echo "Usage: /etc/init.d/firewall {start|stop|close|ssh|apache|ssh_apache}"
exit 1
;;
esac
 
 
exit 0

Lássuk sorrendben:

  • start: elindítjuk a tűzfalat és csak olyan kapcsolatokat engedélyezünk, amiket mi indítottunk.
  • stop: visszaállítjuk az alapértelmezett állapotot, azaz minden kapcsolatot engedélyezünk – leginkább tesztelésre ajánlott, ha “útban van” a tűzfal.
  • close: teljes rendszerzárlat, semmilyen hálózati kapcsolatot nem engedélyezünk.
  • ssh: csak az 5353-as portra konfigurált ssh-t és az általunk kezdeményezett kapcsolatok engedélyezettek.
  • apache: elérhető az alapértelmezett beállításokkal működő webszerver (80-as port), valamint működőképesek az általunk kívánt kapcsolatok.
  • ssh_apache: kívülről elérhető az ssh, a webszerver és működnek az általunk kezdeményzett műveletek.

Ha bármelyik kulcsszó nélkül indítjuk a scriptet, egy rövid információs sort kapunk a használatról.

Természetesen még egyebekkel is ki lehet egészíteni a scriptet, illetve nyilvánvalóan el is lehet venni az itt tárgyalt lehetőségekből; a fenti példa az én igényeimet tükrözi. Remélem, lesz, akinek hasznos ez a leírás. Jó játékot az iptables-szel!

szerző: sh4d0w

Youtube videó letöltés és konvertálás Linuxon

Ezt a szkriptet azért hoztam létre, hogy egy alap bash szkriptet bemutassak, melyből könnyebben elsajátítható annak használata. Nem célom a szkriptet tovább fejleszteni videó letöltés használatára, csupán tanulási segédanyagként jött létre az amúgy megfelelően működő szkript.

A szkript futtatásához szükségünk van 2 program telepítésére (youtube-dl, mencoder), ezeket a következő parancs kiadásával tudjuk a legegyszerűbben telepíteni:

sudo apt-get install youtube-dl mencoder

A szkriptünket a következő paranccsal és értékekkel tudjuk majd működésre bírni:

youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX szerzo-cim

A youtube.sh a szkriptünk neve, az utána következő link a letöltendő videó címe, végül pedig egy név, amellyel szeretnénk elmenteni az állományunkat. Vágjunk is bele.
Első lépésként hozzunk létre egy üres fájlt a neve legyen youtube.sh:

touch youtube.sh

Nyissuk meg szerkesztésre a kedvenc szövegszerkesztőnkkel. Lehet grafikus felületen a gedit, kedit, vagy karakteres felületen az mcedit, nano… stb. Én a nano-t fogom használni.

nano youtube.sh

Mivel bash szkriptet írunk, a fájl elején meg kell adnunk ezt, mégpedig a következő sorral:

#!/bin/bash

Majd, hogy a későbbiekben könnyebben tudjunk dolgozni, állítsunk be egy könyvtárat, amibe szeretnénk dolgozni. Én egy saját könyvtárat hoztam létre a $HOME könyvtáramban.

download=$HOME/youtube

Ha nem alapértelmezett könyvtárról van szó, akkor érdemes ellenőrizni a létezését. (Igazából érdemes ellenőrizni minden esetben.) Egy feltételes utasítással ellenőrizzük a létezését, illetve nem létezését. A következő sorokban megvizsgáljuk, hogy a download változóban eltárolt könyvtár nem létezik-e, ha ez igaz, akkor létrehozzuk a könyvtárat.

if [ ! -e $download ]
then
mkdir $download
echo "A "$download" könyvtár létrehozva" # The directory is created
fi

Az előzőekben ismertetett módon leellenőrizzük az flv könyvtár létezését.

if [ ! -e $download/flv ]
then
mkdir $download/flv
echo "A "$download"/flv könyvtár létrehozva" # The directory is created
fi

Belépünk a munka könyvtárunkba.

cd $download

Egy üzenettel jelezzük, hogy éppen mit is csinál a szkriptünk.

echo "A letöltés megkezdése" # Start the download

majd letöltjük a fájlt. A $1 változó a szkriptünk meghívása mögött álló szöveget tartalmazza, ami a hivatkozást kell tartalmaznia. Pl.: youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX

youtube-dl $1

Majd kiíratjuk, hogy sikeresen letöltöttük a videó fájlt:

echo "A video letöltve" # Video is downloaded

A következő paranccsal létrehozunk egy video változót, melyben eltároljuk a szkript meghívásánál megadott link egyenlőségjel mögötti karaktereit, ugyanis a youtube-dl ezzel a névvel fogja elmenteni a videót.

video=`echo $1 | awk -F= '{print $2 }'`

Itt egy új változóval ismerkedünk meg ez a $2 (nem azonos az awk mögötti $2-vel!). Ez a szkript meghívásakor másodikként megadott karaktersorozatot tartalmazza, amelyben az mp3 nevét kell megadnunk. Tehát a szkript helyes meghívása a következőképpen fog kinézni: youtube.sh http://www.youtube.com/watch?v=XXXXXXXXXXX szerzo-cim
A zene változó a következőt fogja tartalmazni: szerzo-cim.mp3

zene=`echo $2 | awk -F. '{print $1}'`.mp3

A változók beállítása után egy üzenettel jelezzük, hogy a konvertálást fogjuk elkezdeni:

echo "A konvertálás megkezdése" # Start the convert

Majd ténylegesen készítünk egy mp3 fájlt a videóból (az eredeti fájl megmarad):

mencoder $video.flv -of rawaudio -oac copy -ovc copy -o $zene

Ismételten jelezzük, hogy hol tart a szkriptünk:

echo "Az mp3 elkészült" # The mp3 is ready

A video változó értékét beállítjuk az általunk megadott névre. A következőt fogja tartalmazni: szerzo-cim.flv

video=`echo $zene | awk -F. '{print $1}'`.flv

Majd átnevezzük az flv fájlunkat:

mv *.flv $video

Végül áthelyezzük a videót az flv könyvtárba:

mv $video $download/flv/

Lezárásképpen jelezhetjük, hogy a szkriptünk lefutott:

echo "A program sikeresen lefutott!" # The script ran succesfully

A szkriptet ízlésünknek megfelelően lehet módosítani. Például, ha nincs szükségünk az flv videóra, akkor törölhetjük is, illetve akár mindkét fájlt más könyvtárakba is helyezhetjük, minden csak rajtunk múlik.
A szkript tovább fejlesztése várható. Igyekszem hamarosan grafikus felületet készíteni hozzá, illetve flv-ből avi-t készíteni.

A szkript egyben:

#!/bin/bash
 
#######################################################
 
##            Youtube downoalder and converter
 
##        Create by blaselinux: (blaselinux@gmail.com)
 
##               Licence GNU GPL v3 or later.
 
##           http://www.gnu.org/licenses/gpl.html
 
##                   http://gnu.hu/gplv3.html
 
#######################################################
 
# Set the download variable to the working directory
download=$HOME/youtube
 
# Check the working directory; exist or not, if not the script make it
if [ ! -e $download ]
then
mkdir $download
echo "A "$download" könyvtár létrehozva" # The directory is created
fi
 
if [ ! -e $download/flv ]
then
mkdir $download/flv
echo "A "$download"/flv könyvtár létrehozva" # The directory is created
fi
 
# Go to the working directory
cd $download
 
echo "A letöltés megkezdése" # Start the download
 
# Download the video
youtube-dl $1
 
echo "A video letöltve" # The video is downloaded
 
# Set the video variable
video=`echo $1 | awk -F= '{print $2 }'`
 
# Set the zene variable
zene=`echo $2 | awk -F. '{print $1}'`.mp3
 
echo "A konvertálás megkezdése" # Start the convert
 
# Convert the flv file to mp3
mencoder $video.flv -of rawaudio -oac copy -ovc copy -o $zene
 
echo "Az mp3 elkészült" # The mp3 is ready
 
video=`echo $zene | awk -F. '{print $1}'`.flv
 
# Rename the flv file
mv *.flv $video
 
# Move the flv file to the flv directory
mv $video $download/flv/
 
echo "A program sikeresen lefutott!" # The script ran succesfully

Az elkészítés után ne felejtsünk el futtatási jogot adni az állományra:

chmod +x youtube.sh

A szkript letölthető innen is:
Youtube videó letöltő és konvertáló script (405)

Alap tűzfal otthoni PC-re (iptables I)

Ez egy nagyon nagy téma, én csak az alapokat szeretném megmutatni a teljesség igénye nélkül.

Elsősorban fontosnak tartom leírni, hogy a szabályokat egy fájlban fogjuk elhelyezni amit létrehozhatunk például a /usr/local/sbin/ könyvtárban firewall_start.sh néven (pl).

Iptables

Adminisztrációs eszköz az Ipv4 csomagszűréshez és NAT-oláshoz. (részlet az iptables manualból)
Az iptables a hálózati rétegben működik, vagyis IP csomagokkal dolgozik. Szabályokat (rules) lehet vele felállítani amiket táblákba szervez. Három default (alapértelmezett) lánc (chain) létezik:

  • INPUT – a kintről befelé érkező csomagokra match-el
  • OUTPUT – a bentről kimenő csomagokra match-el
  • FORWARD – az adott gépen átmenő csomagokra match-el

Megjegyzés: van még kettő (PREROUTING és POSTROUTING) de azok nem tartoznak bele ebbe a leírásba. Talán egy későbbiben.
Hozhatunk létre saját láncokat is. Lánc műveletek:

  • N – új lánc létrehozása
    pl.: iptables -N in_attack – létrehozza az in_attack láncot.
  • P – lánc policy beállítása
    pl.: iptables -P INPUT DROP – ez a parancs beállítja az INPUT lánc policy-ját DROP-ra ami azt jelenti, hogy ha az INPUT láncban szereplő szabályok közül egyikre sem match-el egy csomag, akkor el lesz dobva.
  • F – töröl minden szabályt
    pl.: iptables -F – minden létező szabályt töröl, de nem változtatja meg a láncok policy-jét!!
  • L – kilistázza a szabályokat, az egészet, vagy csak egy láncét
    pl.: iptables -L INPUT – kilistázza az INPUT lánc összes szabályát.
  • X – törli az üres láncokat
    pl.: iptables -X

Ennyi elmélet kezdésnek, a többit gyakorlati példákkal mutatnám be. Először hozzuk létre a fájlt a tűzfal szabályoknak (terminálban) és tegyük futtathatóvá:
Senki ne másolja be az általam írt parancsot, mindenki vegye a fáradtságot és kézzel írja be.

sudo touch /usr/local/sbin/firewall_start.sh
sudo chmod +x /usr/local/sbin/firewall_start.sh

Ezután már az elejét meg tudjuk írni:

sudo mcedit /usr/local/sbin/firewall_start.sh # mcedit helyett bármi lehet (nano, gedit, vi, vim ...)

A tartalma pedig egyelőre:

1
2
3
4
5
6
#!/bin/bash
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

A sorokat a magyarázás miatt számoztam be.
1. sor megadja az értelmező shellt
2. sor törli az összes szabályt
3. sor törli az üres láncokat (-F miatt már mind üres)
4. 5.6.sor beállítja a policy-ket DROP-ra
Az INPUT és az OUTPUT láncot is azzal célszerű kezdeni, hogy a lo (localhost) felé és felől engedünk mindent:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Az „iptables” a program neve. A „-A INPUT|OUTPUT” mondja meg, hogy melyik láncra érvényes a szabály. A „-i” és „-o” a bejövő és kimenő interfészt jelenti. Vagyis a „-i lo” = bejövő interfész a localhost. „-j ACCEPT” határozza meg a csomagok sorsát amik illeszkednek erre a szabályra. a sorsok lehetnek: ACCEPT; DROP. Amit még fontos betenni minden tűzfal szabályok közé:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

A „-m state –state ESTABLISHED,RELATED” a csomag állapotára utal. Vagyis azokra a csomagokra vonatkozik a szabály amik tőlünk indult csomagokra érkező válaszok. Tehát nem lehet köztük NEW (syn) csomag.
Jó tanács, hogy kifelé sem engedünk minden NEW csomagot, hiszen egy jó tűzfalban szűrni kell az OUTPUT láncot is. Vannak akik ezzel nem értenek egyet.

Tűzfal beállítása

Most mérjük fel az igényeket, mert ettől a ponttól egyedi esetek állnak fent. Most számoljunk azzal, hogy a szkriptet készítő felhasználó a következőket szeretné: internet (HTTP, HTTPS), MSN, IRC, levelezés és FTP.

  • Internet:
    • 80(HTTP)/tcp
    • 443(HTTPS)/tcp
    iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

    Ez egy egyszerű szabály ami kiengedi azokat a csomagokat amik TCP csomagok (-p tcp) és a célportjuk 80 és 443 (–dport 80|443). A 443-as port a HTTPS portja. Csakhogy ezzel még nem fok működni a böngészés, hiszen ezt a lépést megelőzi az IP cím felderítés (felodás [resolve]) DNS segítségével.

    iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

    Így most már kiengedjük az 53-as célportú udp csomagokat is, amik a DNS szerverek felé mennek majd. A válasz befogadásáról nem kell külön gondoskodnunk, hiszen már van egy erre a célra írt szabályunk. (iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT, ezt a sort érdemes az OUTPUT lánc legelejére tenni (az lo lánc szabály után) mivel a legtöbb csomag valoszinűleg erre fog matchelni, s így nem kell áthladnia az összes többi láncon)

  • MSN:
    • 1863/tcp
    iptables -A OUTPUT -p tcp --dport 1863 -j ACCEPT
  • IRC:
    • 6667/tcp
    iptables -A OUTPUT -p tcp --dport 6667 -j ACCEPT
  • Levelezés:
    • 25(SMTP)/tcp
    • 465(SMTPS)/tcp
    • 143(IMAP)/tcp
    • 993(IMAPS)/tcp
    • 110(POP3)/tcp
    • 995(POP3S)/tcp
    iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 143 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 993 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 995 -j ACCEPT
  • FTP:
    • 20(FTP-DATA)/tcp
    • 21(FTP)/tcp
    iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
    modprobe ip_conntrack_ftp

    A 3. sor egy FTP modul betöltése.

Összefoglalva és egyszerűsítve:

#!/bin/bash
 
# modulok betolltese
modprobe ip_conntrack_ftp
 
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
 
# INPUT lanc
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j LOG --log-prefix „INPUT_DROP: ”
iptables -A INPUT -j DROP
 
# OUTPUT lanc
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dport 20,21,25,80,110,143,443,465,993,995,1863,6667 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -j LOG --log-prefix „OUTPUT_DROP: ”
iptables -A OUTPUT -j DROP

Lényegében ez egy nagyon egyszerű, de a semminél mégis lényegesen több tűzfal. Mind a két láncban van két utolsó „ismeretlen” szabály. 15. és 24. sor: sorsa LOG. Loggol (naplóz) minden csomagot ami nem illeszkedett egyetlen szabályra sem. 16. és 25. sor Loggolás után eldob minden csomagot ami egyetlen előző szabálya sem illeszkedett.

Tipp: A logot ki lehet kapcsolni, de én ezzel a módszerrel derítettem ki, hogy egyes alkalmazások milyen portokon szeretnének kommunikálni. A módszer:

$ tail -f /var/log/messages

Hagyni kell had fusson, majd elindítani a kérdéses alkalmazást és figyelni kell, milyen csomagokat dob el. A log-ban benne lesz, hogy milyen cél vagy forrás portot igényel és az tcp vagy udp -e.

Én szeretem bekapcsolva hagyni a logot, de hogy mégsem legyen sok felesleges log, van még pár szabály a tűzfalamban:

iptables -A INPUT -p tcp -m multiport  --dport 135,137,139,445,1026,1027,5900,6881 -j DROP
iptables -A INPUT -p udp -m multiport --dport 135,137,139,445,1026,1027,5900 -j DROP

Ezeket a 14. sor után tettem be. Így ezeket a csomagokat log nélkül eldobja.

135/tcp -          epmap,                                 # Location Service
137/tcp -          netbios-ns,                            # NETBIOS Name Service
139/tcp -          netbios-ssn                           # NETBIOS session service
445/tcp -          microsoft-ds                          # Microsoft Naked CIFS
1026/tcp -        nem szabványos port
1027/tcp -        nem szabványos port
135/udp -         epmap,
137/udp -         netbios-ns,
139/udp -         netbios-ssn
445/udp -         microsoft-ds
1026/udp -       nem szabványos port
1027/udp -       nem szabványos port

Ezzel kész egy egyszerű tűzfal szkript ami a /usr/local/sbin/firewall_start.sh fájlban van. Következő lépések:

sudo touch /etc/init.d/firewall.sh
sudo chmod +x /etc/init.d/firewall.sh
sudo mcedit /etc/init.d/firewall.sh

A következőket írjuk bele:

#!/bin/bash
case "$1" in
start) /usr/local/sbin/firewall_start.sh
;;
stop)   /usr/local/sbin/firewall_stop.sh
;;
esac

Ez egy kis indítószkript, amit szintén tovább lehet fejleszteni majd. De most a célnak megfelel, csak arra kell, hogy a tűzdal szkriptünk automatikusan lefusson rendszerindításkor.
Még egy dolog maradt hátra.

sudo ln -s /etc/init.d/firewall.sh /etc/rc2.d/S01Firewall

Rc2.d könyvtárba akkor, ha a futási szint 2. Alapértelmezetten 2, de ellenőrizzük le:

budacsik@budacsik-desktop:~$ runlevel
N 2

Ki lehet próbálni, de mielőtt restartolunk, még egyszer nézzünk át mindent.

Tipp: Az összes port listáját meg lehet nézni a /etc/services fájlban.

Kiegészítés:
Minden esetben csak simán az „iptables” parancsot használtam. Sokan más formában írják meg, és talán igazuk van. A szkript elején létrehozzák a parancsok változóit. Az iptables parancs helye:
(which iptables) /sbin/iptables
Tehát a szkript eleje így néz ki:

#!/bin/bash
 
# valtozok deklaralasa
IPTABLES=”/sbin/iptables”
# modulok betolltese
modprobe ip_conntrack_ftp
 
$IPTABLES -F
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

Jól látszik, hogy most már a $IPTABLES változóval hivatkozok a programra.

További kiegészítés(2008.02.18 12:04):
Elegánsabb megoldás, ha a tűzfal kézi indítása után kiadjuk a következő parancsot:
Kimentéshez

sudo iptables-save > /home/budacsik/firewall.txt

Visszatöltéshez

sudo iptables-restore < /home/budacsik/firewall.txt

Hol hasznos ez? Firewall szkriptünk /usr/local/sbin/firewall_start.sh a következő képpen módosul:

#!/bin/bash
sudo iptables-restore < /home/budacsik/firewall.txt

Így nem az iptables kell hívogatni és a kimentett firewall.txt fájlt is lehet szerkeszteni. Sőt a fájlt megnézve hamar hozzá lehet szokni, és lehet eleve így elkészíteni a szkriptet, de én ettől eltekintenék, ugyanis hátránya pl, hogy nehéz kommentezni, könnyen átláthatatlanná válik… Szerintem maradjon meg az eredeti fájl is amit szerkesztünk, majd futtatjuk, lementjük és a továbbiakban azt töltjük vissza rendszerindításkor.

Szerző: Budácsik Attila (budacsik)

Elérhetőségek: budacsik@gmail.com makay.jozsef@gmail.com

Licenc: A dokumentum szabadon másolható, de nem módosítható. A dokumentumot tilos pénzért, vagy bármilyen járandóságért árusítani. Minden jog a szerzőnek van fenntartva.

További információk: Az esetleges hibákért a szerző nem vállal felelősséget. A szövegben felfedezett hibákat és észrevételeket a Makay József email-címére kérjük.
Minden jog fenntartva! © SKL-Projekt

Egyszerű archiváló szkript készítése

Ebben a leírásban bemutatom, hogyan lehet elkészíteni egy egyszerű archiváló bash szkriptet. Egy általam készített szkripten keresztül mutatom be a lépéseket, melyek csupán egy lehetőséget biztosítanak a végleges működés mindig rajtunk múlik. Kezdjünk is bele.

Először is nyissuk meg kedvenc szövegszerkesztőnket.
Mielőtt bármit csinálnánk adjuk meg, hogy milyen szkriptet is csinálunk:

#!/bin/bash

Én először könyvtárat váltottam, így egyszerűbben tudok későbbiekben parancsokat kiadni az adott könyvtárra. Tehát:

cd /archivalando/fajlok/eleresi/utja

Én szeretném mindig az előző hónapban létrehozott fájlokat archiválni, ezért le kell ezt is kezelni. Az aktuális hónapot egy egyszerű paranccsal le tudom kérdezni:

date +%m

Állítsuk be az előző hónapot egy változóba:

old_honap=`date --date="1 month ago" +%m`

Ezután egy másik változóba felveszem az előző év és hónap értékét, hogy tudjak szűrni erre a paraméterre:

ido=`date --date="1 month ago" +%Y-%m`

Majd elmentem egy segéd fájlba az archiválandó fájlok nevét, amit így később egyszerűen ki tudok nyerni:

ls -l ../arcvivalandofajlokkonyvtara | grep -v ^d | grep $ido | awk '{print $8}' > archive_$old_honap/backup.txt

Leellenőrzöm, hogy létezik-e már a könyvtár, amit szeretnék létrehozni. (Itt lehet módosítani aszerint, hogyan kezelje a szkript ha már létezik a könyvtár.)

if [ -e /archivalando/fajlok/eleresi/utja/archive_$old_honap ]; then
echo "Az archive_$old_honap konyvtar letezik"
else
mkdir archive_$old_honap
echo "Az archive_$old_honap konyvtarat letrehoztam"
fi

Majd létrehozunk egy könyvtárat az archív fájljaink számára:

if [ -e /archiv/fajlok/eleresi/utja/backup ]; then
echo "A backup konyvtar letezik"
else
mkdir /archiv/fajlok/eleresi/utja/backup
echo "A backup konyvtarat letrehoztam"
fi

Ezután átmozgathatjuk az elmentendő fájlokat a könyvtárba:

cat archive_$old_honap/backup.txt | while read sor; do
mv $sor archive_$old_honap
done

Ezután törölhetjük a segéd fájlt, mivel ezt nem szeretnénk elmenteni:

rm archive_$old_honap/backup.txt

Beállítjuk, hogy melyik könyvtár legyen tömörítve és milyen fájlként mentse el, illetve hova a program. Ezt változókban tároljuk:

OUTPUT=./backup/archive_$(date +%Y)-$old_honap.tgz
 
BUDIR="./archive_$old_honap"

Majd elvégezzük az archiválást:

tar -czf $OUTPUT $BUDIR

Utolsó előtti műveletként törölhetjük a létrehozott könyvtárat tartalmával együtt:

rm -R ./archive_$old_honap

Végül üzenetet küldhetünk magunknak a program sikerességéről, vagy esetleges hibájáról:

if [ $? == 0 ]; then
#Display confirmation message
echo "A $OUTPUT fajl letrejott a $BUDIR konyvtarbol."
else
#Display error message message
echo "Hiba tortent a $OUTPUT fajl $BUDIR konyvtarbol valo letrehozasa kozben."
fi

Mielőtt használnák a szkriptünket ne felejtsünk el futtatási jogot adni rá:

chmod +x archive_szkript.sh

Készen is volnánk. Remélhetőleg érthető a magyarázat, használjátok egészséggel.

Íme a program egyben:

#!/bin/bash
 
#######################################################
 
##               Simple archive script...
 
##   Create by blaselinux: (blaselinux@gmail.com)
 
##            Licence GNU GPL v3 or later.
 
##        http://www.gnu.org/licenses/gpl.html
 
##               http://gnu.hu/gplv3.html
 
#######################################################
 
 
 
# Change the directory to the archive files
 
cd /home/blaselinux/Sablonok/archive_teszt
 
# Set the old_month
 
old_honap=`date --date="1 month ago" +%m`
 
# Checking the files
 
ido=`date --date="1 month ago" +%Y-%m`
 
ls -l ../archive_teszt | grep -v ^d | grep $ido | awk '{print $8}' > archive_$old_honap/backup.txt
 
# Checking the directory
 
if [ -e /home/blaselinux/Sablonok/archive_teszt/archive_$old_honap ]; then
echo "Az archive_$old_honap konyvtar letezik"
else
mkdir archive_$old_honap
echo "Az archive_$old_honap konyvtarat letrehoztam"
fi
 
# Make a backup directory if it doesn't exist
 
if [ -e /archiv/fajlok/eleresi/utja/backup ]; then
echo "A backup konyvtar letezik"
else
mkdir /archiv/fajlok/eleresi/utja/backup
echo "A backup konyvtarat letrehoztam"
fi
 
# Moving the files
 
cat archive_$old_honap/backup.txt | while read sor; do
mv $sor archive_$old_honap
done
 
# Delete the aide file
 
rm archive_$old_honap/backup.txt
 
OUTPUT=./backup/archive_$(date +%Y)-$old_honap.tgz
 
BUDIR="./archive_$old_honap"
 
echo "Az archivalas elkezdese a $BUDIR konyvtarbol a $OUTPUT fajlba"
 
tar -czf $OUTPUT $BUDIR
 
rm -R ./archive_$old_honap
 
if [ $? == 0 ]; then
#Display confirmation message
echo "A $OUTPUT fajl letrejott a $BUDIR konyvtarbol."
else
#Display error message message
echo "Hiba tortent a $OUTPUT fajl $BUDIR konyvtarbol valo letrehozasa kozben."
fi

Letölthető innen:
Az Ubuntu világa (743)

Az XChat telepítése és használata

Az első probléma Windows-ról Linuxra váltás után, hogy megtaláljuk a számunkra megfelelő alkalmazásokat is az új rendszeren. Az IRC-n (Internet Relay Chat) való csevegésre Windows operációs rendszereken általában a mIRC nevű program használatos, Linuxokon azonban van ennél sokkal kezelhetőbb kliens is, ennek neve XChat. Ebben a leírásban ismertetem a telepítését, illetve az alapvető tudnivalókat a használatához.

A legtöbb Linux disztribúció (főként a Gnome ablakkezelőt használók), már alapból tartalmazzák ezt a programot, azonban nem kell kétségbe esnünk, ha nem találnánk. A telepítése rendszerint egyszerűen megoldható, ugyanis a tárolók tartalmazzák ezt a csomagot. Ha mégsem tudnánk telepíteni a tárolóból akkor látogassunk el a http://xchat.org/download/ oldalra és töltsük le a megfelelő állományt. Ubuntu esetén (illetve más Debian alapú rendszeren is) elég a következő parancsot begépelnünk és már használhatjuk is az alkalmazást:

sudo apt-get install xchat

Miután telepítettük a programot keressük meg az Alkalmazások között és indítsuk el. A következő képernyő fog fogadni minket:

XChat

Itt ki kell választani a megfelelő szervert. Keressük meg a FreeNode szervert és kattintsunk a Kapcsolódás (Connect) gombra. Hamarosan csatlakoztunk is a szerverhez, de még nem tudunk csevegni. Az ubuntu magyarországi csatornáját a #ubuntu-hu címen tudjuk elérni, hogy csatlakozzunk hozzá írjuk be:

/join #ubuntu-hu

Máris beléptünk a csatornára és már cseveghetünk is a jelenlévőkkel.

Az XChat a beállításokat mindig eltárolja a home könyvtárunkban található .xchat2/xchat.conf állományba. Belépéshez írd be következő a parancsot a terminálba:

cd /home/`whoami`/.xchat2

Majd listázzuk ki a tartalmát:

ls

Már látható is az xchat.conf fájl. Ezt azonban semmi szükség szerkeszteni, ugyanis a grafikus felület alatt minden beállítást elvégezhetünk kényelmesen.

Hasznos tudnivalók

Magyar disztribúciófüggő/független linuxos irc-csatornák, ahol segítséget kaphatsz (zárójelben a szerver neve):

IRC dokumentációk (FAQ, parancsok, tudnivalók):

http://irc.lap.hu
http://irc.hu

Linux alap parancsok

Ebben a részben igyekszem egy-két parancsot megmutatni, amely minden Linux disztribúció alatt ugyanúgy viselkedik. Igyekszem ezeket a parancsokat úgy bemutatni, mint ahogy azt még régen DOS alatt tanultuk.

Indítsuk el a Terminál nevű alkalmazást. Ekkor kapunk egy a DOS-hoz hasonló képernyőt, ahol a felhasználó nevünk és egy ~: -jel után egy prompt fog villogni. (Ne ijedjünk meg, mivel a prompt disztribúcióként eltérő lehet, azonban ez számunkra nem lényeges.)

Alap parancsok

Igyekszem leírni egy két később hasznosnak bizonyuló parancsot. Ezekkel jobb ha tisztában vagyunk:

felhasznalo~: date

Kiírja számunkra a dátumot és az időt.

felhasznalo~: who

Kiírja az adott pillanatban bejelentkezett felhasználókat.

felhasznalo~: w

A who-hoz hasonló, de más adatokat ad.

felhasznalo~: whoami

Megtudhatjuk kik is vagyunk mi a gépünk számára.

felhasznalo~: tty

Azonosítja a munkaállomásunkat.

felhasznalo~: echo

Az utánaírt szöveget adja vissza (visszhang).

felhasznalo~: finger

Egy felhasználót azonosít és néhány dolgot megállapít róluk.

felhasznalo~: last

Ki jelentkezett be utoljára és még mindig bent van-e?

Állománykezelés

ls

Állományinkat listázza ki (LiSt).

cat

Állományainkat tudjuk összefűzni vele (conCATenate)

sort

Egy állományt (vagy kimenetet) tudunk vele rendezni.

uniq

Rendezés után az egyedi sorokkal tér vissza.

wc

Szavak megszámlálása (Word Count). Sorokat, szavakat és karaktereket tudunk vele számolni.

cp

Fájlokat másolhatunk ezzel a paranccsal (CoPy).

mv

Fájlokat tudunk vele mozgatni (MoVe), illetve átnevezni.

rm

Egy állományt tudunk vele eltávolítani (ReMove) vagy törölni.

more

Lehetővé teszi számunkra nagy szöveges állományok könnyű lapozását.

less

Olyan mint a more parancs, de komolyabb hozzáállással.

Könyvtár létrehozása, törlése

A könyvtárakban való lépkedést a cd paranccsal tudjuk elérni. Például.:
Nyissuk meg a Terminálunkat és írjuk be a következő parancsokat:

felhasznalo~: mkdir letoltes

Létrehozzuk a letoltes nevű könyvtárat.

felhasznalo~: cd letoltes

Belépünk a letoltes nevű könyvtárba.

felhasznalo~/letoltes: cd ..

Kilépünk az aktuális könyvtárból.

felhasznalo~: rmdir letoltes

Töröljük a letoltes nevű könyvtárat.

Még egy fontos parancs a listázás:

felhasznalo~: ls

Kilistázzuk az aktuális könyvtár tartalmát.

felhasznalo~: ls -l

Részletesen kilistázzuk az aktuális könyvtár tartalmát.

Mivel lusták vagyunk ezért van sok segítség, hogy ne kelljen annyit gépelnünk. Ha egy parancsot szeretnénk beírni, akkor a parancs elejét írjuk be, majd nyomjunk Tab billentyűt. Ha nincs más lehetőség a Terminál kiegészíti a hiányzó résszel parancsunkat. Ha viszont több lehetőség van amit beírhatnánk, ebben az esetben kiírja a lehetséges parancsokat.

A Linuxról általában

Mi is az a Linux?

A Linux egy operációs rendszer, ami szabad szoftvernek számít, vagyis nyílt forrás kódú (open source). Bárki letöltheti az egyes disztribúciókat és használhatja azokat. Azonban nem mindegyik Linux disztribúció ingyenes. De az internetről letölthetők azok. Akiket érdekelnek ezek a letöltések, azok a linkek menüben böngészve megtalálhatják a számukra megfelelőt.

A Linux NEM Windows. Mielőtt bárki is ebbe a tévhitbe ringatná magát, hogy erről pontosabb képet kapj olvasd el az alábbi link alatt található cikket: A Linux nem Windows

Milyen disztribúciók vannak?

A disztribúciók száma végtelen hosszú. Napról napra újabb és újabb Linux disztribúciók kerülnek napvilágra. Sőt, akár mi magunk is készíthetünk.
A linkekre kattintva, mindenki válogathat egy-két Linux disztribúció között. Fontos, hogy senki ne keseredjen el, ha esetleg a legelső találkozása, nem volt a legsikeresebb. Próbálkozni kell és tanulni. Persze könyebb a Windows nyújtotta kényelmet választani, de hiszem, hogy a Linux megéri azt a kis fáradozást, ami használatának elsajátításához kell.
Remélhetőleg senki nem rémült meg. De ezeket is tudni kell ahhoz, hogy mindenki tudjon választani. Először mindenképpen valami egyszerű Linux telepítését ajánlom, ami nem okoz sok bonyodalmat (pl.: UHU Linux, Ubuntu, esetleg SuSe Linux).

Ha nem tudjuk, milyen disztribúciót válasszunk, akkor látogassuk meg a http://distrowatch.com, vagy a http://www.zegeniestudios.net/ldc/ weboldalt. Az utóbbi címen pár kérdés keretében kapunk pár javaslatot, hogy melyik Linux disztribúciót használjuk.

Live CD?

Mielőtt hozzá fognánk a telepítéshez, ajánlom hogy ismerkedés képpen egy Live CD-t szerezzünk be.
A Live CD egy cd-ről futtatható operációs rendszer. Nem települ fel a háttértárra, így semmiféle gondot nem okozhat. Ezzel könnyen és egyszerűen ismerkedhetünk meg a Linux világgal.
Azonban senki ne ijedjen meg, hogy nem talál programokat rajta, ugyanis mivel egy CD-n bújik meg az egész operációs rendszer, ne is akarjuk elvárni tőle, hogy mindent tartalmazzon. Cserébe kapunk egy kis rálátást, mit is szeretnénk feltelepíteni számítógépünkre.
Minden disztribúciót nem lehet beszerezni Live CD formában, de a legtöbbjüket igen. Szerintem megéri a keresgélést.

Hogyan fogjak a telepítéshez?

Legelőször be kell szereznünk egy Linux telepítő CD-t (, vagy Live CD-t). Ezt úgy tehetjük meg, hogy vagy letöltjük valamilyen tükör szerverről, vagy elkérjük egyik Linuxot használó ismerősünk CD-jét.

Ha ezzel megvagyunk, helyezzük be a CD-t és indítsuk újra számítógépünket. (Figyelem! A BIOS-ban be kell állítani, hogy CD-ről bootoljon a rendszer különben várhatunk a telepítő bejelentkező képernyőjére.)
Érdemes előre létrehozni a partíciókat, de ha nem tettük meg az sem probléma, ugyanis a Linux telepítő szintén felajánlja számunkra a partícionálás lehetőségét. Nyugodtan éljünk vele!
A particionálás során figyeljünk arra, hogy a Linuxnak szüksége van swap partícióra, ennek méretét állítsuk 500 MB-ra (ekkora méret elegendő kell, hogy legyen bármelyik Linux számára). Nagyobbra állíthatjuk, kisebbre ne!
Az operációs rendszer a legtöbb esetben 2 GB hely szükséges, de a legjobb, ha tájékozódunk telepítés előtt a disztribúciónk által megkívánt hely méretéről.

A telepítés a Linux esetében hasonlóan működik, mint a Windows-nál. Egyszerűen csak kövessük a kiírt lépéseket. Kis idő múlva egy működő Linux áll rendelkezésünkre gépünkön.

Mit érdemes tenni legelőször?

Miután újra indítottuk a gépünk és beléptünk az újonnan feltelepített operációs rendszerünkre érdemes megtennünk egy-két beállítást, mellyel könnyebbé tehetjük kedvenc Linuxunk használatát!
Legelőször futtassuk a frissítőt a gépünkön, hogy letöltse a legfrissebb programokat és hibajavításokat. A frissítő rendszerint jelzi is nekünk ezt a lehetőséget. (Természetesen ezt internetes kapcsolattal tudjuk csak igénybe venni.)

A további lépések már disztribúció specifikusak. Ezeket igyekszem kifejteni a különböző disztribúciók menüpontja alatt.

Alap shell parancsok

parancs jelentés
passwd A felhasználó jelszavának megváltoztatása
pwd A jelenlegi munkakönyvtár kiíratása.
cd Könyvtár váltás
ls A könytár tartalmának listázása
wildcards * – összes karakter helyettesítése; ? – egy karakter helyettesítése
file A fájl típusának kiíratása
cat A fájl tartalmának kiíratása
pr A fájl tartalmának kiíratása
pg vagy page A fájl tartalmának egyszerre csak egy oldallal való kiíratása
more A fájl tartalmának egyszerre csak egy oldallal való kiíratása
clear A képernyő tisztítása
cp vagy copy Fájl másolása
chown Fájl tulajdonos váltás
chgrp Fájl tulajdonos csoport váltása
chmod Fájl jogosultságának váltása
rm Fájl törlése
mv Fájl átnevezése, áthelyezése
mkdir Könyvtár készítése
rmdir Könyvtár törlése
grep Szűrés
egrep Szűrés kiterjesztett általános kifejezésekkel
find Fájl és könyvtárak helyének keresése
date Rendszerdátum és -idő kijelzése
echo Karakterlánc kiiratása az alap kimenetre
sleep Folyamat megállítása előre meghatározott időre (másodpercben)
wc Egy fájlban lévő szavak, sorok, karakterek megszámlálása
head A fájl elejének figyelése
tail A fájl végének figyelése
cal A naptár megjelenítése
who A rendszert használó felhasználókról jelenít meg információt
w Kiterjesztett who parancs
whoami Megjeleníti a $LOGNAME vagy $USER környezeti változók tartalmát
f, finger Információkat jelenít meg a bejelentkezett felhasználóról
talk Két felhasználó közötti osztott képernyős csevegő kliens
write Üzenet jelenik meg a felhasználó képernyőjén
wall Üzenet jelenik meg az összes bejelentkezett felhasználó képernyőjén
df Fájl rendszer statisztika
ps Információ a jelenleg futó folyamatokról
netstat A Network státuszának megjelenítése
uname A jelenlegi operációs rendszer neve és egyéb gép információk
man Parancsok leírásának gyűjteménye
su Felhasználó váltás
vi A vi szövegszerkesztő elindítása
emacs Az emacs szövegszerkesztő elindítása

A parancsok kipróbálása előtt ajánlom mindenki olvassa el a parancs man oldalát, hogy pontos képet kapjon annak használatáról.
Pl.:

man man

A man-ból a legegyszerűbben a Q billentyű lenyomásával tudunk kilépni.