Luc Shelton

Securing HTTP Headers with NGINX in Docker

Securing HTTP Headers with NGINX in Docker

Securing HTTP Headers with NGINX in Docker

Securing HTTP Headers with NGINX in Docker

7 Minute(s) to read
Posted 22 months ago Updated 13 months ago 7 Minute(s) to read 9 comments

Nginx, stylized as NGINX, nginx or NginX, is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. More typically it is the web server of choice for most applications and APIs targeting the web. Like other popular web servers, NGINX tends to emit more data than necessary when serving HTTP requests when using the default configuration, which in turn can make it susceptible to (zero day) exploits.

An example of what is meant can be found in the image below.

HTTP headers from our page response using Google Chrome's developer tools.

HTTP headers from our page response using Google Chrome's developer tools.

This is the emitted response from navigating to any page on this website when using the default configuration. This is not ideal, as hackers or penetration testers can use automated tools for scanning and detecting websites that have potential vulnerabilities.

This article will cover some steps that you can take for securing the HTTP responses that your NGINX server emits when using the Alpine Linux version of the Docker image.

This article assumes that you have appropriately configured your development environment for usage with Docker's BuildKit features.


Extending NGINX

 In the root of your project, create the following directory layout.

containers/
- nginx/
-- build/
--- Dockerfile
-- configuration/
--- templates/
docker-compose.yaml
.env

Your docker-compose.yaml should look something like this...

version: '3.9'

services:
  nginx:
    container_name: '${SERVICE_NAME}-nginx'
    image: '${REMOTE_REGISTRY_HOST}${SERVICE_NAME}/nginx:${BUILD_VERSION}'
    build: 
      context: '${BUILD_ROOT}' 
      dockerfile: '${CONTAINERS_ROOT}/nginx/build/Dockerfile'
      target: portfolio-nginx-build
      args:
        NGINX_VERSION: ${NGINX_VERSION}
        NGINX_HEADERS_MORE_VERSION: ${NGINX_HEADERS_MORE_VERSION}
    environment:
      NGINX_ENVSUBST_TEMPLATE_DIR: /etc/nginx/templates
      NGINX_ENVSUBST_OUTPUT_DIR: /etc/nginx/conf.d
      NGINX_ENVSUBST_TEMPLATE_SUFFIX: .template

Your .env file should look something like this...

SERVICE_NAME=your-service-name-goes-here
COMPOSE_PROJECT_NAME=${SERVICE_NAME}
BUILD_ROOT=${PWD}
PROJECT_ROOT=${PWD}
CONTAINERS_ROOT=${PROJECT_ROOT}/containers

So far, so good, and nothing out of the ordinary either.

Dockerfile

Keep in mind that this article assumes that you are intending on using the Alpine Linux flavour or variant of NGINX's Docker image. It's significantly smaller in size, as the operating system variant comes typically bundled with far less system utilities and running services. The Linux variant is typically used in embedded systems for the same reasoning.

The beginning of our Dockerfile is nothing out of the ordinary. It provides 3 arguments that are used for describing this particular flavour of the image, which are

  • CUSTOM_BUILD_VERSION
  • CUSTOM_BUILD_DATE
  • CUSTOM_BUILD_UID

These are ideal if you are generating the Docker images as part of your continuous integration or build pipeline. At the time of writing this article, we are using version 1.20.1 of NGINX, which is compatible with version 0.33 of the Headers More plugin.

In addition, our Dockerfile "parameterises" the version numbers used for retrieving the correct version of NGINX and Headers More. 

ARG CUSTOM_BUILD_VERSION
ARG CUSTOM_BUILD_DATE
ARG CUSTOM_BUILD_UID

ARG NGINX_VERSION 1.20.1

FROM nginx:${NGINX_VERSION}-alpine AS builder

ARG CUSTOM_BUILD_VERSION
ARG CUSTOM_BUILD_DATE
ARG CUSTOM_BUILD_UID

ARG NGINX_VERSION 1.20.1
ARG NGINX_HEADERS_MORE_VERSION 0.33

Next, we are going to have to download the source files for both NGINX and the Headers More plugin.

RUN wget "http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" -O nginx.tar.gz && \
    wget "https://github.com/openresty/headers-more-nginx-module/archive/v${NGINX_HEADERS_MORE_VERSION}.tar.gz" -O headers-more.tar.gz

