Forum

Multiple web Servers over a Single IP on port 80 using hiawatha as a reverse proxy

ricochet
15 March 2018, 19:45
Hello everybody !
My question is how to setup route requests to other internal servers ?
I have 1 public ip address and 2 internal web servers behind hiawatha !
 hiawatha -m
Enabled modules: Cache, ChallengeClient, FileHashes, IPv6, Monitor, ReverseProxy, TLS v2.6.0, ThreadPool, Tomahawk, UrlToolkit, XSLT

 hiawatha -v
Hiawatha v10.7, copyright (c) by Hugo Leisink <hugo@leisink.net>

uname -a
Linux rproxy 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u5 (2017-09-19) x86_64 GNU/Linux

 ufw status
Status: active

To Action From
-- ------ ----
80/tcp ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)

cat hiawatha.conf
# Hiawatha main configuration file
#

# VARIABLES
# With 'set', you can declare a variable. Make sure the name of the
# variable doesn't conflict with any of the configuration options.
# The variables are case-sensitive and cannot be redeclared.
#
#set LOCALHOST = 127.0.0.0/8


# GENERAL SETTINGS
#
ServerId = www-data
ConnectionsTotal = 1000
ConnectionsPerIP = 25
SystemLogfile = /var/log/hiawatha/system.log
GarbageLogfile = /var/log/hiawatha/garbage.log
ExploitLogfile = /var/log/hiawatha/exploit.log

# BINDING SETTINGS
# A binding is where a client can connect to.
#
Binding {
Port = 80
}
#
#Binding {
# Port = 443
# TLScertFile = tls/hiawatha.pem
# Interface = 127.0.0.1
# MaxRequestSize = 2048
# TimeForRequest = 30
#}


# BANNING SETTINGS
# Deny service to clients who misbehave.
#
BanOnGarbage = 300
BanOnMaxPerIP = 60
BanOnMaxReqSize = 300
KickOnBan = yes
RebanDuringBan = yes


# COMMON GATEWAY INTERFACE (CGI) SETTINGS
# These settings can be used to run CGI applications.
#
#CGIhandler = /usr/bin/perl:pl
#CGIhandler = /usr/bin/php-cgi:php
#CGIhandler = /usr/bin/python:py
#CGIhandler = /usr/bin/ruby:rb
#CGIhandler = /usr/bin/ssi-cgi:shtml
#CGIextension = cgi
#
#FastCGIserver {
# FastCGIid = PHP7
# ConnectTo = /run/php/php7.0-fpm.sock
# Extension = php
#}


# URL TOOLKIT
# This URL toolkit rule was made for the Banshee PHP framework,
# which can be downloaded from http://www.banshee-php.org/
#
#UrlToolkit {
# ToolkitID = banshee
# RequestURI isfile Return
# Match ^/(css|files|fonts|images|js)($|/) Return
# Match ^/(favicon.ico|robots.txt)$ Return
# Match [^?]*(\?.*)? Rewrite /index.php$1
#}


# DIRECTORY SETTINGS
# You can specify some settings per directory.
#
#Directory {
# DirectoryID = static
# Path = /css, /fonts, /images, /js
# ExpirePeriod = 2 weeks
#}
#
#Directory {
# DirectoryID = files
# Path = /files
# ShowIndex = yes
# StartFile = index.html
# ExecuteCGI = no
#}


# DEFAULT WEBSITE
# It is wise to use your IP address as the hostname of the default website
# and give it a blank webpage. By doing so, automated webscanners won't find
# your possible vulnerable website.
#
#Hostname = 127.0.0.1
#WebsiteRoot = /var/www/hiawatha
#StartFile = index.html
#AccessLogfile = /var/log/hiawatha/access.log
#ErrorLogfile = /var/log/hiawatha/error.log

Hostname = 10.45.3.6
#WebsiteRoot = /var/www/hiawatha
#StartFile = index.html
ReverseProxy .* http://10.45.3.6:8081/ 60
AccessLogfile = /var/log/hiawatha/mydomain.access.log
ErrorLogfile = /var/log/hiawatha/mydomain.error.log

# VIRTUAL HOSTS
# Use a VirtualHost section for each website you want to host.
#
#VirtualHost {
# Hostname = www.my-domain.com
# WebsiteRoot = /var/www/my-domain/public
# AccessLogfile = /var/www/my-domain/log/access.log
# ErrorLogfile = /var/www/my-domain/log/error.log
# TimeForCGI = 5
# UseFastCGI = PHP7
# UseToolkit = banshee
# UseDirectory = static, files
#}


I want to make redirect to 10.45.3.6:8081 - as default site and 10.45.3.2:81/myfolder - 2-nd site.
Anu sugguestions ?
Hugo Leisink
15 March 2018, 21:24
Try something like this:
...
ReverseProxy ^/myfolder http://10.45.3.2:81/
ReverseProxy .* http://10.45.3.6:8081/
...
ricochet
16 March 2018, 11:27
Hi again ! I've made some changes in hiawatha.conf

# DEFAULT WEBSITE
# It is wise to use your IP address as the hostname of the default website
# and give it a blank webpage. By doing so, automated webscanners won't find
# your possible vulnerable website.
#
Hostname = 89.xxx.xxx.xxx
WebsiteRoot = /var/www/hiawatha
#StartFile = index.html
AccessLogfile = /var/log/hiawatha/access.log
ErrorLogfile = /var/log/hiawatha/error.log
ReverseProxy .* http://10.45.3.6:8081/


When I start firefox I can access the public site http://<my public IP>. But I can not access the subdirectories /myfolder, /project, /test, /iaos.
The error appear in the browse :
Page not found
The requested page "/myfolder" could not be found
ricochet
16 March 2018, 11:29
and in this section :
VirtualHost {
Hostname = 10.45.3.2
WebsiteRoot = /var/www/empty
ReverseProxy ^/myfolder http://10.45.3.2:81/
}

VirtualHost {
Hostname = 10.45.3.3
WebsiteRoot = /var/www/hiawatha
ReverseProxy ^/project http://10.45.3.3:82/
}

VirtualHost {
Hostname = 10.45.3.4
WebsiteRoot = /var/www/hiawatha
ReverseProxy ^/test http://10.45.3.3:84/
}

VirtualHost {
Hostname = 10.45.3.5
WebsiteRoot = /var/www/hiawatha
ReverseProxy ^/iaos http://10.45.3.5:83/ 100
}
rivcochet
16 March 2018, 17:43
Dont answer me i soved it alone !
I replaced some lines in hiawatha.conf and everything works fine now

P.S. Im sorry but the forum tell me when i try to post my configuration : Message seen as spam.
I cant explain to others how i solve my trouble
Hugo Leisink
19 March 2018, 19:50
You can mail your solution to me. I'll post it for you. It probably contains too many links (http://...). Is also typical for spam messages.
This topic has been closed.