pfSense — дистрибутив для создания межсетевого экрана/маршрутизатора, основанный на FreeBSD. Создание и тестирование Firewall в Linux, Часть 2.1. Введение во вторую часть. Смотрим на сеть и протоколы. статья встроенная операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Wireshark - статья на habr
Linux: 25 PHP Security Best Practices For Sys Admins - на cyberciti.biz. SELinux для LAMP - на habr. Top 30 Nmap Command Examples For Sys/Network Admins - на cyberciti.biz. Top 20 Nginx WebServer Best Security Practices - на cyberciti.biz. Логирование VPN-подключений на Cisco ASA - на habr. Настройка nginx/1.6.2 и OpenSSL на Debian для получения 100% и A+ по тесту Qualys от ssllabs.com.
Команда sudo может отправлять электронное письмо при использовании. В файле /etc/sudoers добавим: mailto yourname@yourdomain.com и установим свойство mail_always в значение on: mail_always on.
В конфиге SSH etc/ssh/sshd_config можно изменить на произвольный Port 65535. Ограничить вход по SSH для root-пользователя PermitRootLogin no. Каким пользователям или группам разрешено использовать SSH AllowUsers user1 user2.
К fail2ban отлично подходит logwatch. fail2ban и подобные умеют добавлять не только IP, но и подсеть этого IP с заданным префиксом. fail2ban умеет использовать ipset, если использовать ipset + поменять тип ipset на net и добавить префикс в настройках действия. Логи пропускаются через фильтры и могут применяться действия, например complain, iptables, iptables-ipset-proto4, mail-whois. Эти действия можно компоновать и изменять или написать свои. Как раз оно в /etc/ и лежит для этого. Так вы можете банить командой по сети сразу на вашей системе с файрволлом. Или банить полностью, а не только порт сервиса.
Аналогом fail2ban является denyhosts - набор Python (как и fail2ban) скриптов для защиты SSH (и не только). На habre есть пример со спуфингом для кражи учёток ssh.
apt
По мотивам статьи Не было печали, апдейтов накачали от amarao@habr. apt ведёт логи в /var/log/apt. В history.log искать Upgrade: _нужный_пакет_ (_старая_версия_, _новая_версия_) и в terminal.log искать Unpacking _нужный_пакет_ (_новая_версия_) over (_старая_версия_). Поставить пакет с нужной версией apt-get install _нужный_пакет_=_нужная_версия. Если пакета такой версии в репозитории нет, то надо найти файл для установки. Либо на диске /var/cache/apt/archives/_нужный_пакет_с_версией.deb, либо на snapshots.debian.org. Когда мы имеем файл на диске, установка sudo dpkg -i /var/cache/apt/archives/_нужный_пакет_нужная_версия_разрядность_итд_.deb. Может придётся разбираться с зависимостями, но если пакеты не конфликтовали до обновления, то разбирая лог terminal.log их можно откатить в те же версии. Если архива нет, то надо искать версию в интернетах, например snapshot.debian.org. Чтобы случайно снова не проапдейтиться, пакет можно поставить на hold (запретить апдейты): apt-mark hold нужный_пакет (unhold снимает hold).
Сетевые карты ищем cat /proc/net/dev
Мониторинг дисков в Hardware.
Из статей habr и richardimaoka.github.io/blog/network-benchmark-tools. Сегодня netperf входит в набор инструментов для бенчмаркинга Flent. Также его использует довольно большое количесвто ИТ-компаний, например Red Hat.
У netperf есть аналоги — например, iperf2 и iperf3. Они также позволяют протестировать пропускную способность сети. Разработку iperf3 начали после того, как репозиторий iperf2 пришел в упадок. Новая версия написана с нуля и несовместима с предыдущей реализацией, хотя и содержит часть её кода. Что интересно, после релиза iperf3, работа над iperf2 вновь закипела. В итоге два инструмента обладают похожей, но в то же время разной функциональностью. Например, iperf2 — многопоточный, а iperf3 — работает лишь с одним потоком.
Hardinfo — утилита для сбора информации об оборудовании и операционной системе. Она отображает данные о работе устройств на: PCI, ISA PnP, USB, IDE, SCSI, а также последовательных и параллельных портах. Но её можно использовать в качестве бенчмарка и инструмента мониторинга.
ApacheBench Инструмент для нагрузочного тестирования HTTP-серверов. ApacheBench разрабатывался для проверки Apache, но он может работать на любом другом сервере. Инструмент предустановлен на многих дистрибутивах Linux. У ApacheBench есть аналог — Apache jMeter, но с большими возможностями. Например, он позволяет генерировать запросы с нескольких компьютеров, управляя процессом с одного из них. Также в программе реализованы механизмы авторизации виртуальных пользователей, поддерживаются пользовательские сеансы. Этот инструмент применяют многие ИТ-компании, в том числе облачные провайдеры, например Qualys.
Семь отличных ускорителей сайтов для Linux и Unix на habr про балансировщики. Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures. Неплохой пример настройки NGINX + Keepalived (vrrp) на CentOS из 2013 года. Балансировка нагрузки с Pacemaker и IPaddr (Active/Active cluster) на habr для CentOS, RHEL, Ubuntu, Debian.
Есть несколько вариантов подключения к ESXi для мониторинга:
и 
Генерация документов в doc, excel, pdf и других форматах на сервере - статья на habr, речь идет о конвертере, встроенном в пакет LibreOffice, и запуск конвертации из PHP
Серверные жёсткие диски отличаются от бытовых:
Методика действий при обнаружении ошибки жёстким диском:
Методики отличаются по предназначению — standalone/desktop лучше протупит, но ошибку не выдаст, а в рейде есть запасной винт, и терпеть минутные тормоза на чтении никто не имеет никакой возможности. Не получилось прочитать? Читаем с запасных винтов, помечаем весь винт как сбойный, начинаем ресинк, а диск потом отправят в утилизатор. Возможно, незаслуженно, но нечего икать на ответственной должности. Возможность управления поведением диска при ошибках называется очень и очень путанно: SCT ERC. Посмотреть, поддерживает ли жёсткий диск управление ошибками можно с помощью команды smartctl -a /dev/sdxx (под Windows) строчка SCT capabilities:
SCT capabilities: (0x303f) SCT Status supported.
SCT Error Recovery Control supported. *****
SCT Feature Control supported.
Если строчки нет — диск их (команды) не поддерживает. Далее — собственно, процесс управления. В тех дисках, которые я видел, есть два параметра — таймаут операции чтения и таймаут операции записи. Ниже я приведу значения для всех дисков, до которых у меня дотянулись руки. Чтобы посмотреть таймауты используем команду smartctl -l scterc /dev/sda. Вывод выглядит так:
# smartctl -l scterc /dev/sda
SCT Error Recovery Control:
Read: 70 (7.0 seconds)
Write: 70 (7.0 seconds)
# smartctl -l scterc /dev/sde
SCT Error Recovery Control:
Read: Disabled
Write: Disabled
# smartctl -l scterc /dev/sdd
Warning: device does not support SCT Error Recovery Control command
Для установки, соответственно, указываем значения через запятую после scterc: smartctl -l scterc,120,60 /dev/sde (величина указывается в десятых долях секунды, то есть 120 соотвествует 12 секундам, первое число — чтение, второе — запись). 0 означает «до победного конца», то есть неограниченно долго.
Значения по-умолчанию
| Название | Модель | ERC (есть или нет, если есть, значения по-умолчанию) |
|---|---|---|
| Western Digital VelociRaptor | WDC WD1500HLFS-01G6U1 | Есть, 7/7 |
| Western Digital RE4 Serial ATA | WDC WD1500HLFS-01G6U1 | Есть, 7/7 |
| Western Digital RE3 Serial ATA family | WD1002FBYS-02A6B0 | Есть, 7/7 |
| Western Digital Caviar Green (Adv. Format) | WDC WD20EARS-00MVWB0 | не поддерживается |
| Western Digital Caviar Green | WD7500AACS-00D6B0 | Есть, 0/0, включить нельзя |
| Seagate Maxtor DiamondMax 22 | STM3500320AS | Есть, 0/0, можно включить |
| Seagate Barracuda 7200.9 | ST3400633AS | Нет (у Maxtor/Seagate тех же лет есть, а у Seagate нет) |
| Seagate Barracuda 7200.10 | ST3500630AS | нет |
| Seagate Barracuda 7200.11 | ST31500341AS | Есть, 0/0, можно включить |
| Seagate Barracuda LP | ST31500541AS | Есть, 0/0 (то есть выключен), можно включить |
| SAMSUNG SpinPoint F3 | SAMSUNG HD103SJ | |
| SAMSUNG SpinPoint F3 | SAMSUNG HD754JJ | Есть, 0/0 |
| SAMSUNG SpinPoint F4 EG (AFT) | SAMSUNG HD204UI | Есть, 0/0 (выключен), можно включить |
| Hitachi Deskstar 7K3000 | HDS723030ALA640 | Есть, 0/0, включить нельзя (scsi error aborted command) |
| Hitachi Deskstar T7K500 | HDT725032VLA360 | Есть, 0/0, включить нельзя |
| Hitachi Travelstar 7K1000 | HGST HTS721010A9E630 | Есть, 0/0, можно включить |
| Plextor M2S | Plextor PX-64M2S | Есть, 2/2, можно включить (первое) |
Купили крутой винт домой в количестве одна штука: выключите ERC (0,0). Купили винт в рейд — проверьте, что у него ERC отлично от нуля, а лучше ближе к разумному значению в районе 3-10с. (300-1000). Модели, применение которых на десктопе требует внимания: WD RE3, RE4, Raptor, Seagate NS. Помимо ERC, производители обещают повышенное качество и надёжность работы RE/NS серий, но этого мы проверить не можем, а вот наличие/отсутствие ERC — это объективный легко проверяемый признак. Диск без ERC в рейде быть не должен ни при каких условиях, так как в случае сбоя вреда он принесёт больше, чем пользы.
Для WD есть утилита WDTLER (Time-Limited Error Recovery) на некоторых hdd green-серии можно все-таки включить ERC/TLER. Для SAS надо изучать sgutils и sdparm, там свой набор команд для управления scsi generic. В аппаратных рейдах проверить возможности того или иного диска можно так smartctl -a -d cciss,0 /dev/cciss/c0d.
Многие магазины не предоставляют гарантию на жёсткие диски, ссылаясь на гарантию производителя. Но здесь есть тонкий момент: к примеру, у некоторых моделей Seagate гарантийный период начинается с момента производства. Поэтому не исключена ситуация, что вы купите абсолютно новые диски, на которые уже закончилась гарантия производителя. Чтобы не испытать этот неловкий момент, постарайтесь перед покупкой проверить гарантию конкретных экземпляров на сайтах производителей:
Hard drive failure rates at backblaze.com for Q2 2017, Q1 2017, 2016 and Q4 2016, Q3 2016, Q2 2016, Q1 2016
Для домашних ПК и ноутбуков можно настроить мониторинг с отсылкой на почту уведомлений об изменении важных показателей S.M.A.R.T. На Windowsэто можно сделать через CrystalDiskInfo: Сервис -> Особенности уведомлений -> Уведомление по эл. почте
Настройки почты на примере Gmail:
To: логин@gmail.com
From: логин@gmail.com
Host: smtp.gmail.com
Port: 587
ID: логин
Password: пароль (если включена 2-этапная авторизация, сюда нужно вводить пароль приложения, созданный здесь)
SMTP/SSL: Yes
Там же в меню «Сервис» включить автозапуск и запуск агента.
Добавить временный или постоянный маршрут:
route ADD 10.XXX.XXX.XXX MASK 255.XXX.XXX.XXX 10.XXX.XXX.XXX METRIC 56
route -p ADD 10.XXX.XXX.XXX MASK 255.XXX.XXX.XXX 10.XXX.XXX.XXX METRIC 56
Изменить IP-адрес:
netsh interface ipv4 set address name="Ethernet" static 10.30.2.2 255.255.255.0 10.30.2.254
Изменить IP-адрес для подключения к cisco с заводскими настройками:
netsh interface ipv4 set address name="Ethernet" static 192.168.1.100 255.255.255.0 192.168.1.254
ps вместо name="Ethernet" может быть и name="Подключение по локальной сети". Вернуться назад, на DHCP:
netsh interface ipv4 set address name="Ethernet" source=dhcp
Using SQL Server in Windows 8 and later versions of Windows operating system
Проверка работы Windows-клиента с сервером
netstat -an - соединение должно быть ESTABLISHED.Сброс настроек сети для Windows-клиента:
netsh winsock reset catalog
netsh int ip reset reset.log
ipconfig /flushdns
ipconfig /registerdns
route /fNaming Files, Paths, and Namespaces.
RDPY is a pure Python implementation of the Microsoft RDP (Remote Desktop Protocol) protocol (client and server side). RDPY is built over the event driven network engine Twisted. RDPY support standard RDP security layer, RDP over SSL and NLA authentication (through ntlmv2 authentication protocol). RDPY is fully implemented in python, except the bitmap decompression algorithm which is implemented in C for performance purposes.
pywinrm is a Python client for the Windows Remote Management (WinRM) service. It allows you to invoke commands on target Windows machines from any machine that can run Python. Used by Ansible for Windows support.
У Windows сервер в качестве корневых DNS:
Про Windows Server 2016 блог Microsoft на habr.ru:
Защита привилегированных учетных записей в Windows Server 2016
Лекции Технотрека. Администрирование Linux. Опыт использования SSH для решения различных административных задач. Статья про виртуальные консоли и эмуляторы терминала. Как посмотреть логи в Linux и форк на habr. Более чем 80 средств мониторинга системы Linux на habr. Цикл статей Переосмысление PID 1: часть 1, часть 2, часть 3, часть 4. pdf - systemd для администраторов от Lennart Poettering с переводом Сергея Пташника.
nc You can use netcat for this. nc ip port < /dev/null. Много примеров Полезные трюки при работе с netcat.
cat /proc/net/tcp
iptables -nL
lsof -i 4 -a -p 1234 (просмотр всех соединений IPv4, открытых процессом с PID = 1234)
lsof -i tcp:80 (просмотр информации о процессе, который прослушивает 80 TCP порт)
lsof /dev/hd4 (Список открытых файлов на устройстве /dev/hd4)
lsof /dev/cdrom (Список процессов, работающих с CD ROM)
lsof -c ssh (Список подключений по ssh)
netstat -lnt
systemctl status ssh.service
Port Knocking через iptables
iptables -A INPUT -p tcp --dport 65432 -m recent --set --name tuktuk
iptables -A INPUT -p tcp --syn --dport 22 -m recent --rcheck --seconds 160 --name tuktuk -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -j DROP
Утилиты для Port Knocking
Утилиты для Port Knocking: pyknock - реализация, открывающая порт по UDP-пакету с HMAC-подписью общего ключа, времени и команды открытия порта от Vladislav Yarmak; knock - реализация, использующая libpcap для сниффинга трафика на интерфейсе и последующего сравнения с заранее заданной последовательностью от Judd Vinet.
grep 'authentication failures' /var/log/auth.log
cd - - переход в предыдущую директорию
while ! [command]; do sleep 1; done - многократное выполнение команды до её успешного завершения
cat /etc/passwd | column -t или column -t /etc/passwd - вывод данных в виде таблицы
!! - повтор последней команды
pf, ipfw и ipfilter iproute2
ValdikSS@habr рекламировал itldc.com (Нидерланды, Болгария, Латвия, Украина), yourserver.se (Швеция, Латвия), hukot.net (Чехия), lcsnet.eu (Румыния. Бывают проблемы со стабильностью, но сойдет). Потом написал статью - Определяем пользователей VPN (и их настройки!) и прокси со стороны сайта.
zhovner@habr рекламировал сервера в Европе "самые дешевые VPS, за $3-5 в 2017 году" от провайдеров Scaleway, Linode, DigitalOcean и Veesp.com с датацентром в Санкт-Петербурге (выдает блок /56 на каждый сервер бесплатно). К сожалению, даже продвинутые хостеры, вроде DigitalOcean, не предоставляют такой услуги. Здесь есть список хостеров, предоставляющих данную услугу version6.ru/vps, от @rm. Обход блокировок на Украине. VPN-дайджест и VPS-дайджест от 1cloud.ru.
Ещё VPS и VPN: 1and1.com, vscale.io, servers.com, Джино, gdccloud.ru, lowendstock.com, vds.menu, hostmaze.com.
В Китае популярны: GreenVPN, KeepSolid VPN, VyprVPN, ExpressVPN и PureVPN.
Про большинство протоколов написано на wikipedia, с указанием недостатков (в том числе касаемо безопасности). Обзорная статья про: PPTP, L2TP, SSTP и OpenVPN.
В Firefox в about:config меняете network.security.esni.enabled на true. Для работы eSNI желательна работа (на самом деле она не нужна, но есть проблема: в Windows сложно сделать такой запрос (IN TXT) асинхронно bugzilla) DNS over HTTPS, так как публичный ключ для шифрования sni берётся с поддомена _esni.example.com IN TXT, так что желателен зашифрованный транспорт dns, чтобы провайдер не увидел этого. Для этого network.trr.mode выставляете в 2 (или 3, чтобы был только TRR), а network.trr.uri выставляете в https://mozilla.cloudflare-dns.com/dns-query (либо можно https://dns.google.com/experimental или https://1.0.0.1/dns-query)
Можно прописать network.trr.bootstrapAddress, иначе resolve самого mozilla.cloudflare-dns.com будет происходить через системный resolver и лишь дальше установлена DoH сессия с DNS, что вызывает проблемы, если сразу запустить Firefox. Можно поставить 1.0.0.1, 1.1.1.1 2606:4700:4700::1111 или 2606:4700:4700::1001 или что там будет у dig mozilla.cloudflare-dns.com. (А там не обязательно эти адреса, но и любые из динамического облака cloudflare.) Подробнее про trr resolver: github.com/bagder/TRRprefs.
Проверить, что всё работает можно на cloudflare.com/ssl/encrypted-sni нажав .
В статье GRE между MikroTik и Ubuntu на VPS от Aruba Cloud с IPSec для шифрования, говорят, что libreswan — форк (с блекджеком и викой) Openswan (примеры настройки на OpenNet, habr, debian.org/ru, описание на github, wiki), который, в свою очередь, форк FreeS/WAN (пример настройки на OpenNet, описание на wiki). StrongSwan (примеры настройки на habr от msamoylov@habr, ValdikSS@habr, описание на github, wiki) — имеет корни от FreeS/WAN.
OpenVPN Connect - туннели для iOS, пример настройки.
Пример настройки OpenVPN в режиме TLS-сервера, с помощью пакета easy-rsa. Ноды и узлы сервиса клиентов включены в единое L2-пространство tinc VPN. Клиентские подключения (тоже L2) объединяются с tinc-интерфейсом в мост.
OpenVPN без плагинов поддерживает два варианта установления соединения:
Режим PSK включается опцией secret, первым параметром которой является имя файла со статическими ключами, которые генерируются на этапе настройки VPN. В файле находятся 2 пары 512 битных случайных ключей (в каждой паре ключ для шифрования и ключ для HMAC), записанные один за другим (без заголовков и прочего) и закодированные в HEX. Одинаковый файл с ключами должен быть на всех компьютерах, соединяемых VPN. Если для опции secret не задать второй необязательный параметр — direction, то будет использоваться только первая пара ключей, т. е. в обе стороны трафик будет подписываться и шифроваться одинаковыми ключами.
В режиме PSK может использоваться только CBC и No-crypto форматы пакетов с данными (data channel crypto format). По умолчанию для шифрования используется BlowFish в режиме CBC c 128 битным ключом, а для HMAC используется SHA1 и 160 битный ключ. В качестве ключей используются соответственно первые 128 и 160 бит от 512 битных ключей из файла со статическим ключом.
Так как вся ключевая информация и настройки задаются заранее, то, если адрес удалённого узла (опция remote) задан, инкапсулированный трафик может передаваться сразу после запуска OpenVPN ещё до обмена управляющими пакетами. Опцию remote достаточно указать только в одном из конфигурационных файлов. В таком случае хост, которому remote не задана, будет просто ждать входящего соединения (в данном случае UDP пакета).
Маскировка UDP трафика в TCP/ICMP при помощи udp2raw - статья с хорошими комментариями, в том числе про работу OpenVPN и GoVPN. По следам войны с Telegram: SSLH: Прячем SSH/HTTPS/OpenVPN/Telegram за единым портом 443. Новый MTProto-прокси сервер от Telegram через Docker-образ.