3.4. Az IP-továbbítási házirend beállítása

Ennél a pontnál a rendszermag és a többi szükséges csomag már telepítve van. Minden hálózati IP-címet, átjárót és DNS-címet be kell állítani a MASQ-gépen. Ha nem tudod, hogyan kell a hálózati kártyákat beállítani, lásd az ide vonatkozó HOGYANokat akár a 2.4.x-hez: 2.6 , a 2.2.x-höz: 2.7 , vagy a 2.0.x-hez: 2.8 .

Most már csak az maradt hátra, hogy beállítsd az IP-tűzfal és maszkolás eszközeit ahhoz, hogy továbbítsák és maszkolzák a megfelelő csomagot a megfelelő gép felé.

** Ez a rész csak a LEHETŐ LEGKEVESEBB tűzfalszabályt tartalmazza ahhoz, hogy az IP-maszkolás működőképes legyen.

Miután az IPMASQ átment a tesztelésen (amint azt később leírd majd), nézd meg a 6.4.1 fejezetet a 2.4.x-es rendszermagok erősebb tűzfal-beállításaihoz, a biztonságosabb IPCHAINS szabályokat a 2.2.x rendszermagokhoz itt: 6.4.2 , és az erősebb IPFWADM szabályokat a 2.0.x rendszermagokhoz itt: 6.4.3 . Jegyezd meg, hogy ezek az erősebb szabályrendszerek csak sablonok, nem mások. Az igazán biztonságos tűzfalak kiépítéséhez nézd meg a következő fejezeteket: ( 2.4.x - 2.6 , 2.2.x - 2.7 , 2.0.x - 2.8 .

Ahelyett, hogy kézzel írnád be ezeket, ajánlom az Example könyvtár tallózását vagy ezen rc.firewall fájlok letöltését.

3.4.1. Az IP-maszkolás beállítása a Linux 2.4.x és 2.6.x rendszermagoknál

Jegyezd meg, hogy az IPCHAINS immár nem az elsődleges tűzfalbeállító eszköz a 2.4.x és 2.6.x rendszermagokhoz. Az új rendszermagok már az IPTABLES eszközeit használják, bár a 2.4.x még képes egy kompatibilitási modulon keresztül a régi IPCHAINS és IPFWADM szabályok felismerésére. Ebben az üzemmódban azonban NEM TUDJA az IPTABLES modulokat betölteni. Szintén megjegyzendő, hogy egyetlen 2.2.x IPMASQ modul sem kompatibilis a 2.4.x-szel. Ennek az okairól lásd a 7 fejezetet.

OK, ahogy feljebb is említetted, a /etc/rc.d/rc.local parancsfájl betölti a /etc/rc.d/rc.firewall nevű szkriptet minden újraindítás után. Ez a parancsfájl gondoskodik a szükséges IPMASQ-modulok betöltéséről, és magának a szolgáltatásnak a bekapcsolásáról. A fejlettebb telepítéseknél ugyanez a fájl biztonságos tűzfalbeállításokat is tartalmazhat.

Készítsd tehát el az /etc/rc.d/rc.firewall-iptables fájlt a következő ALAPSZINTŰ szabályrendszerrel:

<rc.firewall-iptables START>
#!/bin/sh
#
# rc.firewall-iptables
FWVER=0.76
#
#               Alapszintű IP-maszkolás teszt a 2.4.x és 2.6.x rendszermagokhoz az
#               IPTABLES felhasználásával.
#
#               Miután az maszkolást tesztelted, ezt az egyszerű szabály-
#               rendszert ajánlatos lecserélni egy biztonságosabbra
#               akár ennek a leírásnak a példájából, akár más beszerezhető
#               forrásból.
#
#
#

echo -e "\n\nLoading simple rc.firewall version $FWVER..\n"


# Az 'iptables' program helye.
# Ha a disztribució tartalmazza az iptablest, nagy valószínűséggel 
# ez az /sbin könyvtár. Ha magad fordítottad, akkor az /usr/local/sbin.
# Használd a 'whereis iptables' parancsot, ha nem tudod.
#IPTABLES=/sbin/iptables 
IPTABLES=/usr/local/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe


# A belső és külső hálózati eszközök beállítása 
#
# Minden IP-maszkolást használó hálózatnak legalább egy külső és egy
# belső hálózattal kell rendelkeznie. A külső hálózatban zajlik a NAT,
# a belsőben pedig az RFC1918 szerinti privát címkiosztás van.
#
# Ebben a páldában az "eth0" a külső és az "eth1" a belső. 
#
# Megj.: ha ez nem felel meg a beállításaidnak, akkor változtasd meg
# az EXTIF (külső) és az INTIF (belső) eszközre vonatkozó beállítást.
# Például, ha modemet használsz:
#
#               EXTIF="ppp0" 
#
EXTIF="eth0"
INTIF="eth1"
echo "   Külső interface:  $EXTIF"
echo "   Belső interface:  $INTIF"


#======================================================================
# = Innentől nem szükséges bármit is változtatni a MASQ teszteléséhez =

echo -en "   loading modules: "

# Meg kell nézni, hogy minden modulnak megvan-e a megfelelő függősége.
#
echo "  - A rendszermag-modulok ellenőrzése..."
$DEPMOD -a
#
# Az új IPTABLES-kóddal az alapvető MASQ-funkciók vagy modulárisak, vagy
# már benne vannak a rendszermagban. Ez a HOGYAN MINDEN iptables funkciót 
# modulként mutat be. Ha a rendszermag jól lett fordítva, nincs szükség a
# modulok kézzel való betöltésére.
#
# Megj.: a következő sorok csak informális jelleggel bírnak. Nincs ok arra,
# 	 hogy kézzel töltsd be őket, hacsak a rendszermag nincs elrontva, vagy
# 	 nincs szándékosan letiltva a modul-betöltője.
# Az IP MASQ elindításakor a kiszolgálón a következő modulok automatikusan
# betöltődnek:
#
# Megj.: csak a szükséges modulokat töltsd be. Minden jelenlegi MASQ-modult
# felsorolunk alább, de megjegyzésbe tetted a betöltődés megakadályozására.
# ===============================================================

# A fő IPTABLES-modul betöltése - amikor az "iptables" parancsot kiadod,
# automatikusan betöltődik.
# 
echo -en "ip_tables, "
$MODPROBE ip_tables

# A szűrőmodul betöltése - akkor töltődik be, amikor a szűrési szabályokat 
# aktiválod.
#


# Betölti az állapotkövetési rendszert.
#
# A modul önmagában semmit sem csinál, csak a később betöltendő speciális
# modulokkal - például "ip_conntrack_ftp" - dolgozik együtt.
#
#	- Automatikusan betöltődik, amikor a MASQ kód elindul
#
#	- Töltsd be kézzel, elkerülendő a rendszermag-időzítési problémáit
#
echo -en "ip_conntrack, "
$MODPROBE ip_conntrack


# FTP-állapotellenőrzés betöltése
# Alapból engedélyezett, ha nincs rá szükség, rakj a következő sorok elé # jelet.
# 
echo -en "ip_conntrack_ftp, "
$MODPROBE ip_conntrack_ftp


# IRC-állapotellenőrzes betöltése
# Alapból engedélyezett, ha nincs rá szükség, rakj a következő sorok elé # jelet.
# 
echo -en "ip_conntrack_irc, "
$MODPROBE ip_conntrack_irc

# Betölti az általános NAT-kódot.
#
echo -en "iptable_nat, "
$MODPROBE iptable_nat

# Betölti az FTP NAT-szolgáltatást az alap IPTABLES kódba.
# Szükséges az aktív (non-PASV) FTP-hez.
# Alapból engedélyezett, ha nincs rá szükség, rakj a következő sorok elé # jelet.
#
echo -en "ip_nat_ftp, "
$MODPROBE ip_nat_ftp

# Betölti az IRC NAT-szolgáltatást az alap IPTABLES kódba
# Az IRC DCC-kérelmek lekezeléséhez szükséges
echo -en "ip_nat_irc"
$MODPROBE ip_nat_irc

# Csak a teljesség kedvéért, itt a fennmaradó modulok és funkcióik listája.
# Bizonyosak közülük csak akkor töltődnek be, ha a megfelelő "master"-modul
# mar betöltődött.
# --------------------------------------------------------------------
#    ip_nat_snmp_basic - a modul lehetővé teszi bizonyos SNMP forgalom NAT-olását
#
#    iptable_mangle    - Ezzel a csomagokat olyan dolgokhoz tudod módosítani, 
#    		       mint a TCPMSS stb.
# --
#
#    ipt_mark       - Ez a modul további feldolgozásra jelöl meg egy csomagot.
#                     Automatikusan betölti az ipt_MARK modult.
#
#    ipt_tcpmss     - Ez a modul engedélyezi a távoli "agyhalott" tűzfalak TCP 
#                     MSS-beállításának manipulálását.
#                     Automatikusan betölti a ipt_TCPMSS modult.
#
#    ipt_limit      - Ezzel a modullal limitálhatjuk a csomagokat
#                     csomag per mp/perc/óra formátumban.
#
#    ipt_multiport  - Ez a modul bizonyos port-tartományok figyelését teszi
#                     lehetővé az egyenkénti port figyelés helyett.
#
#    ipt_state      - Ezzel a modullal elkaphatsz bizonyos csomagokat
#                     a különböző IP- és TCP-jelzők állása szerint.
#
#    ipt_unclean    - Ezzel a nem megfelelően beállított jelzővel rendelkező
#                     csomagokat kaphatjuk el.
#
#    iptable_filter - Ezzel lehetővé válik a csomagok eldobása (DROP), 
#                     visszautasítása (REJECT), vagy naplózása (LOG).  
#		      Automatikusan betölti a következőket:
#
#                     ipt_LOG - ezzel tudod csomagokat naplózni.
#
#                     ipt_REJECT - ez a cél eldobja a csomagot, és egy beállítható
#		      		 ICMP-csomagot küld vissza a feladónak.
#
# 


echo ".  A modulok betöltése kész."
 

# KRITIKUS : engedélyezi az IP-továbbítást, amely alapesetben tiltott.
#
#           Redhat-felhasználók:  változtasd meg a beállításokat a
#                          /etc/sysconfig/network fájlban:
#
#                       FORWARD_IPV4=false
#                             helyett
#                       FORWARD_IPV4=true
#			       legyen.
#
echo "   IP-továbbítás engedélyezése..."
echo "1" > /proc/sys/net/ipv4/ip_forward


# Dinamikus IP cím használata esetén:
#
# Ha az IP-címet dinamikusan (SLIP, PPP vagy DHCP segítségével) kapod,
# engedélyezd a következő beállítást. Bekapcsolja a dinamikus cím-manipulálást,
# amivel a Diald és hasonló programok használata egyszerűbb lesz.
#
echo "   a DynamicAddr engedélyezése..."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# Bekapcsolja az egyszerű IP-továbbítást és IP-maszkolást.
# Megj.: az IPTABLES nyelvén az IP-maszkolás a forrás-NAT vagy S-NAT egy formája.
#
# Megj. #2: a következő egy olyan belső LAN-ra példa, amely a 192.168.0.x címmel,
# 	    a 255.255.255.0 alhálózati maszkkal vagy "24 bites" alhálózati maszkkal
# 	    rendelkezik, és a külső "eth0" eszközön át kapcsolódik az internetre.
#	    Ez a példa engedi a kifele menő forgalmat, de a belső hálózat felé
#	    irányulót már nem.
#
#	** Változtasd meg a fenti adatokat a saját beállításaidnak megfelelően.            

# Minden régebbi beállítás törlése
#
# Amíg máshogy nem állítjuk, az alapértelmezés az INPUT és OUTPUT lánc számára
# az ACCEPT, a FORWARD-nak a DROP ( a REJECT nem megfelelő alapszabály).
#
# Az ACCEPT nem biztonsági rés? Nos, bizonyos szempontból igen, de ez a tesztfázis.
# Ha az IPMASQ jól fog működni, azt javaslom futtasd le a rc.firewall-*-stronger
# szabályt, amelynek alapértelmezett állapota DROP, bár ebben is vannak kritikus
# szabályok, amelyek a IPMASQ szerverhez történő csatlakozáshoz szükségesek.

echo "   a meglévő szabályok törlése, és az alapértelmezett házirend beállítása..."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT 
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT 
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD 
$IPTABLES -t nat -F

echo "   FWD: Allow all connections OUT and only existing and related ones IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG

echo "   Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

echo -e "\nrc.firewall-iptables v$FWVER done.\n"
<rc.firewall-iptables STOP>

Amint végeztél a szerkesztéssel, tedd végrehajthatóvá a fájlt a chmod 700 /etc/rc.d/rc.firewall-iptables paranccsal.

Most, hogy a tűzfalszabályok készen vannak, futtatni kell őket minden újraindításkor. Ezt vagy kézzel minden alkalommal megteszed (ez nagyon durva lenne), vagy hozzáadd a rendszerindító parancsfájlokhoz. Két módszert mutatunk be:

1. Redhat és Redhat-közeli disztribúcióknál:

2. Slackware:

Megjegyzések arról, hogyan akarják a felhasználók megváltoztatni a fenti szabályrendszert:

Egy gépre vonatkozóan is meg tudod adni az maszkolást a fenti módszertől eltérően, ahol az az egész alhálózatra vonatkozik. Ha például csak 192.168.0.2 és a 192.168.0.8 gépeknek akarsz internet hozzáférést biztosítani, és egyetlen másiknak sem:

#!/bin/sh
#
# Kiragadott IPTABLES beállítás egyedi IP-maszkoláshoz és továbbításhoz
# v0.61
#
# Megj.: a következő példában IP-maszkolást csakis a 192.168.0.2 és 192.168.0.8
# gépeknek (255.255.255.0-as vagy "24 bites" alhálózati maszk, eth0 eszközzel 
# való internet-csatlakozással) biztosítjuk.
#
echo "  - Az alapértelmezett FORWARD szabály DROP lesz."
$IPTABLES -P FORWARD DROP

echo "  - A SNAT (IPMASQ) funkció engedélyezése $EXTIF eszközön."
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -s 192.168.0.2/32 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -s 192.168.0.8/32 -j MASQUERADE

echo "  - A FORWARD szabály beállítása 'DROP'-ra minden bejövő / unrelated forgalomra."
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP

Gyakori hibák:

A kezdő IPMASQ-felhasználók általános hibája az, hogy az első parancsot csak a következő egyszerű formában használják:

IPTABLES:
---------
iptables -t nat -A POSTROUTING -j MASQUERADE

SOHA NE állítsd be az alapértelmezett szabályt (policy) MASQUERADING-re. Különben valaki módosítani tudja az útválasztási táblázatát úgy, hogy keresztül menjen az átjárónkon, és felhasználja azt a saját maga maszkolására!

Ezeket a sorokat is add hozzá a /etc/rc.d/rc.firewall fájlhoz, valamelyik másik rc fájlhoz vagy töltsd be kézzel, amikor szükséged van az maszkolásra.

Lásd a 6.4.1 fejezetet részletesebb infókért erősebb IPTABLES-szabályok felállítására. További részletekért az IPTABLES használatát illetően lásd a http://www.netfilter.org/ címet.

3.4.2. Az IP-maszkolás beállítása a Linux 2.2.x rendszermagnál

Jegyezd meg, hogy az IPFWADM már nem az alapértelmezett tűzfalbeállító eszköz az IP-maszkolás szabályaihoz a 2.1.x és 2.2.x rendszermagoknál. Ezek az új rendszermagok az IPCHAINS eszközkészletet használják. Ennek a váltásnak az okairól bővebb információt itt találsz: 7 fejezet.

Készítsd el az /etc/rc.d/rc.firewall-ipchains fájlt a következő alapszintű szabályrendszerrel:

<rc.firewall-ipchains START>
#!/bin/sh
#
# rc.firewall-ipchains
FWVER="1.23"
#
#               Alapszintű IP-maszkolás teszt a 2.1.x és 2.2.x rendszermagokhoz az
#               IPCHAINS felhasználásával.
#
#               Miután az maszkolást tesztelted, ezt az egyszerű szabály-
#               rendszert ajánlatos lecserélni egy biztonságosabbra
#               akár ennek a leírásnak a példájából, akár más beszerezhető
#               forrásból.
#
#
#

echo -e "\n\nEgyszerű rc.firewall betöltése. Verziószám: $FWVER...\n"

# Az ipchains és a rendszermag-modul programok helye
#
# 
# Ha a disztribució tartalmazza az ipchains-t, nagy valószínűséggel 
# ez az /sbin könyvtár. Ha magad fordítottad, akkor az /usr/local/sbin.
# Használd a 'whereis ipchains' parancsot, ha nem tudod.
# Változtasd meg ennek megfelelően a következő sorokat
#
# IPCHAINS=/sbin/ipchains
IPCHAINS=/usr/local/sbin/ipchains
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe

# A belső és külső hálózati eszközök beállítása 
#
# Minden IP-maszkolást használó hálózatnak legalább egy külső és egy
# belső hálózattal kell rendelkeznie. A külső hálózatban zajlik a NAT,
# a belsőben pedig az RFC1918 szerinti privát címkiosztás van.
#
# Ebben a példában az "eth0" a külső és az "eth1" a belső.
#
# Megj.: ha ez nem felel meg a beállításaidnak, akkor változtasd meg
# az EXTIF (külső) és az INTIF (belső) eszközre vonatkozó beállítást.
# Például, ha modemet használsz:
#
#               EXTIF="ppp0" 
#
EXTIF="eth0"
INTIF="eth1"
echo "   Külső interfész:  $EXTIF"
echo "   Belső interfész:  $INTIF"


# A belső hálózat címe
#
# Ez a példafájl a 192.168.0.0 hálózatot használja a /24 vagy 255.255.255.0
# alhálózati maszkkal.
# * Változtasd meg a saját beállításaidnak megfelelően! *
#
INTLAN="192.168.0.0/24"
echo -e "   Belső interfész:  $INTLAN\n"


# A szükséges IPMASQ-modulok betöltése
# Megj.: csak azokat a modulokat töltsd be, amelyekre szükséged van. Minden
# jelenleg használt modult felsorolunk, de kikommenteztünk a betöltődés meg-
# akadályozása miatt.
#
echo "   A szükséges IPMASQ-rendszermag-modulok betöltése..."

# A függőségek meghatározása miatt szükséges.
#
$DEPMOD -a

echo -en "   Betöltött modulok: "

# A megfelelő, PORT-módszert használó FTP-maszkoláshoz szükséges.
#
echo -en "FTP, "
$MODPROBE ip_masq_ftp

# Az UDP-n alapuló RealAudio maszkolását teszi lehetővé. E nélkül is működik, csak
# TCP-módban. Ez a hangminőség romlását eredményezi.
#
#echo -en "RealAudio, "
$MODPROBE ip_masq_raudio

# Az IRC DCC fájlátviteli módját teszi lehetővé.
#
#echo -en "Irc, "
#$MODPROBE ip_masq_irc

# A Quake és a Quakeworld játékokhoz szükséges. Többjátékos üzemmódhoz való
# a MASQ-kiszolgáló mögötti hálózatban. Ha Quake I, II vagy III verzióval szeretnéd
# játszani, a második példát használd.
# 
# Megj.: ha hibaüzeneteket kapsz a modul betöltésekor, régi, hibás rendszermagod
# lehet. Frissítsd a rendszermagot a legújabb verzióra!
#
#echo -en "Quake, "
#Quake I / QuakeWorld (26000 és 27000 portok)
#$MODPROBE ip_masq_quake
#
#Quake I/II/III / QuakeWorld (26000, 27000, 27910, 27960 portok)
#$MODPROBE ip_masq_quake 26000,27000,27910,27960


# A CuSeeme videokonferencia szoftver használatához szükséges.
#
#echo -en "CuSeeme, "
#$MODPROBE ip_masq_cuseeme

# A VDO-live videokonferencia szoftver használatához szükséges.
#
#echo -en "VdoLive "
#$MODPROBE ip_masq_vdolive

echo ".  A modulok betöltése kész."


# KRITIKUS : engedélyezi az IP-továbbítást, amely alapesetben tiltott.
#
#           Redhat-felhasználók:  változtasd meg az opciókat az
#                          /etc/sysconfig/network fájlban:
#
#                       FORWARD_IPV4=false
#                             helyett
#                       FORWARD_IPV4=true
#			       legyen.
#
echo "   IP-továbbítás engedélyezése..."
echo "1" > /proc/sys/net/ipv4/ip_forward

# KRITIKUS: engedélyezi az IP töredezettség-mentesítést, amely alapból tiltott.
# Valaha fordítaskor bekapcsolható lehetőseg volt, de a 2.2.12-től változott.
#
echo "   Az AlwaysDefrag engedélyezése..."
echo "1" > /proc/sys/net/ipv4/ip_always_defrag

# Dinamikus IP-t használók:
#
# Ha az IP-címet dinamikusan (SLIP, PPP vagy DHCP segítségével) kapod,
# engedélyezd a következő opciót. Bekapcsolja a dinamikus cím-manipulálást,
# amellyel a Diald és hasonló programok használata egyszerűbb lesz.
#
#echo "   A DynamicAddr engedélyezése..."
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr


# Engedélyezi a LooseUDP foltot, amelyet néhány internet alapú játék igényel.
# Ha valamely internet alapú játékhoz kívánsz kapcsolódni a MASQ-kiszolgálón
# keresztül, de sehogy se sikerül, próbáld meg ennek a bekapcsolását (töröld 
# a sor elejéről a # jelet). Alapból tiltott, mivel belső gépről futtatott
# UDP-kapupásztázással a kiszolgáló sebezhető.
#
#
#echo "   A LooseUDP engedélyezése..."
#echo "1" > /proc/sys/net/ipv4/ip_masq_udp_dloose

# Minden régi beállítás törlése
# Amíg máshogy nem állítod, az alapértelmezés az INPUT és OUTPUT lánc 
# számára az ACCEPT, a FORWARD-nál a REJECT.
#
#
echo "   A meglévő szabályok törlése és az alapértelmezett szabályok beállítása..."
$IPCAINS -P input ACCEPT
$IPCAINS -P output ACCEPT
$IPCAINS -P forward REJECT
$IPCAINS -F input
$IPCAINS -F output
$IPCAINS -F forward

# A MASQ időtúllépési beállításai
# 
# 2 óra a TCP-kapcsolatokhoz
# 10 mp a TCP-forgalomnál, miután "FIN" csomag érkezett
# 160 mp az UDP-forgalomnál (fontos az maszkolott ICQ-felhasználóknak)
#
echo "   Az alapértelmezett időzítők beállítása..."
$IPCAINS -M -S 7200 10 160


# DHCP: azoknak, akik a külső IP-címüket vagy DHCP-vel, vagy BOOTP-vel
#	kapják, például az ADSL vagy kabelmodem-felhasználók, ez kell még
#	a DENY parancs kiadása előtt.
# Jelenleg kikommenteztük.
#
#$IPCAINS -A input -j ACCEPT -i $EXTIF -s 0/0 67 -d 0/0 68 -p udp

# Bekapcsolja az egyszerű IP-továbbítást és IP-maszkolást.
#
# Megj.: a következő egy olyan belső LAN-ra példa, ami a 192.168.0.x címmel,
# 	    a 255.255.255.0 vagy "24 bites" alhálózati maszkkal rendelkezik 
#           és a külső "eth0" eszközön át kapcsolódik az internetre.
#	    Ez a példa engedi a kifelé menő forgalmat, de a belső hálózat felé
#	    irányulót már nem.
#
#	** Változtasd meg a fenti adatokat a sajat beállításaidnak megfelelően! **
#
#
echo "   Az IPMASQ funkció engedélyezése a $EXTIF eszközön."
$IPCHAINS -P forward DENY
$IPCHAINS -A forward -i $EXTIF -s $INTLAN -j MASQ

echo -e "\nrc.firewall-ipchains v$FWVER done.\n"
<rc.firewall-ipchains STOP>

Amint végeztél a szerkesztéssel, tedd a fájlt végrehajthatóvá a chmod 700 /etc/rc.d/rc.firewall-ipchains paranccsal.

Most hogy a tűzfalszabályok készen vannak, futtatni kell őket minden újraindításkor. Ezt vagy kézzel minden alkalommal megteszed (ez nagyon durva lenne), vagy hozzáadod a rendszerindító parancsfájlokhoz. Két módszert mutatunk be:

1. Redhat és Redhat-közeli disztribúcióknál:

2. Slackware:

Megjegyzések arról, hogyan akarják a felhasználók megváltoztatni a fenti szabályrendszert:

Egy gépre vonatkozóan is meg tudod adni az maszkolást a fenti módszertől eltérően, ahol az az egész alhálózatra vonatkozik. Ha például csak 192.168.0.2 és a 192.168.0.8 gépeknek akarsz internet hozzáférést biztosítani, és egyik másiknak sem:

 

#!/bin/sh 
#
# Engedélyezi az egyszerű IP-maszkolást és IP-továbbítást.
# v1.01
# 
# Megj.: a következő példában IP-maszkolást csakis a 192.168.0.2 és 192.168.0.8
# gépeknek (255.255.255.0-as vagy "24 bites" alhálózati maszk, eth0 eszközzel 
# való internet-csatlakozással) biztosítjuk.
#
#
$IPCAINS -P forward DENY
$IPCAINS -A forward -i $EXTIF -s 192.168.0.2/32 -j MASQ
$IPCAINS -A forward -i $EXTIF -s 192.168.0.8/32 -j MASQ

Gyakori hibák:

A kezdő IPMASQ-felhasználók általános hibája, hogy az első parancsot csak a következő egyszerű formában használják:

/sbin/ipchains -P forward masquerade

SOHA NE állítsd be az alapértelmezett szabályt (policy) MASQUERADING-re. Különben valaki módosítani tudja az útválasztási táblázatát úgy, hogy keresztül menjen az átjárónkon, és felhasználja azt a saját maga maszkolására!

Ezeket a sorokat is add hozzá a /etc/rc.d/rc.firewall fájlhoz, valamelyik másik rc fájlhoz vagy töltsd be kézzel, amikor szükséged van az maszkolásra.

Lásd a 6.4.2 fejezetet részletesebb infóért az IPCHAINS-t, illetve a biztonságosabb IPCHAINS-szabályokat illetően. Az IPCHAINS használatáról részletesebben lásd a http://www.netfilter.org/ipchains/ elsődleges IPCHAINS-webhelyet vagy a Linux IP CHAINS HOWTO másolatának webhelyét.

3.4.3. Az IP-maszkolás beállítása a Linux 2.0.x rendszermagnál

Készítsd el az /etc/rc.d/rc.firewall fájlt a következő alapszintű szabályrendszerrel:

<rc.firewall-ipfwadm START>
#!/bin/sh
#
# rc.firewall-ipfwadm
FWVER="2.03"
#
#      - Kezdeti EGYSZERŰ IPMASQ beállítás a 2.0.x rendszermagokhoz, IPFWADM használatával
#
# 	 Miután az maszkolást leteszteltük ezzel az egyszerű szabálykészlettel,
#	 nagyon ajánlatos erősebb szabályrendszer használata.
#
echo -e "\n\nLoading simple rc.firewall version $FWVER..\n"
# A belső és külső hálózati eszközök beállítása 
#
# Minden IP-maszkolást használó hálózatnak legalább egy külső és egy
# belső hálózattal kell rendelkeznie. A külső hálózatban zajlik a NAT,
# a belsőben pedig az RFC1918 szerinti privát címkiosztás van.
#
# Ebben a példában az "eth0" a külső és az "eth1" a belső.
#
# Megj.: ha ez nem felel meg a beállításaidnak, akkor változtasd meg
# az EXTIF (külső) és az INTIF (belső) eszközre vonatkozó beállítást.
# Például, ha modemet használsz:
#
#               EXTIF="ppp0" 
#
#
EXTIF="eth0"
INTIF="eth1"
echo "   External Interface:  $EXTIF"
echo "   Internal Interface:  $INTIF"


# A belső hálózat címe
#   Ez a példafájl a 192.168.0.0 hálózatot használja
#   a /24 or 255.255.255.0 netmaszkkal.
#
#    ** Változtasd meg a Te beállításidnak megfelelően **
#
INTLAN="192.168.0.0/24"
echo -e "   Internal Interface:  $INTLAN\n"


# Betöltjük a szükséges MASQ modulokat
#
#	MEGJ.: csak akkor töltsd be őket, ha valóban szükségesek. Az összes jelenleg
#	hozzáférhető modult bemutatjuk alább, de megjegyzésbe tetted a betöltés elkerülése
#	végett.
echo -en "Loading modules: "


# A modulok kezdeti betöltéséhez szükséges
#
/sbin/depmod -a

# Támogatjuk az FTP fájlátvitel PORT módszer által történő, megfelelő maszkolását
#
echo -en "FTP, "
/sbin/modprobe ip_masq_ftp

# Támogatjuk a RealAudio UDP fölötti maszkolását. E nélkül a modul nélkül a RealAudio
# működik, de CSAK TCP módban. Ez a hangminőség romlását okozhatja.
#
#echo -en "RealAudio, "
#/sbin/modprobe ip_masq_raudio

# Támogatjuk az IRC DCC fájlátvitelt
#
#echo -en "Irc, "
#/sbin/modprobe ip_masq_irc

# Támogatjuk a Quake és QuakeWorld maszkolását alapból. Ezek a modulok több felhasználó
# kiszolgálására valók a MASQ szerver mögött. Ha szeretnél Quake I, II vagy III verzióval
# játszani, válaszd a második példát.
#
#	MEGJ.: ha hibaüzenetet kapsz a betöltéskor, akkor régi, hibás rendszermagot használsz.
#	Fejleszd fel a legújabbra.
#
#echo -en "Quake, "
#Quake I / QuakeWorld (26000-es és  27000-es port)
#/sbin/modprobe ip_masq_quake
#
#Quake I/II/III / QuakeWorld (26000, 27000, 27910, 27960 portok)
#/sbin/modprobe ip_masq_quake 26000,27000,27910,27960

# Támogatjuk a CuSeeMe videokonferencia program maszkolást
#
#echo -en "CuSeeme, "
#/sbin/modprobe ip_masq_cuseeme

# Támogatjuk a VDO-live videokonferencia-szoftvert
#
#echo -en "VdoLive, "
#/sbin/modprobe ip_masq_vdolive

echo ".  Modulok betöltve."

# KRITIKUS: az IP továbíbtás engedélyezése, mivel alapból le van tiltva
#
#           Redhat felhasználók: változtasd meg az opciókat a
#                          /etc/sysconfig/network fájlon belül:
#
#                       FORWARD_IPV4=false  -ról
#                             erre
#                       FORWARD_IPV4=true
#
echo "   enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward

# KRITIKUS: az automatikus IP defragmentáció engedélyezése , mivel alapból tiltott
#
#	Ez régebben fordítás közbeni opció volt, de ez megváltozott a 2.2.12-nél.
#	Mind a 2.0, mind a 2.2 rendszermagnál szükséges beállítani.
#
echo "   enabling AlwaysDefrag.."
echo "1" > /proc/sys/net/ipv4/ip_always_defrag

# Dinamikus IP-t használók:
#
# Ha az IP-címet dinamikusan (SLIP, PPP vagy DHCP segítségével) kapod,
# engedélyezd a következő opciót. Bekapcsolja a dinamikus cím-manipulálást,
# amellyel a Diald és hasonló programok használata egyszerűbb lesz.
#
#echo "   A DynamicAddr engedélyezése..."

#echo "1" > /proc/sys/net/ipv4/ip_dynaddr


# Minden előbbi beállítás törlése
#
# Amíg máshogy nem definiálod, az alapszabály az INPUT-ra és OUTPUT-ra az ACCEPT,
# a FORWARD-ra a REJECT
#
echo "   régi szabályok törlése és új alapszabályok beállítása.."
/sbin/ipfwadm -I -p accept
/sbin/ipfwadm -O -p accept
/sbin/ipfwadm -F -p reject
/sbin/ipfwadm -I -f
/sbin/ipfwadm -O -f
/sbin/ipfwadm -F -f


# MASQ időtúllépések
# 2 óra a TCP-kapcsolatokhoz
# 10 mp a TCP-forgalomnál, miután "FIN" csomag érkezett
# 160 mp az UDP-forgalomnál (fontos az maszkolott ICQ-felhasználóknak)
#
echo "   alapértelmezett időzítők beállítása.."
/sbin/ipfwadm -M -s 7200 10 160

# DHCP: azoknak, akik a külső IP-címüket vagy DHCP-vel, vagy BOOTP-vel
#	kapják, például az ADSL vagy kabelmodem-felhasználók, ez kell még
#	a DENY parancs kiadása előtt.
# Jelenleg kikommenteztük.
#
#/sbin/ipfwadm -I -a accept -S 0/0 67 -D 0/0 68 -W $EXTIF -P udp

# Bekapcsolja az egyszerű IP-továbbítást és IP-maszkolást.
#
# Megj.: a következő egy olyan belső LAN-ra példa, ami a 192.168.0.x címmel,
# 	    a 255.255.255.0 vagy "24 bites" alhálózati maszkkal rendelkezik 
#           és a külső "eth0" eszközön át kapcsolódik az internetre.
#	    Ez a példa engedi a kifelé menő forgalmat, de a belső hálózat felé
#	    irányulót már nem.
#
#	** Változtasd meg a fenti adatokat a saját beállításaidnak megfelelően! **
#
#
echo "   az IPMASQ engedélyezése az $EXTIF-n"
/sbin/ipfwadm -F -p deny
/sbin/ipfwadm -F -a m -W $EXTIF -S $INTLAN -D 0.0.0.0/0

echo -e "\nrc.firewall-ipfwadm v$FWVER kész.\n"
<rc.firewall-ipfwadm STOP>

Amint végeztél a szerkesztéssel, tedd a fájlt végrehajthatóvá a chmod 700 /etc/rc.d/rc.firewall-ipfwadm paranccsal.

Most hogy a tűzfalszabályok készen vannak, futtatni kell őket minden újraindításkor. Ezt vagy kézzel minden alkalommal megteszed (ez nagyon durva lenne), vagy hozzáadod a rendszerindító parancsfájlokhoz. Két módszert mutatunk be:

1. Redhat és Redhat-közeli disztribúcióknál:

Két mód van a dolgok automatikus betöltésére: az /etc/rc.d/rc.local fájl vagy egy betöltőszkript az /etc/rc.d/init.d könyvtárban. Az első könnyebb. Csak ezt kell beírnod az /etc/rc.d/rc.local fájl végére, és kész is:

echo "Az rc.firewall szabályrendszer betöltése..."
/etc/rc.d/rc.firewall

Ezzel az a baj, hogy a tűzfal nem indul el a rendszerindítási folyamat végéig. A követendő megközelítés az, hogy induljon el közvetlenül a hálózati alrendszer betöltődése után. Ehhez másold a következő fájlt az /etc/rc.d/init.d könyvtárba:

<firewall-ipfwadm START>
#!/bin/sh
#
# chkconfig: 2345 11 89
#
# leírás: betölti az rc.firewall-ipfwadm szabályrendszert.
#
# folyamatnév: firewall-ipfwadm	
# pid-fájl: /var/run/firewall.pid
# konfiguráció: /etc/rc.d/rc.firewall-ipfwadm
# próba: true

# ----------------------------------------------------------------------------
# v02/09/02
#
# Part of the copyrighted and trademarked TrinityOS document.
# http://www.ecst.csuchico.edu/~dranch
#
# Written and Maintained by David A. Ranch
# dranch@trinnet.net
#
# Updates
# -------
#
# ----------------------------------------------------------------------------


# Alapvető függvénykönyvtár
. /etc/rc.d/init.d/functions

# Megnézd, van-e hálózat

# Ez már nem működik a bash2-vel
#[ ${NETWORKING} = "no" ] && exit 0
# Ennek jónak kell lennie 
[ "XXXX${NETWORKING}" = "XXXXno" ] && exit 0

[ -x /sbin/ifconfig ] || exit 0

# A különböző ipfwadm- és más héjprogramok helye
#
# Ha a disztribúciód tartalmazza az ipfwadm-t, valószínűleg az a /sbin könyvtárban van.
# Ha kézzel állítottad be, akkor az alapértelmezett helye az /usr/local/sbin
#
# Használd a "whereis ipfwadm" parancsot a hely kiderítéséhez, és ennek megfelelően
# állítsd be a következő sort
#
IPFWADM=/sbin/ipfwadm


# Ellenőrizd, hogy miként hívtak meg
case "$1" in
  start)
    /etc/rc.d/rc.firewall-ipfwadm
    ;;

  stop)
    echo -e "\nA tűzfal kiürítése és az alapszabály REJECT-re állítása\n"

    $IPFWADM -I -p REJECT
    $IPFWADM -O -p REJECT
    $IPFWADM -F -p REJECT

    $IPFWADM -I -f
    $IPFWADM -O -f
    $IPFWADM -F -f
    ;;

  restart)
    $0 stop
    $0 start
    ;;

  status)
    $IPFWADM -l
    ;;

  mlist)
    $IPFWADM -M -l
    ;;

  *)
    echo "Használat: firewall-ipfwadm {start|stop|status|mlist}"
    exit 1
