Настройка безопасности сервера debian
После установки нового сервера приходится выполнять один и тот же набор стандартных настроек. Сегодня мы займемся базовой настройкой сервера под управлением операционной системы Debian. Я приведу практические советы по небольшому увеличению безопасности и удобству администрирования, основанные на моем личном опыте.
Введение
Любая работа с сервером после установки чаще всего начинается со стандартных обязательных действий, без которых либо не получится продвинуться дальше, либо будет неудобно работать. Например, вам в любом случае необходимо выполнить сетевые настройки, желательно обновить систему и установить часовой пояс. Рекомендуется сразу настроить автообновление времени, подрихтовать параметры sshd, установить midnight commander и выполнить другие настройки.
Об этом я хочу рассказать в статье. Я буду делиться своим реальным опытом работы. Это не значит, что нужно делать так, как я. Я могу в чем-то ошибаться, что-то делать не так удобно, как можно было бы сделать. Это просто советы, которые кому-то помогут узнать что-то новое, а кто-то возможно поделится со мной чем-то новым для меня, либо укажет на мои ошибки. Мне бы хотелось, чтобы это было так. Своими материалами я не только делюсь с вами знаниями, но и сам узнаю что-то новое в том числе и из комментариев и писем на почту.
Указываем сетевые параметры
Итак, у нас в наличии только что установленная система. Узнать или проверить ее версию можно командами:
Очень подробно про настройку сети в Debian я написал в отдельной статье. Рекомендую с ней ознакомиться. Здесь же кратко выполним основное. Для настройки сети, необходимо отредактировать файл /etc/network/interfaces. Сделаем это:
Для получения IP адреса по dhcp достаточно будет следующего содержания:
Если у вас статический адрес, то его настроить можно следующими параметрами в файле:
Сохраняем файл. Теперь нужно выполнить перезапуск сети. В Debian это делается командой:
Обновление системы
Сеть настроили, теперь можно обновить систему и пакеты. В Debian это делается достаточно просто. Воспользуемся несколькими командами. Сначала обновим локальный индекс пакетов до последних изменений в репозиториях:
На этом обновление системы закончено. Если вы хотите обновить версию релиза, например Debian 7 wheezy обновить до Debian 8Jessie, то читайте отдельный материал.
Настройка ssh
Теперь внесем некоторые изменения в настройки сервера ssh. Я рекомендую его запускать на нестандартном порту для исключения лишних общений с ботами, которые регулярно сканят инет и подбирают пароли пользователей по словарям. По-умолчанию в Debian, впрочем как и в любом другом дистрибутиве Linux, ssh сервер работает на 22 порту. Изменим этот порт, к примеру, на 23331. Так же я еще изменяю конфигурацию для разрешения подключения по ssh пользователя root с использованием пароля. В Debian из коробки пользователь root по ssh паролем авторизовываться не может. Изменим и это. Открываем файл настроек:
И изменяем там следующие строки. Приводим их к виду:
Сохраняем изменения и перезапускаем сервер ssh следующей командой:
Все в порядке, сервер слушает 23331 порт. Теперь новое подключение будет осуществлено только по порту 23331. При этом, после перезапуска ssh, старое подключение не будет разорвано.
Я знаю, что многие возражают против подключения рутом к серверу. Якобы это небезопасно и т.д. и т.п. Мне эти доводы кажутся не убедительными. Не понимаю, в чем может быть проблема, если у меня нормальный сложный пароль на root, который не получится подобрать или сбрутить. Ни разу за всю мою работу системным администратором у меня не возникло проблем с этим моментом. А вот работать так значительно удобнее, особенно, когда необходимо оперативно куда-то подключиться по форс мажорным обстоятельствам.
Установка утилит mc, htop, iftop
Следующим шагом я настраиваю некоторые полезные утилиты, которыми регулярно пользуюсь в повседневной работе. Первая из них это всем известный двухпанельный файловый менеджер Midnight Commander. Установим mc на наш сервер:
Я сразу же ставлю редактором по-умолчанию mcedit. Для этого просто выбираю его из меню при первом редактировании какого-нибудь файла. Если у вас такое меню не появляется, можете вызвать его сами и выбрать необходимый редактор по-умолчанию:
Полезной утилитой, позволяющей смотреть сетевую загрузку в режиме реального времени, является iftop. Очень рекомендую. Более простого и удобного инструмента мне не попадалось, хотя я много перепробовал подобных вещей. Устанавливаем iftop на сервер:
Настройка и обновление времени в Debian
Теперь проверим установленный часовой пояс, время и включим автоматическую синхронизацию времени с удаленного сервера. Узнать дату, время, часовой пояс можно командой date:
Если все указано верно, то менять ничего не нужно. Если же у вас неправильное время или указан часовой пояс не соответствующий вашему, то настроить это можно следующим образом. Сначала обновим часовые пояса:
Теперь выберем правильный часовой пояс с помощью команды:
Выбирая соответствующие пункты визарда, указываете свой часовой пояс.
Дальше синхронизируем время с сервером времени в интернете. Для разовой или ручной синхронизации понадобится отдельная утилита. Установим ntpdate на сервер:
Значит у вас уже работает служба ntp. Ее нужно остановить и обновить время вручную. Хотя если она работает, то у вас и так должно быть все в порядке.
Для того, чтобы время автоматически синхронизировалось без вашего участия с определенной периодичностью, используется инструмент ntp. Установим его:
После установки он сам запустится и будет автоматически синхронизировать часы сервера. Проверим, запустился ли сервис ntpd:
Настройка firewall (iptables) в Debian 8
В качестве firewall по-умолчанию используется iptables, его и будем настраивать. Изначально фаервол полностью открыт и пропускает весь трафик. Проверить список правил iptables можно следующей командой:
Очень подробно вопрос настройки iptables я рассмотрел отдельно, очень рекомендую ознакомиться. Хотя в примере другая ОС linux, принципиальной разницы нет, настройки iptables абсолютно одинаковые.
Добавляем набор простых правил для базовой настройки. Все необходимое вы потом сможете сами открыть или закрыть по аналогии с существующими правилами:
Проверяем, что правила записались в файл /etc/iptables_rules. Если их там нет, то записываем их вручную.
Правила применились и произошла их запись в файл /etc/iptables_rules. Теперь нужно сделать так, чтобы они применялись при загрузке сервера. Для этого делаем следующее. Открываем файл /etc/network/interfaces и добавляем в него строку pre-up iptables-restore < /etc/iptables_rules Должно получиться вот так:
Настройка логов cron
Установка и настройка screen
Я привык в своей работе пользоваться консольной утилитой screen. Изначально она задумывалась как инструмент, который позволяет запустить что-то удаленно в консоли, отключиться от сервера и при этом все, что выполняется в консоли продолжит свою работу. Вы сможете спокойно вернуться в ту же сессию и продолжить работу.
Первое время я именно так и использовал эту утилиту. Редко ее запускал, если не забывал, когда выполнялся какой-то длительный процесс, который жалко было прервать из-за случайного обрыва связи или необходимости отключить ноутбук от сети и куда-то переместиться.
Позже я решил подробнее ознакомиться с этим инструментом и обнаружил, что там есть несколько удобных моментов, которые можно использовать в ежедневной работе. Вот как использую утилиту screen я. При подключении к серверу у меня запускается screen с тремя окнами 1, 2, 3. Первое окно автоматически переходит в каталог /, второе в /etc, третье в /var/log. Я осмысленно назвал эти окна: Main, etc, logs соответственно. Внизу находится строка состояния, в которой отображен список всех открытых окон и подсвечено активное окно.
С помощью горячих клавиш я очень быстро переключаюсь между окнами в случае необходимости. Когда я не использовал screen, для быстрого перемещения между разными окнами я открывал несколько сессий ssh и через виндовый alt+tab переключался. Потом я стал использовать менеджер сессий mRemoteNG и там альтабаться уже не получалось. Долго страдал и переключал окна мышкой. Это было очень неудобно. Screen решил все мои проблемы по работе с разными сессиями на сервере. Теперь все реально в одной ssh сессии и получается очень быстро переключаться между окнами.
Переключаюсь между окнами с помощью стандартных горячих клавиш screen: ctrl+a 1, ctrl+a 2, ctrl+a 3. Я специально изменил нумерацию, чтобы она начиналась не с 0 по-дефолту, а с 1. Так удобнее на клавиатуре переключать окна. Кнопка 0 находится слишком далеко от 1 и 2.
Чтобы настроить такую же работу screen, как у меня достаточно выполнить несколько простых действий. Сначала устанавливаем screen:
Создаем в каталоге /root конфигурационный файл .screenrc следующего содержания:
Заключение
Теперь можно перезагрузить сервер и проверить, все ли в порядке. У меня все в порядке, проверил На этом базовая настройка сервера debian окончена. Можно приступать к конфигурации различных сервисов, под которые он настраивался. Об этом я расскажу в отдельных статьях.
Ставим свежие версии пакетов. Вот мой список репозиториев:
2.1 Генерируем ключи для SSH
Дабы исключить возможность перехвата парольной фразы, мы сгенерируем rsa ключи для входа на сервер.
Обратите внимание — ключи генерируются на Вашей рабочей машине, а затем публичный ключ заливается на сервер:
Теперь мы сможем заходить на сервер — по ключу, с паролем или без — в зависимости от Ваших настроек. Хочется подчеркнуть, что если Вы сгенерировали ключи без пароля, то уровень безопасности сервера эквивалентен уровню безопасности Вашего секретного ключа на Вашей машине. Будьте внимательны и берегите ключ.
2.2 Файловая система. Права пользователей.
Поговорим про файловую систему. Я предлагаю выделить для наших сайтов отдельную папку в корне файловой системы.
2.3 Apache
2.3.1 Права пользователей. Модификация Apache [apache2-mpm-itk]
Как нам известно, по умолчанию web-сервер apache работает от одного пользователя для всех сайтов, находящихся на сервере. А это означает, что, воспользовавшись web-шеллом, можно прочитать файлы соседних проектов.
Для исправления этого недоразумения нам понадобится установить модифицированную версию аpache. Пакет называется apache2-mpm-itk. Установив пакет, мы получим возможность в конфигах файла указывать, от какого пользователя и группы должен работать apache при обработке сайта.
Пользователь и группа задается строкой в конфиге:
Для этого в нашем конфиге мы будем писать:
Таким образом apache сможет прочитать index.php, выполнить и отдать в браузер, но не сможет изменить его. А tmp.txt изменить сможет.
Важный момент — нужно запретить консоль у пользователя www-data
2.3.2 Отдельный tmp для каждого сайта
Предотвращаем инклуд сессий с соседнего сайта. + Запрещаем php выходить выше пользовательской домашней дирректории.
В конфиг нашего сайта нужно добавить диррективы open_basedir, upload_tmp_dir, session.save_path
Получаем такой минималистичный конфиг:
После создания конфига нужно сделать сайт активным с помощью команды:
А затем перечитать конфиги:
2.3.3 Sendmail
Почему я вынес Sendmail отдельным пунктом? Потому что по умолчанию он не работал. Пришлось повозится. Я расскажу самый простой способ. Чтобы php умел отправлять письма, проделываем следующие операции.
Для конфигурации Exim4 (по умолчанию в качестве Mail Transfer Agent используется именно он) существует пакет exim4-config. Воспользоваться им можно так:
- интернет-сайт; прием и отправка почты напрямую, используя SMTP
2.4 vsftpd
Теперь разберемся с FTP. Для работы был выбран vsftpd.
Далее меняем конфиг:
Говорим демону vsftpd перечитать конфиги:
2.5 MySQL + PostgreSQL
Ставим MySQL
Создаем нового пользователя.
Ставим Postgres
Меняем пароль на пользователя postgres:
В /etc/phppgadmin/apache.conf открываем доступ извне.
Говорим apache перечитать конфиги:
У постгрес есть один нюанс. Юзеры всегда видят названия соседних БД. Чтобы они не мозолили глаз нашим пользователям в phppgadmin, правим конфиг:
Пользователи создаются такой командой:
2.6 Firewall
В нашем случае цели просты — запретить злоумышленнику открывать порты. Поэтому решение будет простым — мы не будем вдаваться в нюансы правил iptables, а воспользуемся пакетом arno-iptables-firewall, который упростит нам жизнь. Он сам спросит нас, что мы хотим во время установки. Ответы на вопросы ниже.
2.7 Запуск Apache2 в chroot среде [посредством libapache2-mod-chroot]
Что такое chroot'инг? Это создание специальной среды (песочницы), изолированной от окружения. Скажем, процесс apache не должен иметь доступа к папкам home. В тоже время в изолированную среду нужно брать все, что нужно для работы. Самый простой способ — это воспользоваться libapache2-mod-chroot.
Chroot'инг — это интересная тема с кучей своих проблем, связанных с тем, что помимо apache обычно требуется куча дополнительных программ, библиотек и средств для работы. Поэтому я не буду делать статью в статье, и отправлю Вас на отличный материал по этой теме. Используйте программу ldd и берите с собой в изолированное окружение все, что нужно именно Вам.
2.8 Автоматизация добавления новых пользователей
Начал писать скрипт и понял, что монстр, который может все, будет использовать неудобно. В статье все команды писались так, чтобы их потом просто было засунуть в sh скрипт. Поэтому я думаю, что каждый пользователь за несколько минут легко состряпает сценарий, необходимый и удобный именно ему.
Этот раздел поможет наглядно подготовить чистую систему Debian к полноценному использованию в качестве того, что вы выберите сами. Нижеуказанные настройки рекомендую выполнять в пошаговом режиме. Каждый блок проверен, теория, практика и описания подаются кратко, без излишеств. Если мало, подробности ищите в Google.
Настоятельно рекомендую использовать только чистый Debian, т.е. без "заранее подобранных наборов ПО".
Такой подход наиболее полно реализует преимущества Debian перед Ubuntu и Gentoo - оптимальное сочетание затрат на установку\настройку к эффективности\захламлённости ненужным ПО.
Разработка страницы завершена, новые рецепты добавляются по мере их изучения и отладки
Если есть что добавить, то смело дополняйте разделы новой информацией. Наши опечатки и ошибки в статье также правте смело, не нужно сообщать об этом на почту, просьба соблюдать стилевое оформление этой страницы и использовать разделители разделов (серые линии различной толщины).
- Подготовка свежеустановленной системы Debian к использованию
- Система
- Политика установки ПО
- Дата и время
- Настройка
- Синхронизация локально
- Синхронизация для клиентов в сети
- sudo
- Автологин в консоли с mingetty
- Автологин в консоли с стандартным agetty
- Глобальные параметры локализации системы
- Кириллица в консоли
- Удаление неиспользуемых файлов локализации
- GRUB2
- Сетевые настройки
- Базовая настройка
- Настройка в консольном интерфейсе wicd-curses
- Общие сведения
- Apf-firewall
- Vuurmuur
- Установка
- Настройка rsyslog
- Настройка
- Подсчёт трафика
- Решение проблем.
- Авторизация по ключам
- Генерация ключей
- Настройка сервера
- Настройка клиента
- Настройка Putty
- Тorrent
- SMB (CIFS)
- Корзина
- Аудит
- Принтеры
- Web интерфейс для администрирования
- Файловый менеджер
- Сессии в консоли
- Screen
- Эмулятор терминала
- guake
- SQL сервер
- Web-сервер
- Apache2
- Поддержка PHP5
- Поддержка PHP5
- Множество сайтов на одном сервере (virtual host)
- Лог доступа
- Примечание 1 (настройка aptitude)
- Примечание 2 (ошибка запуска сети)
- Примечание 3 (настройка мс)
- Примечание 4 (ошибка pcspkr)
- Примечание 5 (setfacl неподдерживаемая операция)
Политика установки ПО
aptitude - локализованный менеджер пакетов с псевдографическим интерфейсом, который используется для наглядной и функциональной установки программ в Debian.
В большинстве последующих разделов с его помощью будет проводиться установка различных программ, из-за чего требуется заранее определить политику получения, установки и обновления программ в вашей системе.
Запускем программу и настраиваем её параметры.
Дата и время
Настройка
С консоли время в системе можно установить так:
Где MM — месяц, DD — день месяца, hh — часы, mm — минуты, CCYY — 4 цифры года, ss — секунды.
Синхронизация локально
Если вам не нужно раздавать время на другие машины, можете довольствоваться пакетом ntpdate, который не запускает свой демон при старте системы.
Вторая команда выдает разницу во времени с дебиановскими серверами, а третья - однократно синхронизирует время на вашей машине с одним из них. Можно также использовать другие сервера.
Синхронизация для клиентов в сети
Устанавливаем ntp: - комплекс программ, позволяющих получить текущее время со специальных серверов в интернет и стать таким сервером для локальной сети.
Пример для сети 192.168.0.xx
Перезапускаем службу для применения новых настроек
Далее можно прописывать IP адрес компьютера в качестве источника синхронизации.
Автоматическое обновление
Правим общие настройки обновления:
Правим настройки периодичности обновления
Логи обновления смотрим тут - /var/log/unattended-upgrades/unattended-upgrades.log.
Указываем время выполнения обновления. Например каждый день в 6:25 утра:
Пользователи и группы
Устанавливаем sudo: - утилиту для временного получения root прав
Добавляем пользователя в группу sudo
Для применения настроек пока приходится перезагружать систему
Для подробоностей - Гугл в помощь
Автологин в консоли с mingetty
Устанавливаем Mingetty: - упрощённый вариант стандартной программы agetty, в задачи которой входит управление доступом к физическим и виртуальным терминалам.:
Далее меняем строку настроек в консоли по-умолчанию, вместо root можно указать другой логин.
Автологин в консоли с стандартным agetty
Стандартный менеджер входа agetty (util-linux) начиная с v.2.20 содержит функциональность mingetty
Далее настраиваем вход, вместо root пишем нужный логин
Локализация
Глобальные параметры локализации системы
Кроме LC_ALL все параметры должны быть ru_RU.UTF-8.
Если это не так, тогда запускаем настройку
Если системная локаль не применяется к пользователю, то стоит посмотреть файл настроек интерпретатора командной строки (bash, dash, ash) в домашнем каталоге пользователя.
Кириллица в консоли
Настраиваем кириллицу в консоли
Настраиваем все параметры пакета:
Удаление неиспользуемых файлов локализации
localepurge - утилита для удаления ненужных локализаций, документации и прочего. При установке пакета с помощью debconf выводится список языков в различных кодировках, отметить следует только нужные вам локализации. Рекомендуется сперва сделать backup системы и добавить к нужным английскую локализацию. В дальнейшем утилита будет автоматически запускаться и чистить файлы сразу после установки любых пакетов.
Удаление происходит при запуске утилиты:
Если вдруг понадобились удаленные языковые файлы, вернуть их можно так:
Загрузчик
GRUB2
Управление запуском служб
sysv-rc-conf: - утилита с curses интерфейсом, преназначенная для быстрого управления работой и запуском служб (демонов, сервисов). Очень удобна для просмотра установленных служб в системе.
Помимо настройки автозапуска, утилита позволяет в реальном времени запускать и останавливать имеющиеся в системе службы.
Сглаживание шрифтов
Сетевые настройки
Базовая настройка
Этот метод настройки является самым гибким и функциональным, но требует ручной правки конфигурационных файлов.
Если Debian устанавливался по сети, то настройки будут перенесены из установщика в установленную систему, т.е. ничего настраивать уже не нужно.
Ищем нашу сетевую карту в списке:
Для более детальной информации о сетевых картах можно воспользоваться специальными программами
Открываем файл конфигурации сети:
Строки, начинающиеся со слова "auto", используются для идентификации физических интерфейсов при их подьеме во время запуска ifup с опцией -a. (Эта опция используется сценариями загрузки системы.) Имена физических интерфейсов должны следовать за словом "auto" в той же строке. Может быть несколько строф "auto". ifup поднимет названные интерфейсы в порядке их перечисления.
Строки, начинающиеся с "allow-", используются для идентификации интерфейсов, которые должны быть подняты автоматически различными подсистемами. Это может быть сделано, например, с использованием команды "ifup --allow=hotplug eth0 eth1", которая будет поднимать только eth0 или eth1, если они перечислены в строке "allow-hotplug". Учтите, что "allow-auto" и "auto" - синонимы.
Если настройки статические, тогда, к примеру, заполняем так:
Если настройки сети раздаются через DHCP, тогда, к примеру, заполняем по-другому:
Если необходимо использовать одновременно несколько IP адресов на одной сетевой карте, тогда, к примеру, добавляем строки:
Для настройки DNS нужно редактировать файл /etc/resolv.conf
Статичный DNS, например:
Динамический DNS по DHCP вносится в /etc/resolv.conf автоматически.
Настройка в консольном интерфейсе wicd-curses
wicd - cлужба управления проводными и беспроводными сетями для Linux с Qt, GTK+ и curses интерфейсами. Эта служба наиболее удобна, если часто возникает необходимость в быстром подключении к различным сетям.
После первого запуска wicd автоматические переключает все настройки сети на DHCP.
Для управления службой в консоли необходим curses клиент wicd-curses.
Для применения настроек необходимо нажать "Shift+C"
Firewall (брандмауэр, межсетевой экран и т.п.)
Общие сведения
Межсетевой экран - средство контроля и фильтрации сетевых соединений. В защищенной домашней или корпоративной сети установка firewall не актуальна и может принести больше вреда чем пользы. В случае если Ваш компьютер напрямую подключен к Интернет, то использование сетевого экрана просто обязательно. В Debian эта задача решается с помощью утилиты Iptables. Эту утилиту можно использовать в "чистом" виде путём ручного ввода команд в консоли, или запускать команды в самописном скипте, либо с помощью различных надстроек, облегчающих формирование сложных команд iptables. В зависимости от поставленной задачи каждый из способов имеет свои достоинства и преимущества.
Apf-firewall
Простой аскетичный аpf-firewall для быстрой защиты сервера без самописных скриптов.
Правим файл конфигурации
Vuurmuur
Vuurmuur - мощная свободная надстройка к iptables с curses интерфейсом. Псевдографический интерфейс значительно упрощает оперативную работу с сетевым экраном. К сожалению разработка программы продвигается очень медленно. Имеются deb пакеты в репозитории официального сайта. Раньше эти пакеты присутствовали в официальных репозиториях Debian, но были заброшены сопровождающим, что привело к их удалению. Программа полностью документирована и переведена на русский язык.
Аналогов даже близких по функциональности найдено не было. В итоге получаем что vuurmuur это единственный в современном linux интерактивный firewall менеджер c curses интерфейсом. Подобная функциональность оправдывает все усилия по его установке.
Пакеты установки можно взять с сайта разработчика и из репозиториев Ubuntu.
К сожалению оба варианта содержат в себе весьма досадные проблемы:
- Проблемы отображения кириллицы с системной кодировкой UTF8
- Собраны в бинарник только для i386
- init.d скрипт запуска, как я понял, имеет проблемы совместимости с Debian
- В консоль постоянно сыпется мусор, который по-идее должен литься только в лог и то не всегда.
Компиляция пакетов - лишь один из вариантов решения проблемы. Оставим его профессионалам. А мы пойдем другим путём:
Основой будет пакет из Ubuntu, пару органов получим из пакета офф.сайта. Такой вот франкенштейн.
Установка
Устанавливаем утилиту просмотра сетевых соединений conntrack
Качаем 3 пакета из официальных репозиториев Ubuntu (пример для amd64)
Далее донором будет вполне подходящий i386 пакет из официального сайта.
Выкапываем тело из официального могильника
Пересаживаем органы из одного тела в другое
Рисуем магическое заклинание
И оживляем тело.
Установка завершена. 8)
Настройка rsyslog
или одной строкой
Настраиваем vuurmuur (Настройки vuurmuur --> Ведение журналов)
Настройка
1. Настраиваем пути к служебным утилитам Vuurmuur Config --> General
2. Настраиваем interfaces, т.е. указываем с какими сетевыми картами будем работать.
Будьте внимательны - опция Active в настройках должна быть Yes, иначе Vuurmuur будет их игнорировать.
3. Смотрим Services, если нет нужных добавляем свои (версия от Ubuntu не содержит служб вообще, но позволяет добавлять новые). Я добавил входящий порт для Web морды SWAT.
4. Настраиваем Zones, т.е. делим и\или объединяем наши сети в "зонах" на "свои" и "чужие". Каждая "зона" может содержать несколько сетей, хостов (т.е. компьютеров в сети) и групп хостов. Я создал две.
5. В каждую из "зон" я добавил по одной соответствующей ей сети: интернет
6. В "домашнюю зону" я добавил хост, т.к. для него будут отдельные правила доступа.
7. Настраиваем "rules", т.е. правила доступа в сети. Ниже переброс портов на комп локальной сети временно отключен.
Настройки применяем в главном меню нажав F11.
Подсчёт трафика
В текущей стабильной версии подсчет трафика невозможен из-за бага
Решение проблем.
Диагностика DNS
Устанавливаем dnsutils: - получаем утилиту nslookup, позволяющую быстро диагностировать проблемы преобрзования доменных имен в IP адреса.
Или более мощный варинант
Нагрузка на сеть
Устанавливаем nethogs: - получаем утилиту наглядно отображающую какой процесс насколько сильно и какую нагружает сетевую карту.
Анонимный доступ в интернет
Динамическая регистрация в DNS
Теперь служба будет автоматически обновлять Ваш IP в DNS сервере при его изменении.
Удаленный доступ к консоли
Устанавливаем ssh: - комплекс программ, позволяющих соединяться с удалёнными машинами по защищённому каналу и выполнять команды в консоли:
Этот метапакет содержит программу клиента ssh и службу sshd, обрабатывающую входящие ssh подключения к вашему компьютеру.
Авторизация по ключам
Генерация ключей
Вариaнт 1 (подходит для putty и native ssh клиентов Linux)
В итоге получаем в "/user/.ssh/" два файла "newserver.key" и "newserver.key.pub"
Вариaнт 2 (для всех + проприетарный Bitvise Tunnelier)
К сожалению, я не нашёл способа сконвертировать OpenSSH ключи в понятный Tunnelier-у формат. Поэтому действовать будем от обратного.
На Windows машине запускаем Bitvise Tunnelier. На вклaдке "Login" выбираем раздел "Authentickation" --> "Use keypair manager". В новом окне жмём "Generate New . ", выставляем опции на свой вкус --> "Generate". Далее выбираем "Export" и сохраняем любым удобным способом публичный ключ в формате OpenSSH в файл /user/.ssh/newserver.key.pub на ssh сервере.
Для использования в других ssh клиентах аналогично экспортируем и закрытый ключ. В итоге получаем в "/user/.ssh/" два файла "newserver.key" и "newserver.key.pub"
Настройка сервера
Перемещаем открытый ключ в список разрешённых ключей Например так
Правим конфигурацию сервера
Проверяем права доступа, должно быть так
Если права доступа отличаются, то выставляем правильные:
При появлении проблем доступа смотрим лог
Настройка клиента
Выбираем пользователя на клиенте под которым будем логиниться в ssh. Например это будет "user". Логинимся по юзером. Любым удобным способом копируем сгенерированный ранее файл newserver.key в папку /home/user/.ssh. Если хочется, чтобы ssh клиент подхватывал ключ автоматически, сохраняем ключ с новыми именем "id_dsa"
Выставляем права доступа, иначе ssh клиент проигнорирует ключ.
Запускаем ssh клиента.
Всё должно работать.
Настройка Putty
К сожалению, Putty не понимает ключи в формате OpenSSH. Поэтому загружаем latest development snapshot Puttygen. Обычный Puttygen нам не подойдёт.
Скармливаем проге наш newserver.key (Conversions --> Import key), если нужно вводим пароль для доступа ключу. Получаем окно
Если надо меняем комментарий и пароль доступа к ключу. В разделе "Parameters" рекомендую выбрать SSH-2 RSA и 2048 bits. Далее жмём "Save private key" и получаем ключ в формате ppk, пригодный для скармливания обычному Putty в разделе Сonnection --> SSH --> Auth
UFW (Uncomplicated Firewall) – это удобный интерфейс iptables, предназначенный для упрощения процесса настройки брандмауэра. Инструмент iptables надёжный и гибкий, но новичкам непросто настроить его самостоятельно.
Данный мануал поможет вам настроить брандмауэр с помощью UFW на виртуальном сервере Debian 10.
Требования
Для работы вам нужен сервер Debian 10, настроенный по этому мануалу (разделы 1-3).
1: Установка UFW
В Debian инструмент UFW не установлен по умолчанию. Если вы выполнили мануал по начальной настройке, значит, вы уже установили его. Если нет, введите команду:
sudo apt install ufw
2: Использование IPv6 (опционально)
Данный мануал предназначен для IPv4, но он подойдёт и для IPv6.
Если на вашем сервере Debian включен протокол IPv6, убедитесь, что UFW поддерживает его. Откройте конфигурации UFW:
sudo nano /etc/default/ufw
Убедитесь, что в настройках есть строка:
Сохраните и закройте файл.
После включения UFW будет поддерживать правила для протоколов IPv4 и IPv6.
Прежде чем приступить к работе над правилами, нужно убедиться, что брандмауэр поддерживает соединения SSH. Для этого ознакомьтесь с политикой UFW по умолчанию.
3: Политика по умолчанию
Начиная настройку брандмауэра, вы должны продумать и определить его политику по умолчанию. Эти правила управляют обработкой трафика, который не отвечает другим правилам. По умолчанию UFW сбрасывает все входящие и разрешает все исходящие соединения. Это значит, что другие пользователи не смогут получить доступ к вашему облачному серверу, но все установленные на сервере приложения могут взаимодействовать с внешними приложениями.
Чтобы вернуться к исходным правилам, введите команды:
sudo ufw default deny incoming
sudo ufw default allow outgoingЕсли вы настроили пользовательский набор правил, эти команды сбросят его и восстановят исходный набор. Теперь брандмауэр будет сбрасывать все входящие и поддерживать исходящие соединения.
Стандартные правила брандмауэра подходят для персональных компьютеров; серверам обычно необходимо принимать входящий трафик.
4: Настройка соединений SSH
Чтобы разблокировать соединения SSH, введите:
sudo ufw allow ssh
Это правило разрешит входящие соединения по порту 22 (порт SSH по умолчанию). UFW знает имена некоторых сервисов (в том числе и SSH), которые перечислены в файле /etc/services.
Вместо названия сервиса в правиле можно указать порт. Например:
sudo ufw allow 22
Если вы используете нестандартный порт для SSH, укажите его в команде. К примеру, если SSH прослушивает порт 2222, нужно ввести:
sudo ufw allow 2222
5: Включение UFW
Чтобы включить брандмауэр UFW, введите:
sudo ufw enable
Вы получите предупреждение:
command may disrupt existing ssh connections
Это означает, что команда может сбросить все текущие ssh-соединения. Поскольку только что вы разблокировали трафик ssh, этого не произойдёт. Можно нажать y и Enter, чтобы продолжить.
Теперь брандмауэр включен. Чтобы просмотреть текущий набор правил, введите:
sudo ufw status verbose
6: Поддержка других соединений
Теперь разблокируйте другие соединения, которые нужны для работы вашего сервера. Список необходимых сервисов индивидуален для каждого сервера.
Ниже мы приведём несколько примеров правил наиболее востребованных сервисов.
Настройка диапазонов портов
UFW позволяет разблокировать необходимый диапазон портов. Некоторые приложения используют сразу несколько портов.
К примеру, чтобы разрешить трафик X11, нужно разблокировать порты 6000-6007:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udpУказывая диапазон портов, вы должны указать протокол (tcp или udp). Если вы не сделаете этого, UFW будет использовать оба протокола (в большинстве случаев это нормально).
Настройка IP-адресов
Также UFW может поддерживать трафик определённых IP-адресов. К примеру, чтобы разрешить доступ IP-адресу 203.0.113.4, нужно ввести from и сам адрес:
sudo ufw allow from 203.0.113.4
Вы можете ограничить доступ для определенного IP-адреса конкретным портом с помощью опции to any port. Например, чтобы разрешить IP-адресу 203.0.113.4 SSH-доступ, используйте:
sudo ufw allow from 203.0.113.4 to any port 22
Настройка подсетей
Чтобы разблокировать в брандмауэре подсеть IP-адресов, используйте CIDR-нотации для определения маски подсети. К примеру, чтобы разрешить трафик от диапазона IP-адресов 203.0.113.1-203.0.113.254 , нужно ввести:
sudo ufw allow from 203.0.113.0/24
Аналогичным образом можно указать порт, доступ к которому есть у подсети. Например, чтобы открыть доступ к порту 22, нужно ввести:
sudo ufw allow from 203.0.113.0/24 to any port 22
Настройка сетевых интерфейсов
Правила брандмауэра могут применяться к конкретному интерфейсу. Для этого нужно ввести allow in on, а затем указать имя этого интерфейса.
Прежде чем продолжить, просмотрите свои сетевые интерфейсы.
ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .Имена интерфейсов выделены красным (обычно они называются eth0, enp3s2 и т.п.).
sudo ufw allow in on eth0 to any port 80
Чтобы сервер баз данных MySQL (порт 3306) мог прослушивать соединения интерфейса частной сети eth1, нужно ввести:
sudo ufw allow in on eth1 to any port 3306
7: Блокирование соединений
По умолчанию UFW блокирует все входящие соединения. В целом это очень надежная политика.
Однако иногда вам может потребоваться заблокировать определенные подключения на основе IP-адреса или подсети (например, если вы знаете, что ваш сервер регулярно подвергается атакам оттуда).
Если вы хотите изменить политику брандмауэра по умолчанию на allow, вам нужно уметь блокировать трафик определённых вредоносных IP-адресов или подсетей.
Правила, блокирующие трафик, пишутся точно так же, только вместо allow используется deny.
Чтобы заблокировать все соединения адреса 203.0.113.4, введите команду:
sudo ufw deny from 203.0.113.4
8: Удаление правил
Существует два способа удалить правило: указать номер правила или само правило.
Удаление правила по его номеру
Для начала просмотрите список существующих правил. Для этого запросите состояние брандмауэра с опцией numbered.
sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywheresudo ufw delete 2
Брандмауэр запросит подтверждение.
Примечание: Если сервер поддерживает IPv6, нужно удалить соответствующее правило и для этого протокола.
Удаление самого правила
sudo ufw delete allow 80
Этот метод работает и для IPv4, и для IPv6.
9: Проверка состояния и правил UFW
Чтобы проверить состояние UFW, введите:
sudo ufw status verbose
По умолчанию брандмауэр UFW отключен:
Если брандмауэр включен, на экране появится его состояние и список правил. К примеру, если он поддерживает соединения SSH (порт 22), вывод будет выглядеть так:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere10: Отключение или сброс правил UFW (опционально)
Если вы хотите отключить брандмауэр UFW, введите команду:
sudo ufw disable
Все правила будут отключены.
Если вы хотите сбросить текущий набор правил UFW, запустите:
Эта команда сбросит все текущие правила. Имейте в виду: при этом политика брандмауэра по умолчанию не будет восстановлена.
После этого вы можете добавить новые правила.
Заключение
Теперь ваш брандмауэр поддерживает SSH-соединения. Также вы знаете основные команды для управления UFW. Обязательно откройте все необходимые входящие соединения и заблокируйте порты, которые не используются.
Читайте также:
- Apache2