Как быстро выйти из строя с iptables?

Причина того, что сокеты TCP / IP используют файловые дескрипторы , заключается в том, что, когда интерфейс сокетов был впервые разработан и реализован ( в BSD Unix в 1983 году ), его разработчики считали, что сетевое соединение было аналогично файлу - вы можете прочитать , записать и закрыть оба, и что это хорошо согласуется с идеей Unix "все это файл ".

Другие реализации сетевого стека TCP / IP не обязательно интегрировались с подсистемой файлового ввода-вывода их ОС, например MacTCP . Но поскольку интерфейс сокетов BSD был настолько популярен, даже эти другие реализации решили реплицировать API сокетов с его Unix-подобными функциями, так что вы получили «файловые дескрипторы», используемые только для связи TCP / IP, в системах, которые иначе не работали. имеют файловые дескрипторы.

Другая часть вашего вопроса: Почему существует ограничение? Это потому, что самый быстрый способ реализовать таблицу поиска файловых дескрипторов - использовать массив. Исторически ограничение было жестко запрограммировано в ядре.

Вот код в Unix версии 7 (1979) с жестко заданным ограничением в 20 файловых дескрипторов на процесс:

Для сравнения, Linux динамически выделяет пространство для таблицы файловых дескрипторов процесса. Абсолютный предел по умолчанию равен 8192, но вы можете установить его как угодно. Моя система перечисляет 191072 в / proc / sys / fs / file-max .

Несмотря на то, что в Linux больше нет абсолютных ограничений, мы, тем не менее, не хотим позволять программам сходить с ума, поэтому администратор (или упаковщик дистрибутива) обычно устанавливает ограничения ресурсов. Взгляните на /etc/security/limits.conf или запустите ulimit -n .

1
25.10.2015, 00:45
2 ответа

После безуспешной работы с iptables я выбрал совершенно другой подход:

Все DNS-запросы для сервера спама / фишинга / рекламы на имена отвечают 0.0.0.0, например. браузер определяет как не маршрутизируемый и быстро дает сбой.

0
28.01.2020, 01:32

Ваше первое предложение должно работать правильно. Я полагаю, что единственным вариантом является проверка того, что вы вводите переменные правильно (космос разделен, а не запятая). Можно продемонстрировать правильность кода, слегка изменив его, чтобы напечатать значения двух переменных и напечатать команду matlab , а не выполнить ее:

#!/bin/bash
echo "Please variables 1 and 2:"
read var1 var2
echo "var1=$var1, var2=$var2."
echo matlab -nodesktop -nosplash -r "functionmat($var1,$var2)"
-121--160888-

Для этого существует команда matlab . Видимо, нельзя.

BTW, будьте очень осторожны с system () , если вы заботитесь о безопасности.

-121--153504-

Похоже, что у вас есть DROP в качестве действия iptables по умолчанию в цепочке INPUT . Измените значение на REJECT и произойдет быстрый сбой.

0
28.01.2020, 01:32

Теги

Похожие вопросы