У такой географии есть простое объяснение — толпы «DevOps» инженеров, которые не знают основ администрирования и оставляют тысячи и более сервисов светить портами в интернет, сканировали, знаем ;) А, например, там нет Китая (где тоже все очень печально в этом плане), так как GFW намертво отсекает UDP, так как многие пытаются делать VPN via UDP.
Просто надо не забывать, что кроме iptables есть ip6tables. Просто раскладывать по всем тачкам свои типовые rules.v4 и rules.v6. Default to deny на входе — просто вопрос гигиены.
Подобные белые списки в iptables не всегда достаточны.
Многие сервисы по-дефолту биндятся еще и на ipv6, который по-дефолту опять же, часто включен. И получаем мы открытый сервис. Так что либо бинд на локалхост, либо отключение ipv6 либо (зачем?) iptables6
Мне проще новый сервис один раз настроить на localhost и больше не думать об этом.
Ну из такой логики, проще не есть сахар и зубы вообще не чистить или не пачкаться и мыться раз в полгода… Однако, всё таки, чревато.
Просто поверьте, что торчать открытыми портами наружу — не есть гуд (в независимости от использования тех портов).
Как пример:
допустим у вас есть сервис XYZ-1.0 слушающий порт 1234. Вы его настроили в xyz.conf, например:
[XYZ]
LocalHostOnly = true
А завтра по обновлению на версию 1.1 случилось:
опцию убрали и заменили на ListenerAddr = 127.0.0.1, ...(т.е. при апдейте вы проигнорили/проглядели N варнингов подряд, что LocalHostOnly is obsolete — т.е. есть устаревшая штука и закончится с версией 1.1);
оно было всегда localhostonly, а конфиг xyz.conf вдруг стал case-sesitive (и ваша LocalHostOnly теперь просто переменная INI-файла без смысловой нагрузки);
что-то (апдейтом) или кто-то (у вас несколько "поваров" у одной кастрюли, а шеф-повару следить лень) затер весь этот конфиг и/или инклюд оригинальным-стоковым, где теперь ListenerAddr = any;
если то был инклюд, он вдруг потерялся (и после рестарта действует стоковый конфиг с listen from anywhere).
у версии 1.1 был баг, который внезапно игнорит LocalHostOnly-опцию;
у совтины появился плагин (и он активирован по умолчанию ибо "необходим как вода"), слушающий порт 1235 с пробросом JSON-а развернутого в формат XYZ на listener к порту 1234;
Ну если так, то чем тогда вообще unix-socket не угодил
Не все слушает unix socket.
dns/ntp/почта для локальных нужд, или какой-то свой сервис, который просто не умеет в unix socket.
Если завтра что-то поставится/расширится на другой порт/протокол (вы видимо всегда читаете changelog-и всего чего апдейтите)?
Да в том-то и дело, что не очень читаю и апдейчу.
Мне проще новый сервис один раз настроить на localhost и больше не думать об этом.
Но это наверное применимо, только когда машина одна.
Если машин несколько и они ходят друг к другу на какие-то внутренние службы, проще будет уже вариант с iptables (там есть разные способы, но они уже более сложные).
чем настраивать iptables, проще настроить сервисы слушать только loopback.
Ну если так, то чем тогда вообще unix-socket не угодил (я про /var/run/memcached/memcached.sock).
Вопрос-то не про проще, а как правильно...
Система из одной машины? Всегда ли порты службы за NAT (не торчат наружу)?
Если завтра что-то поставится/расширится на другой порт/протокол (вы видимо всегда читаете changelog-и всего чего апдейтите)?
Вы разницу между открыть слушающее соединение и изменить правило в firewall (netfiltering), в контексте "делегирования привелегий" представляете?
Кто может создать listener? (кто угодно), а кто может открыть порт? (рут/судоер)
И т.д. и т.п… На самом деле есть куча всего, почему то, что вы написали (без firewall) — как минимум не комильфо.
По-умолчанию memcache прослушивает весь UDP трафик на порте 11211 в последней версии.
На даже минимально нормально настроенном сервере (с портами наружу) совершенно по барабану кто где что слушает.
Т.е. тупо не хватало чего-нибудь типа белого списка по accept на входящие, например простейшего:
# NTP
iptables -A INPUT -i $device -m state --state NEW -p udp --dport 123 -j ACCEPT
...
# memcached
iptables -A INPUT -i $device -m state --state NEW -p tcp --dport 11211 -j ACCEPT
...
А ещё лучше чего-нибудь следующего вида (хотя бы для udp, если вообще нужен):
...
# memcached from my-subnet only:
iptables -A INPUT -i $device -m state --state NEW -s $my_sub_net -p tcp --dport 11211 -j ACCEPT
iptables -A INPUT -i $device -m state --state NEW -s $my_sub_net -p udp --dport 11211 -j ACCEPT
...
Детский сад, честное слово.
С connectionless протоколами нужно быть особенно осторожным. Ударение на всегда.
Если сегодня какой-нибудь сервис не слушает UDP, то завтра каким-нибудь коммитом оно всё может измениться.
Так то ведь все читают changelog после каждого обновления для каждой софтины. Ага.
Если вы про самоподписанный то с некоторых пор у клиента в броузере больно много шума от этого. Возня с исключениями и тд. Ну и в целом, с точки зрения клиента ситуация непонятная «некий поц с горы клянется что сайт тот за кого себя выдает» это неубедительно.
А внести свой СА в список корневых стоит негуманно дорого.
Для сервиса VPN, к примеру, самоподписанные то что доктор прописал.
CA то денег побольше срубят. А как это поможет безопасности?
Вроде ж сертификаты прекрасно отзываются в случае компроментации. В чем смысл снижать срок действия сертификатов? Даже наоборот — чаще меняем сертификаты, нужно больше телодвижений, больше вероятность ошибки.
А, то есть теперь с клиента можно брать деньги не раз в три года, а раз в два. И акция "успейте купить трехлетний сертификат". Всё целях безопасности, конечно (и то, и другое). :)
Где-то 1300 хостов:

Просто надо не забывать, что кроме iptables есть ip6tables. Просто раскладывать по всем тачкам свои типовые rules.v4 и rules.v6. Default to deny на входе — просто вопрос гигиены.
Многие сервисы по-дефолту биндятся еще и на ipv6, который по-дефолту опять же, часто включен. И получаем мы открытый сервис. Так что либо бинд на локалхост, либо отключение ipv6 либо (зачем?) iptables6
Ну из такой логики, проще не есть сахар и зубы вообще не чистить или не пачкаться и мыться раз в полгода… Однако, всё таки, чревато.
Просто поверьте, что торчать открытыми портами наружу — не есть гуд (в независимости от использования тех портов).
Как пример:
допустим у вас есть сервис XYZ-1.0 слушающий порт 1234. Вы его настроили в xyz.conf, например:
А завтра по обновлению на версию 1.1 случилось:
ListenerAddr = 127.0.0.1, ...
(т.е. при апдейте вы проигнорили/проглядели N варнингов подряд, что LocalHostOnly is obsolete — т.е. есть устаревшая штука и закончится с версией 1.1);localhostonly
, а конфиг xyz.conf вдруг стал case-sesitive (и вашаLocalHostOnly
теперь просто переменная INI-файла без смысловой нагрузки);ListenerAddr = any
;Смысл понятен, надеюсь...
Не все слушает unix socket.
dns/ntp/почта для локальных нужд, или какой-то свой сервис, который просто не умеет в unix socket.
Да в том-то и дело, что не очень читаю и апдейчу.
Мне проще новый сервис один раз настроить на localhost и больше не думать об этом.
Но это наверное применимо, только когда машина одна.
Если машин несколько и они ходят друг к другу на какие-то внутренние службы, проще будет уже вариант с iptables (там есть разные способы, но они уже более сложные).
Ну если так, то чем тогда вообще unix-socket не угодил (я про
/var/run/memcached/memcached.sock
).Вопрос-то не про проще, а как правильно...
Система из одной машины? Всегда ли порты службы за NAT (не торчат наружу)?
Если завтра что-то поставится/расширится на другой порт/протокол (вы видимо всегда читаете changelog-и всего чего апдейтите)?
Кто может создать listener? (кто угодно), а кто может открыть порт? (рут/судоер)
И т.д. и т.п… На самом деле есть куча всего, почему то, что вы написали (без firewall) — как минимум не комильфо.
Имхо, чем настраивать iptables, проще настроить сервисы слушать только на 127.0.0.1.
И в конце не полениться проверить выхлоп
netstat -nl
На даже минимально нормально настроенном сервере (с портами наружу) совершенно по барабану кто где что слушает.
Т.е. тупо не хватало чего-нибудь типа белого списка по accept на входящие, например простейшего:
А ещё лучше чего-нибудь следующего вида (хотя бы для udp, если вообще нужен):
Детский сад, честное слово.
С connectionless протоколами нужно быть особенно осторожным. Ударение на всегда.
Если сегодня какой-нибудь сервис не слушает UDP, то завтра каким-нибудь коммитом оно всё может измениться.
Так то ведь все читают changelog после каждого обновления для каждой софтины. Ага.
Хабр стал превращаться в магазин на диване
А внести свой СА в список корневых стоит негуманно дорого.
Для сервиса VPN, к примеру, самоподписанные то что доктор прописал.
и бесплатно.
Все остальное глупый маркетинг.
Отзыв сертификатов не работает
Вроде ж сертификаты прекрасно отзываются в случае компроментации. В чем смысл снижать срок действия сертификатов? Даже наоборот — чаще меняем сертификаты, нужно больше телодвижений, больше вероятность ошибки.
А, то есть теперь с клиента можно брать деньги не раз в три года, а раз в два. И акция "успейте купить трехлетний сертификат". Всё целях безопасности, конечно (и то, и другое). :)