esac

exit 0
<firewall-ipfwadm STOP>

Ha a parancsfájl a helyén van, akkor tedd futtathatóvá, majd gondoskod arról, hogy újraindításkor betöltődjön. Először tedd futtathatóvá a következő módon:
#Redhat-style
#
chmod 700 /etc/rc.d/init.d/firewall-ipfwadm
Állítsd be, hogy a szabályrendszer újraindításkor betöltődjön:
#Redhat style
#
chkconfig --level=345 firewall-ipfwadm on
Ennyi! Most újraindításkor a tűzfal automatikusan elindul. A biztonság kedvéért add ki a parancsot, amely újrainduláskor is végrehajtódik, majd ellenőrizd az eredményt:
#Redhat style
#
chkconfig --list firewall-ipfwadm

#A kimenetnek ehhez hasonlónak kell lennie:
#
firewall-ipfwadm 0:off 1:off 2:off 3:on 4:on 5:on 6:off

Slackware:

Megjegyzések arról, hogyan akarják a felhasználók megváltoztatni a fenti szabályrendszert:

Egy gépre vonatkozóan is meg tudod adni az maszkolást a fenti módszertől eltérően, ahol az az egész alhálózatra vonatkozik. Ha például csak 192.168.0.2 és a 192.168.0.8 gépeknek akarunk intenet-hozzáférést biztosítani, és egyik másiknak sem:

 

