пятница, 15 апреля 2011 г.

Сетевая фильтрация пакетов на базе iptables



Чтобы настроить сетевой фильтр iptables в Debian выполняем следующие действия:

1. Создаем скрипт netfilter в каталоге /etc/init.d/:
user@server:~$ su
Пароль:
root@server:/home/igorek# nano /etc/init.d/netfilter

Преамбула:
необходимо настроить сетевой фильтр так чтобы по умолчанию были запрещены все соединения, как входящие, так и исходящие, кроме тех, которые имеют флаг ESTABLISHED. Это относится как к udp так и tcp пакетам.

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

2. Копируем правила в файл:


#!/bin/bash

# Местонахождение iptables
IPT=/sbin/iptables
# Номера непривилегированных портов
UNPRIPORTS="1024:65535"
FTPPORTS="49000:49500"

# Очистка цепочек правил iptables
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -X

# Используем политику запретить все (default deny)
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP

# разрешаем прохождение входящих  tcp/udp-пакетов принадлежащих к уже установленым соединениям
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT

# разрешаем прохождение исходящих tcp/udp-пакетов принадлежащих к уже установленым cоединениям
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state ESTABLISHED -j ACCEPT

# Разрешаем прохождение любого трафика по интерфейсу обратной петли
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Разрешаем использовать следующие порты:

# 1. УПРАВЛЕНИЕ СЕРВЕРОМ
# SSH на порте 5681.
# iptables -A INPUT -p tcp --dport 5681 -j ACCEPT
# SSH с port knocking и защитой от bruteforce.Размер пакета:
# icmp 113 байт (случайные данные)+8 байт (icmp заголовок)+ 20 байт (ip заголовок)
# ttl для пакета более 88 сек.

# Если пришёл icmp пакет длиной не 141 байт, то добавляем его ip в таблицу BLOCK для блокировки
iptables -A INPUT -p icmp --icmp-type echo-request -m length ! --length 141                    -m recent --name BLOCK --set
# Если пришел icmp пакет длиной 141 байт и временем жизни более 65, то добавляем его ip в таблицу OPEN
iptables -A INPUT -p icmp --icmp-type echo-request -m length   --length 141 -m ttl --ttl-gt 65 -m recent --name OPEN  --set
# Разрешаем доступ к порту SSH (22) для ip из таблицы OPEN в течении 20 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name OPEN  --rcheck --seconds 30 -j ACCEPT
# Блокируем доступ к порту SSH (22) для ip из таблицы BLOCK в течении 60 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 22 -m recent                      --name BLOCK --rcheck --seconds 60 -j DROP

# Webmin на порте 10000
# Разрешаем доступ к порту Webmin (22) для ip из таблицы OPEN в течении 20 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 10000 -m state --state NEW -m recent --name OPEN  --rcheck --seconds 1000 -j ACCEPT
# Блокируем доступ к порту Webmin (22) для ip из таблицы BLOCK в течении 60 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 10000 -m recent                      --name BLOCK --rcheck --seconds 60 -j DROP

# 2. СЛУЖЕБНЫЕ
# DNS
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # маленькие запросы
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # большие запросы
# Traceroute
iptables -A OUTPUT -p udp --dport 33200:33800 -m state --state NEW -j ACCEPT
# SSH
iptables -A OUTPUT -p tcp -m tcp --dport ssh --sport $UNPRIPORTS -j ACCEPT
# FTP в активном режиме
iptables -A OUTPUT -p tcp -m tcp --sport $UNPRIPORTS --dport ftp -j ACCEPT
iptables -A INPUT  -p tcp -m tcp --sport ftp-data --dport $UNPRIPORTS -j ACCEPT #! --syn

# HTTP
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Почта 25, 143, 587 порт
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 113 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --sport 143 -j ACCEPT
# iptables -A OUTPUT-p tcp -m state --state NEW -m tcp --sport 587 -j ACCEPT


# 3. ЗАДАЧИ СЕРВЕРА
# FTP сервер активный режим
iptables -A INPUT -p tcp -m state --state NEW -m tcp --sport $UNPRIPORTS --dport ftp -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport ftp-data --dport $UNPRIPORTS -j ACCEPT
# FTP сервер пассивный режим
iptables -A INPUT -p tcp -m state --state NEW,RELATED -m tcp --dport $FTPPORTS -j ACCEPT

