Ez a HOGYAN feltételezi, hogy van egy RENDSZERMAGOD a 2.4-es szériából ami használja az IPTable szolgáltatást. Azonkívül nincsenek ismert fejlemények miért ne működjön ez egy 2.2 rendszermagon azokkal a scriptekkel, amik az IPChains-hez lettek használva.
Természetesen telepítened kell az iptables userland eszközt, egy apache http szervert, ha CGI eszközt szeretnél futtatni a jelszócseréhez és SAMBA-hoz. Szükséged lesz egy olyan rendszermagra, amelyhez az iptables modul le lett fordítva.
Kívánság szerint használhatsz DHCP-t. Ez esetben könnyű a beállítása. Ne felejtsd el a dhcp szerveren beállítani, hogy szolgáltassa a névszerver IP címét és az átjáróét is. A windowsos gépek nagyon jól használják ezeket az információkat.
Általánosan elmondható, hogy a legtöbb alapbeállítás a különböző Linux-terjesztésekben megegyezik, és illeszkednek ehhez az átjáró példához. Csak ellenőrizd le, ha van Sambád és IPTABLES-ed.
A kiegészítő tartalomjegyzék-hierarchia szükséges lesz az ebben a HOGYANban található példa megvalósításához.
Ezek használatosak a felhasználók és az IP címek nyomon követésére:
/var/run/smbgate/
A felhasználófüggő szkriptek könyvtára:
/etc/smbgate/users/
A csoportfüggő szkriptek könyvtára:
/etc/smbgate/groups/
Megosztott könyvtár a bejelentkezéshez:
/home/samba/netlogon/
A nyomkövetés megosztása:
/home/samba/samba/
Ez a könyvtárrendszer szükséges, hogy a példában szereplő szkriptek és démonok működjenek.
Nagyon valószínűtlen, hogy az általad használt Linux-terjesztésbe ne lenne belefordítva az iptables, vagy éppen nem lennének telepítve a felhasználói eszközök. Mindenesetre, ha ezek nincsenek, akkor a programok és dokumentációk beszerzéséhez utalásokat találsz a http://www.netfilter.org vagy http://www.iptables.org webhelyen.
Szükséged lesz az alapvető tűzfal beállításokra az átjáród működéséhez. Nézd meg az iptables kézikönyvében: IPTABLES TUTORIAL. Nagyon érdekes olvasmány. Egyébként, ha nincs időd az olvasásra, a következő kód elégé általános ahhoz, hogy megfeleljen a szükségleteidhez.
#!/bin/sh IPTABLES=/usr/sbin/iptables /sbin/depmod -a /sbin/insmod ip_tables /sbin/insmod ip_conntrack /sbin/insmod ip_conntrack_ftp /sbin/insmod ip_conntrack_irc /sbin/insmod iptable_nat /sbin/insmod ip_nat_ftp echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_dynaddr $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD ACCEPT $IPTABLES -F FORWARD $IPTABLES -t nat -F
Mint láthatod, ez a kód valójában nem csinál semmit. Eredményeképpen mégis betöltődnek a NAT és tűzfalhasználat moduljai, valamint bekapcsolja a csomag útvonal kijelölést. Elhelyezheted (el kéne helyzened) azokat a szabályokat, melyek meghatározzák az átjáród alapvető viselkedését. A "nagy varázslat" (big magic) a SAMBA démon által lefuttatott szkriptekkel lesz befejezett.
Figyelj! Emlékeztetlek, hogy ez a kód a legkevésbé sem biztonságos! Ne használd ezeket a példákat működő rendszerekben. Ezek a példák csak oktatási céllal készültek. Neked kell a rendszerednek legjobban megfelelő tűzfalszabályokat beállítanod
Figyelmeztetettelek!
Ellenőrizd, hogy a SAMBA telepítve legyen. Ha a te Linux-terjesztésed nem tartalmazza a SAMBA csomagot, akkor nézz körül a http://www.samba.org webhelyen. Innen beszerezheted a csomagot, valamint találsz útmutatót a telepítésről is. Nézz körül ezeken a weblapokon és tanulj belőlük. A webhelyen sok dokumentáció található. Valószínűleg a te Linux-terjesztésed is bőséges SAMBA dokumentációt tartalmaz.
A SAMBA csomagot elsődleges domain vezérlőnek (Primary Domain Controller) kell beállítanod. Itt találhatsz egy beállítási példát, de szükséges a Samba HOWTO Collection dokumentációt átolvasása, valamint tanulj meg mindent a PDC-ről amit csak lehet.
Mivel nem szeretném újraírni a SAMBA dokumentációt, ezért íme egy példa smb.conf fájl:
# Általános paraméterek [global] workgroup = DOMAIN netbios name = LINUX server string = Linux PDC encrypt passwords = Yes map to guest = Bad Password passwd program = /usr/bin/passwd unix password sync = Yes max log size = 50 time server = Yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u logon script = netlogon.bat domain logons = Yes os level = 64 lm announce = True preferred master = True domain master = True dns proxy = No printing = lprng [homes] comment = Home Directories path = /home/%u read only = No [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No available = No [netlogon] comment = NetLogon ShARE path = /home/samba/netlogon guest account = [samba] comment = login tracking share path = /home/samba/samba browseable = No root preexec = /usr/local/bin/netlogon.sh %u %I root postexec = /usr/local/bin/netlogoff.sh %u
Ezeket kell beállítanod, vagy el kell olvasnod a SAMBA dokumentációt, ha valóban felügyelni szeretnéd a szervered és a hálózatod.
A netlogon megosztásból töltik le a Windows munkaállomások a bejelentkeztető parancsfájlokat. Azért van szükségünk erre a megosztásra, hogy elhelyezzük itt a bejelentkeztető szkriptet. Ez jelzi a munkaállomásoknak, hogyan csatlakoztassanak egy megosztást, ahol a felhasználók IP címei lesznek követhetők.
Amint láthatod, szükséged lesz a smb.conf fájlban a következő bejegyzésre is.
logon script = netlogon.bat
Ez a sor jelzi a Windows kliensednek, hogy töltse le és futtassa a netlogon.bat szkriptet. Ennek a szkriptnek a netlogon megosztáson kell lennie. Szóval szintén szükséged lesz egy netlogon.bat szkriptre a Windows munkállomásokhoz. Használhatod a következő példát, elhelyezve a netlogon megosztáson, ami ebben az esetben a: /home/samba/netlogon/NETLOGON.BAT.
REM NETLOGON.BAT net use z: \\linux\samba /yes
Ez a szkript fogja jelezni a Windows munkaállomásoknak, hogy csatlakoztassák a megadott megosztásokat. Az smbstatus program kimenetei alapján pedig képesek leszünk nyomon követni a felhasználót és a munkaállomást.
Egészen egyszerű! Azonban nem elég...
Amint láthatod, szükséged van még egy megosztásra (tracking share), amit - ebben a példában - samba-nak neveztem. Láthatod a követés megosztás (tracking share) beállításait az smb.conf fájlban:
[samba] comment = login tracking share path = /home/samba/samba browseable = No root preexec = /usr/local/bin/netlogon.sh %u %I root postexec = /usr/local/bin/netlogoff.sh %u
Amint azt bizonyára már kitaláltad vagy elolvastad a SAMBA dokumentációban, a root preexec és a root postexec sorok jelzik a SAMBA-nak, hogy futtasson egy javasolt szkriptet, amikor a felhasználó fel- vagy lecsatol egy megosztást. Figyelj arra, hogy a %u a sorok végén van. Ezek a szkriptek a "szörnyek" (beasts), melyek meghívnak egy szkriptet, programot, hogy módosítsák az átjárónk csomagszűrő szabályait.
Figyelj, hogy a netlogon.sh szkriptnek ellenőriznie kell, hogy a hivatkozott munkaállomás már csatlakoztatva van-e a nyomkövetés megosztásához.
Vess egy pillantást a netlogon.sh és a netlogoff.sh szkriptekre:
#!/bin/sh # # netlogon.sh # # usage: # netlogon.sh <username> # if [ -f /var/run/smbgate/$1 ] ; then exit 0 fi echo $2 > /var/run/smbgate/$1 IPTABLES='/usr/sbin/iptables' EXTIF='eth0' COMMAND='-A' ADDRESS=`cat /var/run/smbgate/$1` GROUP=`groups $1 | gawk '// { print $3 }'` if [ -f /etc/smbgate/users/$1 ] ; then /etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF else if [ -f /etc/smbgate/groups/$GROUP ] ; then /etc/smbgate/groups/$GROUP $COMMAND $ADDRESS $EXTIF else /etc/smbgate/users/default.sh $COMMAND $ADDRESS $EXTIF fi fi
A netlogon.sh szkript a felhasználó belépésekor hajtódik végre. A végrehajtandó szkript a felhasználói név és a felhasználó csoportja alapján kerül kiválasztásra. A felhasználó IP címe bekerül a /var/run/smbgate könyvtárba nyomkövetési célból. A fájl tartalmazza a felhasználó nevét, mely később a kijelentkezéskor szükséges. Az IP cím a felhasználói névvel együtt paraméterként kerül átadásra, amely végül frissíti a tűzfalat.
Figyelj arra, hogy a netlogon.sh futtatni próbálja a felhasználó szkriptjét. Ha nem találja, akkor próbálkozik a csoport szkripttel. Végül, ha nem találja a csoport szkriptet sem, akkor a default.sh szkriptet futtatja. Ezt a logikát és viselkedést módosíthatod ha szeretnéd vagy szükséges, de ne felejtsd el módosítani a többit is ennek megfelelően.
Valószínű, ha a felhasználó több csoportba tartozik, akkor ezek a szkriptek hibásan fognak működni. Nem volt időm jobb kódot írni.
#!/bin/sh # # netlogoff.sh # # usage: # netlogoff.sh <username> # IPTABLES='/usr/sbin/iptables' EXTIF='ppp0' COMMAND='-D' ADDRESS=`cat /var/run/smbgate/$1` GROUP=`groups $1 | gawk '// { print $3 }'` if [ -f /etc/smbgate/users/$1 ] ; then /etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF else if [ -f /etc/smbgate/groups/$GROUP ] ; then /etc/smbgate/groups/$GROUP $COMMAND $ADDRESS $EXTIF else /etc/smbgate/users/default.sh $COMMAND $ADDRESS $EXTIF fi fi rm -f /var/run/smbgate/$1
A netlogoff.sh szkript a felhasználó kilépésekor fut le. A /var/run/smbgate/user fájlból beolvasott cím, mint argumentum átadódik az /etc/smbgate/users/user szkriptnek, amely frissíti a tűzfalat és visszaállítja a felhasználó bejelentkezése előtti állapotot.
Néhány Windows verzió, mint a Windows 2000 többször felcsatolja a nyomkövető megosztást. Ez problémát okozhat azáltal, hogy többször hajtja végre a netlogon.sh és a netlogoff.sh szkripeket. Ez teljes zűrzavarhoz vezet. Nos, esetleg előnyösebb egy kilépés-ellenőrzés (logout checking) futtatása cronból, mint a netlogoff.sh végrehajtatása a SAMBA-val. Íme egy példa:
#!/bin/sh # checklogout.sh # # usage: # intended to run at cron (maybe each 10 minutes) TRACKDIR="/var/run/smbgate" DIRLENGTH=${#TRACKDIR} TRACKSHARE="samba" EXTIF='eth0' COMMAND='-D' if [ -d $TRACKDIR ]; then for n in $TRACKDIR/*; do [ -d $n ] && continue; if [ -f $n ] ; then IPADDRESS=`cat $n` USERNAME=${n:$DIRLENGTH+1} NMS=`smbstatus -u $USERNAME | grep $TRACKSHARE | grep $IPADDRESS | grep -v grep | wc -l` if [ $NMS == 0 ] ; then rm -f $n GROUP=`groups $USERNAME | gawk '// { print $3 }'` if [ -f /etc/smbgate/users/$USERNAME ] ; then /etc/smbgate/users/$USERNAME $COMMAND $IPADDRESS $EXTIF else if [ -f /etc/smbgate/groups/$GROUP ] ; then /etc/smbgate/groups/$GROUP $COMMAND $IPADDRESS $EXTIF else /etc/smbgate/users/default.sh $COMMAND $IPADDRESS $EXTIF fi fi fi else exit 0 fi done fi
Ebben az esetben el kell távolítanod a postexec bejegyzést az smb.conf nyomkövetö megosztásából:
root postexec = /usr/local/bin/netlogoff.sh %u
Íme egy általános /etc/smbgate/users/user szkript. Jelenleg ez az egyetlen, ami módosítja a tűzfal szabályait.
#!/bin/sh # COMMAND=$1 ADDRESS=$2 EXTIF=$3 IPTABLES='/usr/sbin/iptables' $IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o $EXTIF -j MASQUERADE
Az /etc/smbgate/users/ könyvtárba szintén kell egy default.sh szkript, hogy megadjuk az átjáró viselkedésének alapszabályait.
#!/bin/sh # # default.sh COMMAND=$1 ADDRESS=$2 EXTIF=$3 IPTABLES='/usr/sbin/iptables' #$IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o $EXTIF -j MASQUERADE exit 0