Архив метки: FreeBSD

Мониторинг в ОС FreeBSD. Как искать слабые места в системе

1. top. Она показывает общие сведения о процессоре, памяти и процессах, если возникают вопросы по производительности,  её запускают первой, чтобы выявить аномалии в системе. У утилиты top есть параметры, которые облегают жизнь, их мы набираем в top’e когда он запущен:

S — показать системные процессы, по умолчанию они не показываются

u — и имя пользователя, например u mysql покажет процессы запущенные от пользователя mysql

o — используем для сортировки, возможные параметры — pri, size, res, cpu, time, threads

m — переключение между режимами отображения нагрузки и ввода-вывода

k — завершить процесс, ввод pid процесса

r — изменить приоритет процесса, вводим pid процесса

n — отображать статистику по определённому процессу

a — показывает абсолютные запущенных процессов

top -n 3 — показывает самые ресурсоёмкие приложения в данный момент

2. gstat — показывает использование дисков

gstat -a — используется для вывода только активных устройств

3. vmstat — показывает состояние виртуальной памяти и буфера.

vmstat 5 — отображает статистику раз в пять секунд

vmstat -z — показывает состояние буфера

vmstat -i — показывает состояние прерываний

4. iostat — выводит статистику по I/O усройств

iostat -d -w5 — показывать информацию по дискам, с периодичностью в пять секунд безостановочно

iostat -dx -w5 — показывает расширенную статистику

5. systat — отображает различные параметры системы.

systat -vmstat 1 — отображает суммарную системную статистику

systat -netstat 1 — показывает активные сетевые соединения

systat -ifstat 1 — отображает нагрузку сетевых интерфейсов

systat -tcp 1 — отображает статистику tcp-соединения, возможен просмотр по icmp, ip, icmp6, ip6

systat -iostat 1 — отображает нагрузку на процессов, дисковую подсистему

systat -swap 1 — показывает загрузку файла подкачки

6. netstat — показывает активные сетевые соединения.

netstat -w 1 — количество пакетов в настоящее время

netstat -ibt — вывод сетевых интерфейсов с разбивкой по IP адресам, отображает объём трафика, количество ошибок, коллизий.

netstat -rn — отображает таблицу маршрутизации

8. diskinfo -t ad0 – показывает информацию по диску, и делает тест на дисковую производительность.

9. sysctl — позволяет посмотреть параметры в системы и внести изменения, такие как стек tcp/ip, виртуальной памяти.

sysctl -a — показывает все параметры

sysctl kern.ipc.numopensockets — показывает количество открытых сокетов

sysctl kern.openfiles — показывает количество открытых файлов

10. df — утилита, которая показывает свободное место на дисках.

df -h — отображает слайсы, и свободноезанятое место.

df -i — показывает количество занятых инодов.

11. fstat — показывает список открытых файлов.

fstat |grep http| wc -l — показывает список открытых файлов по процессу http

12. sockstat — отображает информацию о сокетах, сетевых и файловых.

sockstat -l — список портов открытых на прослушивание

sockstat -c список установленных соединений

sockstat -4, -6 — по протоколу ipv4 или ipv6

13. lsof — показывает информацию от откртых сокетах, файлах и сетевых соединениях.

lsof -i -n — показывает открытые интернет-соединения

lsof -i -n |grep ESTABLISHED — показывает открытые, и установленные сетевые соединения

14. ps auxww|grep имяpidот_кого_запущено — позволяет получить информацию по интересующему процессу.

15. mount — показывает смонтированные разделы.

16. swapinfo — показывает информацию о файле подкачки.

17. iftop – которая показывает статистику по сетевым интерфейсам, к при меру:

iftop -i em0

18. tunefs -p /tmp – показывает информацию о файловой системе.

19. uname -a — показывает информацию о системе, ядре.

20. date — выводит текущую дату и время.

21. w — показывает кто, откуда, во сколько зашёл в систему.

22. last — показывает историю входов в систему, и последнюю перезагрузку.

23. uptime — показывает сколько система работает с момента последней перезагрузки.



2019-08-12T16:11:25
FreeBSD

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

Хотелось бы поговорить с вами на актуальную нынче тему, а именно — про DDoS и методы борьбы с ним. Рядовые администраторы знают, что это такое, а вот для большинства вебмастеров это аббревиатура остается загадкой до того момента пока они на личном опыте не столкнуться с этой неприятностью.