# Почта 25, 110, 143, 465, 587, 993, 995 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# HTTP 80 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# HTTPS 443 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4949 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 2000 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT

# 4. ДРУГОЕ
# Разрешаем использовать ICMP пакеты (ping...)
iptables -A INPUT  -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# Записываем отброшенные пакеты в файл /var/log/ulog/syslogemu.log
#iptables -A OUTPUT -j ULOG
#iptables -A INPUT -j ULOG


Сохраняем!

Так как пока сервер не выполняет каких либо зада, а настраивается особенных правил для входящих соединений не применяется. Статья будет обновляться по мере необходимости.

3. Добавляем файлу права на исполнение:
root@mail:/home/igorek# chmod +x /etc/init.d/netfilter

4. Устанавливаем пакет sysv-rc-conf
root@mail:/home/igorek# aptitude install sysv-rc-conf

5. Редактируем загрузку служб в sysv-rc-conf. Устанавливаем крестик между netfilter и "S". После этого наш сетевой фильтр будет загружаться с системой.

6. Перезагружаемая на всякий случай и проверяем командой iptables -L:
root@mail:/home/igorek# iptables -L

За идею спасибо http://www.blogger.com/profile/16253756937078146873

среда, 30 марта 2011 г.

Настройка "гостевого" linux ядра 2.6.32.36 для виртуальной машины esxi 4.1 (VMv7)

готовые deb пакеты:
образ
заголовки


Преамбула:
имеем в распоряжении Entry level сервер HP ProLiant DL160 G6 с установленным ESXi 4.1 на внешнем флеш носителе для виртуализации аппаратных средств. В качестве гостевой ОС была выбрана Debian GNU\Linux 6.0 squeeze (на данный момент stable релиз). В этой статье мы рассмотрим процесс настройки ядра linux 2.6.32.36 с учетом ранее поставленных задач, особенностей виртуального окружения и доступных аппаратных средств. В нашем случае эта гостевая ОС выступает в качестве основы функционирования HTTP сервера  Apache (в дальнейшем планируется расширение до Apache Tomcat) и MTA exim с сопутствующим ПО.



Цель:
снизить время загрузки и соответственно аварийного простоя
обеспечить необходимый уровень безопасности
отключить поддержку лишнего оборудования (уменьшить размера ядра)
создать универсальный deb пакет, который можно будет использовать на других аналогичных VM с целью быстрого восстановления системы
Внимание:
это не руководство по командам bash, а обзор необходимых для оптимального функционирования параметров.

Итак начнем. Начнем с обзора оборудования и обзора настроек самой виртуальной машины. Как было сказано ранее в качестве среды виртуализации выбрана платформа для виртуализации ИТ-инфраструктуры предприятия VMware vSphere, (ранее VMware Infrastructure), на базе гипервизора ESXi, что позволяет управлять ресурсами виртуализированной компьютерной инфраструктуры.

Спецификация виртуальной машины:
Системные устройства:
- Процессор: Intel(R) Xeon(R) CPU E5620 @ 2.4GHz
- Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
- PCI bridge 1: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01) (prog-if 00 [Normal decode])
- PCI bridge: VMware PCI bridge (rev 02) (prog-if 01 [Subtractive decode])
- PCI bridge: VMware PCI Express Root Port (rev 01) (prog-if 00 [Normal decode])
- ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
- IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) (prog-if 8a [Master SecP PriP])
- Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
- System peripheral: VMware SVGA II Adapter (prog-if 00 [VGA controller])
- SCSI контроллер: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
- Память: 1024 Мб
Мультимедиа:
- Видеокарта: VGA compatible controller: VMware SVGA II Adapter (prog-if 00 [VGA controller])
Сеть:
- LAN: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
вывод команды lspci -v можно посмотреть здесь

Исходя из спецификации мы определили для виртуальной машины 1 виртуальное ядро процессора, 1024 MB оперативной памяти и одну сетевую карту, которая подключена к vSwitch.

Для виртуальной машины мы создали 3 HDD на SCSI контроллере LSI Logic Parallel, следующих размеров (подробнее тут):
SCSI(0;0) hard disk 1: 10GB для раздела "/" файловая система ext4
SCSI(0;0) hard disk 1: 20GB для раздела "/home" файловая система ext4
SCSI(0;0) hard disk 1: 20GB для раздела "/var" файловая система ext4

