Search
Write a publication
Pull to refresh
66
0
Андрей @mafet

DevOps, сетевик

Send message

ну примерно так, но я не пробовал, но по логике должно работать

/ip firewall mangle add action=add-src-to-address-list address-list=icmp_unreachble address-list-timeout=20m chain=input dst-address=5.5.5.5 icmp-options=3:3 protocol=icmp
/ip firewall filter add action=drop chain=input dst-address=5.5.5.5 dst-port=123 protocol=udp src-address-list=icmp_unreachble
/ip firewall filter add action=accept chain=input dst-address=5.5.5.5 dst-port=123 limit=1,5:packet protocol=udp
/ip firewall filter add action=drop chain=input dst-address=5.5.5.5 dst-port=123 protocol=udp

а всё таки, почему не стоит использовать time.google.com ? я наоборот прописал time2.google.com в качестве основного. у знаменитого 194.190.168.1 например разброс по времени +40/-10 мс согласно score

проверял через https://www.ntppool.org/scores/216.239.35.4 . пинг до него красивый и ровный 15.7-15.8

перечисленные выше сервера слабоваты по качеству, согласно score. пара серверов только ничего. а так, даже мой сервачок уже 19.9 по score

никогда этим не пользовался (во всяком случае не помню). но попробую запомнить, спасибо.
хотя я обычно непосредственно через iptables добавляю и удаляю правила. использую алиас ipt="iptables -n -v --line-numbers" в bashrc
а в более сложных случаях save - restore, но теперь попробую как-нибудь через apply

как-то даже пошёл гуглить, что делает эта команда. никогда не пользовался. возможно apply и то что надо в данном случае, но я не проверял.

cat /etc/modprobe.d/xt.conf 
options xt_recent ip_list_tot=500000

Увеличивам размер таблицы xt_recent. По умолчанию 100. Эта таблица вроде как кольцевой буфер, но 100 маловато. 500к может многовато, оптимальный размер не подбирал, вроде и так норм.
Если recent уже используется в iptables, сначала надо убрать правила, выгрузить модуль, добавить файлик (файлик когда угодно можно добавить). Можно загрузить модуль вручную, но он будет и так загружен, когда правила добавятся. Ну или добавить файлик и ребутнуться.

cat /etc/sysctl.d/20-my.conf
net.netfilter.nf_conntrack_udp_timeout=0

Показалось полезным, т.к. нам совершенно не нужно отслеживать "соединения" для ntp, т.к по сути там нет как такового соединения для обмена.

Это правило срабатывает (блокирует ntp трафик на 123 порт), если в таблице нашлось соединение и еще не прошло 1200 секунд с момента последнего пакета. Б

iptables -A INPUT -d x.x.x.x/32 -p udp -m recent --rcheck --seconds 1200 --name icmp_udp_unreachable --mask 255.255.255.255 --rsource -m udp --dport 123 -j DROP

Это правило добавляет в таблицу по src, если от него пришёл icmp тип 3 и заодно блокируем.

iptables -A INPUT -d x.x.x.x/32 -p icmp -m icmp --icmp-type 3 -m recent --set --name icmp_udp_unreachable --mask 255.255.255.255 --rsource -j DROP

В данном правиле мы ограничиваем ACCEPT лимитом в 1 запрос в секунду так же по src. Размер таблицы 500к, обнуление через 5 секунд (хотя в случае 1 запроса в секунду, обнуление особого смысла не имеет).

iptables -A INPUT -d x.x.x.x/32 -p udp -m udp --dport 123 -m hashlimit --hashlimit-upto 1/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name ntp_rate_limit --hashlimit-htable-size 500000 --hashlimit-htable-max 500000 --hashlimit-htable-gcinterval 5000 --hashlimit-htable-expire 5000 -j ACCEPT

Блокируем трафик, если предыдущее правило не сработало по причине лимитов.

iptables -A INPUT -d x.x.x.x/32 -p udp -m udp --dport 123 -j DROP

Еще у меня на всякий случай есть правила

iptables -A INPUT -d x.x.x.x/32 -p icmp -m limit --limit 10/sec -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d x.x.x.x/32 -p icmp -j DROP

но они опциональны.

Что касается правило с hashlimit, чтоб изменить его параметры надо удалить правило и добавить заново.
проще всего это делать так

iptables-save -c > /tmp/g
edit /tmp/g
cat /tmp/g|iptables-restore -c

алгоритм такой - сохраняем правила, редактируем, комментируем правила hashlimit и следующее правило с DROP (иначе весь трафик будет блочиться на время манипуляций, что негативно сказыватеся на score). делаем cat /tmp/g|iptables-restore -c еще раз редактируем - раскомментируем, и еще раз cat /tmp/g|iptables-restore -c

и еще, вроде как поведение этих всех правил может отличаться в зависимости от версии ядра, системы и дистрибутива.
у меня это всё работает на debian 11.9, 5.10.0-28-amd64
в общем пробовать нужно осторожно

амплификация в случае ntp это когда на один запрос monlist отдаётся гораздо больший ответ. в данном случае это не актуально, поскольку данная команда не доступна по крайней мере в случае с chrony, да и в новых версиях ntp её вроде как нет. злоумышленнику придётся отправить столько же пакетов и такого же объёма. другое дело, что они так обходят файрволы разных внутрироссийских сервисов. ну я выше написал, что можно с помощью iptables сделать, чтоб снизить использование атакующими ntp серверов.

я за контроль рейта на уровне iptables. негоже этим в юзерспейсе заниматься. а лог - точно зло тут

но чем больше таблица, тем больше системе надо про ней пробегаться - тоже не хорошо. нужно тут компромисс искать.
а в чём смысл так chrony запускать если можно запустить несколько, которые сами забирают с stratum 1 серверов.
разве что ради экономии ресурсов этих серверов

ну вот сейчас гигабит поставил, разницы особо не почувствовал. может конечно провайдер как-то режет, но наверное тогда бы мониторинг ntppool ругался

ну большинство всё таки от самих хостов. хотя встречаются и такие, что транзитный хост отвечает разумеется, но там вроде другой тип icmp по идее должен быть. я бы еще по code фильтровал, например type 3 и code 3 , что что-то не нашёл как в iptables по code фильтровать.

эта выставленная скорость почти ни на что не влияет

это участие в ддос атаке (на мой взгляд), ниже пост где можно это забанить

просто оставлю это тут

cat /etc/modprobe.d/xt.conf 
options xt_recent ip_list_tot=500000

cat /etc/sysctl.d/20-my.conf
net.netfilter.nf_conntrack_udp_timeout=0

iptables -A INPUT -d x.x.x.x/32 -p udp -m recent --rcheck --seconds 1200 --name icmp_udp_unreachable --mask 255.255.255.255 --rsource -m udp --dport 123 -j DROP
iptables -A INPUT -d x.x.x.x/32 -p icmp -m icmp --icmp-type 3 -m recent --set --name icmp_udp_unreachable --mask 255.255.255.255 --rsource -j DROP
iptables -A INPUT -d x.x.x.x/32 -p udp -m udp --dport 123 -m hashlimit --hashlimit-upto 1/sec --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-name ntp_rate_limit --hashlimit-htable-size 500000 --hashlimit-htable-max 500000 --hashlimit-htable-gcinterval 5000 --hashlimit-htable-expire 5000 -j ACCEPT
iptables -A INPUT -d x.x.x.x/32 -p udp -m udp --dport 123 -j DROP

еще рекомендую посмотреть на очереди сервера (multiqueue) : ethtool -l eth1
в идеале должны соответствовать ядрам
мультизапуск chronyd тоже очень полезен. не знаю, как он работает, но по сути балансируются как-то между сервисами udp запроса без регистрации и смс
в дебиан на основе /etc/systemd/system/chronyd.service
просто копируете содержимое в
/etc/systemd/system/chronyd{1,2,3,4}.service
внутри делаете

PIDFile=/run/chrony/chronyd{1,2,3,4}.pid
ExecStart=/usr/sbin/chronyd $DAEMON_OPTS -f /etc/chrony/chrony{1,2,3,4}.conf

в файликах /etc/chrony/chrony{1,2,3,4}.conf
добавляете строчку

pidfile /run/chrony/chronyd{1,2,3,4}.pid

Спасибо за статью, действительно очень интересно и похоже чем-то. чексумы полезно по идее, когда standby есть. Хотя может если бы тут чексумы были включены, то база просто бы подняла лапки вверх и мы бы заметили проблему раньше.
А расчёт более удобного - сомнительно. Наверное лучше сначала через мой способ пройти - когда наглядно видно блоки, а потом уж зачищать их через dd.

delete from check_corruption where ctid='(0,6)’;

у меня кстати не срабатывало, я пробовал. Какие-то строчки удалились, какие-то - нет.

скриптик который в статье там описывается find_bad_row() - по сути я на баше +- написал, бонусом получил не только последнюю прочитавшуюся ctid, но и чуть больше

а вот zero_damaged_pages это прям интересненько, однако мне всё равно кажется что мой способ получился наиболее деликатный и предсказуемый, хоть может и сложноватый.

кстати на одной из таблиц, при попытке селекте, постгрес вообще падал. не уверен, что помог бы zero_damaged_pages и что-то еще

Для safari последней версии и macos quic включается так
sudo defaults write /Library/Preferences/com.apple.networkd.plist enable_quic -bool true
Автор, добавь в статью пожалуйста. В интернете что-то нет этого способа вообще.

Моя статья не про это. Она про управление устройствами подключенными к алисе своими скриптами. Вам же нужно управлять сторонними устройствами. Таких статей гораздо больше. Чаще всего упоминается привязка яндекса к home assistant, а затем уже к HA можно привязать своё устройство.

Еще есть способ через навыки алисы, например вот.

https://yandex.ru/dev/dialogs/alice/doc/ru/deploy-server

Конкретную хорошую статью сейчас не вспомню, но они были.

Ну и документация: https://yandex.ru/dev/dialogs/smart-home/doc/ru/

еще вот интересный гитхаб: https://github.com/AlexxIT/YandexStation

Вмешиваться и не надо, если всё работает.

обогреватель - это на зиму, отопление не идеально работает.

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

Еще вот "если дома кто-то есть" у меня реализовано через наличие мак-адресов телефонов в unifi контролере тоже php/bash скриптами. Работает годами безотказно, только маки надо менять, если вдруг телефон сменится.

Многие говорят про home assistantну. Я лишь недавно что-то стал делать в части умных домов. Как-то оно не особо нужно было) А то что нужно было - делал на php и bash скриптах. Вяло ковырял domoticz, z-wave, прошивал sonoff в tasmota. Думаю я когда-то дойду до ha. Наверное никогда не поздно же да?

не знал, надо будет попробовать. но обогреватель у меня в mi home.

ну, в моём случае дома всегда люди присутствуют. как-нибудь отключат. обогреватели в mi home кстати. не знаю, можно ли их к чему-то локальному подключить

1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Server Administrator, DevOps
Lead
Docker
Kubernetes
Linux
PostgreSQL
PHP
MySQL
Nginx
Bash
SQL