Proftpd - правильно использовать виртуальные хосты, глобальный раздел, контекст сервера

986
user299793

Укороченная версия:

В чем разница между контекстом сервера и разделом виртуального хоста в файле конфигурации proftpd? В смысле, что я могу сделать с первым, я не могу сделать с последним.
Например, я не могу поместить директивы, такие как UseIPv6 или MaxInstances, в виртуальный хост или глобальный раздел, но размещение их в контексте сервера работает просто отлично. Каково будет правильное использование этих разделов для настройки, упомянутой ниже?

Я думал, что общий процесс был следующим: всякий раз, когда клиент подключается к серверу, сервер проверяет, есть ли виртуальный хост, соответствующий адресу, к которому подключен клиент. Если нет, то выбирается раздел контекста сервера (за исключением того, что для предотвращения этого используется директива DefaultServer). Поэтому я подумал, что контекстный раздел сервера и раздел виртуального хоста одинаково «мощный». Но это не может иметь место, поскольку есть директивы, которые работают только в одном из разделов.

Длинная версия (дополнительная информация):

По сути, все, что я хочу сделать, - это запустить сервер proftp на локальном компьютере дома и сделать этот сервер доступным как из Интернета, так и из моей локальной сети. И это работает. Я скомпилировал proftpd из исходного кода (причина ниже), установил и настроил его, и, похоже, он работает так, как должен. Мне не нужна помощь, чтобы proftpd работал правильно.

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

Я читал о настройке proftpd за роутером и о значении виртуальных хостов, о глобальном и серверном контекстах:
http://www.proftpd.org/docs/howto/NAT.html
http://www.proftpd.org/docs/howto /Vhost.html
Я следовал нескольким руководствам и искал на форуме похожие вопросы. Сервер работает, я просто не очень понимаю, почему сейчас, а почему нет.

Это структура моего текущего (рабочего) proftpd.conf: <Global> User ... Group ... RequireValidShell ... DefaultRoot ... ... <IfModule mod_tls.c> TLSEngine ... TLSProtocol TLSv1.2 ... </IfModule> </Global>
#server context managing the config for access over the internet ServerName "external" Port 21 #can't be used inside a virtualhost section UseIPv6 off ... #need to masquerade ip for external address MasqueradeAddress myurl.com #needed for passive ftp mode PassivePorts 60000 65535
#virtualhost managing the config for lan access <VirtualHost 192.168.178.54> ServerName "internal" Port 21 PassivePorts 60000 65535 </VirtualHost>

Сначала я подумал, что нужно просто создать два раздела виртуального хоста, один для локальной сети и один для внешнего доступа, и отключить раздел контекста сервера, установив порт 0. Но затем есть директивы, которые я не могу использовать внутри разделов виртуального хоста. Так что я совершенно не уверен, использую ли я 3 возможных раздела, как я должен. Нужно ли использовать раздел контекста сервера, чтобы иметь какую-то конфигурацию по умолчанию? Это можно сделать с помощью директивы DefaultServer в соответствии с документацией.

uname -a: Linux HOSTNAME 3.16.0-4-amd64 # 1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU / Linux

proftpd -v: ProFTPD версии 1.3.5 Двоичный пакет proftpd, включенный в репозитории debian, не поддерживает TLS 1.2, и я не хочу использовать FTP с версией TLS ниже этой или даже SSL. Так что я сам скомпилировал.

Это довольно длинный текст. Я попытался сократить его, быть точным, избежать ненужного, но предоставить достаточно информации. Если есть что-то, что я мог бы улучшить, или если мой вопрос скорее относится к unix и linux stackexchange, просто дайте мне знать. Я выбрал superuser вместо serverfault, чтобы задать этот вопрос, потому что речь идет о серверной среде дома.

Спасибо за ваше время и помощь.

январь

1

2 ответа на вопрос

1
Castaglia

There are some configuration directives that affect the entire daemon, such as UseIPv6 or MaxInstances. These directives cannot be set on a per-vhost basis for this reason.

However, ProFTPD's configuration file syntax does not have a context/section that says "these directives are just for the entire daemon". Thus by default (and yes, it's not ideal), these daemon-wide directives are only allowed in the "server config" section, outside of <Global>, <VirtualHost>, or any other context.

Hope this helps!

0
user299793

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