Сайт Форум Лицензия FAQ Донейшен

Small HTTP server

(Описание версии для Windows)

Содержание

  • Что это?
  • Лицензия.
  • Возможности
  • Как...?
  • Каталоги и имена файлов
  • Настройки и параметры командной строки
  • Разрешенные и запрещенные диапазоны IP адресов.
  • Лимиты
  • Запуск скриптов
  • SSI
  • Регулярные выражения
  • Internet Server Applications (ISAPI)
  • Proxy сервер
  • DNS сервер.
  • SMTP сервер.
  • POP3 server & proxy
  • FTP server & proxy
  • TLS/SSL сервер.
  • HTTP TLS VPN сервер и клиент
  • Регистрация.
  • Заключение.
        •  

    Когда сервер запущен доступны:

    Установки / Текущие состояние
    Пользователи и Виртуальные хосты
    Текущая статистика
    В он-лайне:
    Что нового?
    (Последняя версия, Форум, и т.д.)
    Сгрузить Web Mail
    Внешний скрипт предоставляющий Web интерфейс для работы с почтой
    Донейшен


    Что это и зачем оно нужно?

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


    Возможности.

    Так же одним из достоинств этой программы является ее компактность. Ее работа не должна мешать вашей! Она задействует минимум системных ресурсов, ровно столько сколько необходимых для быстрой передачи данных, и сразу же освобождает их после передачи. Для обеспечения такого режима работы мне пришлось несколько ограничить, те возможности которые могли бы быть.

    Содержание



    Как ...?

    Очень просто -- устанавливайте, запускайте http.exe и все ! Если Ваш браузер не настроен на работу через прокси, то даже не входя в сеть вы можете сами сходить на свой сайт используя стандартный IP-адрес http://127.0.0.1/. Если у вас нет собственного DNS-имени, это не страшно. Любой пользователь может попасть ваш сайт используя Ваш IP адрес.


    Каталоги и имена файлов.

    Сервер поддерживает определенные имена каталогов. Ваш сайт начинается с подкаталога заданного в настройках (по умолчанию WWW). Файлы могут передаваться только из него и из всех вложенных в него подкаталогов, кроме файлов содержащих в своем пути идентификатор CGI, по умолчанию это /CGI-BIN/. Предполагается, что в каталоге /CGI-BIN/ находятся исполняемые CGI-скрипты, и при получении запроса на файл из /CGI-BIN/ сервер пытается его запустить. При этом если файл имеет расширение *.pl то запускается Perl-интерпретатор, который должен быть либо в PATH-е, либо указан в настройках. Запрос файла с расширениями *.phtml,*.pht,*.php приводит к попытке запуска PHP интерпретатора, которому передается указанный файл. Например если Вы установили программу в каталог С:\HTTP то по вашему IP-адресу можно будет забирать файлы из каталога C:\HTTP\WWW т.е. http://127.0.0.1/test.htm==C:\HTTP\WWW\test.htm. А CGI в этом случае запускаются из C:\HTTP\WWW\CGI-BIN\. Если Вы создали в каталоге WWW подкаталог WWW\IMAGES и записали туда файл bgr.gif то получить его можно http://127.0.0.1/images/bgr.gif и т.д. В любом случае, если имя файла не задано, т.е. запрос кончается на '/' то сервер автоматически подставляет имя файла по умолчанию заданное в настройках, сохраняя структуру каталогов. Так http://127.0.0.1/My/ эквивалентно http://127.0.0.1/My/index.htm. Сервер может поддерживать несколько виртуальных хостов. Каждый хост имеет собственный корневой каталог и также может включать виртуальные каталоги общие для всех.
    Сервер определяет тип файла по расширению. Поддерживаются ASIS файлы. Эти файлы содержат полный HTTP заголовок в начале. Такие файлы удобно использовать для перенаправления на другой сайт. Этот файл должен начинаться с ключевого слова "Status: " и кода возврата и ваш заголовок. После заголовка одна пустая строка и данные. Последнее расширение должно быть .asi или .asis

    Содержание


    Настройки и параметры командной строки.

    Вы можете настроить сервер диалог "Установки..", через Web интерфейс если удаленное администрирование разрешено, или вы можете вручную редактировать http.cfg или просто добавить параметров в командной строке.
    Параметры и коментарииключи
    Общие параметры
    Не показывать иконку в таскбаре. Не добавлять иконку в таскбар. В этом случае, когда окно спрятано, для доступа к диалогу администрирования вы должны: Что бы открыть окно, нажмите Ctrl-Alt-Del, в появившемся таск-менетжере выберите Http, и попробуйте закрыть его. Сервер спросит: "Do you want to close HTTP server?" , Если ответить "Нет", то откроется его окно. В окне сервера вызовите системное меню (Правой кнопка мыши на заголовке) и выберите дополнительный элемент "Server". Если программа запущена как служба NT то окно можно вызвать из менетжера служб, кнопкой Pausenoicon
    Сворачиваться при старте.hide
    Подробный отчет для POP/SMTP/FTP. Иначе фиксируются только основные события.detail
    Не сохранять лог.nolog
    Сохранять лог. Выберите имя лог-файла.log=name.log
    Новый лог файл каждый день. Это нужно, что бы получать статистику по дням.logday
    Отдельный лог для каждого сервераseplog
    Не выводить пользователю поток ошибок (STDERR) поступающий от CGI скриптов noerrout
    Дублировать поток ошибок (STDERR) от CGI в http.err логdupstderr
    Добавлять в лог отладочную информацию от логических выражений в SSI и Antivirus/Forward файлахdbgle
    Разрешить удаленное администрирование. Иначе, для администраторов будут доступны только страницы статистики.radmin
    Максимальное количество одновременных подключений с одного и того же хоста. Для снятия ограничений можно использовать 0. Ограничения распространяются на все TCP соединения (HTTP,FTP,POP,SMTP,Proxy) from_same_host=##
    Не ограничивать количество одновременных подключений с одного хоста.nofrom_same_host
    Минимальная скорость соединения для обнаружения DoS-атаки большим количеством медленных соединений. (Кбайт/мин). Ноль, чтобы отключить проверку.dos_protect_speed=value
    Не обрезать строки лога.nolimitlog
    Ограничить длину строки лога. Длина каждой строки не должна превышать это значениеlimitlog=value
    IP адреса, для которых сервер будет доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший. Например: 192.168.0.1-192.168.0.16,127.0.0.1ip_range={#.#.#.#[-#.#.#.#],}
    Запрещенные IP адреса, для которых сервер будет не доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший. Например: 192.168.0.1-192.168.0.16,127.0.0.1ip_deny={#.#.#.#[-#.#.#.#],}
    IPv6 с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::ip6_range=value
    Запрещенные IPv6 с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.ip6_deny=value
    Не хранить не криптованные пароли в конфигурационном файле.cryptpwd
    Удалять пароли из логаdelpwd
    Сохранять пароли как MD5 Digest (RFC2069/RFC2617)md5pwd
    Realm - строка для MD5 Digest (RFC2069/RFC2617)md5realm=path
    Использовать MD5 Digest для авторизации, если это возможно (RFC2069/RFC2617)md5digest
    Использовать пароноидальный вариант MD5 дайжеста для авторизации если это возможно (RFC2617 qop=auth)md5paranoidal
    IP с которых разрешено администрировать этот сервер. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1adm_range=value
    Запрещенные IPs с которых нельзя администрировать этот сервер. Разделитель запятая, диапазоны IP записываются через дефис.adm_deny=value
    IPv6 IP с которых разрешено администрировать этот сервер. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::adm6_range=value
    IPv6 Запрещенные IPs с которых нельзя администрировать этот сервер. Разделитель запятая, диапазоны IP записываются через дефис.adm6_deny=value
    Разрешить две точки в именах файлов (может быть опасно)twopoint
    Параметры HTTP сервера
    Запретить HTTP сервер.nomax
    IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1http_range=value
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.http_deny=value
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::http6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.http6_deny=value
    Привязаться ко всем адаптерамnohttp_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)http_bind=value
    Также работать через IPv6httpipv6
    Не ограничивать скорость передачиnohttp_speed
    Предел суммарной скорости передачи данных для всех соединений с одного IP (KБайт/минуту)http_speed=value
    Количество других активных соединений, для включения ограничения скоростиhttp_spdusr=value
    PHP. Если вы используйте PHP вы можете указать где находится php-cgi.exe или phpisapi.dll...php=path
    Запускать PHP как FastCGI.fcgi_php
    FastCGI идентификатор. Часть URL для выявления FastCGI скриптов. По умолчанию используется ".fcgi"fcgi_ident=value
    Использовать этот идентификатор группы, для обнаружения FastCGI. Укажите 0 чтобы не использовать такой метод.fcgi_gid=value
    Использовать UNIX сокет для FastCGI. Иначе использется localhost TCP сокетfcgi_unix
    Каталог для создания FastCGI UNIX сокетов. May be /tmp, /var/tmp, /dev/shm, ...fcgi_upath=path
    Отключить общий каталог.noshare
    Не показывать каталоги. (Только в регистрированой версии)nooutdir
    Не прерывать исполнение CGI, в случае закрытия соединенияnbrkcgi
    Дополнительные строки управляющего заголовка.header=value
    Использовать 'chunked' передачу для SSI.ssi_chunk
    Запретить многопотоковое скачивание.nomsd
    Использовать gzip сжатие, когда это возможно.http_gzip
    DLL библиотека ZLib.gz_lib=path
    Наименьший размер файла, который стоит паковатьgz_low=value
    Не паковать файлы со следующими расширениямиnogz_ext=value
    Файл базы IP адресов для географических дополнений.ip_base=path
    Добавлять REMOTE_COUNTRY переменную к CGI/SSI окружениюip_cntr
    Разрешить возвращать информацию о стране по запросу '/$_ip2country_$?ip=x.x.x.x'ip2cntr_srv
    $_ip2country_$ сервис только для авторизованных пользователейip2cntr_aut
    Разрешить DNS через HTTP(S).http_doh
    Не ограничивать nohttp_ltime
    Время за которое будет определяться ограничение (в секундах)http_ltime=value
    Ограничение для IP (Kb)http_ip_limit=value
    Лимит на сеть (Kb)http_net_limit=value
    Общий лимит на сервер (Kb)http_limit=value
    Задержка перед повторной посылкой запроса. В миллисекундах.dnstimeout=value
    TCP/IP порт для HTTP сервера. Обычно это 80port=##
    Сколько HTTP запросов будут обрабатываться одновременно. Около 20Kb памяти будет резервироваться для ждущих нитей. Обычно 5-12 соединений достаточно для 3-8 посетителей в минуту. max=##
    Имя файла по умолчанию. (Можно использовать шаблон '*'. Например index.* для любого index-а)def=name.ext
    Файл ошибки. Полный путь к файлу или скрипту возвращаемому при отсудствии запрошенного файла. Для скриптов и SSI переменная QUERY_STRING будет содержать имя запрошенного файла.error=path\name.ext
    Корневая Web папка по умолчанию. Каталог с которогр будет начинаться ваш сайт.dir=root_dir_name
    CGI идентификатор. Часть URL для определения CGI. По умолчанию это \"\\cgi-bin\\\", но можно использовать, например, \"\\cgi-\", \"\\local-bin\\\", \".cgi\", и т.д.cgi_ident="\cgi-bin\"
    PERL интерпретатор. Интерпретатор для скриптов с расширением .plperl=path\name.exe
    Разделяемый каталог. Если вы хотите что бы для всех CGI был один и тот же каталог запуска, укажите его здесь. Иначе каталогом запуска, будет каталог самого скрипта.share=path
    Разрешить обрабатывать Server Side Includes (SSI) в HTML файлах. По умолчанию сервер проверяет SSI только в .sht*,.sml*,.asp* файлах. Предостережение: Обработка SSI требует больше памяти и это медленнееssihtm
    Отменяет предыдущий ключ.nossihtm
    Предельное количество байт принимаемое по методу POST. Не указывайте большие значения т.к. это даст хакерам возможность серьезно загрузить вашу сеть, и затребовать много памятиpost_limit=##
    Никогда не запускать .htm,.gif,.jpg файлы. Иначе, сервер пытается запустить любой файл с CGI идентификатором.norunhtm
    Максимальное время на выполнение CGI В секундах.cgi_timeout=##
    CGI интерпретаторы
    Приложения или DLL для запуска при запросе указанных CGI-файлов. Например, для .sh -- d:\gnu\bin\bash.exe, для .cgi -- d:\perl\perlis.dll.
    ext=".ext;application;.ext;application;..."
    MIME типы
    Определяет дополнительные MIME типы для расширений. Например, для .bmp mime тип может быть image/bitmap
    mime=".ext1;mime-type1;.ext2;mime-type2;...;.extN;mime-typeN"
    Виртуальные хосты и виртуальные каталоги
    Веб каталоги для различных хост имен. Вы можете добавить сколько угодно имен хостов и связать с каждым из них свой каталог. Что бы эти имена были видны только на вашей машине, достаточно добавить их системный hosts -файл, или выбрать соответствующую опцию, что бы сервер сделал это автоматически. Здесь же могут быть добавлены виртуальные каталоги, каталоги общие для всех хостав. Имя каталога задается между двумя слешами. (/directory/)
    hostpath="hostname;path"
    Ключ может повторятся много раз.
    Параметры Proxy сервера
    Запретить HTTP proxy.noproxy
    TCP/IP порт для proxy сервера.proxy=#port
    Сколько proxy запросов будут обрабатываться одновременно.proxy_max=#max
    IP адреса, для которых сервер будет доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший.proxy_range={#.#.#.#[-#.#.#.#],}
    Запрещенные IP адреса, для которых сервер будет не доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший. Например: 192.168.0.1-192.168.0.16,127.0.0.1proxy_deny={#.#.#.#[-#.#.#.#],}
    Запретить кэш на жестком диске.noproxy_dir
    Каталог для сохранения кеша.proxy_dir=path
    Сколько дней должны храниться данные в кэше. Proxy может загруженные файлы из кэша по прошествии указанного количества дней поле загрузки. В любом случае если юзер использует кнопку "Reload" файл перегружаетя.proxy_time=#days
    Игнорировать NO-CACHE в управляющих заголовках страниц. ignocache
    Proxy только для авторизованых пользователей.proxyusers
    Запретить прокси сервер.noproxy_max
    Привязаться ко всем адаптерамnoproxy_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)proxy_bind=value
    Также работать через IPv6proxyipv6
    Не сохранять большие файлы. Предел в байтахproxy_fsize=value
    Отсчитывать дни от последнего доступа.proxy_laccess
    Не кэшировать страницы если в запросе есть куки.proxy_hrd
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::proxy6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.proxy6_deny=value
    Не ограничивать скорость передачиnoproxy_speed
    Предел суммарной скорости передачи данных для всех соединений с одного IP (KБайт/минуту)proxy_speed=value
    Количество других активных соединений, для включения ограничения скоростиproxy_spdusr=value
    Большой режим. Огромное количество трафика должно храниться.proxy_big
    Еще больший режим. Новый вариант организации хранилища, для уменьшения времени поиска среди большого числа файлов.proxy_sbig
    Число попыток докачать файл после разрыва соединенияproxy_tryes=value
    Ограничение на одновременные запросы с одного хоста к одной и той же URL. Ноль -- без ограничений.proxy_same=value
    Не используйте прокси-сервер верхнего уровня.noupproxy
    Прокси-сервер верхнего уровня.upproxy=value
    TCP/IP порт прокси-сервера верхнего уровня.upproxy_port=value
    Прокси сервер верхнего уровня без авторизации.noup_user
    user:pasword для прокси сервера верхнего уровня.up_user=value
    Для POP3/SMTP/FTP прокси, соединяться через HTTPS прокси верхнего уровня.ever_upproxy
    Не использовать прокси верхнего уровня для следующих хостовnouphosts=value
    Запрещенные хостыbad_hosts=value
    Таймаут простоя для прокси (в секундах).proxy_timeout=value
    Запрашивать упакованые gzip-ом, и распаковывать если браузер не поддерживает этого.proxy_gzip
    Не использовать антивирус.noproxy_antivirus
    Хост антивируса. (127.0.0.1 для локального PC)proxy_antivirus=path
    Порт антивирусаproxy_avport=value
    Проверять и HTML файлы. (Иначе проверятся будут только приложения)proxy_avhtml
    Проверять все файлы. (Иначе проверятся будут только приложения)proxy_avall
    Не ограничивать noproxy_ltime
    Время за которое будет определяться ограничение (в секундах)proxy_ltime=value
    Ограничение для IP (Kb)proxy_ip_limit=value
    Лимит на сеть (Kb)proxy_net_limit=value
    Общий лимит на сервер (Kb)proxy_limit=value
    Параметры DNS сервера
    Hosts file. See also format of this filehosts=hosts_file
    Запретить DNS серверnohosts
    Привязаться ко всем адаптерамnodns_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)dns_bind=value
    Также работать через IPv6dnsipv6
    IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1dns_range=value
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.dns_deny=value
    Разрешить DNS по TCP.dnstcp
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::dns6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.dns6_deny=value
    Не сохранять кеш имен при выходе.nodnscachefile
    Имя файла кеша имен.dnscachefile=path
    Не пытаться рекурсивно искать AAAA записи. (для сетей не использующих Интернет через IPv6)dnsno6
    Запретить встроенный DNSBL серверnodns_bld
    Имя хоста встроенного DNSBL сервераdns_bld=value
    Детектировать DoS запросы. Чиcло похожих на DoS запросов для блокировки IPdns_detect_dos=value
    Список имен-хостов используемых при DoS атаках, через пробел.dns_dos_hosts=value
    Запретить рекурсию.noreqursion
    Рекурсивные вызовы всегда начинать с двух первых рут серверов. (Если вы используйте DNS сервера вашего провайдера вместо настоящих рут серверов)dnsupl
    Размер DNS кэша (в записях).dnscache=value
    Параметры FTP сервера
    Запретить FTP сервер.noftp_max
    Привязаться ко всем адаптерамnoftp_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)ftp_bind=value
    Также работать через IPv6ftpipv6
    IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1ftp_range=value
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.ftp_deny=value
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::ftp6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.ftp6_deny=value
    Не ограничивать скорость передачиnoftp_speed
    Предел суммарной скорости передачи данных для всех соединений с одного IP (KБайт/минуту)ftp_speed=value
    Количество других активных соединений, для включения ограничения скоростиftp_spdusr=value
    Для соединения данных в пассивном режиме использовать любой свободный порт.noftp_pasvp
    Первый порт для соединения данных в пассивном режиме. ( Диапазон используемых портов будет от этого порта до этого + число одновременных FTP соединений)ftp_pasvp=value
    Запретить несколько потоков для одного IPftp_oone
    Преобразовывать имена с пробелами.ftp_wospace
    Не использовать каталог для загрузок.noftp_upload
    Разрешать FTP PORT команду только на клиентский хост. При этом режим FTP на FTP может не работать.ftp_same
    Разрешать FTP proxy.ftp_proxy
    Не ограничивать noftpi_ltime
    Время за которое будет определяться ограничение (в секундах)ftpi_ltime=value
    Ограничение для IP (Kb)ftpi_ip_limit=value
    Лимит на сеть (Kb)ftpi_net_limit=value
    Общий лимит на сервер (Kb)ftpi_limit=value
    Не ограничивать noftpo_ltime
    Время за которое будет определяться ограничение (в секундах)ftpo_ltime=value
    Ограничение для IP (Kb)ftpo_ip_limit=value
    Лимит на сеть (Kb)ftpo_net_limit=value
    Общий лимит на сервер (Kb)ftpo_limit=value
    Всегда спрашивать пароль, даже для пользователя без пароля.ftp_always_pass
    Сколько FTP запросов будут обрабатываться одновременно.ftp_max=max
    TCP/IP порт для FTP сервера. Обычно это 21ftp_port=port
    Таймаут по бездействию в секундах. По прошествии этого времени, после последней операции, соединение будет закрыто.ftp_timeout=#N
    Имя для загрузок. Если FTP каталог содержит такой подкаталог то пользователи с доступом только для чтения могут загружать туда файлы.ftp_upload="/dir/"
    Разрешить виртуальные директории для FTP.ftp_vdirs
    Параметры POP3 сервера
    Сколько запросов будут обрабатываться одновременно.pop3_max=max
    TCP/IP порт для POP3 сервера. Обычно это 110pop_port=port
    Запретить POP3 сервер.nopop3_max
    POP3/SMTP таймаут по бездействию в секундах. По прошествии этого времени, после последней операции, соединение будет закрыто.pop_timeout=value
    IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1pop_range=value
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.pop_deny=value
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::pop6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.pop6_deny=value
    Привязаться ко всем адаптерамnopop_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)pop_bind=value
    Также работать через IPv6popipv6
    Не ограничивать скорость передачиnopop_speed
    Предел суммарной скорости передачи данных для всех соединений с одного IP (KБайт/минуту)pop_speed=value
    Количество других активных соединений, для включения ограничения скоростиpop_spdusr=value
    Разрешить POP3 proxypop3_proxy
    Разрешить Web mailwmail
    Не сохранять сообщения отправленные через Web mail в папке пользователяnowmailsent
    Подкаталог для сохранения отправленных сообщенийwmailsent=value
    Через Web mail удалять сообщения немедленноnowmailtrash
    Мусорная корзина для перемещения удаляемых сообщенийwmailtrash=value
    Конвертировать страницы в UTF8wmail_utf
    Параметры SMTP сервера
    Запретить SMTP сервер.nosmtp_max
    Привязаться ко всем адаптерамnosmtp_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)smtp_bind=value
    Также работать через IPv6smtpipv6
    При отсутствии почтового хоста, попробовать хостsmtp_nomx
    Это нормальный SMTP relay. (Иначе это всего лишь SMTP прокси)nosmtpproxy
    SMTP верхнего уровня. (режим SMTP прокси)smtpproxy=value
    Не сохранять отправленные сообщения.nosmtp_sent
    Сколько дней хранить отправленные сообщения. (Ноль - хранить вечно)sent_time=value
    IPv6 Наши IP адреса (разрешенный список) На пример ::1,FE80::-FEFF::smtp6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.smtp6_deny=value
    Временно добавлять IP в разрешенный список после авторизации по POP3smtp_pop_ip
    Ограничить размер сообщения. (в байтах).smtp_msg_limit=value
    Не прерывать соединение в случае превышения максимального размера.smtp_nobreak
    Разрешить Generate-Delivery-Reportsmtp_conform
    Белый список. Общий файл с допустимыми ш e-mail и IP адресами (шаблонами) отправителейgoodlist=path
    Черный список. Общий файл со спамерскими e-mail и IP адресами (шаблонами) отправителейbadlist=path
    Серый список. Общий файл с e-mail и IP адресами (шаблонами) требующими дополнительную проверкуgraylist=path
    Проверять файлы "goodlist", "badlist" и "graylist" в каталоге пользователя перед приемом собщенияchklists
    Текст который будет возвращаться в случае отказа приема сообщения. Здесь также можно указать URL Web формы для прямой отправки сообщенияmsgspam=value
    Не использовать скриптов для входящей/исходящей почтыnoantivirus
    Антивирусный скрипт.antivirus=path
    Предел времени на выполнение скрипта. В секундах.run_timeout=value
    Фильтр разрыва (вырожение). Переменные $msg,$sender,$hello,$control могут проверятся для прекращения приема больших сообщений.antispam=value
    Фильтр спама (выражение). Переменные $msg,$sender,$hello,$control могут быть проверены и IP может быть добавлен в список спамеров.spamfltr=value
    Принимать сообщения с неправильным обратным адресомnocheckback
    Фальшивые e-mail адреса, через запятую. Если кто-то попытается послать сообщение на эти адреса, он будет добавлен в список спамеровfake=value
    DNSBL сервер. Запрашивать IP у этого внешнего спамерскго списка, перед приемом сообщений.dnsbl=value
    Перед приемом сообщения проверить почтовый хост отправителяcheckmx
    Игнорировать серый список если сообщение пришло с оригинального почтового домена (DNS MX) mxignbl
    Как долго спамерские IPs будут активны в спамерском списке (в секундах)spam_time=value
    Не ограничивать nosmtp_ltime
    Время за которое будет определяться ограничение (в секундах)smtp_ltime=value
    Ограничение для IP (Kb)smtp_ip_limit=value
    Лимит на сеть (Kb)smtp_net_limit=value
    Общий лимит на сервер (Kb)smtp_limit=value
    Не ограничивать разрешенные IPnolimitus
    Принимать сообщения от нашего домена, с чужих IP адресовuncheckip
    Минимальное время между отправкой сообщенийtime_btw=value
    Сколько запросов будут обрабатываться одновременно.smtp_max=max
    Имя SMTP сервера. (Имя домена)smtp_name=your.domain.name
    Использовать все виртуальные хосты как синонимы имени домена.vhalias
    TCP/IP порт для SMTP сервера. Обычно это 25smtp_port=port
    Output каталог. Каталог для сохранения сообщений перед отправкой.smtp_out=path
    Sent каталог. Каталог для сохранения сообщений после отправки.smtp_sent=path
    Error каталог. Каталог для сохранения сообщений, которые не удалось доставить адресату.smtp_err=path
    DNS сервер, через который будет искаться информация о почтовом пути. (Это может быть ваш обычный DNS сервер)smtp_dns=#.#.#.#
    Принимать для отправки сообщения с любым полем "From". Иначе сервер будет отсылать сообщения только от извесный_пользователь@имя.доменаsmtp_any
    IP адреса, для которых сервер будет доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший. smtp_range={#.#.#.#[-#.#.#.#],}
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.smtp_deny=value
    Запрещенные IP адреса, для которых сервер будет не доступен. Указывайте IP адреса через запятую и диапазоны младший через дефис старший. Например: 192.168.0.1-192.168.0.16,127.0.0.1 smtp_deny={#.#.#.#[-#.#.#.#],}
    Черный список. E-mail адреса спамеров через пробел. (Можно *@имя.хоста чтобы запретить принимать сообщения от всех с этого хоста)blacklist="u@adr1 *@adr2 ..."
    Проверять наличие \"forward\" файла в каталоге пользователя и выполнять инструкции из него.forward
    Разрешить исполнение приложений из пользовательского \"forward\" файла. fwdrun
    Использовать TLS при отправке исходящего сообщения, если это возможноsmtptls
    Всегда использовать TLS при отправке исходящих сообщений; если это невозможно, не отправлятьsmtponlytls
    Проверьте подпись удаленного сертификата.smtpchktls
    Параметры DHCP сервера:
    Запретить DHCPnodhcp_max
    Общие количество выделяемых IP адресовdhcp_max=value
    IP адрес DHCP сервераdhcp_ip=value
    Широковещательный адрес для DHCP ответовdhcp_bcast=value
    Начальный IP адресdhcp_first=value
    Netmaskdhcp_mask=value
    Gatewaydhcp_gate=value
    DNS сервераdhcp_dns=value
    Имя доменаdhcp_name=value
    Файл сохранения состоянияdhcp_file=path
    DNS должен резолвить имена хостов от выделенных IP адресовdhcp_rdns
    Только слушать, сохранять хосты для NS. (не отвечать)dhcp_lo
    Запретить SSL/TLS сервер.notls_max
    Число одновременно обрабатываемых запросов.tls_max=value
    TCP/IP порт для SSL/TLS сервера. Обычно 443tls_port=value
    Максимальное количество неактивных Keep-Alive соединений waitingkeep_alive_max=value
    Таймаут для неактивных Keep-Alive соединений (в секундах).keep_alive_timeout=value
    Интервал проверки активности спящего соединения в секундах. 0 – использовать системные настройки по умолчанию. (Поддерживается начиная с Linux 2.4, и Windows 10 v1709)keep_alive_idle=value
    IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. E.g. 192.168.0.1-192.168.0.16,127.0.0.1ssl_range=value
    Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.ssl_deny=value
    IPv6 IP с которых разрешен доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис. На пример ::1,FE80::-FEFF::ssl6_range=value
    IPv6 Запрещенные IPs с которых нельзя получить доступ к этому серверу. Разделитель запятая, диапазоны IP записываются через дефис.ssl6_deny=value
    Привязаться ко всем адаптерамnotls_bind
    Привязываться только к перечисленным IP и IPv6. через запятую. (0.0.0.0 - все IP; ::0 все IPv6)tls_bind=value
    Также работать через IPv6tlsipv6
    Не ограничивать скорость передачиnotls_speed
    Предел суммарной скорости передачи данных для всех соединений с одного IP (KБайт/минуту)tls_speed=value
    Количество других активных соединений, для включения ограничения скоростиtls_spdusr=value
    Разрешить TLS для POP3/SMTPsmtp_tls
    Разрешить TLS для FTPftp_tls
    DLL библиотека TLS/SSL. Например libsec111.dlltls_lib=path
    Файл сертификатаtls_cert_file=path
    Key filetls_key_file=path
    CA-Pathtls_capath=path
    CA-filetls_cafile=path
    Установить приоритете для шифров, метода обмена ключами, и маков Для GNU TLS и для OpenSSL формат строки различается. Для OpenSSL посмотреть формат этой строки можно здесь в разделе CIPHER LIST FORMAT По умолчанию задается такая строка:
    "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384:ALL:!DES:!3DES:!RC2"
    
    Для GnuTLS посмотреть формат строки можно здесь
    tls_priority=value
    Удаленное администрирование только через защищенный HTTPSadmtls
    Web mail только через защищеный HTTPStls_wmail
    Отключить TLS VPNnotlsvpn
    Максимальное количество одновременно работающих TLS VPN-подключений.tlsvpn_max=value
    URL-имя TLS VPN (только локальная часть URL-адреса, например "/$_vpn_$"). HTTPS-запросы к этому URL-адресу будут перенаправлено на VPNvpn_url=value
    Включить TLS VPN на устройстве Tunvpntun
    Включить TLS VPN на устройстве Tapvpntap
    Номер интерфейса Tunvpn_tun_number=value
    Номер интерфейса Tapvpn_tap_number=value
    TLS VPN MTU для Tun.vpn_tun_mtu=value
    TLS VPN MTU для Tap.vpn_tap_mtu=value
    Путь к Linux устройству настройкиtundev=value
    Доступ без пароля для всех. (В противном случае эту услугу могут использовать только пользователи с доступом к прокси)vpnpub
    Установить IP-адрес интерфейса Tuntun_ip=value
    Установить маску подсети для интерфейса Tuntun_nmask=value
    Установить IP-адрес интерфейса Taptap_ip=value
    Установить сетевую маску интерфейса Taptap_nmask=value
    Запукать скрипт для инициализации устройства Tuntun_script_up=path
    Запускать сценарий инициализации для устройства Taptap_script_up=path
    Первый IP адрес для выделения удаленному пользователю подключившемуся к Tun. (Опционально)tun_remote_ip=value
    Общее количество IP-адресов, выделенное для Tun подключений.tun_remote_max=value
    DNS-сервера, которые будут предлагаться TUN пользователю. (Опционально)tun_remote_dns=value
    Первый IP адрес для выделения удаленному пользователю подключившемуся к Tap. (Опционально)tap_remote_ip=value
    Общее количество IP-адресов, выделенное для Tap подключений.tap_remote_max=value
    DNS сервера, которые будут предлагаться TAP пользователю. (Опционально)tap_remote_dns=value
    Включить подключение к удаленному хосту TLS VPNvpnclient
    Имя хоста для подключения к удаленному TLS VPN-серверуvpn_remote_host=value
    TLS VPN порт. (Обычно 443)vpn_client_port=value
    TLS VPN URL имя (укажите только локальную часть URL на пример "/$_vpn_$"). Должно быть такой же как на удаленном сервереvpn_client_url=value
    Имя пользователя TLS VPNvpn_remote_user=value
    Пароль TLS VPNvpn_remote_passw=value
    Использовать Tap для подключения. (Иначе Тun)vpncln_tap
    Номер устройства Tun/Tap клиента TLS VPNvpn_tuntap_number=value
    TLS VPN MTU для клиента.vpn_client_mtu=value
    Установить IP-адрес VPN-интерфейса клиентаtuntap_ip=value
    Установить маску сети VPN-интерфейса клиентаtuntap_nmask=value
    Запускать сценарий инициализации, когда VPN-соединение установленоvpncln_script_up=path
    Запускать сценарий деинициалзации при закрытии VPN-соединенияvpncln_script_down=path
    Проверять удаленный сертификат TLS, на подлинность и соответствие имени хостаvpncln_chktls
    Не проверять время удаленного сертификата. Игнорировать истекший срок действия. (только GNUTLS)vpncln_tlsigntime
    Принимать самоподписанные сертификаты. (только GNUTLS)vpncln_tlsssign
    SSH style of sertificate validate. (GNUTLS only. Public keys of new untracted remote will be stored in ~/.gnutls/known_hosts)vpncln_tlssshstyle
    Пользователи
    Что бы предоставить FTP, почтовый или администраторский доступ вы должны добавит пользователей.
    user="имя;пароль;домашний_каталог;тип_доступа"
    Ключ может повторяться несколько раз.
    тип_доступа -- это последовательность следующих символов:
    • F -- FTP доступ -- пользователь может читать файлы из своего домашнего каталога по FTP протоколу.
    • W -- FTP доступ на запись -- пользователи могут сгружать файлы в свой домашний каталог по FTP протоколу.
    • N -- Запретить запись файлов с CGI идентификатором в пути.
    • S -- SMTP. Пользователи могут отправлять сообщения по SMTP с адресаимя_пользователя@имя.вашего.домена
    • P -- POP3. Пользователь будет иметь почтовый ящик. Все сообщения на имя_пользователя@имя.вашего.домена будут сохранятся в каталоге домашний_каталог\mbox и будут доступны через POP3.
    • A -- Это администратор. -- Имеет полный доступ к административным страницам, может добавлять пользователей, менять права доступа и т.д...
    • H -- Proxy. Доступ к Proxy-серверу.
    Для FTP доступа вы можете добавить anonymous пользователя без пароля В этом случае просто оставьте поля пароля пустым. Например:
    user=anonymous;;c:\public;FWN
    user=ftp;;c:\readonly;F
    

    Обратите внимание, что между именем переменной знаком равенства и значением не должно быть пробела Если значение содержит пробелы, вводите его в кавычках. Вот пример строки запуска:
    http.exe port=1080 def=index.html php="C:\PROGRAM FILES\PHP\php.exe" nolog
    Вот пример конфигурационного файла:
    log=c:\temp\http.log
    perl=c:\Perl\bin\perlis.dll # supported !!!
    max=12 def=index.stm
    @www.cfg # include other configuration file
    hostpath=www.name.www;C:\www1
    hostpath=max.name.www;C:\www2
    # End of file
    


    Содержание


    Разрешенные и запрещенные диапазоны IP адресов.

    Для ограничения у каждого севериса предусмотрены разрешенные и запрещенные диапазоны IP адресов. Также предусмотрен общий разрешенный и запрещенный диапазоны IP блокирующий или разрешающий доступ сразу ко всем TCP сервисам, и диапазоны задающие IP адреса с которых возможно Web администрирование. Адреса задаются через запятую. Можно задавать как одиночные адреса так и диапазоны адресов. Пример: 127.0.0.1,192.168.0.1-192.168.0.255

    HTTP,FTP,POP3,Proxy будут принимать запросы только с IP адресов входящих в список разрешенных и не поподающих в список запрещенных.

    SMTP сервер будет принимать письма своего домена (входящие для своих пользователей) с любых адресов, кроме запрещенных. Письма для отправки наружу, он будет принимать только с адресов из разрешенного списка Если вы не хотите принимать письма с какого-то IP -- добавте его в список запрещенных адресов.

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

    Содержание


    Лимиты.

    Для HTTP,Proxy,SMTP,FTP можно лимитировать объемы данных. Для этого в настройках необходимо задать время на которое распростроняется лимит, объем для IP адреса, для сети соответствующей этому адресу и общий объем для сервиса. Обратите внимание, что даже при исчерпании лимита посередине обмен не прерывается, файлы передаются целиком и только при последующих обращениях пользователь будет получать отказ в течении такого времени которое необходимо для того объема который уже получен или передан.

    Содержание



    Запуск скриптов.

    Скрипты запускаются в случае когда запрошенный файл в своем пути содержит идентификатор CGI. По умолчанию из поддиректории /CGI-BIN/ Если выбрана опция "Запускать системные файлы" то также будут запускаться файлы с атрибутом 'SYSTEM'. При этом поддерживается интерфейс CGI/1.1 подробное описание которого можно найти например на http://Web.Golux.Com/coar/cgi/ При запуске строка запроса передается как в командной строке так и в переменной окружения QUERY_STRING. После запуска выходной поток скрипта напрямую транслируется пользователю приславшему запрос. Скрипт, обязательно должен выдавать строку Content-Type: тип\r\n или Location: url релокейшена.. Также могут следовать другие служебные строки, например Content-Length: xx\r\n или Date: Завершается служебная информация последовательностью \r\n\r\n. Если вы пишите на Си или Перле то обратите внимание на то, что функции вывода в тестовом режиме сами преобразуют символ \n в последовательность \r\n. На Паскале функция writeln завершает вывод этими символами.

    Содержание


    Server Side Includes (SSI)

  • SSI значительно расширяет Ваши возможности, позволяя динамически вставлять, документы или результаты работы CGI в произвольные места запрошенного документа.
  • Когда удаленный пользователь запрашивает у Вас файл имеющий расширение *.SHT, *.SHTM, *.SHTML сервер отдает его с учетом встречающихся в нем SSI тегов.
  • SSI тег имеет следующий формат:
    <!--#имя_тега {переменная="значение" } -->
  • Внутри "значения" могут применятся подстановки HTTP переменных или переменных полей формы запроса. Имя переменной начинается с символа '$' и далее может быть заключено в фигурные скобки {}, если Вы хотите объединить полученное значение с последующим текстом, исключая пробелы. Например значением "$USER_AGENT" является соответствующая строка идентифицирующая браузер, а если вы хотите объединить ее с текстом "_12345" то используйте "${USER_AGENT}_12345" Для включения в значение символа '$' используйте '\$', для '\' -- '\\', для '"' -- '\"' и т.д. Если при подстановке, соответствующая переменная не найдена подставляется значение "undefined".

    Данная версия сервера поддерживает следующие теги:

    include
    <!--#include virtual="patch/file_name" -->
    <!--#include file="full_patch/file_name" -->
    Оба варианта этой директивы включают в документ содержимое файла file_name. В первом случае документ ищется, начиная с каталога сервера. Во втором случае, начиная с каталога текущего документа. В обоих случаях path вообще может быть опущен. Если в результате подстановки обнаруживается, что запрашиваемый документ находится на сервере в подкаталоге /CGI-BIN/ то он воспринимается как CGI и запускается. Выходной поток соответственно транслируется, начало до последовательности "\r\n\r\n" убирается. При этом если в имени не содержалось символа '?' то CGI передается исходный запрос, с которым обратились к родительскому документу. Если обнаружен '?' то дальнейшая последовательность будет передана как запрос, она должна быть соответственно преобразована Вами.

    exec
    <!--#exec cgi="file_name" -->
    <!--#exec cmd="full_patch/file_name" -->
    Запуск скрипта. Все аналогично include. В первом случае файл запускается из каталога CGI-BIN, во втором должен быть задан полный маршрут.

    fsize и lastmod
    <!--#fsize virtual="patch/file_name" -->
    <!--#fsize file="full_patch/file_name" -->
    <!--#fsize Kb virtual="path/file_name" -->
    <!--#fsize Mb file="full_path/file_name" -->
    <!--#lastmod virtual="patch/file_name" -->
    <!--#lastmod file="full_patch/file_name" -->
    <!--#lastmod format="d.m.Y H:i:s" virtual="path/file_name" -->
    <!--#lastmod format="d-m-y h:i:sA" file="full_path/file_name" -->
    Подставляет размер или дату последней модификации файла. Размер может быть округленным до Килобайтов или Мегабайтов. Дата может быть отформатирована по вашему желанию. Определены следующие форматные ключи:

    Ключ Описание Диапазон
    d День месяца, 2 цифры с ведущими нулями 01–31
    j День месяца без ведущих нулей от 1 до 31
    m Числовое представление месяца с ведущими нулями 01–12
    n Числовое представление месяца без ведущих нулей от 1 до 12
    Y Полное числовое представление года, 4 цифры 1970–9999
    y Двузначное представление года с 00 по 99
    a Нижний регистр Ante meridiem и Post meridiem am или pm
    A Прописные буквы Ante meridiem и Post meridiem AM или PM
    g 12-часовой формат часа без начальных нулей от 0 до 12
    G 24-часовой формат часа без начальных нулей от 0 до 23
    h 12-часовой формат часа с ведущими нулями 01–12
    H 24-часовой формат часа с ведущими нулями 00–23
    i Минуты с ведущими нулями от 00 до 59
    s Секунды с ведущими нулями от 00 до 59

    echo
    <!--#echo var="var" -->
    Выводит значение переменной.

    printenv
    <!--#printenv -->
    Выводит все переменные.

    break
    <!--#break -->
    Вызывает прекращение обработки документа.

    if -- elif -- else -- endif
    <!--#if expr="выражение" -->
    текст
    <!--#elif expr="выражение" -->
    текст
    <!--#elif expr="выражение" -->
    текст
    ...
    <!--#else -->
    текст
    <!--#endif -->
    Подстановка по условию. Текст будет передаваться пользователю в зависимости от истинности условий. Выражение может содержать переменные и значения разделенные знаками логических операций и скобками:
    ! -- перед выражением -- простое отрицание
    = или == -- равно
    != -- не равно
    <,>,<=,>= -- соответственно.
    && между выражениями логическое и.
    || между выражениями логическое или.
    str1~str2 -- результат истина, если строка str2 является частью строки str1.
    str1 =~ /pattern/ig -- pattern это регулярное выражение Юникс. Результат истина, если в строке str1 обнаруживается подстрока соответствующая шаблону pattern
    Если вообще нет никакого знака сравнения, то значение выражения сравнивается с "undefined". Части elif и else могут быть пропущены. Часть elif может повторяться сколько угодно раз. Обязательно долен быть закрывающий тег endif.

    set
    <!--#set var="переменная" value="значение" -->
    Добавление или изменение значения переменной. Не стоит злоупотреблять этой опцией, так как и количество переменных которые можно добавить и размер буфера под них ограничены.

    Содержание



    Регулярные выражения

    Для анализа входящих переменных можно использовать поиск по шаблону. Шаблон это регулярное выражение, соответствует синтаксису принятому в Юниксе, и позволяет найти и выделить фрагмент практически любой сложности. (Расширенный синтаксис регулярных выражений допускаемый в Переле пока не поддерживается) Регулярное выражение представляет из себя подстроку поиска в которой также могут присудствовать, распозноваться и подставлятся метасимволы, модификаторы и переменные. Понимаются следующии метасимволы:

  • ^ -- начало строки.
  • . -- любой символ кроме новой строки.
  • \ -- если седующий символ метасимвол он рассматривается как обычный символ. Например \. это просто точка. Также понимаются следующии последовательности:
  • [] -- в квадратных скобках указываются допустимые или не допустимые значения для символа: Символ строки считается совпавшим, если он указан в скобках Если первый элемент в скобках '^' значит символ может быть любым кроме символов указаных в скобках. '-' внутри скобок означает символы от ему предшествующего до последующего. Символ '\' также изменяет значение следующего за ним символа. Примеры:
  • () -- предписывает запомнить подстроку соответствующую шаблону внутри скобок для последующего использования. Найденные подстроки нумеруются последовательно от 1 до 9 и доступны как переменные $1 - $9. Последнее совпадение также доступно как $+
  • | -- или.
    После метасимвола может следовать модификатор:
  • * -- повторяется 0 или большее число раз
  • + -- повторяется 1 или большее число раз
  • ? -- может отсудствовать
  • {n} -- повторяется n раз
  • {n,} -- повторяется n или большее число раз
  • {n,m} -- повторяется не меньше n но не больше m раз. После любого модификатора может следовать еще один модификатор '?' уменьшающий распространение шаблона. Например, для поиска в строке '123abcdefff567' В конце шаблона, после последнего слеша, могут следовать модификаторы. Сейчас программа понимает следующие модификаторы:
  • i -- не разлечать строчные и прописные буквы
  • v -- запретить очистку списка переменных ($1 - $9). Без этого модификатора програма будет очищать список в новом логическом выражении, когда первое регулярное выражение начнет проверяться.
  • c -- Очистить список переменных ($1 - $9) перед началом.

    Также доступны следующие функции:
  • exist(filename) - возвращает 1, если файл существует, иначе 0.
  • fsize(filename) - возвращает размер файла.
  • ftime(filename) - возвращает время последней модификации файла в секундах с 01.01.1971.
  • fmode(filename) - возвращает режим доступа к файлу.

    Содержание



    Internet Server Applications (ISAPI)

    Это алтернатива к CGI исполняемым файлам. Сервер будет определять исполняемы файлы с расширением .DLL как ISAPI. Для каждого пользовательского запроса к такому файлу, будет вызвана функция HttpExtensionProc из этой DLL. Полное описание интерфейса и заголовочные файлы есть SDK. Моя реализация этого интерфейса имеет следующие дополнительные свойства:
  • Если HttpExtensionProc вернет 4 (HSE_STATUS_ERROR) или больше то DLL будет выгружена.
  • Когда скрипт вызывает WriteClient либо dwHttpStatusCode должна содержать правельное значение или вывод должен начинаться с HTTP/ и содержать полный HTTP ответ.
  • Отсудствие GetExtensionVersion -- это не ошибка.

    Contents



    Countries features

    Программа может показывать статистику по странам, а сервер может добавлять REMOTE_COUNTRY переменную окружения для SSI и CGI. Для этих функций нужна база IP по странам. После скачивания распакуйте ее, и укажите в настройках сервера где она лежит. Быстрый поиск не задерживает выполнение SSI и CGI. База не гарантирует на 100% точное обнаружение, но во многих случаях это будет. Для IP-адресов отсутствующих в базе, сервер показывает "unknown" вместо названия страны. Также, если включено в настройках, запросы /$_ip2country_$ и /$_ip2country_$?l=h возвращают страну пользователя. Этот запрос поддерживает переменную 'l=', которая может быть 'h' - для ответа html, 'j' - для ответа javascript и любым другим значением для простого текстового ответа.
    Вы можете включать Javascript-вариант на своих веб-страницах <script src=/$_ip2country_$?l=j >, чтобы использовать название страны в своих скриптах. Ответ будет в следующем формате:
    var county_code="CC",country="Country name",country_ip="127.0.0.1";
    

    Содержание



    Прокси

    Эта версия включает в себя http прокси сервер. Вы можете указать порт для прокси, одновременное число подключений. Кэш на жестком диске. позволяет сохранять весь принятый трафик определенное количество дней. HTTP протокол предусматривает запрет кеширования определенных страниц. Часто владельцы сайтов пользуются этим только для того, что бы подсчитывать реальное число посещений. По вашему указанию сервер может игнорировать NO-CACHE. В этом случае страничка будет перегружаться только когда один из пользователей прокси нажмет кнопку Reload в своем браузере. Можно включить авторизованый доступ к прокси, и добавить пользователей для которых он разрешен. Смотрите так же описания ключей командной строки.

    Содержание.



    DNS сервер

    Эта версия включает в себя DNS сервер. Для запуска вы должны указать hosts-файл. Формат этого файла с одной стороны совместим со стандартным виндосовким, с другой стороны дополнен возможностью быть похожим на формат мастер-файла рекомендованого в RFC 1035.
    Для совместимости с системным хост-файлом, каждая строка должна состоять из IP адреса и имени хоста. Комментарии начинаются с символа '#'. В отличие от виндосовкого формата доменные имена в этом файле могут начинаться с последовательности '*.' для описания всех поддоменов. Вот пример такого файла:

    # Here example of hosts file for local network begins.
    192.168.1.21 www.max.local
    192.168.1.21 max.local
    192.168.1.21 max.max.local
    192.168.1.20 *.max.local
    192.168.1.22 www.boss.local
    192.168.1.23 serg.local
    192.168.1.26 www.serg.local
    192.168.1.24 *.andy.local
    192.168.1.25 *.mary.local
    # etc ...
    # end of hosts file
    
    Так же каждая строка может соответствовать рекомендациям RFC и содержать имя домена и RR описание.
    [<domain-name>] <blank> [<TTL-always-ignored>] IN <type> <RDATA>

    При описании домена, в отличии RFC рекомендаций вы должны указывать <domain-name> полностью. ('@' не интерпретируется, завершающая точка может пропускаться или присудствовать, без разницы). Вы можете вообще пропустить <domain-name> в этом случае используется предыдущие имя домена. в отличии RFC рекомендаций вы должны указать класс "IN" для каждой строчки в RR формате. <type> может быть:
  • A <IP-address> - имя хоста
  • NS <full-name> - авторизирующий сервер имен.
  • CNAME <full-name> - синоним. 'A' запись оригинала должна присудствовать в том же файле.
  • SOA <full-name> <e-mail by owner> (<SERIAL>,<REFRESH>,<RETRY>,<EXPIRE>,<MINIMUM>) - начало описания домена или зоны.
  • MX <preference> <full-name> - почтовый сервер. <preference> -- число от 1 до 255. Наименьшее значение соответствует наиболие предпочтительному серверу.
  • PTR <full-name> - имя. Хост с левой стороны должен быть вида #.#.#.#.in-addr.arpa
  • TXT text
  • SPF text
  • CAA 0 [issue|issuewild] server
  • TYPEnumber \\# length hex hex hex... - для новых, не извесных серверу типов.

    Другие типы игнорируются.
    Также сервер поддерживает PTR запросы, но RDATA для ответа берется из первой 'A' записи с этим IP, или из строк совместимых с системным hosts файлом. Для любого типа записей domain-name может начинаться с шаблона '*.' что бы описать все под-домены. Сервер поддерживает '*'- запрос, для возврата всего о домене. Для домена с шаблоном ответы на такой запрос тоже будет содержать шаблон. Для всех других типов запросов ответы будут без шаблонов.

    Сервер может поддерживать рекурсию. Для реализации резольвинга любого домена вы должны указать NS записи корневых серверов. Если вы выбрали "Рекурсивные вызовы только к серверам верхнего уровня." вместо корневых серверов укажите DNS сервера вашего, провайдера. Все запросы будут идти к ним. Иначе, сервер будет обращатся к различным серверам, предположительно близким к запрошенной зоне.
    Коментарии могут начинаться с ';'
    Дополнительно понимаются следующие директивы:
    $ORIGIN <domain-name>
    $TTL <validate-time> -- время жизни по умолчанию -- целое, описывающие время в течении которого запись может храниться в кеше.
    $SLAVE <domain-name> <ip-address-of-master> [<filename>] -- Сервер будет работать как ведомый DNS для этого домена. Домен полностью загружается с ведущего сервера. Ведущий сервер будет периодически опрашиваться, в соответствии с полями REFRESH и SERIAL в SOA записи домена.
    $IF_DOWN <host:port> <interval> Old.IP=New.IP -- По этой опции сервер будет пытаться соединится с host:port каждые interval секунд, и при неудаче в каждой записи содержащей Old.IP он будет временно заменяться на New.IP. До тех пор пока host:port не начнет работать.

    Пример:

    # Here is an example of hosts file for export domain to Internet,
    # and resolve other names.
    
    ; First, lines holds the information on root name servers needed to
    ; initialize cache of Internet domain name servers
    
    .                  IN  NS a.root-servers.net
    a.root-servers.net IN  A  198.41.0.4
    .                  IN  NS b.root-servers.net
    b.root-servers.net IN  A  128.9.0.107
    .                  IN  NS c.root-servers.net
    c.root-servers.net IN  A  192.33.4.12
    .                  IN  NS d.root-servers.net
    d.root-servers.net IN  A  128.8.10.90
    .                  IN  NS e.root-servers.net
    e.root-servers.net IN  A  192.203.230.10
    .                  IN  NS f.root-servers.net
    f.root-servers.net IN  A  192.5.5.241
    .                  IN  NS g.root-servers.net
    g.root-servers.net IN  A  192.112.36.4
    .                  IN  NS h.root-servers.net
    h.root-servers.net IN  A  128.63.2.53
    
    ; Now declare our domain
    
    $TTL 86400  ;TTL - 24 hours
    
    somedomain.net IN SOA  somedomain.net  max@somedomain.net (
     2002120602 ; Serial
     36000      ; Refresh
     3000       ; Retry
     36000000   ; Expire
     36000      ; Minimum
     )
      IN NS   ns.somedomain.net
      IN NS   ns2.somedomain.net
      IN MX 1 relay1.somedomain.net
      IN MX 2 relay2.somedomain.net
      IN A 192.168.12.1
    
    ns.somedomain.net     IN A 192.168.12.1
    ns2.somedomain.net    IN A 192.168.12.2
    relay1.somedomain.net IN A 192.168.12.1
    relay2.somedomain.net IN A 192.168.12.2
    
    pc2.somedomain.net    IN A 192.168.12.2
      IN NS   ns2.somedomain.net
      IN MX 1 relay1.somedomain.net
    
    *.somedomain.net      IN A 192.168.12.1
      IN NS   ns.somedomain.net
      IN NS   ns2.somedomain.net
      IN MX 1 relay1.somedomain.net
      IN MX 2 relay2.somedomain.net
    
    
    ; also this file may contents lines in next format:
    192.168.1.21 www.max.local
    192.168.1.21 max.local
    192.168.1.20 *.max.local
    
    $SLAVE domain2.name 192.168.12.8 domain2.name.txt
    $IF_DOWN 192.168.12.2:80 300 192.168.12.2=192.168.12.1
    
    # end of hosts file
    



    SMTP сервер

    SMTP сервер может:

  • Принимать сообщение для указанных пользователей. Адрес назначения должен быть user_name@your.domain.name Эти сообщения сохраняются в пользовательском home\mbox каталоге и доступны через POP3.
  • Принимать сообщения от указаных пользователей для любого. Исходный адрес должен быть user_name@your.domain.name Вы можете разрешить принимать сообщения от любого для любого, и вы можете ограничить диапазон IP, для которого разрешены сообщения этого типа. Для определения пути, SMTP сервер спрашивает DNS сервер. Вы должны указать DNS IP в настройках.
  • Вы можете добавлять адреса спамеров в черный список. Сообщения с этих адресов никогда не будут приниматься. Также сервер может поддерживать общие и личные списки: черный список , серый список, и белый список. Названия общих списков вы можете задать в опциях. Также в опциях вы можете включить проверку личных файлов с именами "badlist", "graylist" и "goodlist" в домашнем каталоге пользователя. Каждая строка в этих файлов может содержать: Пример:
    # Begin of file
    @yahoo
    4.79.181.
    67.28.113.
    one@address.com
    lotto
    ? $sender == spamer@address
    ? ! $hello =~ /.+\.[a-z]{2,4}/
    ? $control =~ /\[64.156.215.*\]/
    # End of file
    

  • Вы можете разрешить серверу проверять пользовательский "forward" файл, чтобы перенаправлять или фильтровать сообщения.
    Файл с именем "forward" может лежать в домашнем каталоге пользователя. Когда опция включена сервер анализирует каждую строчку этого файла и понимает следующие инструкции:
  • #if выражение -- следующие строки будут проверяться, только если выражение истина.
  • #elif выражение -- если предыдущие условие ложь, то следующие строки будут проверяться, если выражение истина
  • #else -- следующие строки будут проверяться, только если предыдущие выражение ложь.
  • #endif -- конец условного блока
  • #mv куда -- переместить сообщение
  • #cp куда -- копировать сообщение
  • #rm -- удалить сообщение
  • # что угодно -- комментарий
  • !d:\путь\приложение {параметры} -- выполнить "d:\путь\приложение {параметры} каталог_пользователя\mbox\имя.msg". Только если в настройках разрешено исполнение. Так же возможно указать в строке запуска переменные ($имя_переменной), но в этом случае:
  • to1@host1 {toN@hostN} -- переслать сообщения на эти адреса.
    Условие может содержать переменные ($size_kb -- размер сообщения в кБ; $in_text(текст для поиска) -- истина, если текст содержится в сообщении; $errorlevel -- значение возвращенное последним внешним скриптом или ноль если небыло удачных запусков) и значения разделенные следующими знаками операций: $text -- полный текст сообщения. $body -- тело сообщения.

    ! -- перед выражением -- простое отрицание
    = или == -- равно
    != -- не равно
    <,>,<=,>= -- соответственно.
    && между выражениями логическое и.
    || между выражениями логическое или.
    =~ /pattern/ig поиск по шаблону. pattern это регулярное выражение Юникс. Результат истина, если в строке str1 обнаруживается подстрока соответствующая шаблону pattern
    Пробел и обратный слеш (' \') в конце строки означает продлжени текущей команды на следующей строке. Пример:
    # Here is the example of forward file.
    
    #if  $text =~ /\nFrom: .*?boss@address/i
    !d:\perl\bin\perl.exe check.pl
    #endif
    
    #if $in_text(100% FREE)
    #mv c:\probably\spam
    #elif $size_kb<=20 && ! ( $text =~ /^From: .*?([^< ]+?@[^> \r\n]+).*/i && ($1 == my@private.address || $1 == boss@address ) || $in_text(do not redirect) )
    #cp c:\probably\importan
    my_home@address my_seccond_address@yahoo.com
    #else
    !d:\perl\bin\perl.exe autoreply.pl $msgfile $1
    #endif
    
    # End of forward file
    
    Пример:
  • Антивирусный скрипт имеет такой же формат как "forward" файл, но в отличии от "forward"-файла он проверяется перед отправкой каждого сообщения.
    # Here is the example of antivirus file.
    
    #if  $text =~ /Content-Transfer-Encoding: ["`]?base64[\001-\xFF]*?\n\r?\nTVqQAAMA/
    
    #if  $text =~ /name=.*\.pif/
    #mv c:\probably\virus
    #else
    !c:\DrWeb\drwebcl.exe /GO /TM- /WA- /TB- /ML
    #endif
    
    #elif $body =~ /<script language=/ && $body =~ /<!DOCTYPE HTML/
    #mv c:\probably\spam
    #endif
    
    # End of file
    
    
    Фильтр разрыва, это специальное вырожение которое может осуществить проверку после того как сервер получил первые 8Kb сообщения. Если результат этого выражения исина, собщение не будет приниматья дальше, Комбинация "отправитель+IP адрес+приветствие сервера+получатели" будет помещена во временный черный список и последующие попытки отправить это сообщения будут присекаться еще до начала приема данных.
    Внутри выражения могут проверяться следующие переменные:
  • $msg -- первые 8Kb сообщения
  • $sender -- адрес отправителя
  • $hello -- самоидентификация удаленного сервера.
  • $control -- полная идентификационная строка в формате:
    "From отправитель (удаленный_сервер [IP]) дата и время For получатели\r\n"
    Выражение может включать такие же действия как и в операторе #if: ||,&&,<,>,>=,<=,==,!=,=~
    Фильтр разрыва предназначен для остановки получения больших спамерских писем.
    Пример выражения:
     (! ( $msg =~ /^From:[^\n\r]*<([^>\n\r]+)>/i ||
          $msg =~ /^From:[ \t]*([^\n\r]+)/i        )
     )
     || $1 != $sender
     || $msg =~ /^Subject:[^\n\r]*семинар|руководителю|бухгалтеру/i
     || $msg =~ /aдpес[ \r\n\t]+пoлучен[ \r\n\t]+из[ \r\n\t]+oткpытыx[ \r\n\t]+истoчнuкoв/i
     || $msg =~ /р[ \r\n\t]*А[ \r\n\t]*м[ \r\n\t]*е[ \r\n\t]*р[ \r\n\t]*и[ \r\n\t]*к[ \r\n\t]*а[ \r\n\t]*н[ \r\n\t]*с[ \r\n\t]*к.*А[ \r\n\t]*н[ \r\n\t]*г[ \r\n\t]*л[ \r\n\t]*и[ \r\n\t]*/i
    
    В данном примере: первые четыре строки проверяют наличие в сообщении поля From, выделяют адрес из этого поля и требуют совпадения этого адреса с адресом отправителя; следующая строка в поле Subject ищет любое из слов "семинар","руководителю","бухгалтеру"; следущей строкой в теле сообщения ищется строка "aдpес пoлучен из oткpытыx истoчнuкoв", при этом между словами может быть любое количество пробелов; последняя строка ослеживает различные модификации производные от строки "Центр Американского Английского"
    При выполнении любого из этих условий письмо ситается спамом.

    POP3 сервер и прокси

    POP3 сервер предоставляет доступ к входящей почте. Если POP3 прокси разрешен то пользователи могут настроить свои почтовые программы чтобы забирать почту с любых удаленных POP3 через этот POP3. Для этого, user настройка в почтовой программе должна иметь вид:
    local_user@remote_user@remote_host
    Пароль должна иметь вид: local_password@remote_password
    Или @remote_password часть может быть добавлена к user настройке. Везде вместо '@' может использоваться '#'.



    FTP сервер и прокси

    FTP сервер предоставляет доступ к домашним каталогам пользователей и если опция "Разрешить виртуальные директории для FTP" выбрана то и к приватным виртуальным каталогам. Открытые виртуальные каталоги недоступны через FTP.
    Если FTP прокси разрешен то пользователи могут настроить свои FTP программы чтобы забирать почту с любых удаленных FTP через этот FTP. Для этого, user настройка в FTP программе должна иметь вид:
    local_user@remote_user@remote_host
    Пароль должна иметь вид: local_password@remote_password
    Или @remote_password часть может быть добавлена к user настройке. Везде вместо '@' может использоваться '#'.
    Некоторые FTP клиенты (например FTP плагин в Far-е) поддерживает схожий тип FTP proxy. В этих клиентах в настройках файрвола можно указать your_host:FTP_port, и указывать FTP URL-ы в виде: ftp://local_user#remote_user:local_password#remote_password@ftp_host/



    TLS/SSL сервер

    Сервер не содержит встроенных TLS/SSL криптографических функций, но включает интерфейс для подключения внешней TLS/SSL билиотеки. Вы можете подключить к серверу OpenSSL или GNU TLS. Простая DLL базирующаяся на OpenSSL 1.1.1 лежит здесь: libsec111.zip OpenSSL включен
    DLL базирующаяся на GnuTLS доступна здесь: seclibgnutls.zip, но для нее потребуется еще и GnuTLS w32 доступный на gitlab



    HTTP TLS VPN-сервер и клиент

    Теперь эта программа может создавать VPN-канал внутри HTTPS-соединения.

  • Как это работает?
    На хосте, где используется HTTP-сервер, вы можете включить VPN-сервер в настройках. На других хостах вы можете установить программу и включить VPN-клиент (возможно только VPN-клиент). Клиенты обращаются к серверу по протоколу HTTPS, запрашивают URL-адрес подобно этому: https://hostname.etc/$_vpn_$/. Можно выбрать любое URL-имя по которому сервер будет определять, что это запрос VPN. Когда HTTP-сервер обнаруживает VPN-запрос, он передает соединение на встроенный VPN сервер.
  • TAP и TUN
    Сервер поддерживает оба типа VPN, и оба VPN могут работать одновременно, но каждый тип должен находиться в собственной подсети. Клиент может выбрать только один тип, TUN или TAP, и он сообщает требуемый тип серверу при подключении.
    В чем разница? В TAP-соединении каждый пакет также включает 14-байтовый заголовок Ethernet. Это дает некоторые расширенные возможности, например. Интерфейс TAP может быть включен в состав моста, и через TAP можно транслировать любые типы пакетов. Соединение TUN поддерживает только пакеты IPv4 и IPv6.
  • Связать между клиентами
    В этой версии сервер ничего не фильтрует. Связь между клиентами будет работать и может фильтроваться внешним файрволом.
  • Ссылка на Linux и Windows
    Linux и Windows VPN используют одни и те же протоколы и могут быть связаны друг с другом.
  • Драйвер Tap для Windows.
    В Windows нет встроенного драйвера TUN/TAP. Это означает, что требуется внешний драйвер. Эта программа может работать с бесплатным драйвером TAP-windows с открытым исходным кодом из проекта OpenVPN. Доступно здесь. (Выбирите Tap-Windows-9.24.7 для вашей системы). Если вы хотите настроить сервер на ПК с Windows и использовать и TUN и TAP адаптеры, добавьте два адаптера после установки драйвера. Если вы уже используете OpenVPN и хотели бы использовать и этот сервер, добавьте для него новые адаптеры. В настройках сервера вы можете указать индекс TAP-адаптера, начинающийся с нуля, или имя сетевого подключения. Простой путь указать индекс, -- оставьте имя соединения пустым, сервер заполнит его сам. Чтобы получить доступ к драйверу, в первый раз сервер НЕОБХОДИМО запустить с правами администратора. Возможно, это особенность адаптера Tap-windows, или это особенность моей тестовой среды, или я что-то не понял, но хороший способ для настройки IP-адреса при использовании режима Tun используется внешний скрипт .bat. Сервер может запустить его автоматически. Также в этом скрипте вы можете изменить маршрутизацию и другие параметры сети, например DNS-серверы.
  • Скрипты.
    VPN-сервер и клиент запускают скрипты в трех случаях:
    *)Имя_интерфейса совпадает с именем соединения в Windows.
  • Авторизованный доступ.
    Вы можете выбрать опцию, чтобы сделать HTTP TLS VPN-сервер общедоступным для всех кто знает URL-адрес. В противном случае сервер потребует авторизацию в стиле HTTP. В настройках сервера необходимо добавить пользователя с доступом "Proxy", в настройках клиента указать это имя пользователя и пароль.
  • Securety библиотека.
    Обновлены внешние библиотеки seclib111 и seclibgnutls. Старые версии не будут работать с VPN, так как в них нет необходимых функций. Если вы использовали старую версию сервера и хотите использовать VPN, обновите библиотеку.
  • Проверка сертификата сервера.
    Если вы хотите включить проверку сертификата сервера, то в параметрах TLS/SSL вам необходимо указать каталог с доверенными сертификатами. Вы можете поместить туда сертификат вашего удаленного сервера или, возможно, корневые сертификаты. Если вы используете OpenSSL, вам необходимо создать хеши для ваших сертификатов. Запустите:
    openssl rehash -compat -v путь_к_этому_каталогу
    
    Если вы используете GnuTLS, есть несколько дополнительных опций, например. вы можете отключить проверку времени сертификата и включить стиль проверки SSH. В этом случае сертификат хоста в первый раз будет воспринят как действительный, и для хоста будет сохранен открытый ключ. В следующие разы будет проверен открытый ключ.
  • MTU
    В версии Linux вы можете указать MTU для каждого интерфейса. В версии для Windows то же самое можно сделать с помощью внешних инструментов для "сетевого подключения". Вероятно, чтобы работать быстрее, лучше выбрать MTU меньше вашего реального MTU (обычно 1500) на размеры заголовков (14-байтовый заголовок Ethernet для TAP, заголовока TLS и сервер добавляет 2 байта для каждого пакета). Но я думаю, что лучший способ установить большой МТУ. На пример 9000 или даже 15000. В этом случае TLS будет получать большие пакеты, шифровать их, и когда они будут переданы, на верхнем уровне TCP они будут разделены на пакеты по вашему реальному MTU Ethernet. Но с другой стороны, когда подключено несколько клиентов, большой MTU может отдать приоритет передаче больших файлов, в ущерб тем кто большие файлы не передает.


    Регистрация.

    Регистрации больше нет. Программа полностью бесплатная. Однако, если она вам нравится, буду рад любому донейшену


    Заключение.

    В заключении я не могу не выразить свою глубочайшую признательность, программистам, написавшим прекрасный компилятор GNU C++, с помощью которого откомпилирована эта программа. Я благодарю GNU за то, что они подарили мне возможность писать самые лучшие программы, используя самый лучший компилятор.
    Вы можете посмотреть GNU ресурсы:
  • DJGPP -- домашняя страница трансляции GNU GCC в среду DOS.
    Я пользовался именно этой версией, своими библиотеками, вызывающими WIN32 API и своей программкой строящей Windows PE *.exe из COFF a.out.
  • GNU -- Собственно сам сайт GNU.


    М. Феоктистов


    Содержание