Szerző: sh4d0w | Dátum: 2009-10-02 08:35 | Rovat: Számtech | Típus: Tudástár
[ Új cikk ]
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!
Hasznos írás. A mobilnetes gépemen kellene egyszer rendesen belőni a tűzfalat, mert mikor még csináltam nem volt kedvem tökölni vele és keresztbe engedtem mindent és csak a MASQUERADE -t állítottam be.
Igaz, mivel nem publikus IP-jű net így nem is igazán fontos, de jobb a békesség.
[ Szerkesztve ]
"-Say what? -Say what? -Fakk off!" http://goo.gl/Qr6fn
Nem rossz.
Azon nem gondolkoztal, hogy a tuzfal beallitasait egy configbol olvassa fel? Melle lehetne egy save opcio is, amivel iptables-save -t hivnad meg es automatikusan generalna a configot.
Nem, erre a részre még "nem feküdtem rá"... 
http://takedown.blogolj.net - Takedown The Core
Koszonjuk! 
http://www.hermesit.ro

Áh ez nagyon jó köszi! Hasznos kis dolog ez, át is nézegetem kicsit alaposabban.