Итак, DDoS — это сокращение от Distributed Denial of Service (распределенный отказ в обслуживании), когда тысячи зараженных компьютеров отправляют на сервер множество запросов, с которыми он, в последствии, не может справиться. Целью DDoS атаки является нарушение нормальной работы сервера, а в дальнейшем — «падение» сайта или сервера целиком.

Как же от этого защититься? К сожалению, универсальных мер защиты от DDoS-атак до сих пор не существует. Тут необходим комплексный подход, который будет включать меры аппаратного, программного и даже организационного характера.

 

Черные дыры

 

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

 

Настройка стека IP в системах UNIX на оптимальную производительность

 

На размер буфера приема и передачи TCP напрямую влияет параметр размера TCP окна. Увеличенный размер окна позволит более эффективно передавать данные, особенно при интенсивной передаче, такой как FTP и HTTP. Значение по умолчанию не является оптимальным и должно быть увеличено до 32768 байт. Это значение не должно быть более 64Кб, если вы не знаете об ограничениях RFC1323 и RFC2018, и если нет поддержки с обеих сторон.

 

sysctl -w net.inet.tcp.sendspace=32768

sysctl -w net.inet.tcp.recvspace=32768

 

Очистка ARP

 

Существует возможность, что атакующий создаст нехватку ресурсов или уменьшение производительности заполнив кэш маршрутизации IP с помощью неправильных записей в ARP таблице. Этот параметр рекомендуется выставить в 20 минут по умолчанию.

 

sysctl -w net.link.ether.inet.max_age=1200

 

Маршрутизация отправителя:

 

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

 

sysctl -w net.inet.ip.sourceroute=0

sysctl -w net.inet.ip.accept_sourceroute=0

 

Установка TIME_WAIT

 

На загруженном web сервере многие сокеты могут задерживаться в состоянии TIME_WAIT. Это вызвано неправильно написанными клиентскими программами, которые неправильно закрывают сокеты. Это так же может быть использовано для DDoS атак.

 

Нет рекомендаций по настройке.

 

Ответ на широковещательный ECHO

 

Эти атаки работают с помощью отправки сообщения ICMP 8 0 (запрос ECHO) на широковещательный адрес с фальшивого адреса. Некоторые стеки IP ответят по умолчанию на такие сообщения. Это должно быть отключено. Более того, если хост является фаерволом или роутером, то он не должен пропускать прямые широковещательные запросы.

 

sysctl -w net.inet.icmp.bmcastecho=0

 

Другие пробы с помощью широковещания

Существуют 2 вида проб. Запрос маски адреса может быть использован для определения размера блока сети и установки диапазона для дальнейших проб. Широковещательный запрос временного штампа (timestamp) – еще одно средство выявления хостов и определения их операционных систем (fingerprinting)

sysctl -w net.inet.icmp.maskrepl=0



2019-08-08T16:24:48
FreeBSD

🇲🇺 Денис Колисниченко FreeBSD от новичка к профессионалу скачать pdf

Материал ориентирован на последние версии операционных систем FreeBSD, РУС-BSD, OpenBSD. С позиции типичного пользователя BSD показано, как самостоятельно настроить и оптимизировать эту операционную систему. Особое внимание уделяется повседневным задачам администратора. Рассмотрено резервное копирование, настройка сетевых сервисов, организация RAID-массивов (CCD и graid), борьба с рекламными баннерами и спамом (Rejik, squidGuard), анализ журналов сервера, подсчет трафика, мониторинг сети и др. Подробно описана настройка почтового сервера (Postfix), Web-сервера (Apache) в связке с интерпретатором PHP и сервером баз данных MySQL, серверов DNS/DHCP/FTP и других сетевых служб. Читать →

Установка Nginx на FreeBSD

Как установить Nginx на FreeBSD?

Вы можете установить его по умолчанию с помощью команды:

pkg install nginx

Но поскольку я предпочитаю, чтобы модуль gzip_static включал gzip-файлы «на лету», я бы скорее установил, скомпилировав его из портов, мне нравится эта возможность, что я в основном наслаждаюсь Arch Linux и Gentoo. Читать →

Установка DHCP сервера на FreeBSD

