[megoldva] második tűzfal, gateway talán bridge

Fórumok

Adott egy két szegmensből álló hálózat, pl.:

1. szegmens
-alhálózat 192.168.1.0
-gateway 192.168.1.254 - kifelé az internetre

2. szegmens
-alhálózat 192.168.2.0
-gateway 192.168.2.250 - a másik szegmens felé 192.168.1.250

Azt akarom hogy a két szegmens lássa egymást a '250 -es gateway -en kersztül, illetve a második szegmens (IP címre korlátozottan) kilásson az internetre, az '1.254 -es gateway -en keresztül.
Hogy kell ennek nekiesni?
Gondolom az iptables -t kell hozzá idomítani, de mit forward -olok és hova?

Hozzászólások

"a két szegmens lássa egymást a '250 -es gateway -en kersztül"
Forward a 192.168.1.0/24 és a 192.168.2.0/24 között.


iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

"második szegmens (IP címre korlátozottan) kilásson az internetre, az '1.254 -es gateway -en keresztül"
A 192.168.1.254-en forward és source NAT a 192.168.2.0/24 felől az internet irányába, és a 192.168.2.0/24-et route-olni a 192.168.1.250 felé.

Példa: a 192.168.2.55 kivételével minden 192.168.2.0/24 felől menő forgalom kimehet.


route add -net 192.168.2.0/29 gw 192.168.1.250
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.2.55 -j REJECT
iptables -A FORWARD -m state -s 192.168.2.0/24 --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.2.0/24 -j MASQUERADE

Természetesen mindkét gateway-en az IP forwardingot engedélyezni kell.

Alternatíva, hogy a 192.168.2.0/24 felől a nem 192.168.1.0/24 felé menő csomagokat NAT-olni a 192.168.1.250-re (vagy más nem használt IP-re) a 192.168.1.250-es gépen, így a 192.168.1.254-en nincs erre szükség.

Kössz :D
Épp azt szedegetem össze hogy is kellene az átalad javasoltakat összerakni úgy, hogy az iptables is értse - így azért kicsit egyszerűbb :)
Közben találtam olyat, hogy mac addressre is lehet forward -ot kiadni - ez még szebb lenne, de még nem tudom hogy illeszthetem.
Egébként, ha jól értem, az internet felé néző tűzfalon akkor ki kell bővíteni a mask -ot 255.255.0.0 , hogy beengedje a 192.168.2.x csomagokat?

* Én egy indián vagyok. Minden indián hazudik.

"az internet felé néző tűzfalon akkor ki kell bővíteni a mask -ot 255.255.0.0 , hogy beengedje a 192.168.2.x csomagokat?"

Nem. Az internet felé néző tűzfalon plusz szabályt kell felvenni, de a maszkokhoz nem kell nyúlni. Feltételezem, hogy mindkét hálózathoz /24 maszk van beállítva.

"mac addressre is lehet forward -ot kiadni"
Attól függ, hogy hol. A MAC-address csak egy Layer2 hálózatban terjed, tehát az internetes gateway számára a 192.168.2.0/24 hálózatból jövő forgalom a 192.168.1.254-es interfész MAC-addressével látszik, azaz ott már nem használható fel, csak a két hálózat közötti gépen, de ott is csak a 192.168.2.0/24 felől induló csomagoknál (visszirányban nem).

Javult a helyzet! Helysen, talán így

iptables -A FORWARD -i eth1 -m --mac-source XX:XX:XX:XX:XX:XX -o eth0 -j ACCEPT

