iptables kérdés

Fórumok

Sziasztok!

Van egy tűzfal-gép, mögötte pár (virtuális) gépből álló NAT-olt háló. A tűzfal-gép kintről 4 IP-n figyel. A gondom az, hogy két belső gépnek is kellene válaszolnia a 80-as porton, attól függően, hogy melyik IP-n érkezik a kérés. Így próbálkoztam:

iptables -A FORWARD -i eth1 -s egyik_kulso_cim -p tcp -d szerver_1 --dport 80 -o eth0 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -s egyik_kulso_cim -p tcp --dport 80 -j DNAT --to szerver1:80

és ugyanez a másik külső címmel, és szerver2-vel. És mégis, a másik külső címre érkező kérésre is válaszol a szerver1. Mit csinálok rosszul?

Hozzászólások

Az hogy a kulso IP cimet source-nak raktad az jo? Szerintem destination kel legyen, hiszen arra a cimre jon a keres.

Ha nem mukodik akkor biztos hogy nem jo. A source (-s) nem jo mert a keresek nem arrol az IP cimrol jonnek hanem arra az IP cimre. Te azt akarod hogy ha valaki IP1:80-ra csatlakozik akkor kapja meg a gep1:80-at, ha pedig az IP2:80-ra csatlakozik akkor kapja meg a gep2:80-at. Magyaran a tuzfal szabaly azt kel csinalja: ha jon valaki az IP1:80-ra, dobd at a gep1:80-ra.
Tehat az IP1 cimzett (destination) nem pedig source.
Ird at, probald ki, szerintem menni fog.

Sem a source, sem a destination nem megfelelő, mert a feldolgozás sorrendje ez:

- az eredeti csomagban src=xxx (mindegy), dst=egyik_kulso_cim
- a PREROUTING NAT után src=xxx, dst=belso_szerver_cim
- ekkor jön a routing döntés, azaz eldől, hogy melyik hálókártyán menjen tovább a csomag
- aztán a filter tábla FORWARD chainje, ahol src=xxx, dst=belso_szerver_cim

Ebben a szabályban nem szerepelhet sem az src, sem a dst helyén az egyik_kulso_cim, mert:
- ha a dst lenne (pl. nem lenne a DNAT szabály), akkor a tűzfal lenne a végső célja a csomagnak, így nem jutna el a belső szerverhez (meg a FORWARD chainbe se, a routing decesion után az INPUT-ba kerülne)
- az src címhez nem lehet hozzányúlni a FORWARD chain előtt, a POSTROUTING chainbe, ahol át lehet írni csak a routing decision és a FORWARD chain után jut el a csomag, tehát amikor a FORWARD-nál tart, akkor még nem lehet az az src.

Vagy te nem ertesz valamit vagy en nem ertem hogy te mit mondasz. Senki sem akart a source cimhez nyulni. Vegyuk elejetol:

Mit akar a topic nyito: van egy gep ami hallgat az x.x.x.x IP cimen. A gep mogott van egy masik gep (belso halon) y.y.y.y IP cimmel. Na most o azt akarja hogy ha jon egy keres az x.x.x.x gep 80-as portjara az legyen atiranyitva az y.y.y.y gep 80-as portjara (port forward). A teljes szabaly erre igy nez ki:

iptables -A PREROUTING -t nat -d x.x.x.x -p tcp -m tcp --dport 80 -j DNAT --to-destinaton y.y.y.y:80

Ahoz hogy ez mukodjon meg annyi kel hogy a FORWARD lancban at legyen engedve a 80-as port:

iptables -A FORWARD -p tcp -m tcp --dport 80 -j ACCEPT

Persze mindez mukodik mas portra is mint a 80-as es a cel IP cim is lehet mas. A mi esetunkben van negy cel IP cim, tehat kel 4 szabaly a tuzfalba.

Ez a téma már többször túl lett tárgyalva a hup-on. Ha mind elolvasod okíthatsz is...

iptables -t nat -A PREROUTING -i eth1 -s egyik_kulso_cim -p tcp --dport 80 -j DNAT --to szerver1:80
iptables -A FORWARD -i eth1 -s egyik_kulso_cim -p tcp -d szerver_1 --dport 80 -o eth0 -j ACCEPT

Ez a szabályok alkalmazásának a sorrendje. Az első szabály átírja a cél IP-címét, de nem nyúl hozzá a forrás IP-címhez, az az eredeti forrás IP-cím marad.

A második szabályban a -s egyik_kulso_cim feltétel nem fog illeszkedni a bejövő csomagra, mivel annak a forrás IP-címe az eredeti feladó IP-címe.

A megoldás, hogy szedd ki a -s egyik_kulso_cim feltételt a FORWARD szabályból.