Következő Előző Tartalom

3. Linuxos gép beállítása

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 szkriptekkel, 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.

3.1 Alapvető rendszerbeállítás

Á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 Samba és IPTABLES a rendszeren.

3.2 Kiegészítő tartalomjegyzék hierarchia

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.

3.3 Tűzfal beállítás

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!

3.4 SAMBA beállítás

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.

SAMBA alapbeállítás.

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 = %a.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 "logon script"

A "logon script = %a.bat" használatával a samba kiértékeli a bejelentkező rendszert (értsd: win 95/98/ME stb. - a lektor), majd meghívja a megfelelő bejelentkező szkriptet. Ha állandó bejelentkező szkriptet szeretnél használni, akkor változtasd meg "logon script = netlogon.bat" értékre. Tulajdonképpen itt bármit lehet csinálni, akár a bejelentkezés alatt is előállatható egy szkript.

A hálózati bejelentkezés (netlogon) és a követés megosztásai (tracking shares)

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 munkaá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'
TRACKSHARE="samba"
ADDRESS=`cat /var/run/smbgate/$1`
GROUP=`groups $1 | gawk '// { print $3 }'`
NM=`smbstatus -u $1 | grep $TRACKSHARE | wc -l`
if [ $NM -gt 0 ]; then
    exit
fi
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ítani a root postexec bejegyzést az smb.conf nyomkövető megosztás részé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


Következő Előző Tartalom