LINUX.ORG.RU

Избранные сообщения nerve

Аналог ^] q для ssh

Форум — General

Если telnet сессия зависает или ждет таймаут подключения ее можно быстренько завершить через ^] q.
Есть что-то похожее у ssh?

Знаю два выхода, но оба по удобства не дотягивают до ^] q:
* Найти нужный ssh процесс в ps и убить
* ~. - срабатывает не всегда и если по ssh подключился к серверу и уже в нем к другому ssh (который зависает), то убивает первую сессию (а нужно вторую)

Что есть еще?

 ,

Kolins
()

В Exim обнаружили критические уязвимости, позволящие выполнить на сервере произвольный код

Новости — Безопасность
Группа Безопасность

ZDI (Zero Day Initiative) опубликовали сведения о трех найденных критических уязвимостях в почтовом сервере Exim, позволяющих выполнить произвольный код от имени процесса сервера, открывшего 25й порт. Для проведения атаки аутентификация на сервере не требуется.

  1. CVE-2023-42115 — позволяет добиться записи своих данных за границами выделенного буфера. Вызвана ошибкой проверки входных данных в сервисе SMTP.
  2. CVE-2023-42116 – вызвана копированием данных от пользователя в буфер фиксированного размера без проверки необходимого размера.
  3. CVE-2023-42117 – также вызвана отсутствие проверки входных данных на 25 порту SMTP-сервиса.

Уязвимости отмечены как 0-day, что говорит о том, что их не исправляют, хотя по словам ZDI разработчики Exim уже давно предупреждены об их наличии. Возможно, исправление будет в версии 4.97 сервера, но это не точно.

В качестве защиты от этих уязвимостей на данный момент предлагается ограничение доступа к SMTP на 25 порту.


UPD. Похоже, что все не так страшно. Эти уязвимости носят локальный характер. Они не работают, если сервер не использует NTLM и EXTERNAL аутентификации, не закрыт за прокси, не использует потенциально опасные DNS-серверы и не использует spf в acl. Подробнее…

>>> Подробности

 , ,

Zhbert
()

Bash цикл чтения из файла прерывается непонятным образом

Форум — Development

Есть файл commands.sh

rabbitmqctl list_exchanges
echo "--------------------"
rabbitmqctl list_exchanges
echo "--------------------"

Затем я в cmd запускаю цикл

while read c; do eval "$c"; done < commands.sh

отрабатывает первый rabbitmqctl list_exchanges, а до echo уже дело не доходит. Это что за магия? Подобное наблюдается только с rabbitmqctl.

В оригинале мне нужно было удалить кучу очередей через rabbitmqctl delete_queue. Я сгенерировал несколько десятков строчек с этой командой с разными названиями очередей и вставил в терминал. Выполнилась только первая. Потом решил вот попробовать через такой цикл и выполняется тоже только первая. А вот bash commands.sh работает нормально.

 

Olegymous
()

CoW или не CoW, вот в чем вопрос

Статьи — Администрирование

Сейчас появилось некоторое количество файловых систем, которые почему-то необоснованно относят к группе CoW (Copy-on-Write). Почему так получилось, и что что на самом деле есть Copy-on-Write?

( читать дальше... )

 , , , ,

no-dashi-v2
()

Зачем нужен раздел /boot?

Форум — Linux-install

Здравствуйте товарищи. Поздравляю всех с Рождеством. Если не трудно просветите пожалуйста меня в этом вопросе.
В общем когда я первый раз установил линукс Manjaro года два назад, я выбрал установить рядом с Windows 7. Установщик Manjaro создал мне раздел /boot размером 100 Мб начинающейся с сектора 2048 и точно видел своими глазами что там что там были файлы. Недавно я решил перейти на Debian. Разметку диска я уже сделал сам, и поскольку данный раздел был в Манджаро я при новой разметке диска, точно так же его сделал и до последнего думал, что загрузчик находится там, но недавно я экспериментировал с разделами и обнаружил что загрузчик находится как раз между нулевым сектором диска и 2048 сектором, а в разделе /boot у меня вообще пусто. Почитал маленько там сям, вычитал что он нужен в случае шифрования и вообще если я не знаю зачем данный раздел то он мне и не нужен. Но меня это не устраивает, поскольку если я его уберу, а потом он мне понадобится, то это лишние манипуляции что бы его опять сделать. И мне чтобы его убрать надо точно знать что он мне не понадобится. На данный момент на ноутбуке две операционные системы: Debian и Windows 7 и я еще хочу попробовать Arch. Разметка диска MBR и обычный BIOS. Только ли для шифрования он нужен? Шифрование пока использовать не собираюсь, пока с этим вопросом не разбирался. SSD накопитель поддерживает аппаратное шифрование если что.

 

