Ez a példa az 1999-es márciusi LinuxWorld Tutorialból lett kiollózva; nem ez az egyetlenegy módja annak, hogy megoldjunk egy adott problémát, de valószínűleg a legegyszerűbb. Remélem informatívnak fogod találni.
+ Masquerade-ált belső hálózat (különböző operációs rendszerekkel), amit úgy hívunk hogy GOOD.
+ Felfedett szerverek egy elszeparált hálózatban (DMZ-nek hívjuk, Demilitarizált Zóna)
+ PPP kapcsolat az Internet felé (hívjuk BAD-nek).
Külső háló (BAD) | | ppp0| --------------- | 192.84.219.1| Szerver hálózat (DMZ) | |eth0 | |---------------------------------------------- | |192.84.219.250 | | | | | | | | |192.168.1.250| | | | --------------- -------- ------- ------- | eth1 | SMTP | | DNS | | WWW | | -------- ------- ------- | 192.84.219.128 192.84.219.129 192.84.218.130 | Belső hálózat(GOOD)
Csomagszűrő gép:
PING-elhessen akármilyen hálózatot. Ez nagyon hasznos annak tesztelésére, hogy egy gép megy-e vagy sem.TRACEROUTE akármilyen hálózatra. Szintúgy hasznos tesztelési célokra.
DNS elérése. A ping és DNS együtt még hasznosabb.
A DMZ-n belül:
Levelező szerver:
+SMTP kifele
+SMTP fogadása belülről és kívülről
+POP-3 fogadása belülről
Névszerver:
+DNS info küldése kívülre
+DNS kérések fogadása belülről, kívülről és a csomagszűrő gépről.
Webszerver:
+HTTP fogadása belülről és kívülről
+Rsync elérése belülről
Belül:
WWW, ftp, traceroute, ssh engedése kifele.
Mindezek eléggé alapvető dolgok, amiket engednünk kell. Néhány helyen szinte mindent megengednek a belső hosztoknak, mi itt egy kicsit jobban megszorítjuk a lehetőségeiket.
SMTP engedése a levelező szerver felé.
Nyilván megengedjük, hogy felhasználóink leveket küldhessenek kifelé.
POP-3 engedése a levelező szerver felé.
Ez az, ahogy a leveleiket elolvassák.
DNS engedése a névszerver felé.
Szükségük van külső nevek elkéréséhez a www, ftp, ssh, traceroute miatt.
Rsync engedése a webszerver felé.
Ez az, ahogy egy külső webszerver szinkronizál a mi belsőnkkel.
WWW engedése a webszerver felé.
Nyilván meg akarjuk engedni a kívülállóknak, hogy csatlakozhassanak a belső webszerverünkre.
Anti-spoofing:
Mivel nincs aszimmetrikus útválasztásunk, könnyen bekapcsolhatjuk az anti-spoofingot az összes interfészre:# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done #
Irányelv beállítása, tiltás mindenre (DENY):
A helyi forgalmat engedélyezzük, de minden mást letiltunk:
# ipchains -A input -i ! lo -j DENY # ipchains -A output -i ! lo -j DENY # ipchains -A forward -j DENY
Interfészek beállítása
Ezt a boot-szkriptek végzik. Bizonyosodj meg arról, hogy a fent leírt lépések végbementek, mielőtt az interfészek felhúzódnak (hogy véletlenül se csússzanak át csomagok, mialatt a szabályok bekonfigurálódnak ).
A masquerading modulok beszúrása
Az ftp-hez be kell illesztenünk az ip_masq_ftp modult, hogy aktiváljuk az aktív és a passzív ftp-t.
# insmod ip_masq_ftp #
A masquerading-al, a legjobb szűrni a forward láncon.
Oszd fel a forward láncot különböző általad generált láncokra a forrás/cél interfészeidtől függően; ezzel könnyen kezelhetővé teheted a szabály-rendszereidet.
ipchains -N good-dmz ipchains -N bad-dmz ipchains -N good-bad ipchains -N dmz-good ipchains -N dmz-bad ipchains -N bad-good
Az ICMP általános hibajelentések fogadása alapvető dolog, szóval csináljunk láncot neki:
ipchains -N icmp-acc
Sajnos csak a kimenő interfészt ismerjük (a forward láncon). Ilyenformán, hogy kitaláljuk, a csomag milyen interfészen jön, a forráscímet használjuk (a fentebb beállított spoofing védelem megvéd minket a címhamisítástól).
Mindent loggolunk, ami nem illeszkedik az alábbiak valamelyikére (nyilván ez sohasem történik meg):
ipchains -A forward -s 192.168.1.0/24 -i eth0 -j good-dmz ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j good-bad ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j dmz-bad ipchains -A forward -s 192.84.219.0/24 -i eth1 -j dmz-good ipchains -A forward -i eth0 -j bad-dmz ipchains -A forward -i eth1 -j bad-good ipchains -A forward -j DENY -l
Az ICMP hibajelző-csomagokat beengedjük, egyébként az irányítást visszaadjuk a hívó-láncnak:
ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT
Belső megszorítások:
- www, ftp, traceroute, ssh engedése kifele
- stmp engedése a levelező szerver felé
- pop-3 engedése a levelező szerver felé
- dns engedése a névszerver felé
- Rsync engedése a webszerver felé
- www engedése a webszerver felé
- ping engedése a csomagszűrő gép felé
Csinálhatnánk masquerade-ot a belső hálótól a DMZ felé, de itt nem tesszük ezt meg. Mivel nem a belső háló gépei akarnak gonosz dolgokat művelni, loggolunk minden letiltott csomagot:
ipchains -A good-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT ipchains -A good-dmz -p tcp -d 192.84.219.128 pop-3 -j ACCEPT ipchains -A good-dmz -p udp -d 192.84.219.129 domain -j ACCEPT ipchains -A good-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT ipchains -A good-dmz -p tcp -d 192.84.218.130 www -j ACCEPT ipchains -A good-dmz -p tcp -d 192.84.218.130 rsync -j ACCEPT ipchains -A good-dmz -p icmp -j icmp-acc ipchains -A good-dmz -j DENY -l
DMZ megszorításai:
Mail szerver:
- smtp kifele
- smtp fogadása belülről, kívülről
- pop-3 fogadása belülről
Névszerver:
- DNS küldése kifele
- DNS kérések fogadása belülről, kívülről és a csomagszűrő géptől
Webszerver:
- http engedése kívülről, belülről
- Rsync engedése belülről
Dolgok, amiket a külvilágnak engedünk a DMZ felé:
Ne loggoljunk violationokat (hmmmm), ha megtörténnek:
ipchains -A bad-dmz -p tcp -d 192.84.219.128 smtp -j ACCEPT ipchains -A bad-dmz -p udp -d 192.84.219.129 domain -j ACCEPT ipchains -A bad-dmz -p tcp -d 192.84.219.129 domain -j ACCEPT ipchains -A bad-dmz -p tcp -d 192.84.218.130 www -j ACCEPT ipchains -A bad-dmz -p icmp -j icmp-acc ipchains -A bad-dmz -j DENY
Belső megszorítások:
- www, ftp, traceroute, ssh engedése kifele
- smtp a mail szerver felé
- pop-3 a mail szerver felé
- Dns a névszerver felé
- Rsync a webszerver felé
- www a webszerver felé
- ping a csomagszűrő gép felé
- sokan mindent engednek a belső hálóról kifele, és azután adnak megszorításokat. Mi fasiszták leszünk.
- Szabálysértések loggolása
- a passzív ftp a masq. modul által van lekezelve
ipchains -A good-bad -p tcp --dport www -j MASQ ipchains -A good-bad -p tcp --dport ssh -j MASQ ipchains -A good-bad -p udp --dport 33434:33500 -j MASQ ipchains -A good-bad -p tcp --dport ftp --j MASQ ipchains -A good-bad -p icmp --icmp-type ping -j MASQ ipchains -A good-bad -j REJECT -l
Belső megszorítások:
- www, ftp, traceroute, ssh engedése kifele
- smtp a mail szerver felé
- pop-3 a mail szerver felé
- Dns a névszerver felé
- Rsync a webszerver felé
- www a webszerver felé
- ping a csomagszűrő gép felé
- Ha masquerade-álnánk a belső hálót a DMZ felé, egyszerűen vissza utasítanánk minden olyan csomagot, ami más módon érkezne.
ipchains -A dmz-good -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT ipchains -A dmz-good -p udp -s 192.84.219.129 domain -j ACCEPT ipchains -A dmz-good -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 www -j ACCEPT ipchains -A dmz-good -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT ipchains -A dmz-good -p icmp -j icmp-acc ipchains -A dmz-bad -j DENY -l
DMZ megszorítások:
Levelező szerver:
- smtp kifele
- smtp engedése belülről, kívülről
- pop-3 belülről
Névszerver:
- DNS kifele
- DNS kérések fogadása belülről, kívülről és a csomagszűrő gépről
Webszerver:
- http fogadása belülről, kívülről
- Rsync fogadása belülről
ipchains -A dmz-bad -p tcp -s 192.84.219.128 smtp -j ACCEPT ipchains -A dmz-bad -p udp -s 192.84.219.129 domain -j ACCEPT ipchains -A dmz-bad -p tcp -s 192.84.219.129 domain -j ACCEPT ipchains -A dmz-bad -p tcp ! -y -s 192.84.218.130 www -j ACCEPT ipchains -A dmz-bad -p icmp -j icmp-acc ipchains -A dmz-bad -j DENY -l
Semmit nem engedünk (nem masquerade-ált) kívülről a belső hálóra:
ipchains -A bad-good -j REJECT
Ha szeretnénk csomagszűrést használni magára a Linuxos gépre, az input láncon kell szűrnünk. Csinálnunk minden cél-interfészhez egy-egy láncot:
ipchains -N bad-if ipchains -N dmz-if ipchains -N good-if
Aztán beállítjuk az ugrásokat:
ipchains -A input -d 192.84.219.1 -j bad-if ipchains -A input -d 192.84.219.250 -j dmz-if ipchains -A input -d 192.168.1.250 -j good-if
Csomagszűrő gép:
- pingelhessen bármilyen hálózatot
- traceroute-olhasson bármilyen hálózatot
- használhasson dns-t
- A külső interfész szintén kaphat masquerade-ált csomagok válaszait, és icmp üzeneteket a ping válaszokként.
ipchains -A bad-if -i ! ppp0 -j DENY -l ipchains -A bad-if -p TCP --dport 61000:65096 -j ACCEPT ipchains -A bad-if -p UDP --dport 61000:65096 -j ACCEPT ipchains -A bad-if -p ICMP --icmp-type pong -j ACCEPT ipchains -A bad-if -j icmp-acc ipchains -A bad-if -j DENY
Csomagszűrő-gép megszorítások:
- pingelhessen bármilyen hálózatot
- traceroute-olhasson bármilyen hálózatot
- használhasson dns-t
- a DMZ interfész dns válaszokat, ping válaszokat, icmp hibajelző-csomagokat kaphat.
ipchains -A dmz-if -i ! eth0 -j DENY ipchains -A dmz-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT ipchains -A dmz-if -p UDP -s 192.84.219.129 53 -j ACCEPT ipchains -A dmz-if -p ICMP --icmp-type pong -j ACCEPT ipchains -A dmz-if -j icmp-acc ipchains -A dmz-if -j DENY -l
Csomagszűrő-gép megszorítások:
- pingelhessen bármilyen hálózatot
- traceroute-olhasson bármilyen hálózatot
- használhasson dns-t
Belső megszorítások:
- www, ftp, traceroute, ssh engedése kifele
- smtp engedése a mail szerver fele
- pop-3 engedése a mail szerver fele
- dns engedése a névszerver fele
- Rsync engedése a névszerver fele
- www engedése a webszerver fele
- ping engedése a csomagszűrő gép fele
- A belső interfész pingeket, ping válaszokat, és ICMP hibajelző-csomagokat kaphat.
ipchains -A good-if -i ! eth1 -j DENY
ipchains -A good-if -p ICMP --icmp-type ping -j ACCEPT
ipchains -A good-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A good-if -j icmp-acc
ipchains -A good-if -j DENY -l
ipchains -D input 1 ipchains -D forward 1 ipchains -D output 1