This is necessary as we have to produce a local build of NGINX that integrates Headers More as a dynamic module. Therefore this means that we need to ensure that Alpine Linux has the GCC compiler toolchain available, along with make tool and some additional packages.

RUN apk add --no-cache --virtual .build-deps \
  git \
  gcc \
  libc-dev \
  make \
  openssl-dev \
  pcre-dev \
  zlib-dev \
  linux-headers \
  curl \
  gnupg \
  libxslt-dev \
  gd-dev \
  geoip-dev

This bit consists of preparing the compilation environment for NGINX, including adjusting environment variables used by the compilation toolchain.

RUN mkdir -p /usr/src

# Reuse same cli arguments as the nginx:alpine image used to build
RUN CONFARGS=$(nginx -V 2>&1 | sed -n -e 's/^.*arguments: //p') \
	tar -zxC /usr/src -f "nginx.tar.gz"

RUN tar -zxvC /usr/src -f "headers-more.tar.gz" 

RUN HEADERSMOREDIR="/usr/src/headers-more-nginx-module-0.33" && \
  cd /usr/src/nginx-$NGINX_VERSION && \
  ./configure --without-http_autoindex_module --with-compat $CONFARGS --add-dynamic-module=$HEADERSMOREDIR && \
  make && make install

This does the following:

  1. Uses the tool sed to search and replace part of the string output from invoking nginx -V in the shell.
    1. The output from nginx -V displays the switch parameters used for compiling NGINX and configuring make.
    2. It makes use of the output generated, while appending our additional module (which is Headers More).
  2. Extracts the contents of the Headers More plugin that we downloaded in our previous snippet.
  3. Defines a variable pointing to the path where Headers More has been extracted to
  4. Runs make.

In this next stage, we finally make use of the generated build output after downloading and building NGINX and Headers More together. We make use of a feature in Docker called "multi-stage" builds, which enables us to copy the contents from another stage of a build. This approach to generating Docker images is considered to be significantly more efficient, as it enables us to reuse cached stages when rebuilding the Docker image, or making iterative changes.

FROM nginx:${NGINX_VERSION}-alpine as your-service-name-goes-here-nginx

# Extract the dynamic module "headers more" from the builder image
COPY --from=builder /usr/local/nginx/modules/ngx_http_headers_more_filter_module.so /usr/local/nginx/modules/ngx_http_headers_more_filter_module.so

The rest of the Dockerfile definition is entirely up to you. Depending on the flavour of the build (i.e. development or production), you can choose to copy or include other files that you would find useful in that particular flavour of the build.

You can find the complete Dockerfile constructed in this article here.


Configuration

Now that you have a working Dockerfile definition for your NGINX image, we can now configure how the NGINX server will behave. The intent behind this configuration is to ensure that we are not sending more data that necessary in our HTTP responses. Using the Headers More extension that we downloaded, compiled, included as part of our NGINX Dockerfile, we can now prepare a NGINX server block configuration that can remove headers using the appropriate syntax.

The Headers More extension makes the more_clear_headers command available for us to use, meaning that we can now remove headers that are added by default by the NGINX web server.

more_clear_headers 'Server';
more_clear_headers 'X-Powered-By';

A more complete example would look like this. Find below an example root nginx.conf configuration file.

# Load in the headers more module
load_module /usr/local/nginx/modules/ngx_http_headers_more_filter_module.so;

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {

    more_clear_headers 'Server';
    more_clear_headers 'X-Powered-By';

    server_tokens off;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;


    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}

This configuration ensures that all HTTP responses served, regardless of which server blocks you have configured, will have the X-Powered-By and Server headers stripped from the HTTP response. Handy!

Now you can rest assured that visitors will be none-the-wiser about which kind of software you are using for serving your web applications, and thus mitigating the ability for a malicious visitor to find or target exploits in your software stack.


Further Reading

You might find these links interesting if you wish to take further steps to mitigate security vulnerabilities on your web application.


Programming Languages:

Shell Script Bash Dockerfile

Technologies:

NGINX Docker


Comments

Comments

