Linux IPCHAINS-HOGYAN


Előző | Tartalom | Következő


7. Egy komoly példa

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.

7.1. Az elrendezés

+ 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)

7.2. Célok

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.

7.3. Még csomagszűrés előtt

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
#

7.4. Csomagszűrés

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

7.4.1. Ugrások felállítása a forward láncon

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

7.4.2. Az icmp-acc lánc beállítása

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

7.4.3. Good (belső háló) a DMZ (szerverek) felé

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

7.4.4. Bad (külső dolgok) a DMZ felé (saját szervereink)

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

7.4.5. Good (belső háló) a Bad (külső dolgok) felé

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

7.4.6. DMZ a Good (belső háló) felé

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

7.4.7. DMZ a Bad (külső dolgok) felé

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

7.4.8. Bad (külső dolgok) a Good (belső háló) felé

Semmit nem engedünk (nem masquerade-ált) kívülről a belső hálóra:

ipchains -A bad-good -j REJECT

7.4.9. Csomag szűrés a Linux gépre

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

7.4.9.1. Bad (külső) interfész

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

7.4.9.2. DMZ interfész

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

7.4.9.3. Good (belső) interfész

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

7.5. Végezetül

A blokkoló szabályok törlése:

ipchains -D input 1
ipchains -D forward 1
ipchains -D output 1

Előző | Tartalom | Következő