zzplex
()

DNF: джва года ждал!

Форум — Desktop

Очередной раз тут листал федоровский фак (кстати, категорически рекомендую независимо от дистрибутива) и наткнулся на вот это, и вспомнил как же плохо живётся в DNF без такой фичи — возможности обнаружить «одинокие» пакеты (с собой они могут тащить другие пакеты), которые не требуются никаким другим пакетам как зависимость.

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

Для Ъ выложу здесь.

sudo dnf install gcc libsolv-devel

Кстати, мне этих не хватило, ещё потребовалось поставить redhat-rpm-config.

touch rpm-unneeded.c

В этот файлик положите

#include <solv/pool.h>
#include <solv/poolarch.h>
#include <solv/repo_rpmdb.h>
#include <solv/solver.h>

int main(void)
{
    Pool *pool;
    Repo *rpmdb;
    Solver *solver;
    Queue q;

    pool = pool_create();
    pool_setarch(pool, NULL);
    pool_set_flag(pool, POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS, 1);

    rpmdb = repo_create(pool, "@system");
    repo_add_rpmdb(rpmdb, NULL, 0);
    pool->installed = rpmdb;

    solver = solver_create(pool);
    solver_set_flag(solver, SOLVER_FLAG_KEEP_EXPLICIT_OBSOLETES, 1);
    solver_set_flag(solver, SOLVER_FLAG_BEST_OBEY_POLICY, 1);
    solver_set_flag(solver, SOLVER_FLAG_YUM_OBSOLETES, 1);

    queue_init(&q);
    solver_solve(solver, &q);
    solver_get_unneeded(solver, &q, 1);

    for (int i = 0; i < q.count; i++)
    {
        printf("%s\n", pool_solvid2str(pool, q.elements[i]));
    }

    queue_free(&q);
    pool_free(pool);

    return 0;
}

Собираем

gcc $(rpm -E %{optflags}) -fPIC rpm-unneeded.c -o rpm-unneeded $(rpm -E %{build_ldflags}) -lsolv -lsolvext

Положим подальше, хорошая программа!

mkdir ~/.local/bin
mv rpm-unneeded ~/.local/bin

Всё! Теперь любители чистоты и всяких там оптимизаций могут приступать к очищению своей системы от всякой бесполезной фигни.

Пару слов новичку. Среди пакетов, которые можно спокойно удалить окажутся и пакеты связанные с загрузкой системы такие как grub2-* или shim-x64, следи за тем, чтобы они не улетели в приступе пуризма, иначе система не загрузится.

Кстати, избавиться от этих «опасных» пакетов можно переходом на systemd-boot, тогда больше ничто не будет стоять на пути у твоей ярости, рекомендую.


UPD.

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

Так что господа дебиянщики — всё, больше вам нечем похвастать.

–––––––

UPD 2

Прикрутили в федору аж в 2017 году, назывался python2-dnf-plugin-leaves. Посыпаю голову пеплом, век живи, век учись…

пруф: https://koji.fedoraproject.org/koji/buildinfo?buildID=885703

Так что, злорадства по поводу отсталости DNF отменяются. Грустные дебияньшики и арчеводы расходятся несолоно хлебавши.

 , , , , rocky linux

papin-aziat
()

Задача про прямоугольный треугольник от Яндекса

Форум — Development

Привет, лор!

Я решил попрактиковаться в программировании и наткнулся на задачу от Яндекса про прямоугольные треугольники. Я ее почти решил, только один из тестов не проходит, никак не пойму что не так.

На стандартный поток ввода подаётся три целых положительных числа — стороны треугольника. Числа не превосходят 30000.

