Jak obejít zakázaný TCP Forwarding u SSH



Znáte to… spustíte ssh s parametrem -D1337, ale když se zkusíte připojit na SOCKS5 server na portu 1337, zjistíte, že zákeřný admin zablokoval forwarding portů (SSH tuneling) pomocí direktivy “AllowTcpForwarding no” v konfiguráku /etc/ssh/sshd_config a vy nemůžete “zneužít” jeho linku pro vlastní potřeby a jediné, co se vám dostane je chybová hláška ssh ve stylu: “channel 3: open failed: administratively prohibited: open failed”. V tomto článku se dozvíte jak věc obejít pomocí malého workaroundu. Mimo jiné také pochopíte, jak je zakazování AllowTcpForwarding u účtů s shellovým přístupem zbytečné.


Vtip je v tom, že váš uživatel na serveru se může připojit k internetu pomocí connect(), jen vám to nedovolí přímo SSH, musíme si tedy všechnu práci za SSH udělat ručně.

Postup je následující:

1.) Nejdříve musíme nastavit na daném serveru přihlašování pomocí veřejného klíče (tedy bez hesla). To zde nebudu rozebírat, na internetu je dost článků jako tento, které to popisují.

2.) Pak rozchodíme na daném serveru SOCKS server pro (x)inetd pod naším uživatelským účtem. Servery pro inetd se od serverů jako apache liší v tom, že samy nenaslouchají na žádném portu, ale po spuštění komunikují na stdin/stdout, takže za normálních okolností se na ně “připojíme” klávesnicí a obrazovkou, inetd ale po spuštění propojí stdin a stdout tohoto serveru s naslouchajícím síťovým socketem a vše je tedy v pořádku. My této vlastnosti využijeme a server si v dalším kroku spustíme na dálku přes SSH. Já jsem použil tento SOCKS4 server napsaný v PERLu, protože je jednoduchý a já jsem neměl žádný problém ho rozchodit na cílovém serveru.

prostě jsem kód nakopíroval do souboru ~/socks a nastavil jsem mu práva pro spuštění příkazem chmod +x ~/socks.

3.) Nyní na klientské straně spustíme program socat pomocí následujícího příkazu:
socat TCP4-LISTEN:1337,forever,fork EXEC:"ssh user@host ./socks"

Část “user@host” samozřejmě upravíme podle naší potřeby. Pokud všechno proběhlo hladce, tak nám na portu 1337 běží SOCKS4 server. Podobný PERLovský SOCKS5 server jsem zatím BOHUŽEL nenašel, ale asi by nebyl problém ho napsat. Kdyby ho někdo měl, tak se mi prosím ozvěte…

4.) Vyzkoušíme pomocí tsocks (musíme otevřít další terminál, protože v prvním nám na popředí běží socat):
Jenom upozorním, že je nutné mít v tsocks nastavený server_type = 4:
[09:32:38] 0 ;) harvie@harvie-ntb ~ $ cat /etc/tsocks.conf
server = 127.0.0.1
server_port = 1337
server_type = 4
 
[09:32:52] 0 ;) harvie@harvie-ntb ~ $ curl whatismyip.org; echo
72.24.87.148
[09:32:59] 0 ;) harvie@harvie-ntb ~ $ tsocks curl whatismyip.org; echo
120.42.182.79

A to je pro dnešek vše přátelé.




Líbí se vám článek? Chcete se o něj podělit? Přidejte ho! (volba topclanky.cz nevyžaduje registraci)

6 Responses to “Jak obejít zakázaný TCP Forwarding u SSH”

  1. Bystroushaak Says:

    Pekny, to se bude hodit :)

  2. Franta Says:

    Musel jsem si vyzkoušet to protiopatření s apparmorem – tady je: AppArmor vs. iptables – blokování sítě

  3. Visgean Skeloru Says:

    A co když nemáme socat?

  4. Harvie Says:

    Visgean Skeloru: socat by šel nahradit některými verzemi netcatu. prakticky cokoliv, co umí naslouchat a při spojení udělat pipu mezi socketem a zadaným příkazem, který se při spojení spustí.

    Franta: taky by to mělo jít přes IPtables per-user…

  5. Franta Says:

    Harvie: vždyť o tom ten článek je :-)

  6. Harvie Says:

    Franta: Ses nakej chytrej :-P musis pochopit, ze ja clanky pisu ale nectu :-D Sem videl jenom velky napis AppArmor, tak sem clanek ignoroval jako overkill. :-)

Leave a Reply