Azonban azt köpte ki:
"iptables v1.3.6: Couldn't load match '--mac-source':/lib/iptables/libipt_--mac-source.so: cannot open shared object file: No such a file or directory.
Lekérdeztem a Debian csomagkezelőt - nincs ilyen állomány :(

* Én egy indián vagyok. Minden indián hazudik.

A mac address dolgot egyenlőre félre raktam.
Betettem a következőket a 192.168.1.250/2.250 gateway -re:

iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

A két szegmens nem látja egymást :(
Kell még külön bekapcsolni az ipforwardot?
A szegmensekben elhelyezkedő gépeken kell még valami, hogy tudják hogy a másik szegmens címzéséhez kit kell megszólítani?

* Én egy indián vagyok. Minden indián hazudik.

"Alternatíva, hogy a 192.168.2.0/24 felől a nem 192.168.1.0/24 felé menő csomagokat NAT-olni a 192.168.1.250-re (vagy más nem használt IP-re) a 192.168.1.250-es gépen, így a 192.168.1.254-en nincs erre szükség."

Bogarat ültettél a fülembe, bettem aa következőt:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.1.20

Azonban mintha nem tettem volna semmit.

#iptables -t nat --list

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT 0 -- 192.168.2.0/24 anywhere to:192.168.1.20

* Én egy indián vagyok. Minden indián hazudik.

Az egyik előző hozzászólásodban ez volt:

"iptables -A FORWARD -i eth1 -m --mac-source XX:XX:XX:XX:XX:XX -o eth0 -j ACCEPT"

Azaz az eth0 a 192.168.1.250, az eth1 pedig a 192.168.2.250.

Most fordítva írtad:

"iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.1.20"

Melyik interfésznév melyik IP-hez tartozik?

Mivel a NAT IP-jére nem válaszol senki, ezért alias vagy host route is szükséges lesz. A 192.168.1.20-at felveheted az interfészre aliasként, vagy a 192.168.1.254-en ezt az IP-t a 192.168.1.250-re route-olhatod.

Jogos!
1 szegmens 192.168.1.0 eth0
2 szegmens 192.168.2.0 eth1

Most egy kis scriptet eregetek (javítva), ami így néz ki:

iptables -F
iptables -t nat -F
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -t nat POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to 192.168.1.20

Ha ezt az utolsót eleresztem, akkor az 1 szegmensből tudom ping elni a 2 szegmens valódi címét, viszont a 2 szegmensből nem tudok pingelni az 1 szegmensbe - nem semmi. A routerig nem jut el a dolog :(
(az 1 szegmensbe csak azt a gépet bírom pingelni, ahol beállítottam a route -ot)

* Én egy indián vagyok. Minden indián hazudik.

Az 192.168.1.20-at felvetted aliasként, vagy route-oltad a 192.168.1.250 felé?

a) a 192.168.1.250-en:

ifconfig eth0:1 192.168.1.20 netmask 255.255.255.0

b) a 192.168.1.254-en:

route add -host 192.168.1.20 gw 192.168.1.250

A b) eset nem jó, ha nem csak a 192.168.1.254-gyel kell beszélni. Vagy minden az 1. szegmensbe tartozó hoston végre kell hajtani. Azaz egyszerűbb az a) változat.

A tcpdump mutat valamit?

"az 1 szegmensből tudom ping elni a 2 szegmens valódi címét"
Azaz ha jól értem, a 192.168.2.250-et. Ez érthető, ha az INPUT és OUTPUT láncok szabályai ezt megengedik.

"viszont a 2 szegmensből nem tudok pingelni az 1 szegmensbe"
Ha a fenti interfész alias nincs meg, akkor jogos.

"az 1 szegmensbe csak azt a gépet bírom pingelni, ahol beállítottam a route -ot"
A 192.168.2.0/24-re vonatkozó route-ot? Ezek szerint nem NAT-ol. A NAT szabály számlálói növekednek ilyenkor?

Mi van, ha a '2.0 címeket nat/SNAT a '1.250 -re? Végül is, azt hiszem ez lenne az eljárás akkor is ha ez egy internet gateway lenne és az internet oldal fix IP címes. Most fogom kipróbálni :)

Az az igazság, hogy tcpdump -ot nem mertem még feltenni (elvileg biztonsági problémát okozhat), de ha kell felcsapom, legfeljebb aztán purge.

Ha beteszem a nat/SNAT -ot:
Az '1.0 -ból tudom pingelni a '2.0 mint '2.0 - persze ha a '1.250 -et megjelölöm mint gateway a '2.0 irányba!
A '2.0 szegmensből, azonban nem tudom pingelni az '1.0 szegmenst, hiába, hogy a '2.250 -es a gateway -en keresztül.

>NAT szabály számlálói növekednek ilyenkor?
Még nem tudom, hogy lehet megnézni! - kiderítem.

* Én egy indián vagyok. Minden indián hazudik.

"Mi van, ha a '2.0 címeket nat/SNAT a '1.250 -re?"
Működnie kell.

"'1.0 -ból tudom pingelni a '2.0 mint '2.0 - persze ha a '1.250 -et megjelölöm mint gateway a '2.0 irányba!"
Ezek szerint ebbe az irányba nem megy a NAT - ha jól gondolom, ez is a cél, csak az internet irányába kellene NAT-olni.

Mivel lehet, hogy egy kicsit elkeveredtünk a lehetőségek között, ezért akkor tisztázzuk, hogy melyike(ke)t kellene megvalósítani. (Talán sikerült összeszedni)

