У меня есть локальная сеть с apache2 и "named", работающая в OpenSuse 13.1 Linux.

Я использовал "именованный" сервис, чтобы использовать мой компьютер в качестве сервера домена. Я настроил мой маршрутизатор так, чтобы он запрашивал у моего компьютера поиск доменов, поэтому у меня есть возможность переписать несколько доменов в моей сети на свой собственный локальный IP, 192.168.0.111.

Это прекрасно работает.

Я использую конфигурацию виртуального хоста, чтобы позволить различным доменам и поддоменам (перенаправленным на один и тот же IP-адрес через named) загружать разные каталоги на моем компьютере.

ОБНОВЛЕНИЕ - (добавлена информация о базовом домене VirtualHost) Для моих доменов:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias for.us 192.168.0.111
    DocumentRoot /home/personal/network/for.us

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/for.us-error_log
    CustomLog /var/log/apache2/for.us-access_log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias wa.net 192.168.0.111
    DocumentRoot /home/work/wa.net

    # if not specified, the global error log is used
    ErrorLog /var/log/apache2/ip-error_log
    CustomLog /var/log/apache2/ip-access_log combined
</VirtualHost>

А потом для моих поддоменов:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias fmb.wa.net
    DocumentRoot /home/work/wa.net/fmb
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias postrecord.wa.net
    DocumentRoot /home/work/wa.net/postrecord
</VirtualHost>
<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias cvalley.wa.net
    DocumentRoot /home/work/wa.net/cvalley_local
</VirtualHost>

Это позволяет мне подключиться к cvalley.wa.net с любого устройства в моей сети и получить сайт, который находится в /home/work/wa.net/cvalley_local

Я решил перенаправить порт 80 на этот компьютер, чтобы я мог поделиться несколькими сайтами разработки с коллегами. Я не могу контролировать, какой сайт они видят с помощью одной и той же службы, потому что им придется использовать мой компьютер в качестве сервера имен доменов ...

Поэтому я добавил такую строку:

<VirtualHost *:80>
    ServerName 192.168.0.111
    ServerAlias MY.IP.XXX.XX
    DocumentRoot /home/work/wa.net/cvalley
</VirtualHost>

Где «MY.IP.XXX.XX» - мой публичный IP-адрес.

Это работает, как и ожидалось, когда вы нажимаете на мой IP-адрес из общедоступной сети, вы видите сайт, который находится в /home/work/wa.net/cvalley.

ОБНОВЛЕНИЕ - разъяснение точки смущения Точка смущения, которая у меня возникает, заключается в том, что в моих журналах есть публичные IP-адреса в дополнение к сайтам wa.net. Я ожидал бы, что у "wa.net" будет публичный IP-доступ, но я не понимаю, как публичные боты получают доступ к сайтам "for.us".

Я ожидал бы, что будет невозможно получить доступ к сайтам "for.us" в моей сети, если общедоступный пользователь каким-то образом не поймет, как я называю свои ServerAliases, и не подражает настройке моего домена ...

Как общественный трафик может попасть на мои сайты for.us ? Как я могу восстановить этот вид доступа?

Вот несколько примеров того, как публичные IP-адреса попадают на мои сайты VirtualHost:

Обновление - лучшее описание журнала

этот журнал показывает активность в VirtualHost "for.us" - я ожидал, что активность будет существовать только в домене "wa.net" , где я ожидаю журналы

