Category Archives: RedHat KB

В выводе netstat -rn значение MSS равно 0. Что это означает?

Вывод команды netstat -nr выглядит обычно так:

Значение максимального размера сегмента (Maximum Segment Size, MSS) равное нулю в выводе команды netstat является неверным для любого типа сети. Это значение игнорируется ядром при активации сетевого подключения.

Когда MSS маршрута равен нулю, он определяется ядром исходя из размера MTU интерфейса, с которого отправляется пакет.

Чтобы посмотреть настройки интерфейса, используйте команду ifconfig:

Значение MSS вычисляется по формуле MSS = MTU – 40 байт. То есть, если MTU интерфейса равен 1500 байтам, то вычисленный ядром размер MSS будет равен 1460 байтам. Это предлагаемое значение MSS (advertised MSS) для TCP-соединения, оно используется, чтобы сообщить другой стороне о предпочитаемом размере MSS. Когда устанавливается TCP-соединение, значение MSS отправляется в SYN-пакете.

MSS маршрута (который выводится командой netstat -rn) может использоваться для переопределения предлагаемого значения MSS, которое вычисляется ядром. Например, если мы хотим принудительно задать MSS равное 1200 байтам для всех соединений с сетью 192.168.1.0/24, можно использовать команду ip:

Можно также задать значение MSS для конкретного хоста:

Отметим, что это влияет лишь на пакеты, которые мы получаем, но не отправляем: значение MSS — это предлагаемое значение, которое используется для информирования удалённой системы о том, что мы можем обработать.

MSS пакетов, которые отправляем мы сами, может определяться аналогичным путём, хотя и не всегда, поскольку параметр предлагаемого MSS является необязательным. Red Hat Enterprise Linux указывает значение MSS в пакетах SYN и SYN-ACK, тогда как другие реализации стека TCP/IP могут его не указывать.

В общем, если предлагаемое значение MSS получено не было, то используется минимальное значение MSS, равное 536 (MTU 576 – 40 байт = 536).

Также обратите внимание, что, кроме значений MTU и MSS маршрутов, в Red Hat Enterprise Linux реализована технология определения MTU для маршрута (path MTU discovery) — это простой протокол, который пытается автоматически определить оптимальный размер MTU для TCP-соединения.

Если автоопределение MTU маршрута работает корректно, то необходимость изменять MTU интерфейса или значение MSS маршрута возникает крайне редко.

Как объединить несколько сетевых интерфейсов в один логический (bonding) в Red Hat Enterprise Linux?

Red Hat Enterprise Linux позволяет администраторам объединять несколько сетевых интерфейсов в один с помощью модуля ядра bonding и специального сетевого интерфейса, который называется “интерфейсом объединенного канала” (channel bonding interface). Объединение каналов даёт возможность двум или более сетевым интерфейсам работать как одному, увеличивая пропускную способность и обеспечивая отказоустойчивость.

Чтобы создать bonding-интерфейс, создайте файл в каталоге /etc/sysconfig/network-scripts/ с именем ifcfg-bond<N>, заменив <N> номером интерфейса, например 0.

Содержимое этого файла может быть идентичным содержимому файлов настройки объединяемых интерфейсов. Единственное отличие состоит в том, что директива DEVICE должна быть равна bond<N>, где <N> это номер интерфейса.

Ниже приведён пример конфигурационного файла для bonding-интерфейса:

После того, как вы создадите настройку для bonding-интерфейса, нужно внести изменения в настройку объединяемых интерфейсов. Они должны быть сконфигурированы с директивами MASTER= и SLAVE=. Файлы настройки объединяемых интерфейсов могут быть практически идентичными.

Например, если ваш bonding-интерфейс объединяет два Ethernet-интерфейса — eth0 и eth1, тогда их конфигурационные файлы могут выглядеть так:

В примере замените <N> на номер интерфейса.

Для работы bonding-интерфейса необходимо загрузить соответствующий модуль ядра. Процедура загрузки модуля ядра слегка отличается в Red Enterprise Linux версии 3 и Red Hat Enterprise Linux версии 4.

Red Hat Enterprise Linux версии 3

Чтобы обеспечить автоматическую загрузку модуля при активации bonding-интерфейса, добавьте в файл /etc/modules.conf строку:

Замените <N> на номер интерфейса, например 0. Для bonding-интерфейсов, отличных от bond0 также требуется строка:

Для каждого сконфигурированного bonding-интерфейса должна быть соответствующая запись в файле /etc/modules.conf.

Red Hat Enterprise Linux версии 4

