APLIKAČNÍ PROXY
Funkci aplikačního proxy serveru si lze nejlépe představit na situaci, kdy uživatel vnitřní sítě chce uskutečnit např. telnetové spojení na vzdálený stroj v internetu (mimo vnitřní síť). Komunikace probíhá následovně: pokud uživatel spustí telnet na počítač umístěný mimo lokální síť, tak klient uskutečňující spojení se nejprve spojí s proxy serverem, ten se spojí s požadovaným strojem v Internetu. Nakonec proxy server pošle uživateli data získaná od vzdáleného stroje.
SOCKS PROXY
SOCKS proxy je v podstatě přepínač, který přepíná spojení ze systému (vnitřní sítě) mezi nějakým jiným spojením v vnější sítě. Většina SOCKS serverů pracuje pouze nad TCP spojením.
<*> Packet socket [ ] Kernel/User netlink socket [*] Network firewalls [ ] Socket Filtering <*> Unix domain sockets [*] TCP/IP networking [ ] IP: multicasting [*] IP: advanced router [ ] IP: kernel level autoconfiguration [*] IP: firewalling [?] IP: always defragment (required for masquerading) [?] IP: transparent proxy support [?] IP: masquerading --- Protocol-specific masquerading support will be built as modules. [?] IP: ICMP masquerading --- Protocol-specific masquerading support will be built as modules. [ ] IP: masquerading special modules support [*] IP: optimize as router not host < > IP: tunneling < > IP: GRE tunnels over IP [?] IP: aliasing support [*] IP: TCP syncookie support (not enabled per default) --- (it is safe to leave these untouched) < > IP: Reverse ARP [*] IP: Allow large windows (not recommended if <16Mb of memory) < > The IPv6 protocol (EXPERIMENTAL) --- < > The IPX protocol < > Appletalk DDP < > CCITT X.25 Packet Layer (EXPERIMENTAL) < > LAPB Data Link Driver (EXPERIMENTAL) [ ] Bridging (EXPERIMENTAL) [ ] 802.2 LLC (EXPERIMENTAL) < > Acorn Econet/AUN protocols (EXPERIMENTAL) < > WAN router [ ] Fast switching (read help!) [ ] Forwarding between high speed interfaces [ ] PU is too slow to handle full bandwidth QoS and/or fair queueing --->Pokud máme konfiguraci uloženou musíme jádro přeložit (jak viz. výše uvedené HOWTO) a restartovat systém.
24.94.1.123 __________ 192.168.1.1 _/\__/\_ \ | | / _______________ | | \| Firewall |/ | | / Internet \--------| System |------------| Workstation/s | \_ _ _ _/ |__________| |_______________| \/ \/ \/kde ovšem 24.94.1.123 musí být platná IP adresa v Internetu. Většinou ji pevně přidělí náš poskytovatel (je to tzv. statická IP adresa). Jelikož potřebujeme dvě IP adresy na jednom stroji, musíme tedy mít buď dva síťové adaptéry nebo jeden a vytvořit na něj IP alias. Druhému síťovému adaptéru nastavíme IP adresu 192.168.1.1 (jak uvidíme později). Ostatním stanicím v lokální síti můžeme přiřadit adresy v rozsahu 192.168.1.2-254. Pokud používáme distribuci RedHat Linux, tak síťové adaptéry nakonfigurujeme pomocí skriptu ifcfg-... umístěného v adresáři /etc/sysconfig/network-scripts. Používají se pro nastavení sítě při startu systému. Jako příklad můžeme uvést soubor ifcfg-eth1:
DEVICE=eth1
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=24.94.1.123
ONBOOT=yes
#ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:1620 errors:0 dropped:0 overruns:0 TX packets:1620 errors:0 dropped:0 overruns:0 collisions:0 txqueuelan:0 eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55 inet addr:24.94.1.123 Bcast:24.94.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1000 errors:0 dropped:0 overruns:0 TX packets:1100 errors:0 dropped:0 overruns:0 collisions:0 txqueuelan:0 Interrupt:12 Base address:0x310 eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1110 errors:0 dropped:0 overruns:0 TX packets:1111 errors:0 dropped:0 overruns:0 collisions:0 txqueuelan:0 Interrupt:15 Base address:0x350a routing tabulku zobrazí příkaz route -n. Ta by mela vypadat následovně:
#route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 24.94.1.0 * 255.255.255.0 U 1500 0 15 eth0 192.168.1.0 * 255.255.255.0 U 1500 0 0 eth1 127.0.0.0 * 255.0.0.0 U 3584 0 2 lo default 24.94.1.123 * UG 1500 0 72 eth0Nyní můžeme vyzkoušet, jestli je z libovolné pracovní stanice dostupná vnitřní adresa firewallu (pomocí příkazu ping) a zda je z firewallu dostupná libovolná adresa v Internetu. Pokud neco nefunguje, bude nejspíše chyba někde v nastavení sítě a je třeba konfiguraci překontrolovat. (Pomůže Network-HOWTO). Abychom zjistili, zda jádro filtruje pakety musíme zkusit, zda je dostupná vnější adresa firewallu z nějaké pracovní stanice vnitřní sítě. Pokud není je vše v pořádku. Pokud je, tak je nejspíše zapnutý IP forwarding nebo masquarade a nebo je už nastaven nějaky paketový filtr. Je potřeba výše uvedené vypnout a zkusit to znovu. Nyní můžeme přistoupit k samotné konfiguraci paktetového filtru pomocí IPChains.
---------------------------------------------------------------- | ACCEPT/ lo interface | v REDIRECT _______ | --> C --> S --> ______ --> D --> ~~~~~~~~ -->|forward|----> _______ --> h a |input | e {Routing } |Chain | |output |ACCEPT e n |Chain | m {Decision} |_______| --->|Chain | c i |______| a ~~~~~~~~ | | ->|_______| k t | s | | | | | s y | q | v | | | u | v e v DENY/ | | v m | DENY/ r Local Process REJECT | | DENY/ | v REJECT a | | | REJECT | DENY d --------------------- | v e ----------------------------- DENYNásleduje popis jednotlivých částí:
Testuje, zda paket nebyl nejakým způsobem poškozen. Pokud ano je odmítnut.
Přídavná kontrola před vstupním řetězem, aby se zabránilo průchodu některých deformovaných paketů, které mohou vyhovovat pravidlům vstupního řetězu.
Toto je první firewall chain, kterým je paket testován. Pokud výsledek není DENY
nebo REJECT
, paket pokračuje dál.
Pokud je použita masquarade, paket se "odmaskuje" a je poslán přímo dooutput
chainu.
Místo, kde se rozhoduje, zda se paket pošle lokálnímu procesu, nebo jinému (vzdálenému) stroji.
Představuje lokální proces, který může příjmat a posílat pakety.
Jestliže je paket vytvořen lokálním procesem a je určen pro lokální proces, odchází přes output chain na lokalní zařízeni - "lo interface" a přichází na vstup input chainu.
Pokud byl paket vytvořen lokálním procesem, tak se zkontroluje proti forward chainu, jinak se postoupí dále.
Pokud paket pouze přes náš stroj prochází, je určen pro jiný počítač, tak se prochází tento řeťez.
Než jsou pakety odeslány, tak se prochází tento řeťez.
Operace s chainy:
a) vytvoř nový chain -N
b) smaž prázdný chain -X
c) změň politiku vestavěného chainu -P
d) výpis pravidel v chainu -L
e) zrušení pravidel v chainu -F
Operace nad pravidly v chainu:
a) připoj nové pravidlo -A
b) vlož nové pravidlo na danou pozici -I
c) přepiš pravidlo na dané pozici -R
d) smaž pravidlo na dané pozici -D
Na závěr si ukážeme příklad skriptu, který nastaví IPChains firewall.
#!/bin/sh # # rc.firewall # ## Flush everything, start from scratch /sbin/ipchains -F input /sbin/ipchains -F output /sbin/ipchains -F forward ## Redirect for HTTP Transparent Proxy #$IPCHAINS -A input -p tcp -s 192.1.2.0/24 -d 0.0.0.0/0 80 -j REDIRECT 8080 ## Create your own chain /sbin/ipchains -N my-chain # Allow email to got to the server /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT # Allow email connections to outside email servers /sbin/ipchains -A my-chain -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT # Allow Web connections to your Web Server /sbin/ipchains -A my-chain -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT # Allow Web connections to outside Web Server /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT # Allow DNS traffic /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT ## If you are using masquerading # don't masq internal-internal traffic /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT # don't masq external interface direct /sbin/ipchains -A forward -s 24.94.1.0/24 -d 0.0.0.0/0 -j ACCEPT # masquerade all internal IP's going outside /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0.0.0.0/0 -j MASQ ## Deny everything else /sbin/ipchains -P my-chain input DENYPodrobné informace o konfiguraci IPChains lze najít na adrese http://dosc.linux.cz/HOWTO/IPChains-HOWTO.html.
POZN:U starších verzí jádra se používala technika IPFWADM, kterou zde nebudeme zmiňovat.
Hlavní nevýhodou systému NAT je, že jakmile jsou obsazeny všechny veřejné IP adresy (IP adresy v Internetu), tak ostatní uživatelé, kteří chtějí vstoupit do Internetu, musí čekat, dokus se některá adresa neuvolní.
Pokud chceme NAT používat, je zapotřebí si stáhnout z adresy http://www.suse.de/~mha/HyperNews/get/linux-ip-nat.html balík např. nat-current.tar.gz, přeložit jej a nainstalovat. Pokud jsme ta učinili, tak můžeme přidávat pravidla pro převod adres takto:
ipnatadm -O -i -b -S 1.1.1.1/32 -M 134.109.192.223/32
což znamená, že NAT přeloží u odchozích paketů adresu 1.1.1.1 na adresu 134.109.192.223 a obráceně u příchozích paketů.
POUŽITÁ LITERATURA:Firewall-HOWTO.html, IPCHAINS-HOWTO.html, IP-Masquerade-HOWTO.html, http://www.suse.de/~mha/linux-ip-nat/diplom/