#!/bin/sh 
#
# Engedélyezi az egyszerű IP-maszkolást és IP-továbbítást.
# v2.01
# 
# Megj.: a következő példában IP-maszkolást csakis a 192.168.0.2 és 192.168.0.8
# gépeknek (255.255.255.0-as vagy "24 bites" alhálózati maszk, eth0 eszközzel 
# való internet-csatlakozással) biztosítjuk.
#
#
/sbin/ipfwadm -F -p deny
/sbin/ipfwadm -F -a m -W $EXTIF -S 192.168.0.2/32 -D 0.0.0.0/0
/sbin/ipfwadm -F -a m -W $EXTIF -S 192.168.0.8/32 -D 0.0.0.0/0

Gyakori hibák:

A kezdő felhasználók gyakori hibája, hogy az első parancsot így használják:

ipfwadm -F -p masquerade

SOHA NE állítsd be az alapértelmezett szabályt (policy) MASQUERADING-re. Különben valaki módosítani tudja az útválasztási táblázatát úgy, hogy keresztül menjen az átjárónkon, és felhasználja azt a saját maga maszkolására!

Ezeket a sorokat is add hozzá a /etc/rc.d/rc.firewall fájlhoz, valamelyik másik rc fájlhoz vagy töltsd be kézzel, amikor szükséged van az maszkolásra.

Lásd a 6.4.2 és 6.4.3 fejezetet részletesebb infóért a biztonságosabb IPCHAINS és IPFWADM szabályokat illetően.