Чтобы обеспечить автоматическую загрузку модуля при активации bonding-интерфейса, добавьте в файл /etc/modprobe.conf строки:

Замените <N> на номер интерфейса, например 0. Также замените другие значение, такие как “miimon” и “mode”, на необходимые вам. Подробную информацию о различных параметрах можно найти в документации, перечисленной в конце документа

Для каждого сконфигурированного bonding-интерфейса должна быть соответствующая запись в файле /etc/modprobe.conf.

Примечание: До выхода Update 2 для Red Hat Enterprise Linux version 4, система не поддерживала более одного bonding-интерфейса. Если вы пытаетесь настроить более одного bonding-интерфейса, вам необходимо обновить вашу систему до Red Hat Enterprise Linux 4 Update 2 или более поздней.

После настройки файлов конфигурации интерфейсов и параметров в файле /etc/modules.conf (или /etc/modprobe.conf для RedHat Enterprise Linux 4) можно использовать команду ifup для активации bonding-интерфейса, или можно просто перезапустить сервис сети командой service network restart.

Дополнительная информация: с помощью модуля ядра можно управлять важными аспектами bonding-интерфейса.

Каким угрозам подвергаются сетевые сервисы?

Хотя доступ пользователей к средствам администрирования — важный вопрос безопасности для системных администраторов организации, но учёт активных сетевых сервисов имеет первостепенное значение для всех, кто использует операционную систему Linux.

Многие сервисы в Red Hat Enterprise Linux представляют собой сетевые сервера. Если на машине запущен сетевой сервис, то серверное приложение, которое называют “демоном”, слушает один или несколько сетевых портов, ожидая подключений. Каждый из таких серверов должен считаться потенциальной мишенью атаки.

Сетевые сервисы могут подвергать Linux-системы многим опасностям. Вот список самых основных:

  • Атаки на переполнение буфера (Buffer Overflow Attacks) – Сервисы, которые работают с портами от нулевого до 1023-го должны выполняться с административными привилегиями. Если такой сервис содержит ошибку переполнения буфера, то злоумышленник может использовать её для получения доступа к системе с правами пользователя, под которым запущен данный сервис. Взломщики используют автоматические утилиты для поиска систем с уязвимостями, а после получения доступа к ним, они внедряют автоматизированные руткиты (rootkits), которые позволяют им сохранить доступ к системе в дальнейшем.
  • Атаки на отказ в обслуживании (Denial of Service Attacks, DoS) – Этот тип атак заключается в заваливании сервиса запросами на обслуживание. Получая необычайно большое количество запросов от злоумышленника, сервис пытается обработать каждый из них, растрачивая на это ресурсы системы. В результате новые запросы перестают обрабатываться из-за нехватки системных ресурсов.
  • Атаки на уязвимости в скриптах (Script Vulnerability Attacks) – Если сервис использует скрипты для выполнения различных действий на стороне сервера, что характерно для Web-сервисов, взломщик может построить свою атаку на плохо написанных скриптах. Уязвимости в скриптах могут приводить к состоянию переполнения буфера, либо позволять модифицировать файлы в системе.

Чтобы ограничить подверженность системы сетевым атакам, все ненужные сервисы должны быть выключены.

Как пересканировать SCSI-шину без перезагрузки компьютера?

Система: Red Hat Enterprise Linux 3, 4 и 5

Добавить и удалить конкретное SCSI-устройство, как и пересканировать всю SCSI-шину, возможно без перезагрузки системы. Обратитесь к документу Online Storage Reconfiguration Guide за полным обзором по этой теме в Red Hat Enterprise Linux 5.

Для Red Hat Enterprise Linux 5

Для хранилища, подключённого через fibre channel, можно инициировать выполнение LIP (loop initialization primitive) на фабрике:

Выполнение LIP (как в приведённом примере) — это всё, что необходимо в Red Hat Enterprise Linux 5 для пересканирования шины fibre channel. Для завершения операции сканирования нужно несколько секунд. Эта функциональность полностью поддерживается начиная с версии Red Hat Enterprise Linux 5.

Для Red Hat Enterprise Linux 4 и 5

Чтобы пересканировать шину SCSI-контроллера, выполните команду:

Замените символ # номером SCSI-шины, которую нужно пересканировать.

Кроме полного пересканирования шины, можно добавлять или удалять только определённое заданное устройство. Команды для различных версий Red Hat Enterprise Linux приведены в следующих разделах.

Для Red Hat Enterprise Linux 4 или 5

Чтобы удалить одно заданное устройство, выполните:

Для Red Hat Enterprise Linux 3, 4 или 5

Чтобы добавить одно заданное устройство, выполните:

Чтобы удалить заданное устройство, выполните:

Где <H> <B> <T> <L> — это хост, шина, целевой номер устройства и логический номер (host, bus, target, LUN) соответственно. Соответствующие устройству номера можно найти в каталоге /sys (тольок для ядер версии 2.6), файле /proc/scsi/scsi или выводе команды dmesg.

В документации и выводе утилит указанные номера могут также называться как “хост”, “канал”, “идентификатор” и “lun”.

Рекомендации для виртуальных гостевых систем

Вышеописанные процедуры применимы для систем с гипервизорами (т.е. для dom0 в Red Hat Enterprise Linux 5), но не могут использоваться для динамического изменения хранилищ виртуальных гостевых систем. За подробной информацией о добавлении хранилищ в виртуальные гостевые системы обращайтесь к документу Virtualization Guide.

Для владельцев контроллеров Hewlett-Packard SmartArray

Контроллеры HP SmartArray и другое аппаратное обеспечение, использующее драйвер cciss, имеют другой интерфейс для управления SCSI-устройствами. Пользователи таких котроллеров могут обратится к аналогичному руководству здесь.

Как заставить HP Smart Array просканировать шину без перезагрузки Red Hat Enterprise Linux 4?

Для работы с контроллером HP Smart Array используется драйвер cciss. Если в работающую систему были добавлены диски, поддерживающие горячую замену, они не будут видны до тех пор, пока не пересканируется шина SCSI. Обычно это происходит при загрузке системы. Если перезагрузка системы невозможна или нежелательна, можно использовать следующий подход: инициировать сканирование шины командами драйвера. Для этого, отправьте команду rescan драйверу cciss:

А после того, как шина будет просканирована, можно добавить новое устройство в систему:

Вышеприведённый пример добавляет устройство с SCSI-номером 1, логическим номером 0, подключенное ко второй шине третьего контроллера (controller 3, bus 2, target 1, lun 0). Измените эти значения в соответствии с параметрами добавляемого устройства.

Как с помощью yum скачать пакет, не устанавливая его в системе?

Система: Red Hat Enterprise Linux 5

Решение:

Убедитесь, что пакет yum-downloadonly установлен в системе. Если нет, то этот пакет доступен в Red Hat Network (RHN).  Чтобы установить пакет yum-downloadonly в системе, зарегистрированной в Red Hat Network, выполните команду:

yum-downloadonly — это плагин, который может быть использован для загрузки пакетов из RHN или репозиториев yum, без установки их в системе. Проверьте содержимое файла /etc/yum/pluginconf.d/downloadonly.conf и убедитесь, что плагин разрешён:

Теперь, для примера, выполните следующую команду, которая загружает последнюю версию vsftpd, если она доступна, без установки в системе:

По-умолчанию, пакет сохраняется в каталог /var/cache/yum/<repo>/packages/. В нашем случае <repo> это rhel-i386-server-5. Чтобы сохранить пакет в другом каталоге, укажите параметр --downloaddir вместе с --downloadonly. Например:

В результате последняя доступная версия пакета vsftpd, если он не установлен в системе, будет загружена и сохранена в каталоге /tmp.

Чтобы скачать пакет установленный в системе, используйте команду yumdownloader. Например, в системе установлен пакет httpd-2.2.3-22.el5:

Чтобы скачать его, воспользуйтесь командой yumdownloader:

Пакет сохраняется в текущем каталоге. Чтобы указать другое место, добавьте ключ --destdir с указанием нужного каталога. За подробной информацией о возможностях и параметрах команды обращайтесь к странице руководства, доступной по команде man yumdownloader.

Прим.пер.: утилита yumdownloader входит в пакет yum-utils.

Как активировать маскарад в iptables?

Приведённые здесь инструкции активируют функциональность маскарада, но не обеспечивают полной настройки пакетного фильтра.

В нашем примере, мы будем использовать устройство eth0. Следующая команда iptables добавляет цель MASQUERADE в послемаршрутизационную цепь обработки пакетов (т.е. непосредственно включает маскарад):

После этого, нужно отредактировать файл /etc/sysctl.conf, чтобы настроить продвижение пакетов. Для этого измените строку:

на:

Если такой строки в файле нет, просто добавьте вышеприведённую строку, которая устанавливает значение параметра ip_forward равным 1 (единице). После этого, чтобы пересчитать файл конфигурации sysctl, запустите команду:

Как определить, выполняется ли текущая система в виртуальной машине?