Причина того, что я выбрал именно ядро 2.6.32.36 заключается в том, что при установке open-vm-tools и модулей vmware их сборка проходит нормально, в отличии от более новых версий ядра.


Если лень читать то можно опробовать готовый конфиг при сборке ядра:
http://paste.org.ru/?ivu6v8
dmesg от ВМ:
http://paste.org.ru/?vdxytb

ПРОЦЕССОР:
Начинаем с настройки ядра с точки зрения установленного процессора. Переходим к параметрам ядра и в первую очередь к разделу "Processor type and features":
В ядре не включаем SMP.


[*] Tickless System (Dynamic Ticks)Данная настройка позволяет включать режим «прерывание таймера по запросу», что позволяет системе бездействовать большие промежутки времени и избавляет от ненужных(лишних) прерываний.
[*] High Resolution Timer Support
Позволяет замерять время выполнения кода с большой точностью. Не уверен что надо для сервера, но оставил как есть.
[*] Single-depth WCHAN output
Оставляем по умолчанию. Исчисляет простые значения wchan.
[*] Paravirtualized guest support
    [*] VMI Guest support (DEPRECATED)
    -*- Enable paravirtualization code
Оставляем по умолчанию. Опции полезны для гостевой ОС, запущенной под различными гипервизорами. Удаляем опции, которые относятся к KVM и Lguest.
[*] Memtest
Для теста оперативной памяти.
     Processor family (Core 2/newer Xeon)
В описании сказано что выбираем семейство процессоров Core 2/newer Xeon для новых Core 2 Xeon (Xeon 51xx и 53xx) ЦПУ. Можно отличить семейство CPU в /proc/cpuinfo. Новое это 6, а старое 15.
igorek@mail:~$ cat /proc/cpuinfo | grep family
cpu family : 6
[*] HPET Timer Support
Оставим. Возможно потребуется высокоточный таймер событий, правда не знаю где. Используется как правило в обработке аудио.
[*] Preemption Model (No Forced Preemption (Server))
Preemption (приоритетное прерывание обслуживания - ППО). В ядрах без ППО код выполняется вплоть до завершения. На серверах вам необходимо минимизировать любые и все возможные перепады в производительности, поэтому обычно и практикуется отключение ППО.
[*] Local APIC support on uniprocessors
Если у Вас в процессоре есть контроллер прерываний. Если же его нет, то ничего плохого от включения не произойдет. Проверяется через "cat /proc/cpuinfo | grep apic"
     [*] IO-APIC support on uniprocessors
Расширение контроллера прерываний. Как правило для многопроцессорных систем. Если же его нет, то ничего плохого от включения не произойдет.
[*] Machine Check / overheating reporting
Machine Check Exception позволяет процессору информировать ядро в случае перегрева или других процессах, которые относятся к ЦПУ.
      [*] Intel MCE features
для специальных инструкций MCE процессоров Intel.
<*> /dev/cpu/microcode - microcode support
    [*] Intel microcode patch loading support
Позволяет обновлять микрокод конкретного процессора. Возможно понадобиться, поэтому добавляем.
     x86 High Memory Support (4GB)
На данный момент мы выделили для VM 1 GB оперативной памяти, но не исключено что мы изменим это значение в будущем в большую сторону.
     Memory model (Flat Memory)
Значение по умолчанию и изменять его мы не будем.
[*] Enable KSM for page merging
Периодически сканирует память на присутствие повторяющихся страниц, и заменять одной, с целью снижения потребления памяти. Полезная опция для KVM и других "дублирующих" приложений. Оставил на всякий случай.
(65536) Low address space to protect from user allocation
[*] Enable recovery from hardware memory errors
Требуется поддержка технологии ECC и она у нас есть.
[*] Allocate 3rd-level pagetables from highmem .
[*] Check for low memory corruption
[*] Reserve low 64K of RAM on AMI/Phoenix BIOSen
Так как VM использует биос Phoenix, то будет логично выставить эту опцию.
[*] MTRR (Memory Type Range Register) support
Ускоряет до 2,5 раз скорость передачи изображений видеокарте
    [*] MTRR cleanup support
    [*] x86 PAT support