Установка ISC DHCP Server

Получаем доступные версии DHCP-сервера:

pkg search "isc-dhcp.*-server"

Устанавливаем самый свежий пакет:

pkg install isc-dhcp44-server-4.4.1_2

 Или установка ISC DHCP Server из коллекции портов

Если необходимо, DHCP-сервер можно собрать из портов.

Обновляем коллекцию портов:

portsnap fetch update

Если коллекция портов используется впервые, получаем ее актуальную версию:

portsnap fetch extract

Получаем доступные версии DHCP-сервера:

echo /usr/ports/net/isc-dhcp*-server

Устанавливаем:

cd /usr/ports/net/isc-dhcp44-server 

make install clear

Настройка ISC DHCP Server

Редактируем основной файл конфигурации:

mcedit /usr/local/etc/dhcpd.conf

В конфигурации сервера необходимо задать параметры, выделенные жирным шрифтом.

# DNS серверы

option domain-name-servers 192.168.100.1;



# Время в секундах, по истечению которого клиент должен запросить продление аренды

default-lease-time 1200;



# Время аренды IP адреса в секундах

# Клиент должен освободить IP-адрес, если в течение заданного времени аренду продлить не удалось

# Если аренда не продлена, сервер может выдать этот адрес другому клиенту

max-lease-time 72000;



# Выдавать клиенту новый адрес, если запрошенный клиентом адрес не входит в пул сервера

authoritative;



# Источник, который будет указан при отправке сообщений в Syslog

log-facility local7;



# Декларация подсети

subnet 192.168.100.0 netmask 255.255.255.0 {

  # Пул динамических адресов

  range 192.168.110.5 192.168.100.200;

  # Шлюз

  option routers 192.168.100.1;

}


Настройка логов для ISC DHCP Server

Редактируем syslog.conf:

mcedit /etc/syslog.conf

Сохраняем сообщения о присвоении адресов в dhcpd.log, предупреждения и ошибки дублируем в messages.

Добавляем следующие строки:

!dhcpd

*.info                                          -/var/log/dhcpd.log

!*


Задаем параметры ротации.

Проверяем, поддерживается ли вашей системой newsyslog.conf.d

ls /etc/newsyslog.conf.d && echo ok

Если в вашей системе отсутствует папка newsyslog.conf.d, редактируем newsyslog.conf:

mcedit /etc/newsyslog.conf

Если папка newsyslog.conf.d имеется, создаем папку с тем же именем в /usr/local/etc:

mkdir /usr/local/etc/newsyslog.conf.d

Создаем файл c правилами ротации логов:

mcedit /usr/local/etc/newsyslog.conf.d/isc-dhcp-server

Ежедневная ротация в полночь с сохранением логов за неделю:

/var/log/dhcpd.log                      600  7     *    @T00  JC

Создаем лог-файл:

touch /var/log/dhcpd.log

Перезагружаем конфигурацию syslogd:

service syslogd reload

Запуск ISC DHCP Server

Редактируем rc.conf:

mcedit /etc/rc.conf

Включаем запуск ISC DHCP Server, и задаем сетевые интерфейсы, обслуживаемые нашим сервером:

dhcpd_enable="YES"

dhcpd_ifaces="em1"


Запускаем dhcpd:

service isc-dhcpd start

В случае успешного запуска видим следующий текст:

Internet Systems Consortium DHCP Server 4.4.1

Copyright 2004-2018 Internet Systems Consortium.

All rights reserved.

For info, please visit https://www.isc.org/software/dhcp/

Wrote 1 leases to leases file.

Listening on BPF/em1/00:0c:29:09:b8:7a/192.168.100.0/24

Sending on   BPF/em1/00:0c:29:09:b8:7a/192.168.100.0/24

Sending on   Socket/fallback/fallback-net


Если ошибок при запуске не возникло, проверяем, раздаются ли IP-адреса.

 

Проверяем лог-файл:

cat /var/log/dhcpd.log

 



Использование SSD с FreeBSD

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

Эти инструкции написаны для FreeBSD 10.X и более поздних версий.





