Posts published by: Dmitriy Lyalyuev

Отправляем логи в CloudWatch

Задача

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

Итак, будем отправлять логи в сервис AWS CloudWatch.

Amazon CloudWatch можно использовать для сбора и отслеживания метрик, накопления и анализа файлов журналов, создания предупреждений, а также автоматического реагирования на изменения ресурсов AWS. Amazon CloudWatch может использоваться для мониторинга следующих ресурсов AWS: инстансов Amazon EC2, таблиц Amazon DynamoDB, инстансов Amazon RDS DB, а также для мониторинга пользовательских метрик приложений и сервисов и любых логов ваших приложений.

Реализация

Устанавливаем агента для сбора логов:

$ curl https://s3.amazonaws.com//aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
$ python ./awslogs-agent-setup.py

Отвечаем на все вопросы скрипта и идем править конфиг /etc/awslogs/awslogs.conf. В конце этого файла есть секции, отвечающие за сборку конкретных логов. Их может быть столько, сколько лог-файлов надо собирать и отправлять в CloudWatch.

Пример:

[/var/log/commands.log]
datetime_format = %Y-%m-%d %H:%M:%S
file = /var/log/commands.log
buffer_duration = 100
log_stream_name = {hostname}
initial_position = start_of_file
log_group_name = all_commands

Более детальное описание формата файла смотрите в документации.

Остается перезапустить демона:

$ sudo service awslogs restart

Логгируем все команды на сервере

Иногда надо из соображений безопасности логировать все дейстия пользователей на сервере.

Очень полезно для того, чтоб потом исследовать кто и что делал и как получилось, что у нас что-то упало. Ну или это могут быть требования сертификации, например.

Итак, что нам надо сделать для полного логгирования действий:

Логгер в окружении пользователя

Добавляем следующую строку в файл /etc/bash.bashrc:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Таким образом вся история пользователя будет попадать в rsyslog с уровнем local6.

Отдельный файл для лога команд

Создаем файл /etc/rsyslog.d/bash.conf с содержимым:

local6.*    /var/log/commands.log

Рестартуем rsyslog и проверяем, что лог у нас пишется. Для этого нужно перезайти на сервер и выполнить несколько команд. Все они должны появиться в логе.

AWS ELB с Terraform

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Что такое EC2

Amazon Elastic Load Balancer (Amazon ELB) автоматически распределяет входящий трафик приложений по нескольким целевым объектам, таким как инстансы Amazon EC2, контейнеры или IP-адреса. Сервис входит в инфраструктуру Amazon Web Services.

Настройка

Создаем файл elb.tf с таким содержимым:

resource "aws_elb" "elb" {
  name    = "terraform-elb"
  subnets = ["${aws_subnet.aws-subnet-public.id}", "${aws_subnet.aws-subnet-private.id}"]

  listener {
    instance_port     = 80
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  health_check {
    healthy_threshold   = 2
    unhealthy_threshold = 2
    timeout             = 3
    target              = "HTTP:80/"
    interval            = 30
  }

  instances                   = ["${aws_instance.web.*.id}"]
  cross_zone_load_balancing   = true
  idle_timeout                = 400
  connection_draining         = true
  connection_draining_timeout = 400

  tags {
    Name = "terraform-elb"
  }
}

Эти инструкции позволят нам создать Elastic Load Balancer и добавить все наши инстансы Nginx к нему, в качестве бэкэнда.

Немного об опциях:

  • availability_zones - зоны доступности, в которых будет развернут балансировщик
  • listner - это те порты, которые будет слушать ELB и куда будет перенаправлять трафик
  • health_check - параметры проверки "живости" бэкэнда
  • instances - описание, какие бэкэнды будут подключены к этому ELB. Тут интересно то, что бэкэнды можно указать через ссылку на уже существующий ресурс Terraform'a

Теперь можно добавить вывод параметров ELB в тот же файл:

output "elb_instances" {
  value = ["${aws_elb.elb.instances}"]
}

output "elb_public_dns_name" {
  value = ["${aws_elb.elb.dns_name}"]
}

Это позволит нам видеть, какие инстансы добавлены в Load Balancer и по какому DNS имени он доступен.

Думаю, что принцип работы с Terraform понятен. Он действительно не сложен и разобраться можно достаточно быстро.

В качестве домашнего задания оставляю вам поднятие RDS и создание и управление баккетами в S3. :)

Удачи и спасибо за то, что прочитали.

AWS EC2 с Terraform

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Что такое EC2

Amazon Elastic Compute Cloud (Amazon EC2) — веб-сервис, который предоставляет вычислительные мощности в облаке (по простому - виртуальные сервера). Сервис входит в инфраструктуру Amazon Web Services.

Настройка

Приступим к конфигурации EC2.

Первое, что необходимо сделать - это создать AMI из которого мы будем создавать сервера.

В примере по ссылке мы создали обычный сервер, но можно туда добавить, например, Nginx и упаковать ваш сайт. Вопрос масштабирования вашего сайта я оставлю за рамками данной заметки.
Читать далее...

Читабельные ошибки в Ansible

Очень многие сейчас используют весьма удобный инструмент конфигурации Ansible.

Долгое время читать ошибки, которые он выдает было мукой. Но НАКОНЕЦ!!! Наконец Ansible научился выдавать вменяемый текст ошибок.

Для того, чтоб включить нормальное поведение необходимо обновиться до версии 2.5.0 или выше и указать в конфиге:

# Use the YAML callback plugin.
stdout_callback = yaml