[*] Enable seccomp to safely compute untrusted bytecode
Эта опция не выставляется только для встроенных систем.
     Timer frequency (100 HZ)
Таймер прерываний ядра сервера установлен на 100 Гц (CONFIG_HZ=100, CONFIG_HZ_100=y), что означает, что он принимает 100 прерываний своей деятельности в секунду. С другой стороны на это можно взглянуть так: ядро 100 раз в секунду проверяет есть ли у процессора какие-либо задачи. Для сервера необходимая настройка.

УПРАВЛЕНИЕ ПИТАНИЕМ:
Переходим к разделу "Power management and ACPI options":


[*] Power Management support
Включаем управление питанием.
[*] Run-time PM core functionality
Пока оставим по умолчанию generic ядра. Позволяет переводить устройства I/O в режим сниженного энергопотребления или ожидания. В принципе управляется самим esxi, поэтому отключаем CPU Frequency scaling. Если необходимо провести настройку управления питанием на хосте esxi в vSphere клиенте заходим в "Power Managment" и выбираем необходимую политику из четырех. Все это достигается за счет технологии Enhanced Intel SpeedStep®.
-*- CPU idle PM support
Этой общий фреймворк, который позволяет системе поддерживать програмно-контролируемое управление простоем процессора.

Переходим к подразделу "ACPI (Advanced Configuration and Power Interface) Support" и выбираем следующие опции:


[*] AC Adapter
Контроль напряжения сети
[*] Button
возможность обработки нажатия на кнопок питания, sleep (спящий режим)
[*] Processor
Когда процессор не используется, перевести его в режим пониженного энергопотребления
[*] Thermal Zone
Защита от перегрева. Без этой защиты процессор может "сгореть на работе"
<*> Container and Module Devices

ШИНА:
Переходим к разделу "Bus options (PCI etc.)":




[*] PCI support
У нас есть шина PCI.
     PCI access mode (Any)  --->
Считается оптимальной настройкой.
[*] Support for DMA Remapping Devices (EXPERIMENTAL)
Эта настройка включает опцию "Message Signaled Interrupts (MSI and MSI-X)".
[*] PCI Express support
У нас есть устройства PCI-e. Убедится в этом можно через команду "lspci -n".
[*] Root Port Advanced Error Reporting support
Отслеживаем ошибки устройств через dmesg. В принципе если их нет, то можно и отключить.
[*] Message Signaled Interrupts (MSI and MSI-X)
Улучшенное выполнение прерываний на PCI-e.
<*> PCI Stub driver
Необходимо для виртуализации, в частности для резервирования PCI устройства при его определении к гостевой ОС.
[*] PCI IOV support
Виртуализация I/O шины PCI.
[*] ISA support
Есть шина ISA поэтому оставляем.
<*> Support for PCI Hotplug  --->
     <*> SHPC PCI Hotplug driver
В виртуальных машинах используется драйвер SHPC PCI для горячей замены.

ФАЙЛОВЫЕ СИСТЕМЫ:
Переходим к разделу "File systems":



<*> The Extended 4 (ext4) filesystem
Используем для системного раздела
     [*] Ext4 extended attributes
          [*] Ext4 POSIX Access Control Lists
Поддержка ACL - расширенного механизма разграничения доступа
          [*] Ext4 Sequrity Labels
Поддержка различных моделей секретности
[*] XFS filesystem support
Используем эту файловую систему на разделах, где будем размещать файловые архивы (если такие будут). Опция "XFS Realtime" разрешает поддержку realtime subvolume в XFS, что позволит в дальнейшем конфигурировать области памяти, обеспечивающие deterministic performance для приложений реального времени. Опция "XFS Quota" позволит, как нетрудно догадаться, поддержку лимитов на размер доступного дискового пространства для пользователей и групп.
          [*] XFS Quota support
Поддержка квот для пользователей и групп.
          [*] XFS POSIX ACL support
Поддержка ACL - расширенного механизма разграничения доступа
          [*] XFS Realtime subvolume support
Следующие опции по желанию, я оставил.
[*] Dnotify support
-*- Inotify file change notification support
[*] Inotify support for userspace
[*] Quota support
     [*] Report quota messages through netlink interface
     [*] Report quota warnings to console
<*> Quota format v2 support
<*> Kernel automounter version 4 support
<M> FUSE (Filesystem in userspace) support
     <M> Character device in Userspace support
