Skip to content

NGRsoftlab/Astra-apache-httpd

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

License

Contributing

Stars

Watchers

Forks

Contributors