Sziasztok!
A következő érdekes kérdésre keresek választ/megoldást:
Adott egy szerver, aminek xyz portja mindenhonnan elérhető, bizonyos szolgáltatás fut rajta.
Namost: én ezt a bizonyos szolgáltatást otthonról nem akarom használni, helyette viszont szeretném elérni ennek a portnak a közreműködésével az ssh-t.
Megoldható-e az valahogyan iptablessel, hogy a csonkasanyi.otthonigepe.hu gépről xyz portra érkező kéréseket az sshra irányítsam, minden más helyről az xyz-re érkező kérést az alapértelmezett szolgáltatás fogadjon.
Én valami olyasmire gondoltam, hogy:
iptables -A INPUT -s csonkasanyi.otthonigepe.hu -p tcp --dport xyz -j REDIRECT --to-port ssh
Viszont ebben a formában nem működik...
Megoldható ez egyáltalán? Ha igen, mi a helyes parancs?
Thx, Sanyi
- 1407 megtekintés
Hozzászólások
man iptables:
REDIRECT
This target is only valid in the nat table, in the PREROUTING and OUTPUT chains
Ezért hát:
iptables -t nat -A PREROUTING -p tcp -s csonkasanyi.otthonigepe.hu --dport xyz -j REDIRECT --to-port 22
Vagy egy másik alternatíva:
iptables -t nat -A PREROUTING -i eth0 -p tcp -s csonkasanyi.otthonigepe.hu -d szerver --dport xyz -j DNAT --to-destination szerver:22
- A hozzászóláshoz be kell jelentkezni
OK, otthon kipróbálom.
Az eredményről majd beszámolok!
Sanyi
- A hozzászóláshoz be kell jelentkezni
ha nem fix ip-címed van, akkor csak addig jó, amíg az otthoni router nem kap újat.
a csonkasanyi.otthonigepe.hu iptables-be való befűzésekor fennálló ip-cím lesz érvényes "kiszolgáló restart"-ig
erre külön kell befűzni a szabályt, és lehetőleg "démonizálva" frissíteni mikor "host csonkasanyi.otthonigepe.hu" eredménye megváltozik.
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam, mindkét fenti sor működik, ... ha a 80 as portra irányítom az xyz portot!
De az ssh-t valamiért nem tudom elérni! :-( Ha win alól "telnet szerver xyz" parancsot kiadom, akkor nem tud kapcsolódni. Valami ötlet?
A dinamikus iphez van egy no-ip.hu regisztráció, tudtommal ez elég, ha fut a kliens...
- A hozzászóláshoz be kell jelentkezni
Az iptables szabály az aktuális IP címmel kerül föl, teljesen mindegy, hogy később megváltozik-e a kliens IP címe. Lehet, hogy már más a no-ip.hu-s címhez tartozó IP cím, de attól még az iptables szabályban továbbra is az eredeti van.
- A hozzászóláshoz be kell jelentkezni
OK, értem.
Viszont a probléma nem ez, mert ha az aktuális ip címemet írtam a szabályba, akkor sem ment.
- A hozzászóláshoz be kell jelentkezni
A filter táblában az INPUT láncon beengeded a kapcsolatot?
- A hozzászóláshoz be kell jelentkezni
Az xyz portra igen, hiszen azon megy 1 alapértelmezett szolgáltatás (amire nekem itthon nincs szükségem, ezért akarom ezt a portot sshra használni).
Az ssh-t nyílván nem engedem, mert akkor nem lenne értelme az átirányításnak...
- A hozzászóláshoz be kell jelentkezni
De a filter táblában a célport nem az xyz hanem a 22... A REDIRECT ugyanazt csinálja, mint a DNAT, csak itt biztosan az adott gép INPUT láncára kerül.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
???
Akkor semmi értelme a REDIRECTnek, hiszen az ssh-t direktben elérném.
- A hozzászóláshoz be kell jelentkezni
???
iptables -t nat -A PREROUTING -p tcp -s csonkasanyi.otthonigepe.hu --dport xyz -j REDIRECT --to-port 22
iptables -t filter -A INPUT -p tcp -s csonkasanyi.otthonigepe.hu --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
- A hozzászóláshoz be kell jelentkezni
Az eredeti irasodbol (szamomra) az derul ki, hogy az xyz port-od elerheto akarhonnan a 22 pedig nem...
Tehat, ha ez igaz, akkor az inputban megadott -s otthonigeped -p tcp --dport 22 -j ACCEPT szabalyal kiegeszitve elerheted, hogy az othonigepedrol az xyz porton elerd az ssh-d es csak az otthonigepedrol.
Ha a 22-es port elerheto barhonnan, akkor csak a fenti szabalyt hasznalva elerheted a kivant mukodes.
Tovabba fontolora veheted a knockd progi hasznalatat is.
- A hozzászóláshoz be kell jelentkezni
Pontosan!
Az xyz bárhonnan elérhető, a 22 pedig nem!
Épp ez a problémám, hogy ha a
-s otthonigeped -p tcp --dport 22 -j ACCEPT
sort beírom az inputba, akkor felesleges a REDIRECT/DNAT szabály, hiszen akkor direktben elérhetem az ssh-t.
-s otthonigeped -p tcp --dport 22 -j ACCEPT
Ezt nem akartam beírni, hanem az xyz-t akartam otthonról ssh-ra használni (amelett, hogy NEM otthonról egy alapértelmezett szolgáltatás van rajta, tehát az nem megoldás, hogy az ssh-t átteszem az xyz-re).
Amit még próbáltam:
iptables -t nat -A PREROUTING -s csonkasanyi.otthonigepe.hu -p tcp -i eth1 --dport xyz -j DNAT --to-destination 192.168.1.1:22
, ahol 192.168.1.1 a szerver belső lába. De sajnos ez sem ment, pedig a belső hálón mindet szabad!
- A hozzászóláshoz be kell jelentkezni
~ # iptables -A INPUT -p tcp --dport xyz -j ACCEPT
~ # echo Port xyz >>/etc/ssh/sshd_config
Azt hiszem, elvesztem a részletekben, mert épp nem értem, mit akarsz valójában. A fenti két sorral eléred az ssh szervert mindenhonnan.
- A hozzászóláshoz be kell jelentkezni
Az alábbi esetek lehetségesek:
1.) Alaphelyzet: XYZ porton futó szolgáltatás mindenhonnan elérhető, SSH sehonnan.
Feladat: Az SSH-t el kell érni egy gépről.
2.) Alaphelyzet: XYZ porton futó szolgáltatás és az SSH is mindenhonnan elérhető.
Feladat: nincs
3.) Alaphelyzet: XYZ porton futó szolgáltatás sehonnan sem érhető el, SSH mindehonnan.
Feladat: nincs
4.) Alaphelyzet: XYZ porton futó szolgáltatás és az SSH sem érhető el sehonnan sem.
Feladat: Az SSH-t el kell érni egy gépről.
A lehetséges megoldások:
1.) A 2. és 3. esetben nem kell csinálni semmit.
2.) Az 1. és 4. ponthoz: a szerverre az XYZ portra és az SSH-ra akármilyen módon érkező forgalom mindenképpen az INPUT láncba kerül, mivel helyi forgalom, nem átmenő. Ez sok helyen olvasható, de a manban is leírták.
man iptables:
filter: It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets).
2.a) beengeded arról az egy IP-ről az SSH portra
2.b) NAT-olsz és beengeded arról az egy IP-ről az SSH portra.
Látszik, hogy a 2.b-nek nem sok értelme van, működik, de felesleges. Ezt te is leírtad:
"...akkor felesleges a REDIRECT/DNAT szabály..."
A kérdések feléd:
1.) Pontosítani kellene, hogy miként képzeled el a kívánt működést, és a te szempontodból miben lenne más a 2.a és a 2.b eset.
2.) "Ezt nem akartam beírni, hanem az xyz-t akartam otthonról ssh-ra használni"
Ez miért jó? Miért nem jó az, hogy az SSH-t csak és kizárólag otthonról éred el, máshonnan nem, függetlenül az XYZ pottól és az azon futó szolgáltatástól? Ha tudnánk az okokat, jobban tudnánk segíteni.
"... az nem megoldás, hogy az ssh-t átteszem az xyz-re)"
Nem is kell.
"... hogy a csonkasanyi.otthonigepe.hu gépről xyz portra érkező kéréseket az sshra irányítsam, minden más helyről az xyz-re érkező kérést az alapértelmezett szolgáltatás fogadjon.
Én valami olyasmire gondoltam, hogy: ..."
Ez a topikfelvetés a 2.b esetet fedi le. A pontosított NAT parancssort fent már leírtuk.
- A hozzászóláshoz be kell jelentkezni
1. ha az ssh-t ki kell nyitnom az otthoni ipmre (akár xyz-n keresztül, akár direktben), akkor nekem is triviális, abban bíztam, tudtok olyan szabályt, amihez elég, ha az xyz nyitva van, az ssh zárva.
Ezek szerint az sem járható, ha a szerver külső lábának xyz portjára érkező forgalmat a belső láb ssh portjára irányítom. Bentről ugyanis minden szabad.
2. ha az iptables nem tudja kezelni, hogy a csonkasanyi.otthonigepe.hu címhez holnap már más ip cím tartozik, akkor nem is tudom beállítani, hogy az ssh csak az xxx.yyy.zzz.www címről legyen elérhető (hiszen az minden nap más és más lehet)
- A hozzászóláshoz be kell jelentkezni
1.) "amihez elég, ha az xyz nyitva van, az ssh zárva."
Az a fő kérdés, hogy mi a személyes ellenvetésed az INPUT chain egy hostra történő kinyitásával kapcsolatban.
a) hogy a tűzfalon a külső interfészen kinyitsz egy portot 1 hostra
b) hogy a külső interfészen jelenleg nem hallgat, de hallgathat az SSH
c) hogy a külső interfészen nem hallgathat az SSH
d) egyéb
A válaszod megfogalmazásához egy kis áttekintés.
"az sem járható, ha a szerver külső lábának xyz portjára érkező forgalmat a belső láb ssh portjára irányítom."
man iptables:
It redirects the packet to the machine itself by changing the destination IP to the primary address of the incoming interface (locally-generated packets are mapped to the 127.0.0.1 address).
Tehát a REDIRECT target erre nem jó, de a DNAT igen. Az első hozzászólásban szereplő példán annyit kell módosítani, hogy belső IP legyen megadva a --to-destination után. Ettől még az előbb linkelt ábrán látszik, hogy az INPUT láncban a külső interfészen ugyanúgy be kell engedni.
És ezen kívül van még egy lehetőséged, ez pedig a ROUTE target a --iif opcióval (bővebben itt), viszont nem biztos hogy az adott rendszer illetve kernel alatt elsőre működik, mivel:
man iptables:
(Please note: This target requires kernel support that might not be available in official Linux kernel sources or Debian’s packaged Linux kernel sources. And if support for this target is available for the specific Linux kernel source version, that support might not be enabled in the current Linux kernel binary.)
2.) "hiszen az minden nap más és más lehet"
Pontosan. Viszont ha a tűzfalscriptet a dinamikus hostneved TTL-jének megfelelő vagy akörüli gyakorisággal futtatod, akkor menni fog. Ezt természetesen külön chainben célszerű megtenni, és így más fontos funkciót nem akadályoz az SSH-t elérő kliens IP-jének változtatása, mindentől függetlenül feltölthető és törölhető a chain teljes tartalma.
3.) Ha az iptables/netfilter által jelenleg nyújtott megoldás nem megfelelő, akkor még mindig összerakhatsz egy VPN-t.
- A hozzászóláshoz be kell jelentkezni