Как обезопасить Memcached, уменьшив экспозицию

Вступление

27 февраля 2018 г.,Cloudflare posted a story about a severe increase in the volume of memcached amplification attacks. Memcached, популярная система кэширования объектов, часто используется для сокращения времени отклика и нагрузки на компоненты в ходе развертывания. Атака с усилением нацелена на развертывание Memcached, выставленное в общедоступной сети с использованием UDP.

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

[.предупреждение]##

Note: из-за потенциального воздействия этой атаки с усилением на стабильность сети DigitalOcean отключила трафик UDP и TCP на общедоступном интерфейсе на порт 11211 с 1 марта 2018 года. Это влияет на доступ к каплям извне центра обработки данных, но соединения внутри центра обработки данных все еще разрешены.

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

Защита 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, не уязвимы для атак усиления из сети. Убедитесь, что опция-l установлена ​​на этот адрес, чтобы подтвердить поведение:

/etc/memcached.conf

. . .
-l 127.0.0.1
. . .

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

/etc/memcached.conf

. . .
-U 0

Когда вы закончите, сохраните и закройте файл.

Перезапустите службу Memcached, чтобы изменения вступили в силу:

sudo service memcached restart

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

sudo netstat -plunt
OutputActive 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 с помощьюvi, например:

sudo vi /etc/sysconfig/memcached

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

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

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

/etc/sysconfig/memcached

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
OutputActive 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 прослушивать только локальный интерфейс. Это предотвращает усиление атаки, не открывая интерфейс Memcached сторонним лицам. Если вам нужно разрешить доступ с других серверов, вам придется настроить конфигурацию.

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

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

Прежде чем сделать это, рекомендуется настроить правила брандмауэра, чтобы ограничить число компьютеров, которые могут подключаться к вашему серверу Memcached. Вам нужно будет знатьclient servers private IP addresses, чтобы настроить правила брандмауэра.

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

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

Вы можете узнать больше о брандмауэрах UFW, прочитав нашessentials guide.

Если вы используете 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, взглянув на нашessentials guide.

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

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

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

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

sudo nano /etc/memcached.conf

Внутри найдите строку-l 127.0.0.1 и измените адрес, чтобы он соответствовал интерфейсу частной сети вашего сервера:

/etc/memcached.conf

. . .
-l memcached_servers_private_IP
. . .

Сохраните и закройте файл, когда вы закончите.

Для серверовCentOS иFedora снова откройте файл/etc/sysconfig/memcached:

sudo vi /etc/sysconfig/memcached

Внутри измените параметр-l 127.0.0.1 в переменнойOPTIONS, чтобы он ссылался на частный IP-адрес вашего сервера Memcached:

/etc/sysconfig/memcached

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

Сохраните и закройте файл, когда вы закончите.

Затем перезапустите сервис Memcached снова:

sudo service memcached restart

Проверьте новые настройки с помощьюnetstat, чтобы подтвердить изменение:

sudo netstat -plunt
OutputActive 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
. . .

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

Заключение

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

Related