В только-что загрузившейся системе, чтобы узнать, работает ли она в виртуальном окружении, достаточно проверить вывод команды dmesg. Ниже приведены примеры выполнения команды в разных виртуализационных средах:

Xen

VMWare

QEMU или KVM

Кроме того, можно также использовать команду dmidecode, для получения информации из системного BIOS. Например:

VMWare:

QEMU или KVM:

Как получить дополнительную информацию о производительности дисков?

Команда iostat предоставляет статистику операций ввода/вывода, но иногда администраторам требуется более детальная информация. В таких случаях может оказаться полезным файл /proc/diskstats. Ниже приведён пример выполнения команды cat /proc/diskstats:

Рассмотрим приведённый вывод:

Первые две колонки — это старший и младший номер устройства.

Третья колонка содержит имя устройства, после которого идут ещё 11 колонок.

Поле 1: количество выполненных операций чтения. Это общее число успешно завершённых операций чтения.

Поле 2: количество объединённых операций чтения.

Поле 3: количество считанных секторов. Это общее число успешно прочитанных секторов.

Поле 4: количество миллисекунд, затраченных на чтение. Это общее число миллисекунд, затраченных на операции чтения (измеряется от вызова __make_request() до end_that_request_last()).

Поле 5: количество выполненных операций записи. Это общее число успешно завершённых операций записи.

Поле 6: количество объединённых операций записи. Последовательные операции чтения и записи могут объединяться для повышения эффективности. Потому две операции считывания по 4K, могут стать одной операцией по считыванию 8K непосредственно перед передачей запроса диску. Таким образом, эти операции будут посчитаны (и выполнены) как одна операция ввода/вывода. Это поле показывает насколько часто происходит такая ситуация.

Поле 7: количество записанных секторов. Это общее число успешно записанных секторов.

Поле 8: количество миллисекунд, затраченных на запись. Это общее число миллисекунд, затраченных на операции записи (измеряется от вызова __make_request() до end_that_request_last()).

Поле 9: количество выполняемых операций ввода/вывода в текущий момент. Единственное поле, значение которого может уменьшаться до нуля. Увеличивается при передаче запросов соответствующей request_queue_t и уменьшается при их завершении.

Поле 10: количество миллисекунд, затраченных на выполнение операций ввода/вывода. Это значение возрастает, пока значение поля 9 не равно нулю.

Поле 11: взвешенное число миллисекунд, затраченных на выполнение операций ввода/вывода. При каждом начале, завершении,или объединении операций ввода/вывода, или при считывании этой статистики, это поле увеличивается на число выполняемых в текущий момент операций ввода/вывода (поле 9), умноженное на количество миллисекунд, затраченных на выполнение операций ввода/вывода, с момента последнего обновления данного поля. Это позволяет получить простую статистику как времени выполнения операций ввода/вывода, так и количества незавершённых операций, число которых может возрастать.

Прим.пер.: здесь рассматривается формат записи, относящийся к диску, не разделу. Для разделов представлены только 4 поля, аналоги описанных полей 1,3,5,7. Начиная с ядра 2.6.25 у разделов появился полный набор полей статистики.

Как настроить дополнительные маршруты в Red Hat Enterprise Linux?

Система: Red Hat Enterprise Linux 3.5, 4 and 5

Чтобы задать статические маршруты, используются файлы /etc/sysconfig/network-scripts/route-interface. Они считываются при инициализации сетевых интерфейсов (ниже описывается синтаксис файлов).

Существуют два варианта синтаксиса этих файлов. Первый — это аргументы к команде ip, второй состоит из директив “сеть/маска/шлюз”.

Синтаксис 1:

Если используется синтаксис с аргументами команды ip, скрипт ifup-route для каждой строки из файла выполняет команду ip route add. Строка в файле должна содержать все необходимые параметры для добавления маршрута. Например, чтобы задать маршрут по-умолчанию, файл должен содержать следующее:

В приведённом примере, X.X.X.X — это IP-адрес шлюза. Вторая строка задаёт другой статический маршрут, где X.X.X.X это тоже IP-адрес шлюза. Каждая строка в файле обрабатывается как отдельный маршрут.

Синтаксис 2:

Альтернативный вариант синтаксиса следующий:

Где X.X.X.X это IP-адрес шлюза. Следующие записи должны быть последовательно пронумерованы (например ADDRESS1=, NETMASK1=, GATEWAY1=). Обратите внимание, что нумерация должна идти последовательно без пропусков (после 0 должна идти 1, а не любое число, большее 0).