Архив

Публикации с меткой ‘sysctl’

Тюнинг TCP стека в Linux

Увеличиваем максимальный размер памяти отводимой для TCP буферов:
(16Мб на порядок больше, чем нужно, следует экспериментальным путем подобрать
оптимальные значения, понеменогу увеличивая параметры заданные по умолчанию)

sysctl -w net.core.rmem_max = 16777216
sysctl -w net.core.wmem_max = 16777216

Увеличиваем лимиты автотюнинга (min, default, max bytes)

sysctl -w net.ipv4.tcp_rmem = «4096 87380 16777216″
sysctl -w net.ipv4.tcp_wmem = «4096 65536 16777216″

Увеличиваем размер очереди пакетов на сетевом интерфейсе, особенно полезно для Gigabit Ethernet:

ifconfig eth0 txqueuelen 1000

Особенности Linux ядра 2.4.x:
Для предотвращения особенности при уменьшении размера окна, из-за повторов передеачи пакетов,
для одного соединения, уменьшать на 10 минут размер окна для всех остальных соединений к тому же хосту:

sysctl -w net.ipv4.route.flush=1

Особенности Linux ядра 2.6.x:

Запрещаем кеширование статуса ssthresh (были ретрансмиты) для других соединений

sysctl -w net.ipv4.tcp_no_metrics_save = 1

Рекомендуется увеличить размер backlog до 1000 или выше
(для 10Gb линка можно поставить 30000):

sysctl -w net.core.netdev_max_backlog = 2500

Начиная с ядра 2.6.13 можно менять алгоритм обработки ситуации перегрузки:

sysctl -w net.ipv4.tcp_congestion_control=htcp
reno: традиционный TCP
bic: BIC-TCP (для высокоскоростных сетей, быстрое восстановление после потери)
highspeed: HighSpeed TCP: Sally Floyd’s suggested algorithm
htcp: Hamilton TCP (для высокоскоростных сетей)
hybla: для спутниковых линков
scalable: Scalable TCP
vegas: TCP Vegas
westwood: для сетей с большой потерей пакетов
Когда стандартный reno не устраивает рекомендуется попробовать bic или htcp.

Значения параметров тюнинга подробно описаны в документе ip-sysctl.txt в комплекте ядра:

http://www-didc.lbl.gov/TCP-tuning/ip-sysctl-2.6.txt

admin Tuning, Администрирование , , ,

Способы защиты от флуда и DDoS атак в FreeBSD

Черные дыры.

net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
Это превращает машину в черную дыру при попытке подключиться к портам,
которые не слушают. Nmap по настоящему не любит это.

Защита очереди сокета от SYN атак.

Основной из самых популярных атак остается SYN флуд, при которой
очередь сокета атакуемого хоста переполняется некорректными попытками
соединений. Для защиты от таких атак некоторые из UNIX поддерживают
отдельные очереди для входящих запросов на соединение. Одна очередь
для полуоткрытых сокетов (SYN получен, SYN|ACK послан), другая очередь
для полностью открытых сокетов, ждущих вызова accept() от программы.
Эти две очереди должны быть увеличены, чтобы атаки малой и средней
интенсивности почти не влияли на стабильность и доступность сервера.
kern.ipc.somaxconn=1024

Редиректы (Перенаправления)

Атакующий может использовать IP redirect для изменения таблицы
марщрутизации на удаленном хосте. В хорошо разработанной сети
редиректы на конечные станции не должны требоваться. Оба – отправка и
принятие редиректов должны быть отключены.
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0
Читать далее…

admin Администрирование , , , , , ,

Описание некоторых sysctl переменных ядра Linux (sysctl proc linux kernel tune)

Оригинал: http://debian.telenet.ru/doc/sysctl.conf

> net.ipv4.conf.default.forwarding=1

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

> fs.file-max = 64000

Максимальное значение открытых файлов. Что бы его узнать, выполните
команду cat /proc/sys/fs/file-max

> net.ipv4.conf.all.rp_filter = 1

Эта переменная сообщает ядру о необходимости фильтрации пакетов по их исходящему адресу.

> kernel.sysrq = 0

Отключается комбинация клавиш sysrq, которая используется при крахе
системы.

> net.ipv4.conf.default.rp_filter=1

Фильтр обратного пути (когда пакет приходит с одного интерфейса, а
уходит на другой)

> net.ipv4.conf.all.accept_source_route = 0

Маршрутизация от источника (source routing) позволяет отправителю
определить путь, по которому пакет должен пройти по сети Internet, чтобы
достигнуть пункта назначения. Это очень удобно для изучения и отладки
работы сети, но нарушитель получает возможность подмены адресов
компьютеров локальной сети. 0 означает, что маршрутизация отключена, 1 -
наоборот.

> net.ipv4.tcp_syncookies=1

Разрешает/запрещает передачу так называемых syncookies вызывающему хосту
в случае переполнения очереди SYN-пакетов для заданного сокета. Когда в
систему поступает слишком много запросов на соединение, то очередь может
переполниться и тогда запускается передача syncookies в ответ на каждый
SYN-запрос. Эта переменная используется для предотвращения syn-flood
атак. Переменная может принимать два значения 0 (выключено) и 1
(включено). Значение по-умолчанию 0 (выключено). Эта функция будет
работать только в том случае, если ядро собрано с опцией
CONFIG_SYN_COOKIES.
Читать далее…

admin Администрирование , , , ,

FreeBSD для обслуживания 100-200 тысяч соединений (freebsd tcp optimization tune speed socket mbuf sendfile sysctl)

Стенограмма выступления Игоря Сысоева с конференции РИТ-2007.

mbuf clusters

FreeBSD хранит сетевые данные в mbuf clusters, размер каждого 2Кб, но из
них используется только около 1500 байт (по размеру Ethernet пакета).

mbufs

Для каждого mbuf кластера нужен «mbuf», который имеет размер 256 байт и
нужен для организации связи цепочек из mbuf кластеров. В mbuf можно поместить
полезную информацию в районе 100 байт, но это не всегда используется.

Если в машине 1Гб и больше памяти, то по умолчанию будет создано 25 тыс. mbuf кластеров,
что не всегда достаточно.

При ситуации исчерпания числа свободных mbuf кластеров FreeBSD попадает в
состояние zonelimit и перестает отвечать на запросы по сети,
в top это выглядит как «zoneli». Единственная возможность как-то повлиять на
ситуацию – это зайти с локальной консоли и перезагрузить систему, уничтожить
процесс находящийся в состоянии «zoneli» невозможно. Для Linux 2.6.x данная проблема
тоже характерна, причем работать переставала даже консоль.

PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
13654 nobody 1 4 0 59912K 59484K zoneli 209:26 0.00% nginx

Для выхода из этой ситуации существует патч возвращающий приложению ошибку ENOBUFS,
сигнализирующий о попадании в состояние «zoneli», после чего программа может
закрыть лишние соединения. К сожалению патч пока не принят в состав FreeBSD. Читать далее…

admin Администрирование , , , , , , , ,