Этот параметр оставлен на всякий случай, возможно захочу смонтировать какую нибудь sshfs.

Переходим к подразделу "Caches":
<M> General filesystem local caching manager
     <M> Filesystem caching on files

Переходим к подразделу "CD-ROM/DVD Filesystems":
<*> ISO 9660 CDROM file system support
На ESXi есть как эмуляция CD через iso файлы так и подключение к хостовому  устройству и даже к удаленному.
ФС для компакт - дисков. Стандартная ФС для дисков с данными. Лучше включить эту опцию в ядро. т.к. модули в ядрах 2.4 и 2.6 называются по разному.
[*] Microsoft Joliet CDROM extensions
Позволяет записывать диски так, чтобы русские файлы нормально отображались при любой кодировке.
[*] Transparent decompression extension
Прозрачное сжатие данных. Позволяет читать диски с расширением RockRidge.
     <*> UDF file system support
Для дисков записанных в пакетном режиме. Используется для работы с CD как с дискетой. Этот драйвер используется только для чтения этих дисков. Для записи дисков Вам нужно будет наложить заплатку на ядро с поддержкой пакетной записи и установить пакет udftools. Как подключать диски в режиме записи см. в подсказке опции Packet writing
На ESXi есть как эмуляция CD через iso файлы так и подключение к хостовому  устройству и даже к удаленному.

Переходим к подразделу "Pseudo filesystems":
-*- /proc file system support
Виртуальная ФС, не занимает место на диске. Нужна для просмотра и изменения параметров ядра, оборудования ,процессов.
     [*] /proc/kcore support
-*- Virual memory file system support
[*] Tmpfs POSIX Access Control Lists
[*] HugeTLB file system support
[*] Userspace-driven configuration filesystem

В подразделе NLS все отмечено в виде модулей. В принципе можно отметить только NLS UTF-8.

ДРАЙВЕРЫ УСТРОЙСТВ:
Теперь необходимо настроить "навесное" оборудование виртуальной машины, поэтому переходим к разделу "Device Drivers".

Есть разные способы для определения оборудования и необходимых драйверов, к примеру команда 'lspci -v'. Так же можно использовать достаточно удобный скрипт:

#!/bin/bash
#
# find_all_modules.sh
#
for i in `find /sys/ -name modalias -exec cat {} \;`; do
    /sbin/modprobe --config /dev/null --show-depends $i ;
done | rev | cut -f 1 -d '/' | rev | sort -u


В подразделе "Generic Driver Options" выбираем следующие параметры:
()  path to uevent helper
[*] Create a kernel maintained /dev tmpfs (EXPERIMENTAL)
     [*] Automount devtmpfs at /dev
Если добавим то не будет возникать противной ошибки mounting none on /dev failed. Безобидная но раздражает.
[*] Select only drivers that don't need compile-time external firmware
[*] Prevent firmware from being built
-*- Userspace firmware loading support
Без него возможно не компилируется ядро.

Включаем подраздел "Connector - unified userspace <-> kernelspace linker"
     [*] Report process events to userspace
Без него возможно не компилируется ядро.

Включаем подраздел "Parallel port support":
     <*> PC-style hardware

В подразделе "Plug and Play support" оставляем следующие опции:
[*] ISA Plug and Play support
[*] Plug and Play BIOS support
[*] Plug and Play BIOS /proc interface

В подразделе "Block devices" включаем следующие опции:
<*> Loopback device support

Для того чтобы включить поддержку параллельного SCSI контроллера LSI и привода CDROM/DVDROM в подразделе "SCSI device support" включаем следующие опции:
-*- SCSI device support
[*] legacy /proc/scsi/ support
Некоторые пакеты требуют этой настройки. Лучше оставить.
<*> SCSI disk support
<*> SCSI CDROM support
     [*] Enable vendor-specific extensions (for SCSI CDROM)
<*> SCSI generic support
Общая поддержка для SCSI.
[*] Probe all LUNs on each SCSI device
Оптические диски и USB автоматически доступны через hal/dbus.
[*] Verbose SCSI error reporting (kernel size +=12K)
[*] SCSI logging facility
[*] Asynchronous SCSI scanning
Позволяет асинхронно сканировать SCSI устройства без определенного порядка, что позволяет более быстрым устройствам не задерживаться при ожидании более медленных.
     SCSI Transports --->
     -*- Parallel SCSI (SPI) Transport Attributes
