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.
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:
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):
- #debian.hu (FreeNode; IRCNnet)
- #gentoo.hu (IRCNnet)
- #linux.hu (IRCNnet)
- #linuxforum.hu (FreeNode)
- #slackware.hu (IRCNnet)
- #ubuntu-hu (FreeNode)
- #uhulinux (IRCNnet)
IRC dokumentációk (FAQ, parancsok, tudnivalók):
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~: dateKiírja számunkra a dátumot és az időt.
felhasznalo~: whoKiírja az adott pillanatban bejelentkezett felhasználókat.
felhasznalo~: wA who-hoz hasonló, de más adatokat ad.
felhasznalo~: whoamiMegtudhatjuk kik is vagyunk mi a gépünk számára.
felhasznalo~: ttyAzonosítja a munkaállomásunkat.
felhasznalo~: echoAz utánaírt szöveget adja vissza (visszhang).
felhasznalo~: fingerEgy felhasználót azonosít és néhány dolgot megállapít róluk.
felhasznalo~: lastKi 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)
sortEgy állományt (vagy kimenetet) tudunk vele rendezni.
uniqRendezés után az egyedi sorokkal tér vissza.
wcSzavak megszámlálása (Word Count). Sorokat, szavakat és karaktereket tudunk vele számolni.
cpFájlokat másolhatunk ezzel a paranccsal (CoPy).
mvFájlokat tudunk vele mozgatni (MoVe), illetve átnevezni.
rmEgy állományt tudunk vele eltávolítani (ReMove) vagy törölni.
moreLehetővé teszi számunkra nagy szöveges állományok könnyű lapozását.
lessOlyan 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 letoltesLétrehozzuk a letoltes nevű könyvtárat.
felhasznalo~: cd letoltesBelépünk a letoltes nevű könyvtárba.
felhasznalo~/letoltes: cd ..Kilépünk az aktuális könyvtárból.
felhasznalo~: rmdir letoltesTöröljük a letoltes nevű könyvtárat.
Még egy fontos parancs a listázás:
felhasznalo~: lsKilistázzuk az aktuális könyvtár tartalmát.
felhasznalo~: ls -lRé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.