Здравствуйте товарищи!
http://iqs-quant.pl/forum/profile.php?mode=viewprofile&u=488382
http://www.darkquarterer.it/forum/viewtopic.php?t=483268
http://w06.darkagewars.com/forums/showthread.php?p=1014550#post1014550
http://24tov.com.ua/forum/viewtopic.php?f=4&t=159336
https://www.rs6.com/member.php/516242-Natashamzw
Кровать – центральный элемент декора вашей спальни, поэтому ее грамотный выбор – самый важный шаг на пути к созданию удобного, практичного и стильного интерьера. В каталоге представлены детские кровати, с подъемным механизмом, двуспальные, односпальные. Предлагаем купить кровати в различных размерах и стилях: классика, скандинавский минимализм, прованс, хай-тек.Кровати предназначены для полноценного отдыха во время сна на ортопедическом матрасе, учитывающем все особенности строения тела. В связи с экономией пространства в квартире, покупатели часто приобретают раскладные модели диван-кроватей. Такой диван не предоставляет желаемой степени комфорта во время сна по причине несовершенства его конструктивных особенностей. Врезающиеся в тело стыки частей дивана, а также более жесткие пружины, в сравнении с каркасом кровати, не способствуют здоровому сну и полноценному отдыху.Составными частями кровати являются:каркас (достоинства которого необходимо рассматривать в ключе оптимального сочетания удобства, прочности, и привлекательности дизайна);основание, выполненное в большинстве современных моделей в виде гибких планок, поддерживающих матрас и регулирующих его способность приспособления под положение тела;матрас, представленный широким выбором моделей в зависимости от габаритов и материала наполнителя.Наиболее экологически чистыми материалами для производства кроватей служат натуральный массив дерева, клееная древесина, кованый металл, а также ДСП или МДФ.
От всей души Вам всех благ!

Приветствую Вас товарищи
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]правильная скважина на воду[/url]
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]бурение скважин метр[/url]
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]пробить скважину для воды цены[/url]

Where is admin?
I'ts important.
С уважением.

