Portál AbcLinuxu, 9. května 2024 22:33


Dotaz: IPv6 a přesměrování portů

xkucf03 avatar 2.3.2009 22:43 xkucf03 | skóre: 49 | blog: xkucf03
IPv6 a přesměrování portů
Přečteno: 1026×
Odpovědět | Admin

Ahoj, napadá vás, jak přepsat tohle pravidlo pro ip6tables?

iptables -t nat -A OUTPUT     --destination localhost   -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT     --destination 10.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING --destination 10.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8080

Cílem je přesměrování portů v rámci jednoho stroje (10.0.0.1) tak, aby služba mohla běžet na neprivilegovaném portu 8080 a klienti se mohli zvenku připojovat na standardní port 80.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.3.2009 07:31 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů
Odpovědět | | Sbalit | Link | Blokovat | Admin
V ip6tables není NAT vůbec (a zřejmě nebude), a REDIRECT není zatím (možná bude). Řešil bych to pomocí userspace redirectoru, nebo rovnou pověsil ten démon na 80 a až pak mu odebral privilegia.
In Ada the typical infinite loop would normally be terminated by detonation.
3.3.2009 08:26 MMichal | skóre: 21
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů

Nebo tomu procesu nastavit capability CAP_NET_BIND_SERVICE, potom se bude moci povesit na privilegovany port i bez roota. Viz. man 7 capabilities

xkucf03 avatar 6.3.2009 23:50 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů - authbind?
Příloha:

Zkoušel jsem tohle (jako root):

execcap cap_net_bind_service=eip /sbin/sucap franta franta /bin/nc6 -l -p80
Caps: =ep cap_net_bind_service+i
Caps: = cap_net_bind_service+i
[debug] uid:1000, real uid:1000
sucaps: capsetp: Operation not permitted
sucap: child did not exit cleanly.

Což mi nefungovalo. A taky nevím, jak to bude, když budu tímhle způsobem potřebovat spustit bashový skript – tam bude potřeba, aby se práva dědila přes několik úrovní až k procesu, který má naslouchat na daném portu.

Na to by se mohlo víc hodit použití authbindu, ale ten zase neumí IPv6. Stáhnul jsem si jeho zdrojáky a pokoušel jsem se upravit libauthbind.c, ale moc daleko jsem se nedostal. Buď se mi povedl segfault :-) nebo jsem dostal:

$ authbind --deep nc6 -l -p80
nc6: bind to source :: 80 failed: No child processes

BTW: není tu nějaký znuděný céčkař, který nemá co na práci? :-)

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
xkucf03 avatar 11.3.2009 11:49 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů - authbind?
Nějaký nápad?

Zatím mám ty stránky přístupné po IPv6 jen takhle: http://ipv6.frantovo.cz:8080/
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
11.3.2009 14:09 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů - authbind?

Já bych se vydal cestou kvalifikací – zjistit, proč to nefunguje.

Díval jsem se do odkazované dynamické knihovny a řádná úprava není záležitost pár řádků (řeší se tam přístupová pravidla na základě IP aritmetiky).

xkucf03 avatar 3.3.2009 19:57 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše xinetd
Odpovědět | | Sbalit | Link | Blokovat | Admin

Zatím jsem přišel na náhradní řešení pomocí xinetd:

# default: on
service http
{
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    redirect = 127.0.0.1 8080
    log_on_failure += USERID
}

# default: on
service https
{
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    redirect = 127.0.0.1 8181
    log_on_failure += USERID
}

ale to se mi nelíbí, protože webový server neví, jaká skutečná IP adresa se k němu připojuje (vidí jen 127.0.0.1).

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
3.3.2009 21:03 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: xinetd
Ano. A navíc to brutálně zpomaluje.
In Ada the typical infinite loop would normally be terminated by detonation.
xkucf03 avatar 3.3.2009 21:37 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše authbind
Odpovědět | | Sbalit | Link | Blokovat | Admin

Našel jsem řešení pomocí authbind, které by údajně mělo fungovat: How-to set up Glassfish 2 on Debian or Ubuntu, ale nefunguje. Viz Glassfish v3, port 80, & Authbind. Prý za to může Java, ale podle mého pozorování je to spíš chyba authbindu a jeho nespolupráce s IPv6.

authbind nc6 -l -p23
nc6: bind to source :: 23 failed: Permission denied

Ani netcatu se totiž nedaří naslouchat na privilegovaném portu, pokud se používá IPv6 (po zadání přízaku výše naslouchá jen na IPv4) – netcat umí naslouchat na privilegovaném portu na IPv4, nebo na neprivilegovaném na IPv4 i IPv6, ale kombinace privilegovaný port + IPv6 se zdá být smrtící.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Řešení 1× (mozog)
xkucf03 avatar 11.6.2011 10:42 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: IPv6 a přesměrování portů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyřešeno:
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 8080
zdroj
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.