Egy egyszerű tűzfal beállítása az ipfw és a nat keresztül natd in freebsd

Az ipfw és a NAT egyszerű tűzfalának konfigurálása a natd-n keresztül a FreeBSD-en

Rc.conf-ban írjuk az otthoni hálózatunk és a helyi hálózat paramétereit. vr0 - külső (nyilvános) felület, vr2 - az otthoni hálózathoz csatlakoztatott belső interfész.






ifconfig_vr0 = "inet 123.123.123.123 netmask 255.255.255.0"
ifconfig_vr0_alias0 = "link 00: aa: aa: aa: aa: aa"
ifconfig_vr2 = "inet 192.168.12.254 netmask 255.255.255.0"
defaultrouter = "123.123.123.1"

A rendszermag konfigurációjához a következő sorokat adjuk hozzá:
opciók IPFIREWALL
opciók IPFIREWALL_VERBOSE
opciók IPFIREWALL_VERBOSE_LIMIT = 100
opciók IPFIREWALL_FORWARD
opciók IPDIVERT
opciók DUMMYNET

Az opciók leírása:

opciók IPFIREWALL_VERBOSE - Támogatja az elhaladó csomagok írását a naplófájlba, a szabályok naplóbeállításával és az rc.conf csomagok naplójának aktiválásával vagy a sysctl változón keresztül.

opciók IPFIREWALL_VERBOSE_LIMIT = 100 - Jelzi az egyes szabályokhoz való naplózáshoz szükséges csomagok számát. Az alapértelmezett érték. Az alapértelmezett érték felülírható a sysctl - net.inet.ip.fw.verbose_limit változóval. Egy adott szabály esetében az ipfw felülírható az ipfw log logamount segítségével egy másik kívánt értékre. Például:
ipfw add deny log logamount 300 IP-t bárhonnan bármelyikhez

opciók IPFIREWALL_FORWARD - Csomagok átirányítása a hálózati interfészek között.

lehetőségek IPDIVERT - Különösen a NAT és a natd támogatása.

lehetőségek DUMMYNET - Támogatja a sebességkorlátozót.

Ezenkívül van egy paraméter
opciók IPFIREWALL_DEFAULT_TO_ACCEPT

Ha a rendszermag össze van állítva ezzel a beállítással, és a tűzfal engedélyezve van, az alapértelmezett szabály:
hagyja az ip-t bármihez

Ellenkező esetben az alapértelmezett szabály:
megtagadja az ip-et bármihez

Ha a szerver konfigurációja a ssh - ez lehet egy biztonsági háló, hogy ezt a lehetőséget a kernel, befordíthatod, telepíteni, majd a beállítás után ipfw és kap egy működő rendszert - ki ezt az opciót, és újrafordítani a kernelt, ezúttal nélküle (biztonsági).
Tehát - összegyűjtjük a rendszermagot:
cd / usr / src
készítsen buildernet KERNCONF = MY_KERNEL
telepítse a KERNCONF = MY_KERNEL telepkernelet

a rendszermag összeállításáról - olvassa el a kézikönyv megfelelő részét.
Támogatjuk a tűzfalat a rendszerben, és egy egyszerű szkriptet írunk le

Annak érdekében, hogy az ipfw és a natd működhessen, módosítania kell az rc.conf fájlt, és hozzá kell adnia a következő sorokat:
firewall_enable = "YES"
firewall_script = "/ etc / ipfw.rules"
firewall_logging = "YES"
gateway_enable = "YES"
natd_enable = "IGEN"
natd_interface = "vr0"
natd_flags = "- m"

firewall_enable = "YES" - engedélyezi az aktuális tűzfalat. Ha a tűzfal a rendszermagban van, bekapcsolt állapotban van, ellenkező esetben a modul betöltődik.
Vigyázat! Ha a modul betöltése alapértelmezett szabályt tagadja ip from any to any, így ha nincs engedélyezve a rendszermag beállításai IPFIREWALL_DEFAULT_TO_ACCEPT, elfelejtettem, hogy új rendszermag telepítése, és lehetővé tette a tűzfal - abban a reményben, a szabály lehetővé teszi ip from any to any - akkor szenved a frusztráció

firewall_script = "/ etc / ipfw.rules" - A szokásos shell parancsfájl, amelyet a tűzfal elindításakor indítanak el - elméletben az ipfw parancsokat kell megadni, amelyek leírják a tűzfalat. Ez a stochka hiányozhat - akkor az alapértelmezett szkript fut - /etc/rc.firewall.

