Czy możliwe jest przekierowanie portu wykonywalnego UDP?

0

Mam program czarnej skrzynki, który nasłuchuje na określonym porcie UDP. Chciałbym, aby słuchał wybranego portu UDP.

Czy istnieje sposób, aby oszukać plik wykonywalny w celu nasłuchiwania na innym porcie? Mogę sobie wyobrazić, że istnieje biblioteka, do której można wstawić LD_PRELOAD, która może przechwytywać wywołania systemowe i ułatwiać to.

Maszyna wirtualna jest oczywiście opcją dla osób o ciężkich rękach.

Catskul
źródło

Odpowiedzi:

2

Możesz użyć iptables do przekierowania jednego portu do drugiego. Będzie to działać tylko w przypadku połączeń zewnętrznych, ponieważ tabele nat, których używa poniższe rozwiązanie, nie są sprawdzane, gdy ruch jest lokalny (tj. Od 127.0.0.1 do 127.0.0.1 i tak dalej).

Wymaga to również włączenia przekazywania w jądrze, co może, ale nie musi być problemem bezpieczeństwa, z którym nie chcesz się zmierzyć.

Rozpocznij od włączenia przekazywania, jeśli nie ma go w żadnym z nich sysctl net.ipv4.ip_forward=1lub echo 1 > /proc/sys/net/ipv4/ip_forward. W takim przypadku prawdopodobnie powinieneś również ustawić wszystkie polityki iptables jako DROP zamiast domyślnego AKCEPTOWANIA (zależy to jednak od używanej dystrybucji GNU / Linux) i zezwalać tylko na ruch, który chcesz przejść, zamiast pozwolić na swobodny przepływ wszystkiego .

Następnie można dodać regułę do tablicy nat PREROUTING przekierować ruch przeznaczony do portu do portu X Y. Na przykład, aby przekierować ruch przychodzący do portu TCP 2222 do portu serwera SSH, TCP 22, użyj tego: iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22.

Więcej informacji o przekierowaniu portów i dokładniejszych punktach można znaleźć w różnych wyszukiwarkach i na przykład tutaj .

Sami Laine
źródło
0

Lepszym rozwiązaniem jest użycie netcat. Działa również z połączeniami z localhost i nie trzeba zmieniać sysctl.

Cały trik jest stworzenie named pipe,

 mkfifo mypipe

i użyj tego w ten sposób:

nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe

Ten przykład został stworzony, aby umożliwić ci przetestowanie tego polecenia za pomocą ssh. Przekierowuje połączenia ssh z portu 2222 na port mySSHport, cokolwiek to może być (22?).

Teraz, jeśli spróbujesz ssh do portu 2222,

 ssh me@localhost -p 2222

będziesz zalogowany.

Flaga -kinstruuje netcat, aby nasłuchiwał nawet po zakończeniu pierwszego połączenia. Możesz poprawić jego odporność, wstawiając go do nieskończonej pętli while:

while true; do
# echo "Listening..."
nc -k -l 2222 0<mypipe | nc localhost mySSHport 1>mypipe
done

I oczywiście wracając do OP, dla portów UDP należy dodać flagę -u.

Edytować:

Właśnie zdałem sobie sprawę, że w systemach z GNU w wersji nc (netcat), takich jak Arch Linux, polecenie powinno być

 nc -l -p 2222 0<mypipe | nc localhost mySSHport 1>mypipe

Przepraszamy za niedogodności.

MariusMatutiae
źródło