[*] SCSI low-level drivers

В подразделе "Serial ATA (prod) and Parallel ATA (experimental) drivers" включаем:
[*] Verbose ATA error reporting
[*] SATA Port Multiplier support
[*] ATA SFF support
     <*> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support
<*> Generic ATA support

В подразделе "Multiple devices driver support (RAID and LVM)":
<*> Device mapper support
Будет меньше заморочек :-)

И в подразделе "Fusion MPT device support":
<*> Fusion MPT ScsiHost drivers for SPI
(128) Maximum number of scatter gather entries (16 - 128)
<*> Fusion MPT misc device (ioctl) driver

Самое простое добавить поддержку сетевой карты Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01) в ядро. Для этого в подразделе" Network device support"  отметим следующие опции как "*", все остальное отключаем для лучшего результата:
Ethernet (1000Mbit)  --->
     [*] Intel(R) PRO/1000 Gigabit Ethernet support

Еще легче настроить клавиатуру, мышь, спикер в виртуальной машине. Для этого в подразделе "Input device support" отмечаем следующие опции:
-*- Generic input layer (needed for keyboard, mouse, ...)
-*- Mouse interface
[*] Provide legacy /dev/psaux device
Необходимо для некоторых пакетов.
(1024) Horizontal screen resolution
(768) Vertical screen resolution
<*> Event interface
Включение evdev отличная идея :-)
-*- Keyboards --->
[*] Mice --->
     <*> PS/2 mouse
[*] Miscellaneous devices
     <*> PC Speaker support
     <*> User level driver support
Hardware I/O ports --->
     <*> Raw access to serio ports

В подразделе "Character devices":
[*] Support for binding and unbinding console drivers
-*- Unix98 PTY support
     [*] Support multiple instances of devpts
[*] Legacy (BSD) PTY support
(256) Maximum number of legacy PTY in use
Без этой настройки при старте терминала будет возникать нефатальная ошибка "Out of pty devices." Можно открыть до 256 терминалов без этой ошибки.
{*} Hardware Random Number Generator Core support
     <M> Intel HW Random Number Generator support
[*] HPET - High Precision Event Timer
     [*] Allow mmap of HPET
Необязательно для сервера, но я оставил.
<*> Hangcheck timer
Отслеживание зависаний системы. При обнаружение будет выведено предупреждение или перезагружена система.
<*> TPM Hardware Support  --->
     <*> TPM Interface Specification 1.2 Interface
В generic ядре эти модули автоматически завелись, поэтому я вшил их в ядро.

Для графической системы включаем следующие опции в подразделе "Graphics support". Все это пригодится для работы в консоли виртуальной машины esxi и не более:
<*> Support for frame buffer devices  --->
     [*] Enable firmware EDID
     -*- Enable Video Mode Handling Helpers
          <*> VGA 16-color graphics support
          <*> Userspace VESA VGA graphics support
           [*] VESA VGA graphics support
     [*] Bootup logo --->
           [*] Standard 16-color Linux logo
Если в консоли увидим пингвинчика TUX то все работает нормально. Честно сказать более 16 цветов у меня не заработало. Если кто-то знает как лучше настроить, комментируйте.

Для включения поддержки USB накопителей включаем в подразделе "USB support":
<*> Support for Host-side USB
[*]     USB announce new devices
     [*] USB device filesystem (DEPRECATED)
     [*] USB device class-devices
    <*> USB Monitor
    <*> EHCI HCD (USB 2.0) support
    <*> UHCI HCD (most Intel and VIA) support
    <*> USB Mass Storage support

В подразделе "RTC" настраиваем часы реального времени следующим образом:
[*] Set system time from RTC on startup and resume
(rtc0)RTC used to set the system time
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
<*> PC-style 'CMOS'

В подразделе " DMA Engine support" включаем следующие опции:
Асинхронная передача данных для сетевых и RAID устройств без привлечения CPU. Может привести к незначительному ускорению. Разницы не заметил, но оставил следующие опции.
<*> Intel I/OAT DMA support
[*] Network: TCP receive copy offload
[*] Async_tx: Offload support for the async_tx api

В подразделе "Userspace I/O drivers":
<*> Userspace I/O platform driver
<*> Userspace I/O platform driver with generic IRQ handling

Смело отключаем следующие разделы, так как они не нужны в рамках задач и оборудования нашей виртуальной машины:

  • Memory Technology Device (MTD) support
  • Misc devices
  • ATA/ATAPI/MFM/RLL support
  • Multiple devices driver support (RAID and LVM)
  • IEEE 1394 (FireWire) support
  • I2O device support
  • Macintosh device drivers
  • ISDN Support
  • Telephony support
  • SPI support
  • I2C support
  • PPS support
  • GPIO support
  • Dallas's 1-wire support
  • Power supply class support
  • Hardware Monitoring support
  • Watchdog Timer Support
  • Sonics Silicon Backplane
  • Multifunction device drivers
  • Voltage and Current Regulator Support
  • Multimedia support
  • Sound card support
  • HID Devices
  • USB Support
  • Ultra Wideband devices
  • MMC/SD/SDIO card support
  • Sony MemoryStick card support
  • LED Support
  • Accessability support
  • InfiniBand support
  • EDAC (Error Detection And Correction) reporting
  • Auxiliary Display support
  • TI VLYNQ
  • Straging drivers
  • X86 Platform Specific Device Drivers

НАСТРОЙКА СЕТИ:
С настройкой драйверов для оборудования все. Переходим к более общим настройкам. Вполне логично определить настройки для сети. Огромное поле для деятельности, тем не менее нет необходимости наворачивать функционал и каждый выбирает то, что ему надо. Я не буду описывать смысл настроек, которые я сделал, просто опишу конфигурацию (конфигурация только для включенных настроек, все остальное выключено):

Networking options  --->
<*> Packet socket
Эта опция необходима для приложений, работающих непосредственно с сетевыми устройствами, например: tcpdump или snort.
[*] Packet socket: mmapped IO
<*> Unix domain sockets
[*] TCP/IP networking
     [*] IP: multicasting
     [*] IP: advanced router
          Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure) (FIB_HASH)
     [*] IP: policy routing
     [*] IP: equal cost multipath
     [*] IP: verbose route monitoring
     [*] IP: multicast routing
          [*] IP: PIM-SM version 1 support
          [*] IP: PIM-SM version 2 support
     [*] IP: TCP syncookie support (disabled per default)
     [*] Large Receive Offload (ipv4/tcp)
    <*> INET: socket monitoring interface
     [*] TCP: advanced congestion control
     [*] TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)
     -*- Security Marking
     [*] Network packet filtering framework (Netfilter)
Эта опция необходима, если вы собираетесь использовать компьютер в качестве сетевого экрана (firewall).

ОБЩИЕ НАСТРОЙКИ:
Следующий раздел "Firmware Drivers":



[*] Export DMI identification via sysfs to userspace

Не совсем логично, но теперь настройки для "General setup":




[*] Prompt for development and/or incomplete code/drivers
     Kernel compression mode (Gzip)
[*] Support for paging of anonymous memory (swap)
[*] System V IPC
[*] POSIX Message Queues
[*] BSD Process Accounting
     [*] BSD Process Accounting version 3 file format
[*] Export task/process statistics through netlink (EXPERIMENTAL)
     [*] Enable per-task delay accounting (EXPERIMENTAL)
     [*] Enable extended accounting over taskstats (EXPERIMENTAL)
           [*] Enable per-task storage I/O accounting (EXPERIMENTAL)
[*] Auditing support
     [*] Enable system-call auditing support
     RCU Subsystem  --->
<*> Kernel .config support
[*] Enable access to .config through /proc/config.gz
(17) Kernel log buffer size (16 => 64KB, 17 => 128KB)
-*- Kernel->user space relay support (formerly relayfs)
-*- Namespaces support
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
     Choose SLAB allocator (SLUB (Unqueued Allocator))
[*] Profiling support (EXPERIMENTAL)
<M> OProfile system profiling (EXPERIMENTAL)
[*] Kprobes

Раздел "Enable loadable module support" включает следующие опции:



[*]   Module unloading

Раздел "Enable the block layer":



[*] Support for large (2TB+) block devices and files
Обязательная опция если используем ext4!
[*] Block layer SG support v4
На всякий случай.
[*] Block layer data integrity support
     IO Schedulers  --->
     <*> Anticipatory I/O scheduler
     <*> Deadline I/O scheduler
     <*> CFQ I/O scheduler
     Default I/O scheduler (Deadline)
