Ограничение доступа к Memcached

27 февраля 2018 года Cloudflare опубликовали рассказ о серьезном росте количества amplification атак на memcached. Memcached, популярная система кэширования объектов, часто используется для сокращения времени отклика и загрузки компонентов во время развертывания. Атака amplification (усиления) нацелена на экземпляры Memcached с доступом к публичной сети по UDP.

Лучший способ смягчить атаку – связать Memcached с локальным интерфейсом, отключить UDP и защитить сервер обычными методами сетевой безопасности. В этом руководстве вы узнаете, как это сделать, а также научитесь открывать доступ к сервису только заведомо безопасным клиентам.

Защита Memcached на серверах Ubuntu и Debian

Сервис Memcached на Ubuntu и Debian можно защитить, отредактировав файл /etc/memcached.conf с помощью nano:

sudo nano /etc/memcached.conf

По умолчанию Ubuntu и Debian связывают Memcached с локальным интерфейсом 127.0.0.1. Установки, привязанные к 127.0.0.1, не уязвимы для amplification атак из сети. Убедитесь, что параметр -l содержит этот адрес:

. . .
-l 127.0.0.1
. . .

Если в будущем вы измените адрес прослушивания и откроете доступ к сети, рекомендуется отключить UDP, который, скорее всего, будет использоваться в этой конкретной атаке. Чтобы отключить UDP (TCP по-прежнему будет работать), добавьте следующий параметр в конец файла:

. . .
-U 0

Сохраните и закройте файл.

Перезапустите сервис Memcached, чтобы обновить настройки:

sudo service memcached restart

Убедитесь, что Memcached привязан к локальному интерфейсу и прослушивает только TCP, с помощью команды:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Сервис memcached должен быть привязан к адресу 127.0.0.1 и поддерживать только TCP.

Защита Memcached на серверах CentOS и Fedora

Защитить сервис Memcached на серверах CentOS и Fedora можно в файле /etc/sysconfig/memcached:

sudo vi /etc/sysconfig/memcached

Нужно привязать адрес к локальному сетевому интерфейсу, чтобы ограничить трафик; это делается с помощью параметра -l 127.0.0.1. Это ограничение может быть слишком строгим для некоторых сред, но это хорошее начало.

Также нужно установить значение -U 0, чтобы отключить прослушиватель UDP. Протокол UDP активно используется в различных атаках, поэтому отключив его, вы снизите вероятность атаки на сервер, если позже вы решите изменить порт.

Добавьте оба параметра в переменную OPTIONS:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

Сохраните и закройте файл.

Чтобы обновить настройки, перезапустите Memcached:

sudo service memcached restart

Убедитесь, что Memcached привязан к локальному интерфейсу и прослушивает только TCP:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Сервис memcached должен быть привязан к адресу 127.0.0.1 и поддерживать только TCP.

Настройка доступа через частную сеть

Согласно вышеуказанным инструкциям Memcached прослушивает только локальный интерфейс. Это предотвращает атаки amplification, защищая интерфейс Memcached от посторонних. Если вам нужно разрешить доступ к Memcached с других серверов, нужно изменить конфигурацию.

Самый надежный способ расширить доступ – привязать Memcached к частному сетевому интерфейсу.

Ограничение доступа по IP с помощью брандмауэров

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

Если вы используете UFW, вы можете ограничить доступ к Memcached с помощью этих правил:

sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable

Читайте также: Основы UFW: общие правила и команды фаервола

В Iptables доступ ограничат эти команды:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

Обязательно сохраните правила брандмауэра Iptables, используя механизм, предоставляемый вашим дистрибутивом. Вы можете узнать больше о Iptables в мануале Основы Iptables: общие правила и команды брандмауэра.

Затем можно привязать Memcached к интерфейсу частной сети сервера.

Привязка Memcached к интерфейсу частной сети

Теперь, когда ваш брандмауэр готов, вы можете настроить Memcached для привязки к интерфейсу частной сети сервера вместо 127.0.0.1.

На сервере Ubuntu или Debian снова откройте файл /etc/memcached.conf:

sudo nano /etc/memcached.conf

Внутри найдите строку -l 127.0.0.1 и укажите в ней адрес интерфейса частной сети:

. . .
-l memcached_servers_private_IP
. . .

Сохраните и закройте файл.

В CentOS и Fedora откройте /etc/sysconfig/memcached:

sudo vi /etc/sysconfig/memcached

В файле измените параметр -l 127.0.0.1 в переменной OPTIONS, он должен ссылаться на внутренний IP-адрес сервера Memcached:

. . .
OPTIONS="-l memcached_servers_private_IP -U 0"

Сохраните и закройте файл.

Перезапустите сервис Memcached:

sudo service memcached restart

Проверьте новые параметры с помощью netstat:

sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 memcached_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Проверьте подключение с внешнего клиента, чтобы убедиться, что вы можете получить доступ к сервису. Рекомендуется также проверить доступ с неавторизованного клиента, чтобы убедиться, что правила брандмауэра не пропустят трафик.

Заключение

Amplification атаки Memcached могут оказать серьезное влияние на работу сети и стабильность ваших сервисов. Тем не менее, атаку можно предупредить путем использования лучших методов работы сетевых сервисов. После выполнения данного мануала рекомендуется продолжать отслеживать сервисы, чтобы обеспечить надлежащую функциональность и возможность подключения.

Tags: , , , ,