162.253.66.76 - - [15/Aug/2014:19:20:47 -0600] "GET /xmlrpc.php HTTP/1.0" 404 1004 "-" "-"
162.253.66.74 - - [16/Aug/2014:10:50:28 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
185.4.227.194 - - [16/Aug/2014:11:16:45 -0600] "GET http://24x7-allrequestsallowed.com/?PHPSESSID=1rysxtj500143WQMVT%5E_NAZ%5BQ HTTP/1.1" 200 262 "-" "-"
101.226.254.138 - - [16/Aug/2014:13:32:14 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
162.253.66.74 - - [16/Aug/2014:14:26:19 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
212.129.2.119 - - [16/Aug/2014:16:00:51 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
91.240.163.111 - - [16/Aug/2014:18:34:32 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
162.253.66.74 - - [16/Aug/2014:19:02:53 -0600] "GET / HTTP/1.0" 200 262 "-" "masscan/1.0 (https://github.com/robertdavidgraham/masscan)"
122.226.223.69 - - [17/Aug/2014:05:53:09 -0600] "GET http://www.k2proxy.com//hello.html HTTP/1.1" 404 1006 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
::1 - - [17/Aug/2014:10:19:26 -0600] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (Linux/SUSE) OpenSSL/1.0.1e PHP/5.4.20 (internal dummy connection)"
162.209.65.196 - - [17/Aug/2014:15:31:53 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
111.206.199.163 - - [18/Aug/2014:11:12:56 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
37.187.180.168 - - [18/Aug/2014:15:40:00 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"
62.210.38.226 - - [18/Aug/2014:18:35:16 -0600] "HEAD / HTTP/1.0" 200 - "-" "-"

Могу ли я что-нибудь сделать, чтобы по умолчанию надежно запретить публичный доступ, но разрешить это только в одном VirtualHost?

2 ответа2

2

И wa.net, и for.us используют один и тот же IP-адрес, поэтому сеть не может определить, для какого домена DNS предназначен IP-пакет (а также сегмент TCP и дейтаграмма UDP). Например, HTTP устраняет неоднозначность сетевого трафика, адресованного тому же IP, проверяя заголовок HTTP Host: чтобы увидеть предполагаемый домен запроса (так работает виртуальный веб-хостинг), но named не имеет понятия адреса DNS входящих дейтаграмм.

Я бы предложил разместить wa.net и for.us на разных IP-адресах и настроить оба адреса на физическом интерфейсе. Это должно разделять трафик на уровне IP, и программное обеспечение для виртуализации может доставлять пакеты в соответствующий виртуальный интерфейс.

2

for.us является первым VirtualHost, делающим его VirtualHost "по умолчанию", поэтому любая петиция, которая не имеет заголовка Host (или не соответствует ни одному из других VirtualHosts), окажется там.

HTTP/1.0 не требует заголовка Host для работы, поэтому он идет для VH по умолчанию.


РЕДАКТИРОВАТЬ: Если это домашняя настройка, самым быстрым решением для этого случая является перемещение "общедоступного" виртуального хоста в верхнюю часть, поэтому любое соединение по умолчанию для этого сайта.

Помните, что для NameVirtualHost у вас всегда будет VirtualHost по умолчанию, если заголовок Host отсутствует или не соответствует ни одному из настроенных вами имен / псевдонимов (первый VirtualHost, определенный для этого IP)

Кроме того, я бы настроил в директивах ServerName значение, которое вы назначаете для каждой ServerAlias и не используете ServerAlias в вашем случае. Имя_сервера предназначено для того, чтобы различать, какой VirtualHost следует использовать, если вы установили NameVirtualHost, поэтому наличие одинакового значения во всех именах ServerName не принесет никакой пользы. ServerAlias используется для обозначения дополнительных имен (например, ServerName hostname ServerAlias hostname.domain.com

Обратите внимание, что если ваши коллеги отредактируют свои /etc/hosts и добавят такие записи, как fmb.wa.net MY.IP.XXX.XX , postrecord.wa.net MY.IP.XXX.XX и т.д., Они получат любой сайт на вашем сайте. веб сервер. Вы можете заблокировать это с помощью директив Block , Allow и Order , но записи с кодом ошибки 403 по-прежнему будут отображаться в вашем access_log.


Наконец, чтобы решить эту проблему должным образом, и поскольку для вас доступно множество частных IP-адресов, я бы сделал следующее:

  • Сначала назначьте еще один IP-адрес вашему OpenSuse. Ваш текущий основной IP-адрес будет использоваться для вашего внутреннего сервера, а новый - для внутреннего и общедоступного сервера.
    • Найдите /etc/sysconfig/network-scripts/ifcfg-eth* . Должен быть только один файл, если на вашем сервере только одна сетевая карта.
    • Отредактируйте его и добавьте следующие строки (добавьте их для вашего удобства):

,

IPADDR1='192.168.0.112'
NETMASK1='255.255.255.0'
LABEL1='0' 
  • Перезагрузите сеть: /etc/init.d/network restart
  • Измените свой текущий <VirtualHost *:80> на <VirtualHost 192.168.0.111:80> за исключением общедоступного VirtualHost, который вместо этого должен иметь <VirtualHost 192.168.0.112:80>
  • Перезапустите Apache
  • Измените свое named чтобы указать "публичное" имя для нового IP-адреса, если это необходимо (для внутреннего использования)
  • Измените NAT, который вы, вероятно, используете на маршрутизаторе, чтобы он указывал на новый IP.

При такой конфигурации с вашего публичного IP-адреса они будут получать содержимое только от VirtualHost с IP-адресом 192.168.0.112.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .