LINUX.ORG.RU

Сообщения gobot

 

iptables: блокировка ботов перебирающих порты

Тема такова: пытаюсь блокировать ботов, создал правила

-A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ports_tcp
-A INPUT -p udp -j ports_udp

-A ports_tcp -p tcp -m multiport --dports 80,443,25 -j ACCEPT
-A ports_tcp -j LOG --log-prefix "TCP connection to forbidden port"
-A ports_tcp -j SET --add-set bots_tcp src

-A ports_udp -p udp -m multiport --dports 53 -j ACCEPT
-A ports_udp -j LOG --log-prefix "UDP connection to forbidden port"
-A ports_udp -j SET --add-set bots_udp src


В логи пишется, в ipset добавляется нормально. Но пока просто информативно. Хочу блочить их (воткнуть потом правило ipset), но для подстраховки, чтобы не с 1 раза, а например с 3 раза. Пока не знаю как реализовать

UDP
За пол часа в ipset добавилось 170 TCP-адресов и 17 UDP. Есть ли смысл их блокировать постоянно или достаточно просто DROP? В основном это хостинги всякие

censys.com
googleusercontent.com
censys-scanner.com
pfcloud.io
shadowserver.org
DigitalOcean

И ещё такая особенность, пара адресов бомбили сервер по UDP больше месяца. Какой в этом смысл? Для чего это все делается?

 ,

gobot
()

Слетели все драйвера

После перезагрузки Ubuntu слетели все драйвера, в том числе erthernet. Ничего не пойму. lshw -C network показывает сетевуху в статусе unclaimed. Все перекопал уже, даже не знаю в каком направлении двигаться )

 

gobot
()

iptables шалит

-A limits -p tcp -m tcp --dport 1666 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 5 --connlimit-mask 32 --connlimit-saddr -m comment --comment "max conn" -j LOG_LIMIT

-A LOG_LIMIT -j LOG --log-prefix "limit"
-A LOG_LIMIT -j REJECT --reject-with tcp-reset

line 26: RULE_APPEND failed (Invalid argument): rule in chain LOG_LIMIT



Что не так? Если просто -j DROP писать то норм, НО, охота чтобы было понятно пользователю, а не тупо timeout ждать...

Пока что помогает только дублирование всего правила c LOG...но это тупо и неудобно

 

gobot
()

Стоил ли сжимать http ответ

Стоил ли сжимать http ответ gzip nginx'ом? Картинки и так сжатые, а json? Посмотрел ютуб не сжимает ничего. Кто вообще сжимает?

 , ,

gobot
()

journalctl обрубает

journalctl обрубает строки (если они не влазят в консоль по ширине)

 ,

gobot
()

systemd - начал перезагружать все сервисы

ВНЕЗАПНО - все сервисы начали systemd перезагружаться, в том числе journald. Такое ощущение что перезагрузилась машина, НО uptime показывает 45 days

Что за дичь?

journalctl -k

Jul 15 15:31:36 Schrodinger kernel: workqueue: pm_runtime_work hogged CPU for >10000us 1027 times, consider switching to WQ_UNBOUND
Jul 16 06:55:30 Schrodinger systemd[1]: systemd 255.4-1ubuntu8.8 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2>
Jul 16 06:55:30 Schrodinger systemd[1]: Detected architecture x86-64.
Jul 16 06:55:39 Schrodinger systemd-journald[2164748]: Received SIGTERM from PID 1 (systemd).
Jul 16 06:55:39 Schrodinger systemd[1]: Stopping systemd-journald.service - Journal Service...
Jul 16 06:55:39 Schrodinger systemd[1]: netplan-ovs-cleanup.service - OpenVSwitch configuration for cleanup was skipped because of an unmet condition check (ConditionFileIsExecutable=/usr/bin/ovs-vsctl).
Jul 16 06:55:39 Schrodinger systemd[1]: systemd-networkd-wait-online.service: Deactivated successfully.
Jul 16 06:55:39 Schrodinger systemd[1]: Stopped systemd-networkd-wait-online.service - Wait for Network to be Configured.


Сам systemd не перезагружался
ps  -eo pid,lstart,cmd | grep systemd

      1 Sat May 31 10:20:04 2025 /usr/lib/systemd/systemd --system --deserialize=116
   1035 Sat May 31 10:20:43 2025 @dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
   1063 Sat May 31 10:20:43 2025 /usr/lib/systemd/systemd-logind
 833252 Wed Jun 11 04:02:37 2025 /usr/lib/systemd/systemd --user
1196408 Tue Jul 15 16:53:14 2025 /usr/lib/systemd/systemd --user
1258567 Wed Jul 16 06:55:20 2025 /bin/sh /usr/lib/apt/apt.systemd.daily install
1258572 Wed Jul 16 06:55:20 2025 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install


=======
1259657 Wed Jul 16 06:55:36 2025 systemctl restart background.service chat.service containerd.service cron.service exim4.service fail2ban.service fwupd.service http-achacha.service http.service mongod.service multipathd.service mysql.service nginx-ws.service nginx.service php8.3-fpm.service polkit.service proftpd.service redis-server.service rsyslog.service snmpd.service srs-dev.service srs.service ssh.service supervisor.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service thermald.service udisks2.service upower.service websocket.service zabbix-agent.service zabbix-server.service
=======
Это что за процесс??


1259725 Wed Jul 16 06:55:36 2025 /usr/lib/systemd/systemd-timesyncd
1260095 Wed Jul 16 06:55:38 2025 /usr/lib/systemd/systemd-resolved
1260099 Wed Jul 16 06:55:38 2025 /usr/lib/systemd/systemd-udevd
1260144 Wed Jul 16 06:55:39 2025 /usr/lib/systemd/systemd-journald
1260152 Wed Jul 16 06:55:39 2025 /usr/lib/systemd/systemd-networkd
1260154 Wed Jul 16 06:55:39 2025 /usr/sbin/thermald --systemd --dbus-enable --adaptive




Запущен 31 мая. Но отчего он стал перезагружать все подряд?


ОПАЧКИ! Какая то дичь needrestart походу гадит

checks which daemons need to be restarted after library upgrades. It is inspired by checkrestart from the debian-goodies package.

Сразу возникает вопросов на 3 отдельных темы: Кто? Зачем? Почему?

 

gobot
()

Таймаут http

client -> nginx (:443) -> app1 (:8080) -> POST http://remote/api/clients -> nginx2 -> app2

nginx, nginx2 - обычный nginx :-)
remote - либо 127.0.0.1 либо второй сервер удаленный
app1 - это node веб сервер на express
app2 - C++ приложение, в котором есть http сервер

В самом axios установлен timeout 5000. и он иногда срабатывает и клиенту отдается ошибка со стороны app1. Отчего срабатывает timeout не понятно. nginx2 в логах nginx регистрирует ответ от app2 с нормальным статусом (201), время запроса ~5 сек. и отдает app1 (но он уже отключился? по timeout). Ошибок нет от nginx. Если сокет отключился, куда передает nginx ответ? Или axios сокет не убивает, а только timeout генерирует? Пробовал дебажить, видно что timeout генерирует сам node socket, глубже не копал. И отчего может быть этот timeout? nginx2 получает ответ от app2 почти моментально, сверял логи, до секунды. Такое ощущение, что когда запрос на nginx2 приходит, он его в каком то буфере держит 5 сек., а потом отправляет на app2 и поэтому timeout. Что может быть?

Смотрел только

netstat -nlp4 | grep app2


на предмет Recv-Q - очередь на сокет не растет (я каждую сек. дрочил консоль, это нормально?), то есть app2 успевает все запросы обрабатывать. В самом nginx \ kernel ошибок нет (логов)

Сначала думал может запрос передается медленно, в nginx установил допом
client_body_timeout 3;
reset_timedout_connection on;
send_timeout 3;


Но тогда ngix отдавал бы с 408 статусом и axios от бы раньше отваливался, но постоянно ошибка timeout 5000.

Связка nginx2 -> app2.


map $http_authorization $api_dev_deny {
    default "1";
    "9342759823475947238979"  "0";
}
server {
    server_name exampla.com;
    access_log   /var/log/nginx/exampla.com.log main;
    error_log   /var/log/nginx/exampla.com.error.log;
    listen 80;
    listen 443 ssl; # managed by Certbot

    location ~ ^/api/(.*)$ {

        if ($api_dev_deny) {
            return 401;
        }
        proxy_pass http://127.0.0.1:1986/$2$is_args$args;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
    }
}

 , ,

gobot
()

setInterval async

Вот
https://stackoverflow.com/questions/52184291/async-await-with-setinterval

Ещё это
https://www.npmjs.com/package/set-interval-async

Нужно

setInterval(async function(){
   await blabla();
}, 1000)


И нужно чтобы не запускалось тупо каждую сек. пока blabla() не изрезолвиться. И чтобы при первом запуске blabla() сразу запускалось, а потом по таймеру. И чтобы если blabla выдаст исключение, то таймер останавливался (это как опция).

Ничего не нравится. А нужно что то типа, максимально простое


function timer(){
  //реализация
}

const timer1Cancel = timer(async function(){
   await blabla();
}, 1000)


setTimeout(()=>{
  timer1Cancel()
}, 60 * 1000)



Свой код наговнякал, но он мне не нравиться, ищу гениев которые в 1 строчку сделают

 , ,

gobot
()

Как определить почему падает сервис

systemctl status http
5h 49min ago

Утром проверяю, перезагрузился 5 часов назад. Беда беда. До этого работал пару дней.

Смотрю логи.

journalctl -u http --grep "Stating HTTP" 
...00:27:39... Stating HTTP...


Грепаю снова по этому вмемени уже
journalctl -u http --grep "00:27:39" 
...00:27:39... Stating HTTP...
journalctl -u http --grep "00:27:38" 


Ничего не нашел, никаких CORE, segfault и прочего кошмара. Все ровно ровно...и...Stating HTTP...

journalctl -k
-- No entries --


Где ещё что посмотреть можно? Причина перезагрузки? Сама машина uptime 40 дней.

/var/lib/systemd/coredump пусто
/usr/local/myservice-bin -пусто

core нет нигде

 

gobot
()

В nginx попасть в нужный upstream

Нужно по запросу, например http://example.com/?port=8082 попасть на 127.0.0.1:8082

upstream nodes {
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    server 127.0.0.1:8085;
}

location / {
  proxy_pass http://nodes;
}



Есть какой то sticky, но мне не удалось его завести. Насколько я понял он доступен только в комм. версии nginx?

Другие примеры только тупо так
if ($request ~ "8082") {

  proxy_pass http://127.0.0.1:8082;

}

if ($request ~ "8083") {

  proxy_pass http://127.0.0.1:8083;

}

...


Но как то коряво мне кажется. Как сделать четко? Вообще хотелось бы конечно ещё чтобы списочек upstream удаленно брался, но опять же в коммерческой версии это?

 , ,

gobot
()

Как сделать 1 строкой массив массивов

Как можно упростить код?


const sids = [];
const sidsRemote = [[1,2,3], [1,2,3], [1,2,4]]
const sidsLocal = [1,2,3]

sidsRemote.forEach((serv)=>{
    serv.forEach(sid=>{
        sids.push(sid)
    })

})

sidsLocal.forEach((sid)=>{
    sids.push(sid)
})

//result sids = [1,2,3,1,2,3,1,2,3,1,2,3]

 ,

gobot
()

ВОПРОС: как в редис добавить в лист ключ

Делаю так

rpush myList '{«id»: «a»}'
rpush myList '{«id»: «b»}'
rpush myList '{«id»: «c»}'

Мне нужно хранить упорядоченный списочек

Потом хочу удалить по id=«a» Но, вопрос, как? Тупо приходит на ум запросить весь список, прогнать через JSON.parse(), найти индекс элемента и удалить через индекс. Но тут очевидно куча проблем.

1) В промежутке моего поиска, может добавиться новый элемент и найденный индекс будет не актуален (удалится другой элемент!).

2) Время на разбор json, 3) Время на загрузку всего списочка

Просмотрел все типы и ничего нужного не нашел. hSet не сортирует.

ЧТО ДЕЛАТЬ БРАТЬЯ?

Пока ждал, нашел LREM - решает задачу на 78% (по моим ощущениям). А вообще я ждал от редиса чего то большего. Вообще можно было бы hash использовать, но он (падла), как то коряво сортирует ключи. Если бы добавлял нормально просто в конец, а то ведь не понятно как ключи сортируются или как в память лягут или что. Недоработки Redis явные, не хватает Sorted Hash

 

gobot
()

Как быстро искать в journalctl

journalctl -u http -S -12h --no-pager | grep «blabla»

