Játék az iptables-szel

Szerző: sh4d0w | Dátum: 2009-10-02 08:35 | Rovat: Számtech | Típus: Tudástár

Imádom túrni a Linuxomat, itt egy újabb példa.

[ Ú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!

az első 6 hozzászólás a cikkhez

(#1) DarkByte

Új Válasz Privát 2009-10-02 08:40:58

DarkByte
(PH! addikt)
(LOGOUT blog)

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. :B 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

(#2) frescho

Új Válasz Privát 2009-10-02 09:08:25

frescho
(senior tag)
(LOGOUT blog)

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.

(#3) sh4d0w válasza frescho (#2) üzenetére

Új Válasz Privát 2009-10-02 11:10:04

sh4d0w
(PH! kedvence)
(LOGOUT blog)

Nem, erre a részre még "nem feküdtem rá"... :)

http://takedown.blogolj.net - Takedown The Core

(#4) 5h4rK

Új Válasz Privát 2009-10-02 11:48:09

5h4rK
(fanatikus tag)
(LOGOUT blog)

Koszonjuk! :R

http://www.hermesit.ro

(#5) Tolkarius

Új Válasz Privát 2009-10-02 12:06:16

Tolkarius
(kvázi-tag)

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

(#6) Vladi

Új Válasz Privát 2009-10-02 16:10:42

Vladi
(PH! kedvence)
(LOGOUT blog)

Jó kis cikk! Ezzel így gyorsan lehet váltogatni a szabály profilok között. Előveszem majd. :K