firewall_logging = "YES" - Engedélyezi az elhaladó csomagok rögzítését a naplóba. Feltéve, hogy a szabály meghatározza a kulcsszó naplót.

gateway_enable = "YES" - csomagok továbbítása az interfészek között. Az opció jelenléte az rc.conf-ban a net.inet.ip.forwarding változó sysctl értékét 1-re állítja, amikor a számítógép elindul.

natd_enable = "YES" - NAT démon engedélyezése - natd.

natd_interface = "vr0" - Külső interfész a NAT-hez. A nyilvános felület.

natd_flags = "- m" - A natd felé átadott zászlók. Lásd az ember nevét a részletekért.

Miután megadta az opciót az rc.conf fájlban - írja a szkriptet a tűzfalunkhoz egy csonkhoz a /etc/ipfw.rules fájlban. Ez a tűzfal lehetővé teszi a hozzáférést bárhonnan.






#! / bin / sh

# ipfw cmd
fwcmd = "/ sbin / ipfw"
$ -q -f flush
$ add allow ip bármelyikből bármelyikhez

Utána újraindulunk.
újraindítás

Ha mindent helyesen végeztünk - újraindítás után - mi

vissza tudunk térni az autójához az ssh.

láthatjuk a kimeneti ipfw show-ban - a szabályok (eddig csak egy szabály és az alapértelmezett szabály)
Írj egy egyszerű tűzfalat

Az ipfw-ben a szabályok az alábbiak szerint hajthatók végre: A passzoló csomagot a szabályoknak való megfelelés ellenőrizzük, abban az sorrendben, amelyben azok megtalálhatók, mindaddig, amíg a mérkőzés nem megfelelőnek bizonyul - ezután a szabályban leírt művelet végrehajtódik a csomagon.
Az ipfw szabályok számozottak, és az első szabály alacsonyabb számmal történik, stb. Miután a csomag valamely szabály alá esett, a tűzfal kialszik.
Kivétel - a csomagokat alá átirányítási (mint a NAT és a natd), műtétek utáni rájuk, hogy elterelje őket vissza a tűzfalat, a következő utáni átirányítás szabály, és menj le a szabályok listáját, míg a megfelelő szabály lesz teljesíthető.
Ez a viselkedés megváltoztatható, de ebben a cikkben részleteket el fogok hagyni. Szintaxis ipfw - elhagyja, hogy elkerülje a cikk szövegének felesleges ismétlését és zűrzavarát. Lásd az ember ipfw-t, a kézikönyv megfelelő részét és a cikk végén található hivatkozásokat.

Tetszett a következő módszer a tűzfal hibakeresésére:

hozzon létre egy fájlt a tűzfal teszteléséhez, például /etc/ipfw.rules.test.

végrehajthatóvá téve. Hozzáadunk parancsokat tűzfalunk létrehozásához.

ha az eredmény megfelel nekünk - akkor hozzáadjuk a teszt tűzfal tartalmát a szkripthez, amely a gép indításakor lesz végrehajtva. Ellenkező esetben szerkessze a szkriptet, és ismételje meg a 3. lépést.

Ha létrehoztunk egy fájlt /etc/ipfw.rules.test tűzfal, amely blokkolja bennünket távoli hozzáférést biztosít a gép - a gép újra kell indítani, akkor indíts a /etc/ipfw.rules tűzfal, amely nem biztos, hogy működik.
Hasznos ipfw parancsok:

ipfw lista - a szabályok listáját mutatja

Az ipfw show - a szabályok listáját is mutatja, de a csomagok és bájtok számával együtt, amelyek e szabályok hatálya alá tartoznak. Nagyon kényelmes hibakeresésre.

ipfw -d show - mutatja a dinamikus állapotot (tartsa az állapotot).

ipfw nulla - az összes számláló nullázása. Ha az ipfw nulla # _ szabályt tartjuk, akkor csak a szabályszámláló áll vissza.

Ennek a szabálynak követnie kell:

