Apache portforward mögött nem működik rendesen

Fórumok

Sziasztok a következő a problémám.

Van egy Ubi szerver 12.04 azon fut egy apache2. Azt akarom megoldani, hogy mivel ezen a hálón több szerver is van kívülről egy bizonyos portcímen lehessen csak elérni de belülről ez egy szabványos 443-as port legyen. Vagyis ha beírom a böngészőmbe, hogy https://x.y.hu:8080 akkor a belső szerveren lévő weboldal jelenjen meg. De ez még nem minden ezen a szerveren több weboldal is van névvel szétválasztva vagyis ha azt írom be, hogy https://xxx.yyy.hu:8080 akkor a másik oldal jöjjön be. Addig el tudtam jutni, hogy az egyik oldal bejön szépen de a másik az istenért nem akar menni kívülről belülről nagyon szépen megy a dolog minden gond nélkül. Szerintem az első oldal is csak azért, mert az a default.

Az első virtualhost az így néz ki:

< IfModule mod_ssl.c >
< VirtualHost _default_:443 >
ServerName default

ServerAdmin webmaster@localhost

DocumentRoot /var/www
< Directory / >
Options FollowSymLinks
AllowOverride None
< /Directory >
< Directory /var/www/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
< /Directory >

...

< /VirtualHost >
< /IfModule >

A másik az pedig így:

< IfModule mod_ssl.c >
< VirtualHost *:443 >
ServerName xxx.yyy.hu
ServerAdmin info@localhost

DocumentRoot /home/a
< Directory /home/a >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
< /Directory >

...

< /VirtualHost >
< /IfModule >

Segítségeteket előre is köszönöm mindenkinek.

További szép napot.

Hozzászólások

Ebben a felallasban nem is fog menni. Name base helyett ip base kellene ebben az esetben. Ezt olvasd át és javítsd a konfigokat ennek megfelelően. (természetesen, működik 1 ip-re is tobb névvel.)

http://httpd.apache.org/docs/2.2/vhosts/ip-based.html

Szijártó Zoltán
Aki tud az alkot, aki nem tud az csak szövegel.

Először is tisztázzunk pár dolgot!
- 1 IP-n 1 SSL-es weboldal lehet, ha több kell, több IP kell a gépre! Te kapásból egy 1 IP-n akarsz 2 weboldalt futtatni!
- Az SSL-es kapcsolathoz azért egy pár dolog hiányzik a config file-ból

Mindent törölj ki a /etc/apache2/sites-enabled könyvtárból. Generálnod kell egy cert-et a gépedre. Ez egy self-signed cert lesz, azaz saját magad aláírt, amit a böngészők figyelmeztetéssel nyugtáznak. Vagy veszel egyet, ami hivatalos cert és nem hisztiznek a böngészők.

Minden egyes oldalt külön konfig file-ba rakjál az áttekinthetősége miatt! Mindez látványosan:

</br>
 < VirtualHost *:443 >
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/xxx.crt
  SSLCertificateKeyFile /etc/apache2/ssl/xxx.key
  DocumentRoot /ahova/akarod
  ServerName xxx.yyy.hu
  ServerAdmin webmaster@akarmi.hu
 ...
 ...
 < /VirtualHost >

Ezt mentsd el valami file-ba a /etc/apache2/sites-enabled -ba

< VirtualHost *:80 >
DocumentRoot /ahova/akarod
ServerName valami
...
< /VirtualHost >

Ha sima 80-as port-os cuccot akarsz (http://valami) ezt meg egy másik file-ba

Mint írtam, lehet 1 ip vel is. (Régebben valóban nem volt ez a feature, de a kor halad.)

http://en.wikipedia.org/wiki/GnuTLS
http://isp-control.net/forum/printthread.php?tid=4696
http://www.ezylinux.com/en/enable-multiple-ssl-vhosts-and-certificates-…

Szijártó Zoltán
Aki tud az alkot, aki nem tud az csak szövegel.

Lehet nem írtam le rendesen. A beállítások a belső oldalról tökéletesen müködik minden oké. Megy a hhtps és minden más is. innen nincs gond. A dns-be beregisztráltam a jó webcímet és ha így hívom https-el akkor megy. Csak kintről nem megy ha a 8080-as porton próbálkozom.

Köszi de pont ez a gond, hogy bent a cégnél a micike titkárnőnek és egyéb embereknek nem igazán tudom elmagyarázni, hogy a 8080 as portot hogy kell beírni a webcím mellé. De kintről pedig a 443-as port másik szervert kell hogy mutasson. Ez afféle szeretném a belső weboldalt kintről is elérni dolog anélkül, hogy a belsőhálón bármiféle változás érzékelhető lenne.;-)

A megfejtés: < VirtualHost *:8080 >
A HTTP protokoll esetében szegény apache nem fogja tudni, hogy melyik domain-re érkeztél (nameg forward után hogy melyik porton) hanem ezeket mind-mind a http fejlécből szedi ki. Mivel nincs bejegyzés a külső domain, külső portra, ezért a default oldalt fogja behozni (default).
Hozz létre egy bejegyzést, hogy tudja, azokat a kéréseket hova kell raknia