AHCIAdvanced Host Controller Interface – является стандартом для дисководов и контроллеров. Он предлагает расширенные функции, но для наших целей важной частью является то, что включение AHCI в BIOS обычно дает 5-15% увеличения производительности. Не все контроллеры предлагают AHCI; проверьте свой набор микросхем и BIOS.
TRIMБольшинство SSD поддерживают функцию TRIM. TRIM – это просто обновление статуса: когда файловая система удаляет блок, он также уведомляет устройство о том, что блок больше не используется. Затем прошивка SSD может выполнять выравнивание в фоновом режиме. Без TRIM он не сможет определить, все еще используется этот блок. TRIM не требует AHCI.

Предупреждения

Не включайте TRIM, если SSD не поддерживает его. Еще лучше, избегайте SSD, которые не поддерживают TRIM.

Включение AHCI в BIOS после установки операционной системы может изменить способ, которым операционная система или другие видят прикрепленные диски. Это особая проблема с FreeBSD, установленным в системе с несколькими загрузками. Включите AHCI перед установкой операционных систем или временно отключите его для обновления драйверов на тех, которые не видят диск при включенном AHCI.

Версия gpart (8), которая поставлялась с FreeBSD 9.0, не выполняла ожидаемого, когда использовались оба варианта -a и -b. Это было исправлено FreeBSD 9.1, но чтобы оставаться совместимым с 9.0, приведенные здесь команды используют тот или иной.

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

Краткое резюме

Для удобства ознакомления, здесь описаны шаги разбиения и форматирования, которые описаны более подробно ниже.

# gpart create -s gpt ada0

# gpart add -t freebsd-boot -s 512k -a4k -l ssdboot ada0

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i1 ada0

# gpart add -t freebsd-ufs -l ssdrootfs -b 1m -s 2g ada0

# gpart add -t freebsd-ufs -l ssdvarfs -a 1m -s 2g ada0

# gpart add -t freebsd-ufs -l ssdusrfs -a 1m ada0

# newfs -U -t /dev/gpt/ssdrootfs

# newfs -U -t /dev/gpt/ssdvarfs

# newfs -U -t /dev/gpt/ssdusrfs

Разделение SSD

Первые шаги: создать схему разделов GPT, раздел для хранения загрузчика FreeBSD и установить код загрузки. Загрузочный раздел – 512 КБ, самый большой безопасный размер из-за ограничений кода в загрузчике. В то время как загрузочный код в настоящее время намного меньше 512K, нет никакой реальной причины уменьшить размер раздела. И если в будущем размер загрузочного кода будет больше, как и раньше, разделы не будут переупорядочены.

Раздел загрузки здесь 4K-выровненный, но это действительно не имеет значения. Загрузочный раздел редко читается или записывается редко, а код настолько мал, что выравнивание не требуется. Здесь он выравнивается в любом случае, просто для согласованности.

# gpart create -s gpt ada0

# gpart add -t freebsd-boot -s 512k -a4k -l ssdboot ada0

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i1 ada0

По моему опыту, корневой раздел 2G достаточно велик для хранения традиционной конфигурации и позволяет пространство для текущего ядра и kernel.olddirectory, созданного при создании нового ядра.

Ярлыки GPT назначаются для каждого раздела GPT, чтобы сделать диск легко переносимым на другой контроллер или компьютер. Пожалуйста, старайтесь, чтобы ваши метки дисков были уникальными. Идентичные этикетки на разных дисках могут привести к неожиданному и, вероятно, неутешительному результату.

# gpart add -t freebsd-ufs -l ssdrootfs -b 1m -s 2g ada0

Обратите внимание, что раздел начинается с 1M. Зачем это? Расположение 1M выравнивается по 4K. Он также выровнен по 128К и 1М, что может быть важно для некоторых твердотельных накопителей. Начиная с Windows Vista, Microsoft запустила разделы данных на 1M. И некоторые RAID-контроллеры также используют размер полосы 1 М или меньше. Используя это местоположение, более вероятно, что работа над секцией диска без использования FreeBSD GPT или, по крайней мере, менее вероятно, приведет к уничтожению данных, которые находятся в том, что контроллер видит в качестве области метаданных.

Там действительно нет никаких недостатков. 492K  Впустую, в обмен на соблюдение де-факто стандарта.

Начальная точка и размер этого раздела уже выровнены. Поэтому нет необходимости использовать -a здесь, и, оставив его, избавляемся от  проблемы с более ранними версиями gpart (8), упомянутыми выше.