Ооочень долго ищет. Раньше я использовал обычные логи /var/log/* там быстро было, а через journalctl капец как долго. Как это вообще используется правильно? Или что я не так делаю?

 ,

gobot
()

Вопросик по конфигурации certbot

certbot --nginx добавляет в конфиг nginx редирект на https на все сайты. Нигде это не редактируется? Мне нужно чтобы сайт по http\https тоже был доступен. Спрашивается: на кой х..р такая медвежья услуга?! Просто бесит! Просто нелюди делали, какие-то мутанты!

 ,

gobot
()

Подскажите регексу

Нужно из лога вытянуть продолжительность сессий

[2025-06-12 10:32:15.142][INFO][1][xxx] Session UP
...bla
...bla
...bla...
[2025-06-12 10:40:15.142][INFO][1][xxx] Session Down by KAPEC

[2025-06-12 12:32:15.142][INFO][1][yyy] Session UP
...kukuku...
[2025-06-12 12:40:15.142][INFO][1][yyy] Session Down by KABZDEC

[2025-06-12 13:32:15.142][INFO][1][zzz] Session UP
...phphph...
[2025-06-12 13:40:15.142][INFO][1][zzz] Session Down by PIPEC

xxx|yyy|zzz - идентификатор сессии

Что я пытаюсь сделать и ни к чему пока не приводит (.+ сжирает все до конца строки)

journalctl --no-pager  | grep "Session UP" | grep -oEi "[0-9]{2}:[0-9]{2}:[0-9]{2}.*[0-9a-z]{8}"


Нужно в конце получить лог
Идентификатор / Время старта / Продолжительность (сек) / Причина (PIPEC|KAPEC|PIPEC)

Понимаю, что выглядит как целая работа, но может гений решит по быстрому

 ,

gobot
()

Инструмент для тестирования 1 000 000 конектов

Если апп на сервере, который лежит на сокете и обрабатывает (udp/tcp) по разным протоколам. Хочу проверить работу. Запускал тесты на локалхосте, норм., держит соединения норм, не отваливаются, сам апп живой. Запускал тесты через свой комп, но проблема в том, что мой роутер начинает гнать и отваливается сеть(видимо из за pps).

Как проверить (benchmark) на хотя бы 1000 устройств с реальными адресами, сетями, типа бот фермы ддос? Какой сервис есть? Ну и желательно в РФ, ибо платить картой сейчас нереал

 , , ,

gobot
()

Вопросик#2

Почему docker перезагружает контейнер? В логах самого контейнера «thread is interrupted». Как я понимаю (подсказал ИИ от гугла) это процессу запущенному в докере присылается сигнал (SIGTERM, SIGINT). Но вот так и не понял отчего может такое случиться. Перезапускается внезапно, бывает через 3 часа или 6... Лимитов никаких не ставил. Что может быть?

В логах самого докера

journalctl -xu docker.service --no-pager | grep "34:32"

Jun 13 12:34:32 dockerd[877179]: time="2025-06-13T12:34:32.777749732+03:00" level=info msg="ignoring event" container=220983e9f5563eccd3635f02d53bcb18a5c2ff37f2d98171a5b0faae9e5403c6 module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"


В логах контейрера
[2025-06-13 09:34:32.282][ERROR][1][3a2c8709][0] serve error code=1070(ST thread is interrupted)
...ещё строк 5 всякой лабуды (закрытие ресурсов и т.д., не ошибок)....
...дальше стартует снова сервис в докере...


Такого никогда не было, обычно годами висят запущенные контейнеры, а тут

 , ,

gobot
()

Вопросик

journalctl --since «1 hour ago»

Неужели нельзя было как-то по человечески сделать, например "-s 1h"? Запаришься ведь вспоминать эту лабуду постоянно

journalctl --no-pager

По умолчанию идет разбивка на страницы как в man... И постоянно приходится эту лабуду дописывать. Неужели нельзя было по дефолту не разбивать? Все равно ведь логи грепаешь, а не читаешь как книжку какую-то...

Или может я чего-то не так делаю?

 ,

gobot
()

Сервер прерывает соединение https

Сервер начал внезапно сбрасывать соединение, если начинаешь что-то загружать больше чем 10 байтов. Если клиенту отдать например «hello world», то нормально, если что-то больше (точно не проверял, но где то по ощущениям килобайт) - соединение висит и приходит RST пакет. Работал годами в этой конфигурации, ничего не менял.

Когда 15kb скачает, когда 40kb и отваливается

tcpdump -n -i eth0 host client and port not 22

05:54:43.180201 IP client.16239 > server.443: Flags [S], seq 4116473154, win 8760, options [mss 1390,nop,wscale 8,nop,nop,sackOK], length 0
05:54:43.180240 IP server.443 > client.16239: Flags [S.], seq 4168317543, ack 4116473155, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
05:54:43.321936 IP client.16239 > server.443: Flags [.], ack 1, win 34, length 0
05:54:43.327251 IP client.16239 > server.443: Flags [P.], seq 1:366, ack 1, win 34, length 365
05:54:43.327283 IP server.443 > client.16239: Flags [.], ack 366, win 501, length 0
05:54:43.327604 IP server.443 > client.16239: Flags [P.], seq 1:110, ack 366, win 501, length 109
05:54:43.471964 IP client.16239 > server.443: Flags [P.], seq 366:417, ack 110, win 33, length 51
05:54:43.473029 IP client.16239 > server.443: Flags [P.], seq 417:515, ack 110, win 33, length 98
05:54:43.473133 IP server.443 > client.16239: Flags [.], ack 515, win 501, length 0
05:54:43.473292 IP server.443 > client.16239: Flags [P.], seq 110:2890, ack 515, win 501, length 2780
05:54:43.473301 IP server.443 > client.16239: Flags [P.], seq 2890:5670, ack 515, win 501, length 2780
05:54:43.473315 IP server.443 > client.16239: Flags [P.], seq 5670:8450, ack 515, win 501, length 2780
05:54:43.614711 IP client.16239 > server.443: Flags [.], ack 2890, win 34, length 0
05:54:43.614748 IP server.443 > client.16239: Flags [P.], seq 8450:11230, ack 515, win 501, length 2780
05:54:43.616821 IP client.16239 > server.443: Flags [.], ack 5670, win 34, length 0
05:54:43.616852 IP server.443 > client.16239: Flags [P.], seq 11230:12620, ack 515, win 501, length 1390
05:54:43.618953 IP client.16239 > server.443: Flags [.], ack 8450, win 34, length 0
05:54:43.618987 IP server.443 > client.16239: Flags [P.], seq 12620:15400, ack 515, win 501, length 2780
05:54:43.618994 IP server.443 > client.16239: Flags [.], seq 15400:16790, ack 515, win 501, length 1390
05:54:43.776733 IP client.16239 > server.443: Flags [.], ack 11230, win 34, length 0
05:54:43.776767 IP server.443 > client.16239: Flags [P.], seq 16790:19570, ack 515, win 501, length 2780
05:54:43.779979 IP client.16239 > server.443: Flags [.], ack 14010, win 34, length 0
05:54:43.780007 IP server.443 > client.16239: Flags [P.], seq 19570:20960, ack 515, win 501, length 1390
05:54:43.805039 IP client.16239 > server.443: Flags [.], ack 16790, win 70, length 0
05:54:43.805071 IP server.443 > client.16239: Flags [P.], seq 20960:23740, ack 515, win 501, length 2780
05:54:43.805079 IP server.443 > client.16239: Flags [.], seq 23740:25130, ack 515, win 501, length 1390
05:54:43.805083 IP server.443 > client.16239: Flags [P.], seq 25130:27910, ack 515, win 501, length 2780
05:54:43.805242 IP server.443 > client.16239: Flags [P.], seq 27910:29300, ack 515, win 501, length 1390
05:54:43.805253 IP server.443 > client.16239: Flags [P.], seq 29300:32080, ack 515, win 501, length 2780
05:54:43.805283 IP server.443 > client.16239: Flags [.], seq 32080:33470, ack 515, win 501, length 1390
05:54:44.121039 IP server.443 > client.16239: Flags [.], seq 32080:33470, ack 515, win 501, length 1390
05:54:44.537009 IP server.443 > client.16239: Flags [.], seq 16790:18180, ack 515, win 501, length 1390
05:54:45.369055 IP server.443 > client.16239: Flags [.], seq 16790:18180, ack 515, win 501, length 1390
05:54:47.001053 IP server.443 > client.16239: Flags [.], seq 16790:18180, ack 515, win 501, length 1390
05:54:50.361047 IP server.443 > client.16239: Flags [.], seq 16790:18180, ack 515, win 501, length 1390
05:54:53.779507 IP server.443 > client.16239: Flags [R.], seq 33470, ack 515, win 501, length 0

 

gobot
()

Как добавить второй адрес на сервер?

ip a add 1.1.1.1/32 dev eno1:0

Что=то добавляет, но это не работает

ifconfig eno1:0
eno1:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 14:18:77:6e:2d:b8 txqueuelen 1000 (Ethernet)
device interrupt 16


ifconfig eno1:0 up
SIOCSIFFLAGS: Cannot assign requested address

Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux

 ,

gobot
()

RSS подписка на новые темы