Здравствуйте товарищи
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]бурим скважину под воду[/url]
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]сколько стоит скважина для воды[/url]
[url=https://www.youtube.com/watch?v=zCKsoNLB5FM&t=2s]стоимость бурения скважины[/url]

Where is admin?
I'ts important.
Прошу помочь.

Здравствуйте товарищи!
https://carbis.ru/forum/member.php/363060-Montanabjt
http://www.662.com.tw/viewthread.php?tid=286356&extra=
https://forum.tvfool.com/member.php?u=1533048
http://xn--um-mw2d1rese37uzpc.ctfda.com/viewthread.php?tid=7757229&extra=
https://forum.krymbezpravil.org.ua/viewtopic.php?f=13&t=19386

Предлагаем Вашему вниманию интересный сайт для заказа услуг стоматологии в Минске.К вашим услугам лучшие стоматологи Минска с многолетним стажем.
У нас работают стоматологи высшей категории, доценты и профессора — врачи с высоким уровнем профессионализма и личной ответственности, способные действовать в команде и постоянно совершенствоваться. Наша профессия — это ваша здоровая и красивая улыбка!Мы всегда на связи с вами! Мы предлагаем комплексный подход в решении стоматологических проблем.это команда единомышленников, одни из лучших специалистов в области эстетической и восстановительной стоматологии, ортопедии, ортодонтии, челюстно-лицевой хирурги и периодонтологии, эндодонтии, что позволяет достигать наилучших результатов лечения.Мы верим в построение отношений, основанных на доверии и взаимопонимании. Наши пациенты становятся нашими друзьями.
Увидимся!

Здравствуйте господа!
https://carbis.ru/forum/member.php/361539-Montanagcr
http://jeepspeed.net/v2/member.php?515896-Montanavae
https://atsgmembers.com/memarea/forums/forums/viewtopic.php?f=44&t=2648307
https://forum.plastic-surgery-doctors.com/viewtopic.php?f=5&t=350477
https://forum.krymbezpravil.org.ua/viewtopic.php?f=16&t=7449

Есть такой интересный сайт для заказа услуг стоматологии в Минске.К вашим услугам лучшие стоматологи Минска с многолетним стажем.
У нас работают стоматологи высшей категории, доценты и профессора — врачи с высоким уровнем профессионализма и личной ответственности, способные действовать в команде и постоянно совершенствоваться. Наша профессия — это ваша здоровая и красивая улыбка!Мы всегда на связи с вами! Мы предлагаем комплексный подход в решении стоматологических проблем.это команда единомышленников, одни из лучших специалистов в области эстетической и восстановительной стоматологии, ортопедии, ортодонтии, челюстно-лицевой хирурги и периодонтологии, эндодонтии, что позволяет достигать наилучших результатов лечения.Мы верим в построение отношений, основанных на доверии и взаимопонимании. Наши пациенты становятся нашими друзьями.
Увидимся!

Добрый день дамы и господа[url=https://ccwater.kiev.ua/].[/url]
https://bitcoinvealtcoin.com/topluluk/bunlardan-uzak-durun/19-litrov/new/#new
http://forum.worldwideyachtsman.com/viewtopic.php?f=52&t=790955
http://forum.ll2.ru/member.php?617150-Samantajme
http://www.ts-gaminggroup.com/member.php?21797-Samantasxj
https://ladygrand.ru/entry.php?1598-%CE%E3%F0%E0%E6%E4%E5%ED%E8%FF-%E4%EB%FF-%E0%FD%F0%EE%EF%EE%F0%F2%EE%E2-%E8-%E0%FD%F0%EE%E4%F0%EE%EC%EE%E2-%EE%F2-%EF%F0%EE%E8%E7%E2%EE%E4%E8%F2%E5%EB%FF&bt=381935

А какую воду употребляете ежедневно вы и ваша семья? Качественная ли она? Не пришло ли время более ответственно отнестись к тому, что попадает в ваш организм и влияет на здоровье, самочувствие, настроение? Задумайтесь, почему в последнее время расширяется круг людей, которые заказывают доставку качественной воды? Не потому ли, что она полезнее? Не потому ли, что характеристики жидкости из-под крана давно перестали соответствовать стандартам и нормам? Мы знаем, как добиться повышения вашего качества жизни!Доставка воды по Киеву: собственный бренд компании для вас.Наш официальный интернет-магазин предлагает заказать воду на дом оперативно и легко. Конечно, можно ставить фильтры на кран, как способ решения вопроса улучшения качества сомнительной воды, поступающей из водопровода, но подумайте о том, что вкуса и пользы в таком варианте будет минимум. А эта вечная замена картриджей, блоков… Нет! Выбираем более удобный и грамотный путь! Если вы решили раз и навсегда повернуть свой взгляд в сторону здорового образа жизни, то компания готова поддержать в этом. Почему мы гарантируем повышения вашего качествжизниза счет употребления чистой воды в рационе? Объясняем! Наша продукция — это вода, которая:имеет современную систему очистки, отвечающей строгим мировым стандартам;проходит через современное высокотехнологичное оборудование;строго проверяется по итогу и поставляется только после контроля качественных характеристик;озонируется кислородом, а значит поступает к потребителю исключительного качества и обеззараженная;обогащается ионами серебра, что в положительном ключе сказывается на иммунитете потребителя.Доставка воды от нашей фирмы — всегда оперативная и индивидуальная. Мы дорожим каждым клиентом и стараемся держать имя своей марки. клиенты — самые счастливые, потому что мы с любовью и уважением относимся к выбору каждого. Сотрудничаем с потребителями на индивидуальных условиях и с особым графиком. Понимаем занятость современного человека и желание решать вопросы в удобное время. Гарантируем помимо оперативности, строгое выполнение оговоренных с клиентом условий заказа, а также четкое соблюдение сроков. Мы бережно относимся и к финансам клиента, предлагая оптимальные цены и бесплатную доставку. Сотрудники компании по доставке питьевой воды рады сообщить и еще один плюс сотрудничества с фирмой — в ассортименте организации есть и сопутствующие товары, оборудование для розлива жидкости. Работаем с любыми объемами и поставляем заказ быстро за счет собственного автотранспорта компании. Если требуется помощь в поднятии бутылей на этаж или установке их на кулер или подставку, то мы всегда рады помочь и предложить свои свободные руки для вас.Вода на дом с доставкой: оправдание всех ваших запросов
Мы знаем о запросах современного потребителя и стараемся соответствовать ожиданиям клиента на все 100%. Заказать воду по Киеву у нас — это позволить себе наслаждаться высоким уровнем сервиса по доступной ценовой политике компании. Безусловно, качественные характеристики продукции неоспоримы. Воспользоваться услугой можно и для дома, и для офиса. Все, что требуется от клиента — выбрать подходящую позицию из каталога и связаться с нашим менеджером. Стоит еще раз напомнить о том, что качество употребляемой жидкости напрямую отражается на здоровье и самочувствии вас и членов вашей семьи. А если вы решитесь заказать доставку воды в офис, то можете еще и быть уверены в повышение работоспособности коллектива. Хороший климат на рабочем месте — залог продуктивной работы и успешности любого проекта.вода и оборудование для здоровой жизни.Мы рады сообщить нашим клиентам, что не только чистая вода теперь будет в их доме или офисе, но и оборудование, которое позволит пользоваться продукций еще более комфортно и удобно:кулеры и помпы;диспенсеры и подставки;одноразовая посуда, аксессуары и мн.др.Доставка воды в офис и на дом — это ваша новая жизнь с правильными приоритетами для здоровья, долголетия, активности и отличного настроения. Наша продукция действительно стоит вашего внимания. Заказ доставки воды — это получение жидкости высокого класса, прошедшей механическую фильтрацию, которая не влияет на физические и структурные свойства товара. Девять этапов очистки — и вы наслаждаетесь напитком, которому нет равных. Стоит отметить и сервис доставки. Обязательно ознакомьтесь с соответствующим разделом на портале и учтите время приема заказов и часы поставки. Вода классическая или серебряная — выбор ваш. Но он, безусловно, совершенный. Питьевая вода с доставкой по Киеву, заказ на которую оформлен до 17:00 часов поставляется в тот же день! Геолокация работы огромная, поэтому сотрудничество с нами — перспективное. Заказ бутилированной воды по Киеву от нашей компании — уважение к вашему выбору и вклад в ваше здоровье. Ценим доверие и стараемся ежедневно работать над улучшением сервиса. Еще думаете о том, где купить питьевую воду в Киеве с доставкой? Не стоит! Мы здесь!
От всей души Вам всех благ!

Привет господа[url=https://ccwater.kiev.ua/].[/url]
http://forum-digitalna.nb.rs/viewtopic.php?f=7&t=28519
https://atsgmembers.com/memarea/forums/forums/viewtopic.php?f=32&t=2656359
https://forum.krymbezpravil.org.ua/viewtopic.php?f=16&t=3137
https://www.civfanatics.ru/members/431737-Samantaofn
http://wafer.minedgames.com/forum/viewtopic.php?f=6&t=117795

Доставка воды в Киеве. По нормам ВОЗ взрослому человеку необходимо не менее 1,5 л чистой воды ежедневно. При этом качество питьевой жидкости не менее важно, чем количество. Оптимальным вариантом считается очищенная столовая вода, предназначенная для ежедневного применения.Самая идеальная вода для утоления жажды, приготовления напитков и блюд для взрослых и детей. Нашу воду в любых объемах можно заказать с доставкой по Киеву в офис или на дом. Самая быстрая доставка питьевой воды в Киеве Ключевым преимуществом компании является быстрая доставка. Уже спустя 60 минут после подтверждения заказа на сайте, вода в указанных объемах прибудет в любую точку Киева. Мы гордимся оперативной и слаженной работой наших сотрудников, которые сделали возможным настолько быструю обработку заказов в условиях мегаполиса. Если по техническим причинам заказ прибыл позже, то вы гарантированно получаете скидку 10% за каждые 10 минут простоя. Заказать воду можно 7 дней в неделю с 8:00 до 20:00, в воскресенье – с 9:00 до 18:00. Операторы колл-центра обрабатывают заказы максимально быстро, а кроме того они дают подробную консультацию по всем вопросам доставки воды, в том числе в оптовых количествах. Источники питьевой воды Наша вода добывается из глубинных скважин на уровне 335 м. Добытая из артезианских источников она проходит тестирование в лаборатории, где определяется минеральный состав и соответствие международным нормам. Многоступенчатая система фильтрации позволяет получить кристально чистую жидкость, идеально сбалансированную по микроэлементному составу воду. Обратите внимание на преимущества нашей продукции: Безопасность – благодаря природным источникам и глубокой очистке наша питьевая вода подходит для детей и взрослых. Экологичность – на глубине бурения наших скважин находятся подземные источники, в которых нет токсинов и вредных химических примесей антропогенного происхождения. Природный состав – вследствие фильтрации жидкость идеально балансируется по микроэлементному составу. Естественный вкус – низкая концентрация минералов позволяет получить воду нейтрального освежающего вкуса, что лучше всего подходит для питья в натуральном виде и приготовления еды. Уже готовую для употребления воду разливают в прочные бутыли, которые после использования могут быть подвержены вторичной обработке, что экологично и современно. Контроль качества питьевой воды Заботясь о своих клиентах, мы гарантируем высокое качество воды. Специалисты компании проверяют ее состав на соответствие международному стандарту FSSC 22000. Помимо регулярного контроля качества питьевой воды, мы проверяем чистоту бутылей, прошедших процедуру автоматической мойки и обеззараживания. Именно поэтому можно утверждать, что питьевая вода принесет только пользу вашему организму.
От всей души Вам всех благ!

Приветствую Вас друзья!
http://badassmofos.com/forums/viewtopic.php?f=2&t=36&p=564416#p564416
https://atsgmembers.com/memarea/forums/forums/viewtopic.php?f=60&t=2084131
https://quantrinet.com/forum/member.php?u=217758
http://www.ts-gaminggroup.com/showthread.php?47927-%D0%A0%D1%94%D0%A1%D0%82%D0%A0%C2%B5%D0%A1%D0%83%D0%A0%C2%BB%D0%A0%D1%95-everprof-drift-m&p=205427#post205427
https://www.kartridgam.net/member.php?u=190273
Каким должно быть компьютерное кресло?Обеспечение комфорта во время работы - это 50% успешной производительности. Будь то домашняя атмосфера или офисная – все мы стремимся к удобному оснащению рабочего места. Сделать правильный выбор в широчайшем ассортименте компьютерных кресел Вам поможет наш интернет-магазин.На нашем сайте вы найдете продукцию брендов, которым покупатели доверяют уже на протяжении долгого времени, благодаря зарекомендованным позициям качества и доступности в цене на рынке.В зависимости от Ваших предпочтений, возможностей и целей использования компьютерного стула, наши менеджеры помогут Вам определиться в выборе товара. Мы предоставляем гарантию на товар и осуществляем быструю доставку компьютерных стульев по России.Интернет-магазин предоставляет возможность своим покупателям найти и купить компьютерное кресло различных моделей, каждое из которых не уступает любому другому по своим техническим характеристикам:Для детей;Для геймеров;Для дома;Для столовой;Для бара;Для руководителя;Для офисных сотрудников;Для посетителей;Ортопедические;Компьютерные.Где можно купить офисные стулья и кресла?В каталоге нашего сайта Вы сможете подобрать для себя самое выгодное предложение по цене, производителю, техническим и функциональным показателям, опираясь не только на описание, но и на фото.У нас вы сможете совершить покупку выгодно и недорого. Большой выбор, доступные цены, актуальное наличие, высокое качество, гарантия на продукт, положительные отзывы покупателей – наш ориентир успешной работы.

Доброго времени суток товарищи!
https://atsgmembers.com/memarea/forums/forums/viewtopic.php?f=59&t=2085202
https://forum.cabal.playthisgame.com/member.php?1243890-Michailbke
https://quantrinet.com/forum/member.php?u=217975
http://forum.soundspeed.ru/member.php?652644-Michailsvs
http://www.ts-gaminggroup.com/showthread.php?1684-How-to-create-a-new-topic-at-ts-gaminggroup-com&p=132285#post132285
Компания реализует лучшую офисную мебель и сопутствующие товары через интернет-магазин. У нас легко и выгодно делать заказы через сайт, поскольку мы постарались сделать сервис максимально удобным для каждого. Более того, предлагаем сборку, доставку составление дизайн-проекта. Еще никогда покупка офисной мебели не была настолько легкой и быстрой!Мы понимаем важность функциональности и эстетичности мебели для офиса. Можем смело утверждать, что наша мебель отвечает всем критериям — она красивая, долговечная, а главное — удобная и эргономичная. Какие бы требования вы ни предъявили к офисному интерьеру, мы поможем претворить ваши пожелания в жизнь.Оцените наш ассортимент в удобном каталоге.Мы не используем посреднические схемы, поэтому можем предложить минимально возможные цены. Кроме того, бесплатно делаем выезд с образцами, замеры, консультируем. У нас очень выгодная сборка и доставка по всей России.Регулярно проводим распродажи, предлагаем акции, скидки новым и постоянным клиентам.Низкие цены — не повод снижать профессиональную планку. У нас работают только лучшие. Все сотрудники стажируются на передовых мебельных фабриках, посещают международные выставки. Любой менеджер компетентен и готов помочь вам в любом вопросе.