Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Тюнинг ядра Linux

j1m (j1m@list.ru)

Хакер, номер #082, стр. 082-102-3


В ядре Linux присутствует такое понятие, как "испорченность". Оно выражается в числе, которое находится в файле /proc/sys/kernel/tainted. Если был загружен модуль с лицензией не совместимой с GPL, то число примет вид единицы. Двойка означает, что какой-то модуль загрузили принудительно (insmod -f). И четыре, если в многопроцессорной системе используются процессоры, не предназначенные для этого.

[закидываем сети]

Сетевых опций в Linux не просто много, а очень много (сказывается серверная история ОС). Поэтому я не буду рассматривать все настройки, а остановлюсь только на самых важных и полезных.

Основные каталоги, на которые следует обратить внимание: /proc/sys/net/core - настройки сетевого стека, /proc/sys/net/ipv4 - настройки протокола TCP/IP, /proc/sys/net/ipv4/conf - настройки сетевых интерфейсов.

Файлы каталога /proc/sys/net/core лучше вообще не трогать, чтобы ничего не испортить. Но если в твоем распоряжении находится нагруженный сервер, то рекомендуется увеличить размер входных и выходных буферов до 1 Мб путем записи числа 1048576 в файлы rmem_default, rmem_max, wmem_default и wmem_max.

Грамотный тюнинг стека TCP/IP может поднять производительность и защитить от некоторых видов сетевых атак. Для начала укажем ядру не отвечать на широковещательные ping'и, чтобы наш хост не могли использовать для DDOS-атак. Для этого запишем в файл icmp_echo_ignore_broadcasts единицу. Теперь защитимся от syn-flood атак путем включения опции (единица) tcp_syncookies. Если твоя машина не используется как маршрутизатор, то можешь отключить также и опцию ip_forward.

Попытаемся обмануть программы типа nmap, которые умеют определять ОС по свойствам сетевого стека. Для этого изменим дефолтное (64) значение TTL и запишем в файл ip_default_ttl число 128. Теперь немного оптимизаций. Уменьшим число попыток поддержать соединение и запишем в tcp_keepalive_probes цифру два. Уменьшим частоту посылки пакетов о поддержании соединения до 30 минут (по умолчанию 2 часа), запишем 1800 в tcp_keepalive_time. Отключим так называемый "window scaling" через файл tcp_window_scaling. Уменьшим время ожидания FIN пакета до полного закрытия соединения (tcp_fin_timeout=30). Также можно отключить опции tcp_sack, tcp_timestamps и для нагруженного сервера изменить диапазон доступных локальных портов, записав в файл ip_local_port_range последовательность "16384 61000".

В /proc/sys/net/ipv4/conf находится несколько каталогов, обладающих именами сетевых интерфейсов. Наполнение их абсолютно идентично. Среди каталогов можно найти специальный каталог all, изменения в котором отразятся на всех интерфейсах. Но изменять тут, собственно, нечего. Просто отключим форвардинг пакетов (если только твой ПК не маршрутизатор). Для этого запишем в файл forwarding ноль. А также включим журналирование всех пакетов с неизвестным обратным адресом (log_martians=1). Как ты, наверное, уже догадался, если обратный адрес неизвестен, то это значит, что он подменен.

Назад на стр. 082-102-2  Содержание  Вперед на стр. 082-102-4