Miért szükséges a szabályok megengedett szabályozása a NAT számára? Mert ha a NAT előtt írsz rá, akkor amint egy ilyen szabály találkozik, végrehajtódik és a forgalom a NAT mellett megy, mert A NAT tovább szerepel a listán. A NAT gépekhez ez a feloldási szabály haszontalan lesz, azaz megszűnik dolgozni nekik. Ha ténylegesen korlátozni kell a gépeket a NAT-nek bizonyos szempontból - jobb, ha kifejezetten, mint ilyen bonyolult módon csináljuk.

A hibakeresés után kaptam egy ilyen egyszerű tűzfalat:
#! / bin / sh

# ipfw cmd
fwcmd = "/ sbin / ipfw"

# Belső interfész
iif = "vr2"
# Külső interfész
oif = "vr0"

# Belső IP-cím
iip = "192.168.78.254"
# Külső IP-cím
oip = "178.165.65.79"

# Belső LAN
ilan = "192.168.78.0/24"

# Ellenőrizze a dinamikus szabályokat
$ add check-state

# Engedélyezzen helyi helyi tevékenységet
$ add allow ip bármilyen lo0-on keresztül

# nem engedélyezi, hogy a localhost küldjön csomagokat
$ add deny ip-t a 127.0.0.0/8-hoz
$ add deny ip a 127.0.0.0/8-ból bármelyikhez

# Megtagadja a töredezett ICMP csomagokat
$ add megtagadni a icmp-et bármelyik fragtól

# Megtagadja a belső hálózathoz való kapcsolódásokat a külső hálózatokból.
$ add megtagadni az ip-t a $ -tól $ -ig

# A külső interfésszel történő adás megtagadása
$ add deny log icmp-t a 255.255.255.255-ig a $ -on keresztül
$ add deny log icmp-et a 255.255.255.255-ig $ -on keresztül

# NAT a belső hálózathoz
$ add át natd ip-t $-tól a $ -hoz
$ adja át a natd ip átirányítását a $ -tól $ -ig

# Engedélyezi a létrehozott kapcsolódásokat
$ add engedélyezze a tcp-t bármelyikből létrejötthez

# A kimenő forgalom engedélyezése
$ add allow ip $-tól minden out xmit $ -hoz

# Multicast engedélyezése
$ add engedélyezi az igmpet a 224.0.0.0/8 tartományba a $ -on keresztül
$ add engedélyezi az igmpet a 239.0.0.0/8 tartományba a $ -on keresztül
$ add engedélyezd a udp-ot bármelyikből a 239.0.0.0/8 tartományba $

# A DNS engedélyezése
$ add engedélyezd a udP-t bármely 53-ből $ -ig

# Engedélyezze az NTP-t
$ add engedélyezi a udp-ot bármelyikből 123-ra $ -on keresztül

# SSH kapcsolat engedélyezése a szerverre
$ add allow tcp bármelyikből 22-nek $-on keresztül

# HTTP kapcsolat engedélyezése a kiszolgálóhoz
$ add add meg a tcp-t bármelyikből 80-ig $ -on keresztül

# Engedélyezi az FTP kapcsolatot a kiszolgálóval
$ add engedélyezze a tcp-t bárhonnan nekem 20,21,64000-64999 $ -on keresztül

# Lehetővé teszi az icmp echo kérést, az echo válasz és a TTL csomag lejáratát
$ add allow icmp bármelyik icmptypes-hez 0,8,11

# Engedélyezi a helyi hálózathoz való kapcsolódást
$ add engedélyezzen ip-t bármelyikből $ -on keresztül

# Más tevékenység megtagadása
$ add deny log logamount 10000 IP-t bárhonnan bármelyikhez


Valószínűleg a következő sysctl paraméterek is érdekesek lesznek: tűzfal:
# sysctl -a | grep ip.fw
net.inet.ip.fw.static_count: 17
net.inet.ip.fw.default_to_accept: 0
net.inet.ip.fw.tables_max: 128
net.inet.ip.fw.default_rule: 65535
net.inet.ip.fw.verbose_limit: 100
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.one_pass: 1
net.inet.ip.fw.dyn_keepalive: 1
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_max: 4096
net.inet.ip.fw.dyn_count: 0
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.enable: 1

a szabályellenőrzés állapotát és a tcp-t a tűzfal elején létrehozott bármelyikhez képest növelheti a teljesítményt, mert meg fogja vizsgálni a dinamikus szabályokat és a létrehozott kapcsolatokat a kezdetektől, aminek következtében az ellenőrzések száma csökken.




Kapcsolódó cikkek