После корневого раздела находится раздел 2G для / var и остальная часть SSD для / usr. На самом деле, 1G / var часто достаточно велик. Они выровнены с шагом 1 М, снова четным кратным размеру блока 4 КБ.

# gpart add -t freebsd-ufs -l ssdrootfs -b 1m -s 2g ada0

# gpart add -t freebsd-ufs -l ssdvarfs -a 1m -s 2g ada0

# gpart add -t freebsd-ufs -l ssdusrfs -a 1m ada0

Здесь некоторые вещи отсутствуют. Нет разделов для swap или / tmp. Мы установим их немного, воспользовавшись функциями SSD.

Файловые системы и TRIM

Файловая система UFS FreeBSD поддерживает TRIM. Это будет включено с -t при форматировании файловых систем.

Также доступны soft обновления. Журналы с soft-обновлениями (SUJ) не используются по двум причинам: были проблемы с SUJ, которые предотвращают использование дампа (8) для резервного копирования файловых систем, а функция SUJ значительно снижается fsck (8) раз. Но SSD обеспечивают значительно уменьшенный fsck (8) раз в любом случае.

# newfs -U -t /dev/gpt/ssdrootfs

# newfs -U -t /dev/gpt/ssdvarfs

# newfs -U -t /dev/gpt/ssdusrfs

Восстановление данных




Если вы установите новую версию FreeBSD на SSD, это может быть newfs (8) файловыми системами без TRIM. Загрузитесь в однопользовательский режим и используйте tunefs (8) -t, чтобы включить его в каждую файловую систему.




Не используйте dd (1) или другие программы, которые непосредственно записывают блоки на SSD. Он копирует каждый блок, независимо от того, используются они или нет. С точки зрения SSD, каждый блок используется, а выравнивание износа становится медленным или невозможным. Тогда SSD становится медленным.

Процедура, показанная здесь, копирует данные с существующего системного диска на SSD.

# mount /dev/gpt/ssdusrfs /mnt

# dump -C16 -b64 -0aL -f - /usr | (cd /mnt && restore -rf -)

# umount /mnt

# mount /dev/gpt/ssdvarfs /mnt

# dump -C16 -b64 -0aL -f - /var | (cd /mnt && restore -rf -)

# umount /mnt

# mount /dev/gpt/ssdrootfs /mnt

# dump -C16 -b64 -0aL -f - /    | (cd /mnt && restore -rf -)

# umount /mnt

Редиктируем /etc/fstab and /tmp

/etc/fstab редактируется для обращения к SSD. В то же время будет добавлен недостающий / tmp.

# Device                Mountpoint      FStype  Options         Dump    Pass#

/dev/gpt/ssdrootfs      /               ufs     rw              1       1

/dev/gpt/ssdvarfs       /var            ufs     rw              2       2

tmpfs                   /tmp            tmpfs   rw,mode=01777   0       0

/dev/gpt/ssdusrfs       /usr            ufs     rw              2       2

tmpfs (5) используется для / tmp. Он использует систему виртуальной памяти для создания эффективной файловой системы памяти. Если система работает с низким объемом памяти, она будет перемещена для замены места. Этот пример не ограничивает объем свободного места в / tmp, но tmpfs (5) дает подробную информацию об этом.

Это  временная файловая система. Он будет очищен при перезапуске.

SWAP

Файл подкачки редко используется, но нужно его иметь. Выделение раздела постоянно связывает пространство подкачки, а данные, записанные для обмена, не будут использовать TRIM. Поэтому мы будем использовать файл подкачки. Поскольку данные передаются через файловую систему, TRIM будет использоваться, и файл подкачки может быть изменен без переделки SSD.

Создайте файл подкачки с помощью dd (1). В этом примере создается файл подкачки 4G. 2G достаточно часто и может быть более подходящим для небольшого SSD.

# mkdir /usr/swap

# dd if=/dev/zero of=/usr/swap/swap bs=128k count=32768

Измените файл /etc /fstab, чтобы использовать файл подкачки. Это использует новую поддержку файлов подкачки, добавленных во FreeBSD 10 и описанных в fstab (5).

# Device        Mountpoint      FStype  Options                         Dump    Pass#

md99            none            swap    sw,file=/usr/swap/swap,late     0       0