// Happy debugging, suckers
#define true (rand() > 10)

Ez így minden probléma nélkül megoldható.
Konfigold fel az apache-t 443-ra ahogyan az szokás. Aztán egy választott portot pl 8080-as forwardolj/masquaradolj be a routeren, valahogy így: 8080:publicIP:443.

Az apache konfigban azt kell ellenőrizni, hogy a beérkező http kérésben mi szerepel host-nál és azt hogyan tudja az apache értelmezni.

Linuxscripting

"Addig el tudtam jutni, hogy az egyik oldal bejön..."
Gondolom kintről a külsó ip-re jövö 8080 port forgalmát irányítottad a belső ip 443 portjára.
Következmény:
"< VirtualHost _default_:443 >
ServerName default
..."
Ez a host fog válaszolni...
Ahhoz, hogy úgy működjön ahogy szeretnéd x.y.hu és xxx.yyy.hu-nak is regisztrált domainnak kellene lennie és a külső ip-re mutatnia - ami mivel belső hálót írtál - nem feltétlenül így van.

Tipp: linuxos kliens gépen /etc/hosts file-ban minkét domain v host név összerendelés a külső ip-vel. Ha Windows használsz a Windows\system32\drivers\etc\hosts file-t keresd.

Szerintem igen, de nem a szerver gépen hanem a kliensen... Most olvasom:
"A dns-be beregisztráltam a jó webcímet és ha így hívom https-el akkor megy"

Ha ez a helyi -belső hálón levő- dns szerinted külső címről érkező kérésnél honnan tudja az apache, hogy meyyik host válaszoljon...Jobb híjján a default...

Én leszek az első aki elhiszi Csabinak, hogy az Apache jól van beállítva. Én egy ngrep-el lehallhatnék egy kérés belülről és kivülről, majd ssldump-al belenéznék, hogy mi a különbség.

--
Kristof

Megmondom neked, az lesz a különbség, hogy más a http fejlécben a host név és a port (amit fentebb is leírtam, csak baszik rá;]). Az apache meg szarul van beállítva, hozzá kell adnia a külső hostot és portot is a virtualserver listához, ő nem fogja kitalálni helyetted hogy az ugyanaz.

// Happy debugging, suckers
#define true (rand() > 10)

Ne a lokális portból indulj ki, hanem abból ami a HTTP fejlécben szerepel (host-al egyetemben). A webszerver a fejlécben szereplő dolgok alapján válaszol, ha külső host-al/port-al, akkor azt is fel kell venni (ő nem fogja tudni kitalálni magától)

// Happy debugging, suckers
#define true (rand() > 10)

Hali,

A problémát nagy valószínűséggel az okozza számodra, hogy a https-hez egy IP-d van és ezen kell név alapján virtual hostokat szétválasztani. Ezen segíthet számodra az apache SNI, vagy összegyűjtöttem néhány linket a témában itt.
A másik probléma pedig az, hogy a névfeloldás máshogy kell, hogy menjen az internet irányából, illetve a belső hálóról. Ez utóbbi problémát egy belső DNS szerverrel (dnsmasq, vagy bind9 a keményebbeknek) lehet kezelni. Több helyen is üzemel ugyanilyen elven rendszerem.

--

kincza

Köszi. Az igazság az, hogy azért írtam a linux kezdő topikba ezt a problémámat,mert nem vagyok profi és nem igazán tudok mit kezdeni a varázsszavakkal. Jó lenne ha valaki úgy segítene ha ad egy ötletet legalább leírja, hogy mit kell tennem vagy mit ért alatta. Kérlek benneteket, hogy ha lehet picit részletesebben az ötleteket, mert a varázsszavak nekem nem mondanak semmi. Le tudom tölteni fel tudom telepíteni el tudom olvasni a MAN-t de attól még nem tudom kitalálni ki mire gondol ha nem ír konkrétumot. Köszönet.

Ha csak egyedül használnád kintről én maradnék a host files megoldásnál ( http://hup.hu/node/125953#comment-1628314 ).
Ha belső hálón működik ne bánts a szerver konfigot...
Még egyszer: kliensen hosts file-ba "szerver_ppoe_ip x.y.hu xxx.yyy.hu"
sor felvesz.
böngészőbe https://szerver_ppoe_ip:8080 -ra (és https://x.y.hu:8080 -ra) x.y.hu válaszol (default...)
https://xxx.yyy.hu:8080 -ra a másik host kell válaszoljon...

Ha csak sima port forward van 8080-ról 443-ra akkor 2.-ra is x.y.hu válaszol ha külső ip-hez xxx.yyy.hu név a dns-ben...
2 lehetésges megoldás:

a:
szerver oldalon is összerendelni a külső ip-t és a neveket.
b:
sima port forward helyett külső ip tcp 8080-ra érkező forgalom natolása a belső ip 443 portjára...