# Use the stdout_callback when running ad-hoc commands.
bin_ansible_callbacks = True

Все сразу станет сильно лучше.

CloudFlare DNS

CloudFlare

Это американская компания, которая предоставляет услуги по защите от DDoS атак, распределенной сети доставки (CDN) и безопасных интернет сервисов. Работает с 2009 года и в их клиентах числятся такие гиганты как Nasdaq, DigitalOcean, Zendesk, Eurovision, Udacity и т.п.

DNS

1 апреля 2018 года CloudFlare запустил, аналогично Google (8.8.8.8, 8.8.4.4), свои публичные DNS сервера - 1.1.1.1 и 1.0.0.1.

Фокус в том, что эти публичные сервера ориентированы прежде всего на безопасность. Если Google честно говорит, что данные запросов они собирают и потом на основе этих данных вам будет предлагаться реклама, то CloudFlare заявляет о том, что они не отслеживают кто и что запрашивает.

Но и это еще не все. По данным исследователей - сервера CloudFlare отвечают в среднем в полтора раза быстрее, чем Google. А это заметный прирост к скорости работы в сети.

Но и это далеко не все.

DNS over HTTPS

Теперь, если вы разработчик програмного обеспечения, то вы можете полностью отвязаться от DNS клиента (провайдерский ДНС, настроенный на машине, где запущено ПО) с помощью технологии DNS over HTTPS.

Как это работает? Да все просто. Надо написать обертку, которая будет запрашивать по https сервера CloudFlare преобразование домена в IP и потом посылать запросы по IP к нужным серверам (не забываем при передаче запроса выставить заголовок Host).

Протестировать можно обычным curl:

curl 'https://1.1.1.1/dns-query?ct=application/dns-json&name=lyalyuev.info&type=A'

Ответ будет таким:

{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "lyalyuev.info.", "type": 1}],"Answer":[{"name": "lyalyuev.info.", "type": 1, "TTL": 38400, "data": "51.15.40.165"}]}

Ответ прост и понятен. Очень легко разбирается любым JSON-парсером.

AWS VPC с Terraform

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Что такое VPC

Amazon Virtual Private Cloud (Amazon VPC) – это логически изолированный раздел облака AWS, в котором можно запускать ресурсы AWS в созданной пользователем виртуальной сети. Пользователь полностью контролирует свою среду виртуальной сети, в том числе может выбирать собственный диапазон IP-адресов, создавать подсети, а также настраивать таблицы маршрутизации и сетевые шлюзы. Для обеспечения удобного и безопасного доступа к ресурсам и приложениям в VPC можно использовать как IPv4, так и IPv6.

Настройка

Приступим к конфигурации VPC.
Читать далее...

Не храните пароли в Firefox

Этой заметкой я открываю новую рубрику, связанную с безопасностью в сети и не только.

Разработчик AdBlock Plus раскритиковал систему хранения паролей в Firefox. По его словам логины и пароли, которые были сохранены в Firefox можно украсть простым брутфорсом с применением видеокарты.

То же касается и Thunderbird.

Для шифрования базы используется мастер-пароль, который и есть ключ к базе. Метод шифрования - уже слабый SHA-1.

NVIDIA GTX 1080 может генерировать до 8,5 миллиардов вариантов паролей в секунду!

Т.е. увести файлы logins.json и key3.db и все. Все ваши пароли, от всех сервисов, которые вы сохранили в Firefox - утекли.

Фокус в том, что в Firefox используется одноразовый проход шифрования SHA-1, в то время как принято использовать как минимум 10000 раз. Тогда расшифровать брутфорсом базу будет существенно сложнее. Для примера LastPass использует 100000 проходов шифрования.

Эпичности этой ситуации добавляет то, что первое сообщение об этой проблеме опубликовано ДЕВЯТЬ ЛЕТ назад!

Terraform от Hashicorp для Amazon AWS

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Terraform от Hashicorp

Terraform - утилита по формированию инфраструктуры от той же компании Hashicorp.

Это очень простая, но вто же время мощная утилита. Конфигурация пишется на языке HCL (фирменный декларативный язык Hashicorp). Он очень напоминет JSON, а потому достаточно легко читается.

В этом цикле я буду рассматривать как управлять инфраструктурой в Amazon, но это не значит, что Terraform не умеет формировать инфраструктуру у других облачных провадеров.

Для работы с Terraform нужно иметь настроенное окружение для доступа в Amazon AWS. Делается это с помощью aws-cli.

Начнем.

Установка

Установка Terraform заключается в скачивании готового файла и копировании его куда-то в доступное место для переменной PATH.
Читать далее...

Packer от Hashicorp

Hashicorp Packer

Packer от компании Hashicorp - это инструмент, который позволяет создавать образы для виртуальных машин (AWS AMI, VMWare, Virtualbox, и много других провайдеров инфраструктуры). Это весьма удобный инструмент для создания своих образов в вирутальной инфраструктуре.

В этой заметке я буду рассматривать Packer в качестве билдера AMI для AWS EC2.

Почему именно в таком амплуа. Этой зметкой я открываю цикл о подходе IaC (Infrastructure as Code) - популярной вещи в DevOps практиках.

Если вы не задумывались никогда о такой вещи, как описание и хранение инфраструктуры в системе контроля версий, то пора посмотреть на это. Ведь это очень удобно:

  1. версионирование
  2. история
  3. возможность отката
  4. все плюшки хранения кода в CVS

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Конфигурация

Итак, packer - это кроссплатформенная утилита, которую можно легко установить на Windows, Linux или MacOS.
Читать далее...