1.) A 192.168.1.0/24 és a 192.168.2.0/24 közötti kapcsolat:
1.1.1) A 192.168.1.0/24 számára a 192.168.2.0/24 felől jövő forgalom 192.168.2.0/24-ként látszik. (Nem kell NAT)
1.1.2) A 192.168.1.0/24 számára a 192.168.2.0/24 felől jövő forgalom 192.168.1.x-ként látszik. (SNAT egy nem használt 192.168.1.x IP-re, és IP alias itt, vagy route a 192.168.1.0/24-es IP-jű gépekről)
1.1.3) A 192.168.1.0/24 számára a 192.168.2.0/24 felől jövő forgalom 192.168.1.250-ként látszik. (SNAT a 192.168.1.250-re)
1.2.1) A 192.168.2.0/24 számára a 192.168.1.0/24 felől jövő forgalom 192.168.1.0/24-ként látszik. (Nem kell NAT)
1.2.2) A 192.168.2.0/24 számára a 192.168.1.0/24 felől jövő forgalom 192.168.2.x-ként látszik. (SNAT egy nem használt 192.168.2.x IP-re, és IP alias itt, vagy route a 192.168.2.0/24-es IP-jű gépekről)
1.2.3) A 192.168.2.0/24 számára a 192.168.1.0/24 felől jövő forgalom 192.168.2.250-ként látszik. (SNAT a 192.168.1.250-re)
2.) A 192.168.2.0/24 és az internet felé menő forgalom:
2.1) A 192.168.2.0/24 felől az internet felé menő forgalom a 192.168.1.254 számára 192.168.2.0/24-ként látszik. (A 192.168.1.254-en SNAT a 192.168.2.0/24 forrásra is)
2.2) A 192.168.2.0/24 felől az internet felé menő forgalom a 192.168.1.254 számára 192.168.1.x-ként látszik. (1.1.2 vagy 1.1.3 eset)

A mostani helyzetre pedig nézzünk meg ezeknek a teljes kimenetét a 250-esen:

iptables -t nat -nvL
iptables -nvL

Nos. Jelenleg minden, majdnem úgy működik ahogy kellene :)
A problémát a hibás(?) HUB okozta.
Script, iptables parancsai:

iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to 192.168.1.250

A 2 szegmens (saját címen 192.168.2.x) pingelhető az 1 szegmensből, az 1 szegmensben kell a "route add" (minden gépen ahol kell).

Az 1 szegmens pingelhető a 2 ből, a '2.250 mint gateway a 2 szegmensnek.

A 2 szegmens eléri az internetet.

Ami ebből a scriptből hiányzik, az hogy a 2 szegmensből nem kellene mindenkit elérni és mindenkinek kijutni az internet felé. Arra gondoltam, hogy ezt később (most ez még csak egy "deszkamodell", a 2 szegmensben csak egy gép van) a mac-source segítségével tudom beton keményen kitudom zárni a továbbjutásból, bármelyik oldalon, azt hiszem a FORWARD ágon, így azért pinglhető lessz és láthatja a "központi" gépet mindkét oldal.

iptables -nvL
az INPUT és az OUPUT chain - üres.
a FORWARD chain, átvitt 12 - 12 csomagot 912 - 912 byte

iptables -t nat -nvL
a PREROUTING és az OUTPUT - üres
a POSTROUTING chain, átvitt 32 csomagot és 2279 byte -ot.

Viszont a 2 szegmens (egy darab modell) gépére feltelepítettem az ntp -t illetve upgrade -eltem - ahhoz képest kicsit kevésnek tűnik az átvitt adat?

* Én egy indián vagyok. Minden indián hazudik.

"kicsit kevésnek tűnik az átvitt adat"
"a FORWARD chain, átvitt 12 - 12 csomagot 912 - 912 byte"
"a POSTROUTING chain, átvitt 32 csomagot és 2279 byte -ot"

Tehát van egy-egy szabályod a 192.168.1.0/24 és 192.168.2.0/24 között.
Ha csak ennyi van az egész FORWARD chainben, és az internet felé működik a kapcsolat, a default policy minden bizonnyal ACCEPT, a nem a 192.168-as hálózatba irányuló forgalom a default policy számlálójában jelentkezik. A POSTROUTING pedig csak a kapcsolat első csomagját láttatja.

"a mac-source segítségével tudom beton keményen kitudom zárni"
Az IP-hez hasonlan a MAC-address is átírható illetve hamisítható. Általában a jogosultak engedélyezése biztonságosabb, mint egyesek tiltása.