Для сервера рекомендуется именно этот шедулер.

Раздел "Executable file formats / Emulations":



[*] Kernel support for ELF binaries
[*] Write ELF core dumps with partial segments
<*> Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries

Теперь настройки в разделе "Kernel hacking":
[*] Show timing information on printks
Необходимо для функционирования dmesg.
[*] Enable __deprecated logic
[*] Enable __must_check logic
(1024) Warn for stack frames larger than (needs gcc 4.4)
[*] Magic SysRq key
[*] Strip assembler-generated symbols during link
[*] Enable unused/obsolete exported symbols
Необходимая настройка для vmware продуктов.
-*- Debug Filesystem
[*] Kernel debugging
     [*] Detect Soft Lockups
     [*] Detect Hung Tasks
     [*] Collect scheduler debugging info
     [*] Collect scheduler statistics
     [*] Collect kernel timers statistics
[*] Sysctl checks
[*] Tracers  --->
     [*] Trace boot initcalls
     [*] Support for tracing block io actions
[*] Filter access to /dev/mem
[*] Enable verbose x86 bootup info messages
-*- Early printk
[*] Write protect kernel read-only data structures
[*] Allow gcc to uninline functions marked 'inline'

ТЕСТИРУЕМ СИСТЕМУ:


ПРОЦЕССОР: исчисление числа Pi длиной 1 МБ
root@mail:/home/igorek# bash -c "time pi 1048576 >/dev/null"
real  0m5.758s
user 0m5.720s
sys   0m0.030s

RAM: производительность 

ramspeed [Type: Scale - Benchmark: Floating Point]. Average: 7198.57 MB/s
ramspeed [Type: Copy  - Benchmark: Floating Point]. Average: 7325.55 MB/s
ramspeed [Type: Add    - Benchmark: Floating Point]. Average: 8064.08 MB/s
ramspeed [Type: Triad  - Benchmark: Floating Point]. Average: 8013.32 MB/s
ramspeed [Type: Average - Benchmark: Floating Point]. Average: 7614.96 MB/s

ramspeed [Type: Scale - Benchmark: Integer]. Average: 6780.25 MB/s
ramspeed [Type: Copy  - Benchmark: Integer]. Average: 6855.60 MB/s
ramspeed [Type: Add    - Benchmark: Integer]. Average: 7536.62 MB/s
ramspeed [Type: Triad  - Benchmark: Integer]. Average: 7465.75 MB/s
ramspeed [Type: Average - Benchmark: Integer]. Average: 7133.40 MB/s

на сайте phoronix
сравнение с lenny


HDD: производительность 

по результатам синтетического теста phoronix iozone 3.347
Запись (размер файла 2 GB):
4Kb   - 84.69 MB/s
64Kb - 65.65 MB/s
1MB  - 65.80 MB/s
Чтение (размер файла 2 GB):
4Kb   - 114.95 MB/s
64Kb - 109.00 MB/s
1MB  - 119.28 MB/s

сравнение с lenny

тесты в реальных условиях:
1. копирование большого архива vmail.tgz - размер 2195.52 МБ

igorek@mail:~$ time cp vmail.tgz ./TEMP/
real 1m12.678s
скорость: 30,2 Мб/с

2. копирование раздела /usr с тучей мелких файлов размер - 1362 МБ
root@mail:/# time cp -R /usr /TEMP/
real 4m21.516s
скорость: 5,20 Мб/с


Объяснение столь низкой скорости достаточно простое:
1. на сервере HP ProLiant DL160 G6 используется RAID контроллер: HP SmartArray P410 8 - internal channel SAS 6G RAID (0,1,1+0), 256 MB cache, который требует для включения режима Write-back специальную батарейку BBWC=Battery Backed Write Cache. Батарейки нет. Поэтому скорость записи ограничена физической способностью самого жесткого диска.

В сервере стоят 2 жестких диска HDD 500GB 7,2K LFF SATA Midline Pluggable WCASYE171760, которые работаю в режиме RAID 1, что тоже снижает скорость записи. Поэтому сервер так проседает при записи.


APACHE:


синтетический тест phoronix apache 1.1.1
8 728 запросов
результат на сайте phoronix
сравнение с lenny