Przekierowanie portu 8443
|
waxi |
Dodano 11-07-2008 09:28
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Witam wszystkich.
Mam z pozoru prosty problem jednak nie mogę sobie z nim poradzić. Sprawa dotyczy przekierowania portów. Opiszę wszystko od początku, może sam coś przeoczyłem.
Otóż moja sieć składa się z ok. 60 komputerów i 2 serwerów. Łącze to DSL z &tp, dalej stoi WRT54GL z Tomato 1.19. Router skonfigurowany jest w ten sposób, że blokuje wszystkie nieużywane porty dla większości komputerów, w tym dla serwerów. Zaszła jednak potrzeba udostępnić na zewnątrz aplikację działającą w oparciu o przeglądarkę internetową na porcie 8443. Ustawiłem więc stosowną lukę w blokowanych portach, włączyłem przekierowanie portu 8443 na serwer i niestety nie działa tak jak powinno. Reguła blokująca porty na serwerze wygląda następująco:
- 1-52 s/d
- 54-79 s/d
- 81-442 s/d
- 444-999 s/d
- 1000-8442 d
- 8444-65534 d
(s - port źródłowy, d - port docelowy)
Przy powyższych ustawieniach niestety nie można nawiązać połączenia z serwerem po porcie 8443 mimo, że jest on wykluczony z reguły blokowania i odpowiednio przekierowany. Co ciekawe, kiedy z reguły usunę ostatni wiersz czyli blokowanie portów z zakresu od 8444 do 65535, ustanowienie połączenia jest możliwe i strona pojawia się poprawnie.
W innym wątku na forum uzyskałem informacje, że róch HTTP wykorzystuje też porty z zakresu > 1000. Stąd też w tym zakresie blokowane są tylko porty docelowe. Czy w przypadku połączenia przez port 8443 wymagane jest odblokowanie jeszcze jakiś portów? Gdzie jeszcze może tkwić problem?
Znalazłem również wątek, w którym opisana była możliwość stworzenia tunelu przez SSH i Putty jednak w tym wypadku jest to o tyle nie możliwe do zrealizowania, że obsługa aplikacji musi być jak najprostsza, bez wykonywania żadnych dodatkowych czynności.
Będę wdzięczny za wszelką pomoc. |
|
|
|
Shanti77 |
Dodano 11-07-2008 11:04
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Przy połączeniu HTTP adres źródłowy jest wybierany losowo, docelowy jest zazwyczaj 80(ale ten można zmienić :xx), dodatkowo NAT zmienia adresy źródłowe na losowe. Serwer odpowiada pakietem ze źródłowym portem 8443 i docelowym taki jaki był ustalony przez NAT. Jeśli odblokujesz tylko port 8443 to pakiety będziesz wysyłał, ale nie dostaniesz odpowiedzi. Można pewnie w translacji adresów zmienić port źródłowy na np. również 8443.
Możesz użyć takie regułki jako HPORT podajesz port na którym serwer ma ci odpowiadać, może to być też 8443. Powinno to chyba wyglądać tak:
iptables -A PREROUTING -t nat -j DNAT -p tcp -d ZEWNETRZNE_IP --dport HPORT --to-destination WEWNETRZNE_IP:8443
iptables -A POSTROUTING -t nat -j SNAT -p tcp -s WEWNETRZNE_IP --sport 8443 --to-source ZEWNETRZNE_IP:HPORT
Regułka musi występować PRZED innymi regułami
Edytowany przez Shanti77 dnia 11-07-2008 11:05
|
|
|
|
waxi |
Dodano 11-07-2008 12:27
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Dzięki, wypróbuję dziś wieczorem (będę wówczas dysponował dwoma niezależnymi adresami IP widzianymi z Sieci. O ile dobrze wywnioskowałem, regułka powinna być wpisana w skryptach firewalla, tak? I jeszcze jedno pytanie - jak rozumieć zapis w regułce ZEWNETRZNE_IP?
Edytowany przez waxi dnia 11-07-2008 13:15
|
|
|
|
Shanti77 |
Dodano 11-07-2008 18:20
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Ogólnie chodzi o to żeby samemu ustawić port źródłowy a nie żeby został on przyznany automatycznie. ZEWNETRZNE_IP to ip pod którymi jesteśmy widziani w internecie a WEWNETRZNE to te w sieci lokalnej, z ZEWNETRZNYM_IP może być problem gdy jest zmienne, wpisujesz w firewall. |
|
|
|
waxi |
Dodano 11-07-2008 22:27
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Tu akurat nie będzie z tym problemu ponieważ w firmie mamy DSL-a a tym samym stałe IP. Spróbuję zatem skonfigurować wszystko korzystając z regułki i zobaczymy, być może zadziała. Sprawdzę i dam znać. Tymczasem dzięki za pomoc.
Edytowany przez waxi dnia 12-07-2008 14:22
|
|
|
|
waxi |
Dodano 12-07-2008 14:23
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Niestety, zastosowanie proponowanej reguły nie rozwiązuje problemu. Nadal nie można połączyć się ze stroną. Regułka w moim konkretnym przypadku wygląda tak
iptables -A PREROUTING -t nat -j DNAT -p tcp -d 83.19.5.XXX --dport 8443 --to-destination 192.168.1.9:8443
iptables -A POSTROUTING -t nat -j SNAT -p tcp -s 192.168.1.9 --sport 8443 --to-source 83.19.5.XXX:8443
Co jeszcze możnaby zrobić żeby zaczęło to działać albo co i gdzie jeszcze zmienić? Będę wdzięczny za wszelkie rady.
Dodam, że w logach pojawia się taki oto zapis:
Jul 12 13:54:38 linksys user.warn kernel: ACCEPT IN=vlan1 OUT=br0 SRC=217.116.102.112 DST=192.168.1.9 LEN=64 TOS=0x00 PREC=0x00 TTL=116 ID=47404 DF PROTO=TCP SPT=1925 DPT=8443 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (020405B4010303020101080A000000000000000001010402)
Wydaje im się, że problem jest w tym, że port źródłowy za każdym razem jest inny z zakresu blokowanych portów dla IP 192.168.1.9. Jak sprawić aby wszelkie zapytania kierowane przez przeglądarkę po wpisaniu adresu https://zewnetrzne_ip:8443/ były kierowane wyłącznie na port 8443? |
|
|
|
Shanti77 |
Dodano 14-07-2008 22:04
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Sprubuj tak:
iptables -A POSTROUTING -t nat -p tcp -s 192.168.1.9 --dport 8443 -j SNAT--to-source 83.19.5.XXX:8443
Tylko regułka musi chyba być przed domyślną translacją adresów, więc może trzeba ją dodać w skryptach Init.
Edytowany przez Shanti77 dnia 14-07-2008 22:10
|
|
|
|
waxi |
Dodano 14-07-2008 22:09
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
OK, jutro spróbuję i dam znać. Czy tą pierwszą (PREROUTING) regułkę również wkleić do sekcji Init skryptów czy tylko tą drugą (POSTROUTING)? Rozumiem, że mimo zastosowania w/w regułek przekierowanie portu 8443 powinno być ustawione w Port Forwarding, czy tak? |
|
|
|
Shanti77 |
Dodano 15-07-2008 07:55
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Usługa na porcie 8443 jest uruchomiona w twoim LANie czy w Internecie, bo może źle zrozumiałem, założyłem że to ty łączysz się z tym serwerem w internecie, a może jest odwrotnie.
Jeśli serwer jest w LANie to najlepiej będzie zrobić forwardowanie i pozmieniać regułki firewalla, w ten sposób że pakiety z netu o celu TWOJEIP:8443 są przepuszczane i pakiety wyjściowe do netu o żródle IPLAN:8443 są też przepuszczane.
Edytowany przez Shanti77 dnia 15-07-2008 08:20
|
|
|
|
waxi |
Dodano 15-07-2008 09:31
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
To ja udostępniam usługę na porcie 8443, serwer stoi w moim LANie pod adresem 192.168.1.9. Chodzi o to aby ktokolwiek z Internetu był w stanie połączyć się z moją usługą na powyższym porcie przy założeniu, że wszystkie inne porty są zablokowane (tak jak opisałem w pierwszym poście).
Jak już wyżej pisałem, zauważyłem, że dla wszelakich zapytań kierowanych z Internetu do mojej sieci na porcie 8443 był też ruch na portach z zakresu >1000 (pisałem o tym w poście z 12-07).
Jak w takim razie powinny wyglądać regułki? Nie jestem specem od konfiguracji Tomato. Do wielu rzeczy sam doszedłem ale skrypty i dokładne działanie sieci nie są moją mocną stroną stąd też proszę o pomoc. |
|
|
|
Shanti77 |
Dodano 15-07-2008 11:16
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
A jak i gdzie zablokowałeś te porty? |
|
|
|
waxi |
Dodano 15-07-2008 12:05
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
W Access Restrictions ustawiłem blokadę jak na screenie:
Z informacji uzyskanych na forum w innym wątku wiem, że nie mogę zablokować źródłowych portów > 1000 - jedynie docelowe - gdyż nie będzie wówczas możliwe przeglądanie stron. W omawianym wypadku zablokowanie portów docelowych skutkuje brakiem odpowiedzi serwera. Kiedy odblokuję porty docelowe z zakresu > 1000 wszystko zaczyna działać, podobnie jest gdy zablokuję porty źródłowe (docelowe nadal odblokowane).
Edytowany przez waxi dnia 15-07-2008 12:07
|
|
|
|
Shanti77 |
Dodano 15-07-2008 19:21
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Sprubuj coś takiego:
-połącz się z routerem za pomocą telneta (Start->Uruchom)
telnet IPROUTERA
- logujesz się login: root hasło: takie jak przez WWW
- wpisujesz taką regułkę:
iptables -I restrict 1 -p tcp -s 192.168.1.9:8443 -j RETURN
(oczywiście musisz mieć zrobione przekierowanie portu 8443 na ip 192.168.1.9)
Jeśli zadziała to wpisujesz tą regułkę do Administration->Scripts->Firewall
Edytowany przez Shanti77 dnia 15-07-2008 20:01
|
|
|
|
waxi |
Dodano 15-07-2008 22:11
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Niestety, proponowany sposób nie działa. Próbowałem zarówno przez telnet jak i dodałem regułkę do skryptów firewalla. Nadal odnoszę wrażenie, że problem tkwi w tym, iż część zapytań kierowanych jest na portach z zakresu > 1000, które to porty są zablokowane jako wychodzące po stronie serwera będącego w LANie. Powoli tracę już nadzieję, że uda się rozwiązać problem bez konieczności pozostawienia przynajmniej części portów z w/w zakresu otwartych. |
|
|
|
Shanti77 |
Dodano 16-07-2008 09:26
|
User
Posty: 94
Dołączył: 18/06/2008 17:34
|
Być może twój serwer używa jednak jeszcze innych portów niż 8443, musiałbyś sprawdzić na jakich portach odbywa sie komunikacja w obie strony po zdjęciu blokady.
Po co właściwie blokujesz te wszystkie wychodzące porty na serwerze, nie lepiej powyłączać wszystkie zbędne usługi na tym serwerze? |
|
|
|
waxi |
Dodano 16-07-2008 09:29
|
User
Posty: 11
Dołączył: 07/10/2007 12:19
|
Tak będę musiał chyba zrobić choć blokowanie portów wydaje mi się sensownym dodatkowym zabezpieczeniem. W każdym razie dzięki za pomoc. |
|
|