Skip to content

Repository files navigation

NGRSOFTLAB logo

httpd

Dive efficiency Made with love Powered by Docker NGR Team

httpd image

Ascii svg art by aasvg.

Description

Среда для сборки контейнера с Apache HTTP Server на базе Astra Linux. Данный веб сервер относится к сертифицируемой сборке предлагаемой Astra Linux, т.к. поставка пакета происходит из основного репозитория (main).

Присоединяйтесь к нашим социальным сетям:

NGR Social Telegram       NGR Social Media

Contents

OS Apache2 Status
Astra 1.8 Apache 2.4.65 ✅ Fully supported
Таблица 1. Поставляемые версии для контейнерных сред.

Dockerfile для сборки Apache в Astra Linux

Для начала работы необходимо установить pre-commit и хуки

$ pip install pre-commit
$ pre-commit --version

pre-commit 4.2.0

$ pre-commit install

pre-commit installed at .git/hooks/pre-commit
pre-commit installed at .git/hooks/commit-msg
pre-commit installed at .git/hooks/pre-push

Warning

Чтобы проверить свои изменения, воспользуйтесь командой pre-commit run --all-files. Чтобы проверить конкретную задачу, воспользуетесь командой pre-commit run <target> --all-files. Если Вы понимаете что творите и хотите пропустить проверку pre-commit-ом воспользуйтесь --no-verify, пример git commit -m "Добавил изменения и не хочу проверки" --no-verify

Собрать образ Astra Linux based

## Image build
export ASTRA_VERSION='1.8.x-slim'
export APACHE_HTTPD_VERSION="2.4.65-astra${ASTRA_VERSION}"

## Apache image:
docker build \
    --progress=plain \
    --no-cache \
    -t httpd:"${APACHE_HTTPD_VERSION}" \
    .
Имя Значение по умолчанию Тип Описание
image_name astra string Имя образа.
image_registry '' string Адрес до реестра образа. Например: --build-arg image_registry=my-container-registry:1111/
image_version 1.8.x-slim string Версия образа.
httpd_identity 2.4.65 string Ожидаемая версия httpd1.
version 1.0.0 float Версия выпуска минимального контейнера.
Таблица 2. Переопределяемые аргументы для Dockerfile.

Tip

Проверка доступных версий приложения - apt show apache2, apt-cache policy apache2, apt-cache show apache2

Для того чтобы начать использовать данный образ, создайте Dockerfile с простыми настройками

FROM httpd:2.4.65-astra1.8.x-slim
COPY static-html-directory /var/www/html

Затем соберите и запустите полученный образ

$ docker build -t some-content-httpd .
$ docker run --name some-httpd -d some-content-httpd

...run logic...

Простой тест:

$ docker run --rm -p 80:80 httpd:2.4.65-astra1.8.x-slim

$ curl -s -i -w "\nStatus code: %{http_code}\n" http://localhost

...
httpd header
httpd body
httpd status code

Хостинг простой статики:

docker run --rm -d --name some-httpd -p 8080:80 -v /some/content:/var/www/html:ro httpd:2.4.65-astra1.8.x-slim

Для создания своего пользовательского конфига httpd сервера воспользуйтесь командой ниже и получите конфигурационный файл, который используется по умолчанию

docker run --rm httpd:2.4.65-astra1.8.x-slim cat /etc/apache2/apache2.conf >my-httpd.conf

После модификаций просто скопируйте его в свой образ

FROM httpd:2.4.65-astra1.8.x-slim
COPY ./my-httpd.conf /etc/apache2/apache2.conf