Формат вывода Если полученный треугольник является прямоугольным, напечатайте YES. Если треугольник не является прямоугольным, напечатайте NO. Если с заданными сторонами невозможно построить треугольник, напечатайте UNDEFINED.

Вот как я рассудил: надо найти максимальную и меньшие стороны треугольника. Если максимальная больше или равна сумме меньших, то такой треугольник нельзя построить. А если все ок, то сравниваем квадраты меньших сторон и гипотенузы. Все хорошо ровно до теста №24. В какой-то момент я отчаялся и заменил мое сравнение на тупой перебор сумм сторон и все заработало. Теперь никак не могу понять где я был не прав в своей первой гипотезе.

Вот весь код:

#include <iostream>
#include <algorithm>

static int undefined() {
    std::cout << "UNDEFINED" << std::endl;
    return 0;
}

int main()
{
    int32_t l[3];
    for(int i = 0; i < 3; i++) {
        std::cin >> l[i];
        
        if(l[i] < 1) {
            return undefined();
        }
    }
    
    int32_t a, b, h;
    h = std::max(l[0], l[1]); // большее из первых двух чисел побудет пока гипотенузой
    a = std::min(l[0], l[1]); // а меньшее - точно не гипотенуза
    b = std::min(h, l[2]);    // то же самое
    h = std::max(h, l[2]);    // h теперь - наибольшая сторона

    if(h >= a + b) {
        return undefined();
    }

    // если заменить условие выше на вот это, то все проходит:
//    return l[0] + l[1] > l[2] and
//           l[1] + l[2] > l[0] and
//           l[0] + l[2] > l[1];

    
    if(a * a + b * b == h * h ) {
        std::cout << "YES";
    }
    else {
        std::cout << "NO";
    }
    
    std::cout << std::endl;

    return 0;
}

 ,

magictree
()

Как вычитать http запрос?

Форум — Web-development

Хочу вычитать входящий запрос по протоколу HTTP 1.0 или 1.1 и послать ответ, в котором будет текст запроса.

Я так понимаю, простой алгоритм вида «читать, пока клиент не закрыл соединение» не сработает, т.к. современные клиенты пытаются в http keepalive и соединение надо закрывать самому со стороны сервера. Но чтобы закрыть соединение, мне нужно вычитать весь запрос.

Выходит, придётся парсить запрос.

Я так понимаю, есть три алгоритма:

transfer-encoding не указан и content-length не указан. Тогда читаем до закрытия соединения.

content-length указан. Тогда читаем указанное число байтов (ну или до закрытия соединения, что будет странно).

указан transfer-encoding и в нём присутствует chunked. Тогда читаем чанки, пока не придёт чанк нулевой длины, что сигнализирует конец запроса.

Пока не понял, что делать, если указан и chunked и content-length, но я прочитаю.

Можно ли считать, что этого хватит для любых разумных и неразумных (но в рамках протокола) запросов?

 

vbr
()

Поиск софтины для ручного анализа логов (греп с динамическими правилами)

Форум — General

В debug режиме приложение выдает очень много сообщений, которые мешают читать лог.

Поэтому я делаю как-то так:

grep -vE "some-message|other-message|third-message|..." | less

Для каждого добавления/удаления исключения из логов приходится выходить из less и редактировать паттерн.

Существует ли консольная программа, которая позволяет фильтровать строки (и отключать все/часть фильтров) с сохранением курсора на текущей строке?

Хочется:

  • возможность редактировать фильтр. И желательно не в виде regex с |. Либо curses-меню, либо псевдоокно: по строке на pattern
  • сохранять текущую отображаемую строку при изменении правил фильтрации
  • отображать номер строк в исходном файле

 

Tanger
()

Фильтрация трафика приложения или группы приложений.

Форум — General

Владельцам ядер ниже 4.4 можно не читать.

Собственно есть cgroup и iptables -m cgroup. Почему бы не создать отдельный cgroup и фильтровать локальный трафик для этой группы?

1. Не забываем включить классную фичу

sysctl -w net.ipv4.ip_early_demux=1
# на ядрах 4.10+
sysctl -w net.ipv4.tcp_early_demux=1
sysctl -w net.ipv4.udp_early_demux=1