Nem megy :(
a '250 -ben benne van:
>Forward a 192.168.1.0/24 és a 192.168.2.0/24 között.
>
>iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
>iptables -A FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

#iptables --list
Chain INPUT ... üres
Chain FORWARD
ACCEPT 0 -- localnet/24 192.168.2.0/24
ACCEPT 0 -- 192.168.2.0/24 localnet/24
Chain OUPUT ... üres

a "localnet" a 192.168.1.0/24

Az ip_forward be van kapcsolva:
echo "1" /proc/sys/net/ipv4/ip_forward

Viszont a switch tanusága szerint a 192.168.1.250 oldali interface meg sem rezdül, ha a 192.168.2.102 -röl pingelem a 192.168.1.52 :(
Mi kellhet még? 5let?

* Én egy indián vagyok. Minden indián hazudik.

"Az ip_forward be van kapcsolva:
echo "1" /proc/sys/net/ipv4/ip_forward"

Ez ugye így nézett ki:
echo "1" >/proc/sys/net/ipv4/ip_forward

Ellenőrzése:
cat /proc/sys/net/ipv4/ip_forward

"a 192.168.1.250 oldali interface meg sem rezdül"
A két interfész maszkja mekkora? Biztosan /24?
A 192.168.2.102-n a default gateway biztosan a 192.168.2.250?
A 192.168.1.254-en a 192.168.2.0/24 felé a gateway biztosan a 192.168.1.250?
A FORWARD láncban biztos nincs a fenti két szabály előtt semmi olyan, ami megfogná ezt a forgalmat?

A következő kimenetét nézzük meg. A pkts értékének nullánál nagyobbnak kellene lennie.

iptables -nvL FORWARD

Forgalom tesztelése:

tcpdump -i eth1 -n -vvv host 192.168.2.102 or host 192.168.1.52
tcpdump -i eth0 -n -vvv host 192.168.2.102 or host 192.168.1.52

"A szegmensekben elhelyezkedő gépeken kell még valami, hogy tudják hogy a másik szegmens címzéséhez kit kell megszólítani?"
Az IP-hez csak a gateway szükséges, illetve ha név szerint kellene, akkor hosts file, DNS, WINS, vagy egyéb névszolgáltatás.

Nem tudom hogy köszönjem meg :D
Nálam mindíg ilyen primitív butaságok zavarnak be - az echo "1" -ből csak a ">" hiányzott! Ráadásul valahonnan űgy emlékeztem ezt nem lehet ovisszalvasni.
Nem a FORWARD -ban van a hiba!
"A FORWARD láncban biztos nincs a fenti két szabály előtt semmi olyan, ami megfogná ezt a forgalmat?" Tuti semmi, néztem iptables-save -el, iptables --list -el.

"A pkts értékének nullánál nagyobbnak kellene lennie.
iptables -nvL FORWARD "
Nem nulla :)
"Az IP-hez csak a gateway szükséges, illetve ha név szerint kellene, akkor hosts file, DNS, WINS, vagy egyéb névszolgáltatás."
Miután észrevettem hogy beindult csak egy route kellet
Linux:
route add -net 192.168.123.0/24 gw 192.168.1.250
winXP
route ADD 192.168.123.0 255.255.255.0 192.168.1.250

Mostmár csak a routert ipqables scriptjét kell megszelidítenem.

* Én egy indián vagyok. Minden indián hazudik.

Egy kis javítás, helyesbítés:

iptables script:
echo "1" > /proc/sys/net/ipv4/ip_forward
# engedélyezett gép
iptables -A FORWARD -i eth1 --match mac --mac-source xx:xx:xx:xx:xx:xx -o eth0 -j ACCEPT
# és így tovább ahány gépkell ...
# és most jön egy lezárás
iptables -A FORWARD -i eth1 -o eth0 -j DROP
# végül a nat
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to 192.168.1.250

Történt hogy a "lezárást" kihagytam - mindenki kimehetett! A mac addresses cucc mintha ott sem lenne.

*** Érdekes ***
A winXP a második szegmensből, látja és képes ping -elni az első szegmensben lévő átjárót, a Debian/Linux nem - úgy hogy a netet látja (pl. pingeli a www.index.hu -t)!?

* Én egy indián vagyok. Minden indián hazudik.

"Történt hogy a "lezárást" kihagytam - mindenki kimehetett!"
Alapesetben (ha a script tényleg csak ennyi), a FORWARD chain default policy ACCEPT, így ha nincs a lánc végén explicite egy DROP vagy REJECT, minden egyéb forgalom átmehet. Jelen esetben azért, mert vagy illeszkedik a MAC-es szabályokra, vagy azért, mert semmi másra nem.

"A mac addresses cucc mintha ott sem lenne."
Ez így nem pontos. Azt is figyelembe vette, és amire nem volt szabály, azt is átengedte. Tehát mindent, mivel egy forgalmat tiltó szabály sem volt.

"A winXP a második szegmensből, látja és képes ping -elni az első szegmensben lévő átjárót, a Debian/Linux nem"
Azaz a 192.168.1.250-es Debianról nem tudod pingelni a 192.168.1.254-et, miközben a 192.168.2.x-ről indított 192.168.1.250-ként megjelenő forgalom megy? Az INPUT és OUTPUT lánc még mindig teljesen üres?

Ha ezekután a probléma még mindig fennáll, légy szíves a jelenlegi teljes tűzfalszabályrendszert és a routingot idemásolni, mert nehéz a hozzászólások közötti részletek összeállítása.