При необходимости передачи веб-трафика по SSL, простейший способ настройки - это скопировать или монтировать пользовательские server.crt, server.key и файл конфигурации внутрь образа

  • Создать пользовательские самоподписанные сертификаты

    mkdir -p ./certs
    
    openssl req -x509 -nodes -days 365 \
      -newkey rsa:2048 \
      -keyout ./certs/server.key \
      -out ./certs/server.crt \
      -subj "/C=RU/ST=Test/L=Test/O=TestOrg/CN=localhost" \
      -addext "basicConstraints=critical,CA:FALSE" \
      -addext "keyUsage=digitalSignature,keyEncipherment" \
      -addext "extendedKeyUsage=serverAuth"
    
    chmod 600 ./certs/server.key
    chmod 644 ./certs/server.crt
    sudo chown -R 999:999 certs/
  • Собрать образ

    docker build \
      --progress=plain \
      --no-cache \
      -f Dockerfile.ssl \
      -t httpd:ssl \
      .
  • Запустить проверку

    docker run -d \
      --name httpd-ssl \
      -p 8080:8080 \
      -p 8443:8443 \
      -v $(pwd)/certs:/certs:ro \
      httpd:ssl
  • Проверить из консоли

    ## Проверить HTTPS
    curl -k https://localhost:8443
    
    ## Проверить сертификат
    openssl s_client -connect localhost:8443 -servername localhost 2>/dev/null | openssl x509 -noout -subject -issuer
    
    ## Проверить на защиту от XST атак - должен вернуть 405 или 403
    curl -k -X TRACE https://localhost:8443/
    
    ## Проверить на посторонние методы - должен вернуть 405 или 403
    curl -k -X PUT https://localhost:8443/
    
    ## Проверить сервер - должен показать 'Server: Apache'
    curl -I http://localhost:8080/

Tip

Рекомендую более подробно ознакомиться с конфигурационным файлом. В нём отражены неплохие практики оформления ssl/secure для веб-сервера

  • При необходимости включить логи отладки запросов, например отладки websocket, стоит использовать следующую конструкцию:

    # apache2.conf
    LogLevel alert proxy:trace4 ssl:info
  • При необходимости аудита подключения, можно воспользоваться tcpdump-ом

    tcpdump -i any -nn port 8080
    tcpdump -i lo -nn port 8443
  • Для того чтобы обновить конфигурационный файл внутри контейнера необходимо воспользоваться командой

    docker exec -it <my-httpd-container> kill -USR1 1

Лого для проекта создано при помощи aasvg проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь сайтом или установите figlet. Если Вы используете способ с установкой figlet, то вдобавок необходимо сказать необходимый шрифт, например я использую Doom. Далее, необходимо воспользоваться aasvg и конвертировать ascii арт в svg. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение тут. Конвертация цвета происходит по следующему принципу - %23D42029, где %23 это закодированный URL символ #, итоговое получаемое значение #D42029

$ curl 'http://www.figlet.org/fonts/doom.flf' -o /usr/share/figlet/doom.flf
$ curl 'http://www.figlet.org/fonts/larry3d.flf' -o /usr/share/figlet/larry3d.flf
$ figlet -f doom 'Apache2-HTTPd'

  ___                   _          _____       _   _ _____ ___________   _
 / _ \                 | |        / __  \     | | | |_   _|_   _| ___ \ | |
/ /_\ \_ __   __ _  ___| |__   ___`' / /______| |_| | | |   | | | |_/ __| |
|  _  | '_ \ / _` |/ __| '_ \ / _ \ / /|______|  _  | | |   | | |  __/ _` |
| | | | |_) | (_| | (__| | | |  __./ /___     | | | | | |   | | | | | (_| |
\_| |_| .__/ \__,_|\___|_| |_|\___\_____/     \_| |_/ \_/   \_/ \_|  \__,_|
      | |
      |_|

$ aasvg --source --embed < ./docs/ascii.txt > docs/images/logo.svg

Apache feather logo

Apache feather logo, symbolizing the Apache Software Foundation's focus on distributed systems, open collaboration, and the "Apache Way".

Footnotes

  1. 🛠️ За счёт скрипта httpd-install-approximately.sh нас может не волновать полная версия httpd, мы можем передавать лишь приблизительно желаемую версию, а скрипт позаботится чтобы была выбрана последняя и актуальная из списка

About

Проект по сборке Apache HTTP Server на базе Astra Linux

Topics

Resources

Contributing

Stars

Watchers

Forks

Contributors

Languages