2. Создаем группу

mkdir /sys/fs/cgroup/net_cls/testgroup2
echo 1234 >/sys/fs/cgroup/net_cls/testgroup2/net_cls.classid

3. создаем тестовые правила

iptables -A INPUT -m cgroup --cgroup 1234 -p icmp
iptables -A INPUT -m cgroup --cgroup 1234 -p udp
iptables -A INPUT -m cgroup --cgroup 1234 -p tcp
iptables -A OUTPUT -m cgroup --cgroup 1234 -p icmp
iptables -A OUTPUT -m cgroup --cgroup 1234 -p udp
iptables -A OUTPUT -m cgroup --cgroup 1234 -p tcp

4. Переносим себя в эту группу

echo $$ >/sys/fs/cgroup/net_cls/testgroup2/tasks

5. Тестируем UDP

dig google.com
iptables -nvxL INPUT; iptables -nvxL OUTPUT

Chain INPUT (policy ACCEPT 2 packets, 255 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
Chain OUTPUT (policy ACCEPT 2 packets, 91 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       2       91            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234

6. Тестируем TCP

iptables -Z
wget -4 -O /dev/zero https://google.com
iptables -nvxL INPUT; iptables -nvxL OUTPUT

Chain INPUT (policy ACCEPT 4 packets, 538 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       4      538            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
Chain OUTPUT (policy ACCEPT 6 packets, 451 bytes)
Chain OUTPUT (policy ACCEPT 6 packets, 451 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       6      451            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234

7. Тестировать остальные протоколы бесполезно, т.к. они не поддерживаются в early_demux

Что имеем в результате? TCP можно контролировать для группы, а с UDP пролный 3.14ц!

Поковыряв ядро становится полностью понятно почему.

Проблема в том, что в UDP можно сделать bind() только на порт, что делает поиск сокета на которые пришли данные в два раза сложнее. __udp4_lib_demux_lookup() делает поиск только по номеру порта и адресу, игнорируя сокеты привязанные только к номеру порта.

Заменив __udp4_lib_demux_lookup() на полноценный поиск udp сокета через __udp4_lib_lookup()

для ядра 4.14.165

diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 731ea78..6143ca5 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -2295,8 +2295,8 @@ int udp_v4_early_demux(struct sk_buff *skb)
                                                   uh->source, iph->saddr,
                                                   dif, sdif);
        } else if (skb->pkt_type == PACKET_HOST) {
-               sk = __udp4_lib_demux_lookup(net, uh->dest, iph->daddr,
-                                            uh->source, iph->saddr, dif, sdif);
+               sk = __udp4_lib_lookup(net, iph->saddr, uh->source, iph->daddr, uh->dest,
+                                       dif, 0, &udp_table, NULL);
        }

        if (!sk || !refcount_inc_not_zero(&sk->sk_refcnt))

Да, это дополнительные накладные расходы, но мы дважды это подтвердили через net.ipv4.ip_early_demux=1 и net.ipv4.udp_early_demux=1

Но теперь мы получаем в п.5

Chain INPUT (policy ACCEPT 2 packets, 255 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       1      226            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
Chain OUTPUT (policy ACCEPT 2 packets, 91 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0            icmp --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       2       91            udp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
       0        0            tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            cgroup 1234
Т.е. оно стало работать!

Но это патч ядра, который не все могут осилить.

Есть возможность получить аналогичный результат при помощи модуля ядра. ( https://github.com/vel21ripn/ipt_sk_helper )

Чтоб оно заработало нужно сделать sysctl -w net.ipv4.ip_early_demux=2

Работа проверялать на 4.4.209 и 4.14.165. Собирается даже на 5.4.х

Если кто может попробовать собрать его и протестировать - напишите что получилось.

PS Если починить эту фичу в официальном ядре, то станет доступной фильтраци входящего трафика по UID/GID.

 , ,

vel
()

перенос centos 7 из virtualbox на hyper-v

Форум — Linux-install

Добрый день! помогите пожалуйста с переносом системы Centos 7 из virtualbox на hyper-v. После конвертирования диска формата vdi в vhdx, создаю в hyper-v виртуальную машину и подключаю туда жесткий диск который я сконвертировал в формат vhdx. В самом начале запуска системы мне предлагает 2 варианта загрузки 1) Centos Linux (3.10.0-1062.18.1.e17.x86_64) 7 (Core). 2)Centos Linux (0-rescue-b5adddac779547c3b9450c2c9788f5af) 7 (Core). При запуске в первом режиме у меня система падает в ошибку DRACUT INITQUEUE TIMEOUT В CENTOS 7. Я так понимаю проблема с grub и он не может диск по uuid. Во втором режиме запускается все нормально , но я так понимаю что второй режим это режим восстановления. Как мне сделать что бы запускалась в первом режиме? Пробовал восстанавливать загрузчик grub из образа вот по этой статье https://web-zones.ru/threads/vosstanovlenie-zagruzchika-grub-na-centos-7-x.1378/ но это не помогло, перепробовал уже разные варианты, но ничего не помогает. Подскажите как можно восстановить работу системы в нормальный режим?

 ,

witja245
()

чистый Си

Форум — Development

Всем добра. Учусь программированию под линукс, знаю что нет ничего лучше чем практика. Пересел из микроконтроллеров, поэтому практически все нужно осваивать заново. Много гуглил но так и не смог найти примеры работы как загрузить веб контент, json или код html, и cookie на чистом си под линукс. а также как отправлять cookie. Киньте пример или ссылку на него, только рабочий пример пожалуйста, так как для меня это новые ворота.

 

casusnur
()

Забить 000 относительно недавно удаленные файлы

Форум — Admin

Порекомендуйте программу чтобы забить «0»-ми место, на котором файлы уже удалены через корзину и при этом сохранить существующие файлы в домашнем каталоге ?

 

TheLinuxUser
()

Bash архивация

Форум — General

Всем доброго времени суток.Никогда не писал bash скрипты. И тут потребовалось заархивировать кучу папок по отдельности. Есть папка History, в ней кучу папок с макетами и файлами. В ручную архивировать ну малость лень так как их более 100. Начал писать скриптец и тут началась ерунда. Если есть файлы кроме папок они тоже попадают в список. Вот код:

#!/bin/bash
echo "Архиватор каталогов"
cd /media/vol1tb/history
lsfolder="./*"
echo="Список каталогов:"
for search in $(ls -d $lsfolder)
do
echo "$search"
if [ "$1" = "" ]; then
  printf "Вы хотите заархивировать каталог  $search (y/n)? [y]: "
  read choose
else
  choose="$1"

fi

if [ "$choose" = "y" ]; then
  zip -r  "$search" "$search"
else
  printf "Пропускаем $search"
fi

echo ""

if [ "$2" = "" ]; then
  printf "Удалить каталог $search (y/n)? [n]: "
  read choose
else
  choose2="$2"
fi

if [ "$choose2" = "y" ]; then
  printf "Удаление $search"
  rm -r "$search"

else
 printf "Оставляем на месте"
fi
echo clear
echo "Архивация завершена"
done

Архивация происходит, создается архив с именем папки вроде норм. Но если в папке уже есть zip файл то его тоже предлагает архивировать.

И после архивации идет запрос на удаление каталога: ввожу y, все равно выдает что оставляет каталог на месте и не удаляет.

Вопрос подскажите как передать только список директорий без файлов в родительском каталоге.

И где я туплю по удалению

 , ,

lokses
()

Критические уязвимости в протоколе WPA2

Новости — Безопасность
Группа Безопасность

В протоколе WPA2 (Wi-Fi Protected Access) обнаружены уязвимости, позволяющие прослушивать трафик, передаваемый по беспроводной сети. Злоумышленнику не требуется авторизация, достаточно находиться в зоне устойчивого приёма сигнала.

  • CVE-2017-13077: Reinstallation of the pairwise encryption key (PTK-TK) in the 4-way handshake.
  • CVE-2017-13078: Reinstallation of the group key (GTK) in the 4-way handshake.
  • CVE-2017-13079: Reinstallation of the integrity group key (IGTK) in the 4-way handshake.
  • CVE-2017-13080: Reinstallation of the group key (GTK) in the group key handshake.
  • CVE-2017-13081: Reinstallation of the integrity group key (IGTK) in the group key handshake.
  • CVE-2017-13082: Accepting a retransmitted Fast BSS Transition (FT) Reassociation Request and reinstalling the pairwise encryption key (PTK-TK) while processing it.
  • CVE-2017-13084: Reinstallation of the STK key in the PeerKey handshake.
  • CVE-2017-13086: reinstallation of the Tunneled Direct-Link Setup (TDLS) PeerKey (TPK) key in the TDLS handshake.
  • CVE-2017-13087: reinstallation of the group key (GTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.
  • CVE-2017-13088: reinstallation of the integrity group key (IGTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame.

Проблема усугубляется тем, что огромное число клиентских устройств, например, с устаревшими версиями iOS и Android (демонстрация атаки на Android) никогда не получат необходимые обновления. Данные, передаваемые такими устройствами будут защищены лишь в том случае, если на точке доступа работает ПО, не подверженное уязвимостям.

Некоторые производители (точно известно об Ubiquiti и Mikrotik) уже выпустили обновлённые прошивки. Уязвимости исправлены в LEDE, но обновлённые прошивки ещё не собраны (последнее обновление — 17.01.3 — вышло 3 октября).

>>> Подробности

 ,

anonymous
()

Как заменить/пометить все строки, которые НЕ соответствуют маске?

Форум — Development

Например sed 's/^\(сложная маска\)$/#\1/' Пометит знаком # все строки, которые удовлетворяют маске.

А как пометить строки, которые не удовлетворяют маске?

Это нужно, чтобы в тексте(листинге записей с переносами) объединить каждую неполную строку записи, известной структуры, с её продолжением на следующей строке, т.е. вытянуть каждую запись в строку. Перенесенная часть записи может занимать несколько строк. Между разными записями может быть 1 или 2 переноса. Т.е. одинарный либо двойной перенос, как критерий, не годится. Единственный критерий объединения, это начальная структура записи. Она либо обнаруживается, либо нет.

Либо без пометки сразу выполнить требуемое действие.

 

MariaRTI
()

nginx tcp timeout

Форум — Admin

Nginx настроен как прокси для websocket сервера. Захожу на сайт, nginx устанавливает соединение

netstat -np | grep "1.2.3.4"
tcp        0      0 4.3.2.1:8002     1.2.3.4:47196     ESTABLISHED 4618/nginx: worker
tcp        0      0 4.3.2.1:8002     1.2.3.4:47195     ESTABLISHED 4618/nginx: worker


конфиг сервера

listen 8002;
server_name _;
ssl on;
ssl_certificate      cert.crt;
ssl_certificate_key  private.key;

location / {
    proxy_read_timeout 86400;
    proxy_pass http://127.0.0.1:9000;            
    
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # WebSocket support (nginx 1.4)
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

После отрубания сети на клиенте, nginx все равно показывает этот ИП в состоянии ESTABLISHED. Почему так, ведь клиент уже давно отключился? Может висеть так целый день, это не правильно

 , ,

gobot
()

Меню из списка файлов.

Форум — Admin

Есть бредовая идея которую хочется реализовать. Все задумка в том что есть главный скрипт который должен мониторить определенную папку на наличие скриптов и на основе ее делать меню выбора какой именно скрипт запускать. У кого есть идеи по этому поводу?

 ,

ShamanVarro
()

Зачем нужен halt?

Форум — General

Зачем нужен halt, когда есть poweroff?
На просторах интернета встретилось такое объяснение, что при выполнении halt, после того, как система выключена, можно вручную сделать ребут или выключить питание компа, нажав на кнопку.
Зачем это нужно, когда можно сразу сделать poweroff или reboot?
Приведите, пожалуйста, примеры реального использования halt.

 

carabo
()

Список, просто необходимых, адонов для безопасного серфинга ваших интернетов под Лисой

Форум — Security

Список для 2017 года?

Мой список:

  • NoScript
  • uBlock Origin
  • HTTPS Everywhere
  • Self-Destructing Cookies

Что нибудь еще новенькое/лучшее есть? Делимся.

UPD: https://www.privacytools.io/#addons

 , ,

Oxdeadbeef
()