NFsec Logo

Przekazywanie portów TCP

10/07/2009 w Hacks & Scripts Brak komentarzy.  (artykuł nr 94, ilość słów: 412)

P

rzedstawiony hack jest tłumaczeniem “Forwarding TCP Ports to Arbitrary Machines” z książki “Linux Servers Hacks” autorstwa Rob’a Flickenger’a udostępnionym on-line (Hack #48) na stronie http://hacks.oreilly.com. Do tłumaczenia zostało dodane także parę informacji od tłumacza.

   Jak widzieliśmy, bardzo prosto jest przekazywać porty TCP i UDP z firewalla do komputerów znajdujących się wewnątrz sieci za pomocą programu iptables. Lecz jeśli potrzebujesz przekazywać ruch z dowolnych adresów do komputera, który nie jest nawet w Twojej sieci? Warto wypróbować program przekazujący porty w warstwie aplikacji, jak np. rinetd.

Ten prosty wycinek kodu nie jest najnowszy, ale jest mały, wydajny i doskonale radzi sobie z rozwiązaniem tego problemu. Rozpakuj archiwum (tar zxvf rinetd.tar.gz) i po prostu uruchom program make, a pojawi się niewielki plik binarny: rinted, który pozwoli Ci swobodnie przekazywać porty TCP. Niestety program rinetd nie obsługuje portów UDP.

Plik konfiguracyjny jest rozbrajająco prosty:

[Adres źródłowy] [Port źródłowy] [Adres docelowy] [Port docelowy]

Każdy przekazywany port powinien być zdefiniowany w oddzielnym wierszu. Adresy źródłowy i docelowy mogą występować w postaci nazw hostów lub adresów IP, zaś IP: 0.0.0.0 wiąże program rinted z każdym dostępnym lokalnym adresem IP:

0.0.0.0 80 some.othersite.gov 80
216.218.203.211 25 123.45.67.89 25
0.0.0.0 5353 my.shellserver.us 22

Zapisz plik pod nazwą /etc/rinetd.conf i skopiuj program rinetd w wygodne miejsce (np. /usr/local/sbin/). Następnie po prostu wystartuj go poleceniem: rinetd.

Pierwszy wpis w przykładowym pliku konfiguracyjnym przekazuje cały ruch WWW skierowany do adresów lokalnych do witryny o adresie: some.othersite.gov. Należy mieć na uwadze, że takie rozwiązanie jest dopuszczalne tylko wtedy, gdy nie ma innego procesu (jak np. Apache) związanego z lokalnym portem 80.

Następny wpis przekazuje wchodzący ruch SMTP do adresu IP: 216.218.203.211 do serwera poczty pod adresem IP: 123.45.67.89 (lecz nie ingeruje w pracę agentów SMTP związanych z innymi lokalnymi adresami IP). Ostatni przykładowy wpis spowoduje przekazanie całego ruchu wchodzącego na porcie 5353 do serwera SSH o nazwie my.shellserver.us. Wszystko to działa bez translatora NAT czy specjalnej konfiguracji jądra. Po prostu uruchom program rinetd, a stanie się on demonem i zacznie oczekiwać na dane na określonych portach.

To narzędzie może naprawdę być pomocne przy zmianie adresów numerycznych lub fizycznym przenoszeniu serwerów, ponieważ usługi pozostaną pozornie na pierwotnych adresach IP (choć pochodzą faktycznie z zupełnie innej sieci). rinetd nie wymaga nawet uruchomienia przez użytkownika root, oczywiście jeśli jest tylko wiązany z portami o numerach większych niż 1024. Są też duże możliwości sterowania dostępem i tworzenia dzienników. To malutkie narzędzie warto mieć, kiedy potrzebna będzie droga pośrednia do portów TCP.

Więcej informacji: Rinetd, man iptables, Hacks O’Reilly

Kategorie K a t e g o r i e : Hacks & Scripts

Tagi T a g i : , , ,

Komentowanie tego wpisu jest zablokowane.