Как защитить linux сервер

Обновлено: 07.07.2024

Никто из нас не хочет, чтобы личная информация попала в чужие руки. Но как защитить систему от атак и хищений данных? Неужели придется читать километровые мануалы по настройке и алгоритмам шифрования? Совсем не обязательно. В этой статье я расскажу, как сделать Linux-систему безопасной буквально за 30 минут.

Введение

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

Когда я потерял смартфон, мне сильно повезло, что установленный на него антивор оказался работоспособным и позволил удаленно стереть все данные из памяти девайса. Когда я по невнимательности открыл SSH-порт на домашней машине с юзером без пароля (!) во внешний мир (!!), мне сильно повезло, что на машину пробрались скрипт-кидди, которые кроме смешной истории шелла не оставили никаких серьезных следов своего пребывания в системе. Когда я случайно опубликовал в интернете листинг со своим паролем от Gmail, мне сильно повезло, что нашелся добрый человек, который предупредил меня об этом.

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

Эта статья — гайд параноидального юниксоида, посвященный тотальной защите Linux-машины от всего и вся. Я не решусь сказать, что все описанное здесь обязательно к применению. Совсем наоборот, это сборник рецептов, информацию из которого можно использовать для защиты себя и данных на тех рубежах, где это нужно именно в твоей конкретной ситуации.

Пароль!

Все начинается с паролей. Они везде: в окне логина в Linux-дистрибутиве, в формах регистрации на интернет-сайтах, на FTP- и SSH-серверах и на экране блокировки смартфона. Стандарт для паролей сегодня — это 8–12 символов в разном регистре с включением цифр. Генерировать такие пароли своим собственным умом довольно утомительно, но есть простой способ сделать это автоматически:

Никаких внешних приложений, никаких расширений для веб-браузеров, OpenSSL есть на любой машине. Хотя, если кому-то будет удобней, он может установить и использовать для этих целей pwgen (поговаривают, пароль получится более стойким):

Где хранить пароли? Сегодня у каждого юзера их так много, что хранить все в голове просто невозможно. Довериться системе автосохранения браузера? Можно, но кто знает, как Google или Mozilla будет к ним относиться. Сноуден рассказывал, что не очень хорошо. Поэтому пароли надо хранить на самой машине в зашифрованном контейнере. Отцы-основатели рекомендуют использовать для этого KeePassX. Штука графическая, что не сильно нравится самим отцам-основателям, но зато работает везде, включая известный гугль-зонд Android (KeePassDroid). Останется лишь перекинуть базу с паролями куда надо.

В KeePassX есть свой генератор паролей

В KeePassX есть свой генератор паролей

Шифруемся

В Linux можно найти тонны средств шифрования всего и вся, от разделов на жестком диске до одиночных файлов. Три наиболее известных и проверенных временем инструмента — это dm-crypt/LUKS, ecryptfs и encfs. Первый шифрует целые диски и разделы, второй и третий — каталоги с важной информацией, каждый файл в отдельности, что очень удобно, если потребуется делать инкрементальные бэкапы или использовать в связке с Dropbox. Также есть несколько менее известных инструментов, включая TrueCrypt например.

Сразу оговорюсь, что шифровать весь диск целиком — задача сложная и, что самое важное, бесполезная. Ничего особо конфиденциального в корневом каталоге нет и быть не может, а вот домашний каталог и своп просто кладезь инфы. Причем второй даже больше, чем первый, так как туда могут попасть данные и пароли уже в расшифрованном виде (нормальные программеры запрещают системе скидывать такие данные в своп, но таких меньшинство). Настроить шифрование и того и другого очень просто, достаточно установить инструменты ecrypts:

И, собственно, включить шифрование:

Далее достаточно ввести свой пароль, используемый для логина, и перезайти в систему. Да, все действительно так просто. Первая команда зашифрует и перемонтирует своп, изменив нужные строки в /etc/fstab. Вторая — создаст каталоги

/Private, в которых будут храниться зашифрованные и расшифрованные файлы соответственно. При входе в систему будет срабатывать PAM-модуль pam_ecryptfs.so, который смонтирует первый каталог на второй с прозрачным шифрованием данных. После размонтирования

/Private окажется пуст, а

/.Private будет содержать все файлы в зашифрованном виде.

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

/Dropbox. Делается это так:

Кстати, места на диске должно быть в 2,5 раза больше, чем данных у vasya, так что рекомендую заранее почиститься. После завершения операции следует сразу войти под юзером vasya и проверить работоспособность:

Если все ок, незашифрованную копию данных можно затереть:

Ecryptfs предупреждает нас

Ecryptfs предупреждает нас

Заметаем следы

ОK, пароли в надежном месте, личные файлы тоже, что теперь? А теперь мы должны позаботиться о том, чтобы какие-то куски наших личных данных не попали в чужие руки. Ни для кого не секрет, что при удалении файла его актуальное содержимое остается на носителе даже в том случае, если после этого произвести форматирование. Наши зашифрованные данные будут в сохранности даже после стирания, но как быть с флешками и прочими картами памяти? Здесь нам пригодится утилита srm, которая не просто удаляет файл, но и заполняет оставшиеся после него блоки данных мусором:

Как всегда, все просто до безобразия. Далее, если речь идет о всем носителе, то можно воспользоваться старым добрым dd:

Эта команда сотрет все данные на флешке sdb. Далее останется создать таблицу разделов (с одним разделом) и отформатировать в нужную ФС. Использовать для этого рекомендуется fdisk и mkfs.vfat, но можно обойтись и графическим gparted.

Предотвращение BruteForce-атак

В Ubuntu/Debian для установки набираем:

Конфиги находятся в каталоге /etc/fail2ban. После изменения конфигурации следует перезапускать fail2ban командой:

Угроза извне

Теперь позаботимся об угрозах, исходящих из недр всемирной паутины. Здесь я должен был бы начать рассказ об iptables и pf, запущенном на выделенной машине под управлением OpenBSD, но все это излишне, когда есть ipkungfu. Что это такое? Это скрипт, который произведет за нас всю грязную работу по конфигурированию брандмауэра, без необходимости составлять километровые списки правил. Устанавливаем:

Для включения ipkungfu открываем файл /etc/default/ipkungfu и меняем строку IPKFSTART = 0 на IPKFSTART = 1. Запускаем:

Дополнительно внесем правки в /etc/sysctl.conf:

Выявляем вторжения

Snort — один из любимейших инструментов админов и главный фигурант всех руководств по безопасности. Штука с долгой историей и колоссальными возможностями, которой посвящены целые книги. Что он делает в нашем гайде по быстрой настройке безопасной системы? А здесь ему самое место, Snort можно и не конфигурировать:

Все! Я не шучу, стандартных настроек Snort более чем достаточно для защиты типовых сетевых сервисов, если, конечно, они у тебя есть. Нужно только время от времени просматривать лог. А в нем можно обнаружить строки типа этих:

Упс. Кто-то пытался вызвать переполнение буфера в MySQL. Тут сразу есть и ссылочка на страницу с детальным описанием проблемы. Красота.

Кто-то наследил…

Кто-то особенно умный смог обойти наш брандмауэр, пройти мимо Snort, получить права root в системе и теперь ходит в систему регулярно, используя установленный бэкдор. Нехорошо, бэкдор надо найти, удалить, а систему обновить. Для поиска руткитов и бэкдоров используем rkhunter:

Софтина проверит всю систему на наличие руткитов и выведет на экран результаты. Если зловред все-таки найдется, rkhunter укажет на место и его можно будет затереть. Более детальный лог располагается здесь: /var/log/rkhunter.log. Запускать rkhunter лучше в качестве cron-задания ежедневно:

Заменяем email-адрес Васи на свой и делаем скрипт исполняемым:

Базу rkhunter рекомендуется время от времени обновлять с помощью такой команды:

Ее, кстати, можно добавить перед командой проверки в cron-сценарий. Еще два инструмента поиска руткитов:

По сути, те же яйца Фаберже с высоты птичьего полета, но базы у них различные. Возможно, с их помощью удастся выявить то, что пропустил rkhunter. Ну и на закуску debsums — инструмент для сверки контрольных сумм файлов, установленных пакетов с эталоном. Ставим:

Как всегда? запуск можно добавить в задания cron.

rkhunter за работой

rkhunter за работой

В моей системе руткитов нет

В моей системе руткитов нет

За пределами

Теперь поговорим о том, как сохранить свою анонимность в Сети и получить доступ к сайтам и страницам, заблокированным по требованию различных организаций-правообладателей и прочих Мизулиных. Самый простой способ сделать это — воспользоваться одним из тысяч прокси-серверов по всему миру. Многие из них бесплатны, но зачастую обрезают канал до скорости древнего аналогового модема.

Чтобы спокойно ходить по сайтам и только в случае необходимости включать прокси, можно воспользоваться одним из множества расширений для Chrome и Firefox, которые легко находятся в каталоге по запросу proxy switcher. Устанавливаем, вбиваем список нужных прокси и переключаемся на нужный, увидев вместо страницы табличку «Доступ к странице ограничен по требованию господина Скумбриевича».

В тех ситуациях, когда под фильтр попал весь сайт и его адрес внесли в черный список на стороне DNS-серверов провайдеров, можно воспользоваться свободными DNS-серверами, адреса которых опубликованы здесь. Просто берем два любых понравившихся адреса и добавляем в /etc/resolv.conf:

Чтобы разного рода DHCP-клиенты и NetworkManager’ы не перезаписали файл адресами, полученными от провайдера или роутера, делаем файл неперезаписываемым с помощью расширенных атрибутов:

После этого файл станет защищен от записи для всех, включая root.

Чтобы еще более анонимизировать свое пребывание в Сети, можно воспользоваться также демоном dnscrypt, который будет шифровать все запросы к DNS-серверу в дополнение к прокси-серверу, используемому для соединения с самим сайтом. Устанавливаем:

Указываем в /etc/resolv.conf loopback-адрес:

Кстати, версии dnscrypt есть для Windows, iOS и Android.

Луковая маршрутизация

Что такое луковая маршрутизация? Это Tor. А Tor, в свою очередь, — это система, которая позволяет создать полностью анонимную сеть с выходом в интернет. Термин «луковый» здесь применен относительно модели работы, при которой любой сетевой пакет будет «обернут» в три слоя шифрования и пройдет на пути к адресату через три ноды, каждая из которых будет снимать свой слой и передавать результат дальше. Все, конечно, сложнее, но для нас важно только то, что это один из немногих типов организации сети, который позволяет сохранить полную анонимность.

Тем не менее, где есть анонимность, там есть и проблемы соединения. И у Tor их как минимум три: он чудовищно медленный (спасибо шифрованию и передаче через цепочку нод), он будет создавать нагрузку на твою сеть (потому что ты сам будешь одной из нод), и он уязвим для перехвата трафика. Последнее — естественное следствие возможности выхода в интернет из Tor-сети: последняя нода (выходная) будет снимать последний слой шифрования и может получить доступ к данным.

Тем не менее Tor очень легко установить и использовать:

Чтобы введенный в командной строке пароль не был сохранен в истории, можно использовать хитрый трюк под названием «добавь в начале команды пробел».

Именно ecryptfs используется для шифрования домашнего каталога в Ubuntu.

Борьба с флудом

Приведу несколько команд, которые могут помочь при флуде твоего хоста.

Подсчет количества коннектов на определенный порт:

Подсчет числа «полуоткрытых» TCP-соединений:

Просмотр списка IP-адресов, с которых идут запросы на подключение:

Анализ подозрительных пакетов с помощью tcpdump:

Дропаем подключения атакующего:

Ограничиваем максимальное число «полуоткрытых» соединений с одного IP к конкретному порту:

Отключаем ответы на запросы ICMP ECHO:

Выводы

Вот и все. Не вдаваясь в детали и без необходимости изучения мануалов мы создали Linux-box, который защищен от вторжения извне, от руткитов и прочей заразы, от непосредственно вмешательства человека, от перехвата трафика и слежки. Остается лишь регулярно обновлять систему, запретить парольный вход по SSH, убрать лишние сервисы и не допускать ошибок конфигурирования.

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

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

Если это домашний компьютер, то про безопасность, возможно, и нет смысла беспокоиться настолько сильно, достаточно будет надежных паролей и закрытия доступа к портам из сети интернет. Но в случае публичного сервера стоит обратить внимание на обеспечение его защиты. Эта инструкция подойдет для любого дистрибутива, неважно, что вы используете CentOS, Fedora, Red Hat Enterprise Linux или Ubuntu и Debian.

Настройка безопасности сервера Linux

1. Обновления системы

Несмотря на простоту этого пункта, он один из самых важных. В программном обеспечении постоянно находят и исправляют различные уязвимости. Если вы хотите чтобы ваш сервер был в безопасности, держите всё программное обеспечение в актуальном состоянии. Возьмите за правило время от времени проводить обновление системы. В Ubuntu или Debian для обновления надо выполнить:

sudo apt update

sudo apt full-update

В Fedora или CentOS надо использовать пакетный менеджер dnf:

sudo dnf update

2. Не используйте незащищённые сервисы

В большинстве сетей имена пользователей, пароли от FTP, Telnet, RSH команд могут быть перехвачены кем-либо из той же самой сети с помощью анализатора пакетов. Общее решение этой проблемы заключается в использовании OpenSSH, SFTP или SFTP, который добавляет SSL или TLS к обычному FTP. Для подключения к серверу удалённо можно использовать ssh, а для передачи файлов либо SSH либо SFTP.

3. Минимум программ и открытых портов

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

sudo nmap -sT адрес_сервера

Вы можете узнать PID процесса, который использует порт с помощью команды ss:

sudo ss -lptn 'sport = :53'

Информацию о процессе по его PID вы можете узнать с помощью команды ps. Например:

Используйте свой пакетный менеджер чтобы посмотреть установленные программы и удалить все ненужные. Например, для Debian:

yum list installed
yum list пакет
yum remove пакет

dpkg --list
dpkg --info пакет
apt remove пакет

4. SELinux или Apparmor

Операционная система Linux поставляется с различными патчами безопасности, которые могут быть использованы для защиты от неправильной конфигурации или вредоносных программ. Вы можете использовать также такие дополнительные системы контроля доступа для приложений как SELinux или AppArrmor.

SELinux предоставляет различные политики безопасности для ядра Linux. Эта надстройка позволяет контролировать доступ процессов к файлам в файловой системе. К тому или иному ресурсу может получить доступ только программа, роль которой позволяет это делать и даже права суперпользователя не имеют значения. SELinux намного увеличивает безопасность системы Linux, поскольку даже root здесь считается обычным пользователем. Подробнее о настройке SELinux описано в отдельной статье.

Система AppArmor используется в Ubuntu, она работает похожим образом на SELinux. Здесь для каждого приложения создаются профили, в которых описано к каким файлам приложение может получить доступ, а ко всему остальному у него доступа не будет. Подробнее про AppArrmor читайте здесь.

5. Учетные записи пользователей

Не используйте пользователя root для администрирования сервера. Создайте для этого не привилегированного пользователя с помощью команд useradd и usermod/ Убедитесь, что у вас хороший и сильный пароль, он должен содержать, по крайней мере, восемь символов, желательно в разном регистре, среди которых должны встречаться специальные символы или цифры. Например, 8 символов, из которых семь буквы и один символ или цифра. Для генерации паролей можно воспользоваться утилитой pwgen или любой другой утилитой из этой статьи.

6. Регулярная смена пароля

Команда change позволяет указать количество дней до даты принудительной смены пароля. Эта информация используется системой для определения момента, когда пользователь должен его изменить. Эти настройки находятся в /etc/login.defs. Чтобы отключить старение пароля введите следующую команду:

change -l имя_пользователя

Чтобы получить информацию о строке годности пароля введите команду:

Также вы можете все настроить вручную, в файле /etc/shadow:

  • Минимум дней - минимальный интервал между сменами паролей, то есть насколько часто пользователь может менять пароль.
  • Максимум дней - сколько дней будет годен пароль, по истечении этого срока пользователь будет вынужден поменять пароль.
  • Предупреждение - количество дней после которых пользователь будет предупрежден, что ему нужно сменить пароль.
  • Строк_годности - количество дней с первого января 1970 когда аккаунт будет полностью отключен.

Рекомендуется использовать такую команду, вместо редактирования файла /etc/shadow вручную:

chage -M 60 -m 7 -W 7 имя_пользователя

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

7. Использование fail2ban

В операционной системе Linux вы можете использовать команду faillog, чтобы посмотреть неудачные попытки входа пользователей. Также с помощью нее вы можете установить лимит неудачных попыток входа. Вся информация о неудачных попытках входа хранится в файле /var/log/faillog или /var/log/secure. Чтобы ее посмотреть наберите:

8. Отключение входа для суперпользователя

На одном из предыдущих шагов вы создали непривилегированного пользователя, его и следует использовать для авторизации на сервере по SSH, а вход от имени Root пользователя следует отключить. Для этого в конфигурационном файле /etc/sshd_config надо изменить значение строчки PermitRootLogin с Yes на No:

sudo vi /etc/sshd_config


9. Настройка брандмауэра

Используйте брандмауэр. Он позволяет закрыть доступ к портам, которые не должны быть видны из сети, а также отфильтровать нежелательный трафик. Разрешите в брандмауэре только нужные порты, а остальные пусть будут закрытыми. Про настройку iptables можно почитать в статье iptables для чайников. А ещё есть ufw и firewalld.

10. Настройка ядра

В файле /etc/sysctl.conf хранятся настройки ядра, которые загружаются и применяются во время запуска системы. Чтобы включить защиту от переполнения буфера execshield, добавьте:

Включить защиту от подделывания IP:

Отключить перенаправление IP адресов:

Игнорировать широковещательные запросы:

Логгировать все подделанные пакеты:

11. Разбивка диска на разделы

Разделение жесткого диска на разделы в зависимости от назначения файлов улучшает безопасность ОС Linux. Рекомендуется делать отдельные разделы для таких директорий:

Сделайте отдельные разделы для корневых директорий Apache и FTP серверов. Откройте файл /etc/fstab и выставьте специальные опции для нужных разделов:

  • noexec - не выполнять любые программы или исполняемые файлы на этом разделе, разрешены только скрипты
  • nodev - не разрешать символические или специальные устройства на этом разделе.
  • nosuid - не разрешать SUID / SGID доступ для программ из этого раздела.

12. Отключение IPv6

Протокол интернета нового поколения IPv6 в будущем заменит уже используемый IPv4. Но на данный момент нет инструментов, позволяющих проверить безопасность сети на основе IPv6. Многие дистрибутивы Linux разрешают использование протокола IPv6 по умолчанию. Хакеры могут отправлять нежелательный трафик и администраторы не смогут его отследить. Так что если эта служба вам не нужна отключите её. Про отключение IPv6 в Ubuntu написано здесь.

13. Программы с SUID и SGID битами

Все исполняемые файлы, для которых включен флаг SUID или SGID потенциально опасны. Этот флаг означает, что программа будет выполняться с правами суперпользователя. А это значит, что если в программе есть какая-нибудь уязвимость или баг, то локальный или удаленный пользователь сможет использовать этот файл для атаки на систему. Найдите все файлы с SUID битом с помощью следующей команды:

find / -perm +4000

Затем файлы с установленным SGID битом:

find / -perm +2000

Или можно скомбинировать всё это в одной команде:

find / \( -perm -4000 -o -perm -2000 \) -print


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

14. Общедоступные файлы

Также желательно найти файлы, которые могут изменять все пользователи в системе. Для этого используйте такую команду:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Теперь вам нужно проверить правильно ли выставлены права для группы и владельца этого каждого файла и не несет ли это угрозы безопасности.

Также желательно найти все файлы не принадлежащие никому:

find / -xdev \( -nouser -o -nogroup \) -print

15. Логирование и аудит

Настройте логгирование и аудит для сбора и сохранения всех неудачных попыток входа и попыток взлома. По умолчанию все логи или, по крайней мере, большинство из них находятся в папке /var/log/. Подробнее, о том, за что отвечают определенные лог файлы мы говорили в отдельной статье.

Вы можете смотреть логи с помощью таких утилит, как logwatch или logcheck. Они очень сильно упрощают чтение логов. Вы можете просматривать не весь файл, а только интересующие вас события, а также отправлять себе уведомление на электронный адрес.

  • События запуска и выключения системы
  • Дата и время события
  • Пользовательские события (например доступ к определенному файлу)
  • Тип события (редактирование, доступ, удаление, запись, обновление и т д)
  • Удачность или сбой при выполнении события
  • Запись событий изменения настроек сети
  • Запись изменения пользователей и групп
  • Мониторинг изменений файлов

16. Настройка SSH сервера

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

Поэтому рекомендуется отключить использование протокола SSH1, в пользу более защищенного SSH2. Все настройки сервера ssh находятся в файле /etc/ssh/sshd_config. Разрешите только использование протокола 2:

Выше я предлагал запретить вход от имени суперпользователя и использовать для администрирование сервера пользователя с обычными привилегиями и утилиту sudo. Но ещё лучше будет, если вы настроите авторизацию по ключу и отключите полностью авторизацию по паролю. Для этого после настройки авторизации по ключу найдите в /etc/ssh/sshd_config такие строки и приведите их к такому виду:

PasswordAuthentication no
UsePAM no
ChallengeResponseAuthentication no

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

17. Установка IDS

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

Хорошая практика - развернуть подобное программное обеспечение, перед тем как система станет доступной из интернета. Вы можете установить AIDE, это HIDS (Host based IDS) которая может контролировать все аспекты внутреннего устройства вашей системы.

Snort - это программное обеспечение для обнаружения попыток вторжения из сети. Она способна выполнять анализ и журналирование пакетов и анализировать сетевой трафик в реальном времени.

Выводы

Теперь безопасность ос linux на вашем компьютере будет намного увеличена. Не забывайте ставить сложные пароли и время от времени проверять систему на руткиты. Напишите в комментариях свой любимый инструмент для обеспечения безопасности системы.

Нет похожих записей

Оцените статью:

(9 оценок, среднее: 5,00 из 5)

Об авторе

8 комментариев

Хорошая статья. Напишите пожалуйста статью про безопасность Linux на домашнем ПК. Я часто пользуюсь торрент трекерами, в основном для скачивания фильмов и сериалов. Качаю со строго определенных трекеров, проверенных годами сидения под виндой, в общем пара тройка трекеров которым я доверяю хотелось бы сохранить эту возможность=)

Пожалуйста дайте инструкцию как удалить Х сервер

sudo apt remove --purge xserver-xorg Вместе с программой удаляться все пакеты, которые от нее зависят.

Имхо, альтернативно SELinux, можно использовать docker..

sudo apt autoremove --purge
autoremove - удаление зависимостей
--purge - конфигурационных файлов

Ой холиварная статья то! :))

1. Обновления системы: spacewalk в руки, удобное дело. Накатывать вручную печально, ставить на автообновление - есть шанс проснуться от матюгов мониторинга, так как какой-то сервис может потребовать дополнительных настроек и просто не запустится.
2. Открытые порты lsof -Pni | grep LISTEN и это уже немало покажет.Смысла нет самого себя сканировать.
3. Регулярная смена пароля: даже майки от этого отказались. Если нормальный пасс - он будет жить долго и счастливо. Если ломанут - сервис будут использовать сразу и никто не станет ждать ..дцать дней чтобы снова зайти.
4. fail2ban - шикарен на серверах, наличие которого не сильно важно самому владельцу. Он или будет работать совсем слабо или будет слишком активен и, в итоге, будет больше мешать, чем спасать. Про переполнение буфера в iptables молчу, на эти грабли и крупный игрок IT сферы уже натыкался при мне дважды.
5. Отключение входа root - зачем? Чтобы потом заходить пользователем и сразу sudo su - ? Ограничить ключами и только с нужных хостов/сетей (hosts.allow и hosts.deny прекрасно работают в этом плане)
6. Про настройки ядра - тут надо смотреть на роли серверов.
7. Отключение ipv6 - вот это вообще странно. Доля трафика на 6 версии растёт и на своих машинках давно уже вижу что за 20-30 процентов заваливает. А если где-то используются пиринговый технологии, то там и вообще под 80. Лучше научится пользоваться, чем бездумно отключать.

По хорошему, лучше каждый пункт разобрать и решить, где использовать, где нет, а где сделать с точностью до наоборот. 🙂 И немаловажно: научится использовать хотя бы Ansible+Git. Если на прод-машинки человек заходит по SSH, значит он уже как убегающий шпион - уже проиграл.

Минимум дней - минимальный интервал между сменами паролей, то есть насколько часто пользователь может менять пароль.
Максимум дней - сколько дней будет годен пароль, по истечении этого срока пользователь будет вынужден поменять пароль.
Предупреждение - количество дней после которых пользователь будет предупрежден, что ему нужно сменить пароль.
Строк_годности - количество дней с первого января 1970 когда аккаунт будет полностью отключен.

Чтобы обеспечить повышенный уровень безопасности системы, зачастую можно не прибегать к дорогостоящим специализированным средствам защиты. Добиться этого можно за счет грамотного конфигурирования уже имеющихся штатных механизмов защиты. Рассмотрим действия, которые может выполнить любой системный администратор , чтобы обезопасить Linux-систему .

№ 1. Избегайте использования FTP, Telnet и Rlogin/Rsh

В большинстве вариантов конфигурации сетей можно в той же самой сети с помощью сниффера пакетов ( packet sniffer ) перехватывать имена пользователей, пароли, команды FTP/Telnet/RSH и пересылаемые файлы. Общим решением проблемы является использование OpenSSH, SFTP или FTPS (FTP поверх SSL), которые добавляют к FTP либо SSL, либо шифрование TLS. Для того, чтобы удалить NIS, rsh и другие устаревшие сервисы, наберите следующую команду:

№ 2. Минимизируйте количество установленных приложений для минимизации числа уязвимостей

Вам действительно нужны все виды установленных веб-сервисов? Избегайте устанавливать ненужные приложения с тем, чтобы избежать уязвимостей, имеющихся в этих приложениях. Воспользуйтесь менеджером пакетов RPM, таким как as yum, либо apt-get and/or dpkg to review для просмотра всего набора установленных в системе программ. Удалите все ненужные пакеты.

№ 3. Один сетевой сервис на каждую систему или экземпляр виртуальной машины

Запускайте различные сетевые сервисы на отдельных серверах или отдельных экземплярах виртуальной машины. Это снизит количество сервисов, которые могут подвергнуться опасности. Например, если атакующий успешно попадает внутрь сервиса Apache , он также сможет получить доступ ко всему серверу, в том числе и к другим сервисам, таким как MySQL, почтовый сервер и т. п.

№ 4. Поддерживайте ядро Linux и программы в обновлённом состоянии

Применение всех патчей безопасности является важной частью работы по поддержанию сервера Linux. В Linux есть все необходимые средства для поддержания вашей системы всегда в обновлённом состоянии и для легкого перехода к следующим версиям. Все обновления, касающиеся безопасности, должны изучаться и устанавливаться сразу, как для этого появится возможность. Для того, чтобы установить все обновления, касающиеся безопасности, опять воспользуйтесь менеджером пакетов RPM, таким как yum или apt-get и/или dpkg:

Вы можете сконфигурировать Red hat/CentOS/Fedora Linux так, что yum будет посылать вам по e-mail напоминание о том, что есть обновление. Другая возможность – выполнять все обновления, относящиеся к безопасности, как задания для cron. Под Debian/Ubuntu Linux вы можете использовать apticron для отсылки напоминаний, касающихся безопасности.

№ 5: Используйте расширения Linux, повышающие безопасность

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

№ 6. Политика пользовательских паролей и сильные пароли

Используйте команды useradd/usermod для того, чтобы создавать и работать с регистрационными записями пользователей. Удостоверьтесь в том, что вы используете политику применения хороших и сильных паролей. Например, длина хорошего пароля должна быть не менее 8 символов и в нём должны присутствовать прописные и строчные буквы, цифры, специальные символы и т. п. Самое главное – подобрать пароль, который вы можете запомнить. Используйте такие инструментальные средства, как John the ripper для поиска на вашем сервере слабых пользовательских паролей. Используйте pam_cracklib.so для того, чтобы проверять устойчивость пароля против его подбора по словарю.

№ 7. Запретите прямой доступ в систему с правами root

Никогда не входите в систему как пользователь root. Для выполнения команд уровня root, если это потребуется, вам следует пользоваться командой sudo . Команда sudo существенно повышает безопасность системы и не требует раздавать пароль root другим пользователям и администраторам. Команда sudo также предоставляет простые средства для аудита и отслеживания событий.

№ 8. Защитите сервер от физического доступа к нему

Вы должны защитить консоли Linux-серверов от физического доступа к системе. Сконфигурируйте BIOS и запретите загружаться с таких внешних устройств, как DVDs/CDs/USB. Установите пароль BIOS и пароль загрузки grub с тем, чтобы защитить эти настройки. Все системные блоки должны быть сосредоточены в специально отведённом для этого помещении и персонал, прежде чем получить доступ к вашему серверу, должен пройти в службе безопасности определенную проверку.

№ 9. Отключите ненужные сервисы

Базовая защита от взлома вашего linux сервера. Запрет входа для root пользователя, смена стандартного порта и другие способы защиты.

Гайд по защите Linux сервера от взлома

Каюсь, давным-давно я был молод и силен входил на сервер с помощью root пользователя. Времена меняются, паранойя растет, так что разберемся как не дать школьнику доступ к нашему серверу.

Поскольку мы будем вносить изменения в SSH, важно никогда не закрывать ваше первоначальное SSH-соединение. Вместо этого откройте второй сеанс SSH для тестирования. Это сделано для того, чтобы избежать блокировки вашего сервера в случае ошибки в конфигурации SSH.

Как только все заработает, вы можете безопасно закрывать любые сеансы.

Cтатья не является “рецептом”, в котором надо выполнить все пункты. Некоторые пункты не нужны, если вы выполнили другие. Поэтому выберете только необходимые вам. Я же придерживаюсь следующего рецепта.

Устанавливайте обновления

Эффективность: 🛡️ 🛡️ 🛡️

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

Для CentOS команда на обновление выглядит так

Замена стандартного порта SSH

Эффективность: 🛡️ 🛡️

Один из самых простых способов защититься от неумелых атакующих и тупых ботов – это изменение дефолтного порта подключения по SSH. Большинство ботов сканируют только дефолтный порт, сменив его вы защититесь от ботов работающих на дурака.

Перед сменой порта разберитесь, какой firewall стоит на вашей системе. Например на CentOS 8 это скорее всего firewalld.

Вам необходимо открыть новый порт для ssh, и закрыть старый. Например, если у вас установлен firewalld, а порт вы выбрали 58291, то команды для открытия порта будут такие:

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

После этого необходимо перезапустить службу ssh:

Для входа с использованием нового порта используйте следующий флаг:

Config SSH

Чтобы не запоминать порты ко всем своим серверам, можно воспользоваться файлом

.ssh/config . Создайте этот файл, если его нет на вашей локальной машине.


Пример .ssh/config

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

🔐 Используйте SSH ключ вместо пароля

Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️ 🛡️

Сервер OpenSSH поддерживает различную аутентификацию. Пароли можно угадывать, взламывать или подбирать методом перебора. Ключи SSH не подвержены таким атакам.

Когда вы генерируете ключи SSH, вы создаете пару ключей. Один из них - открытый ключ, другой - закрытый. Открытый ключ устанавливается на серверах, к которым вы хотите подключиться. Закрытый ключ, хранится в безопасности на вашем компьютере.


Схематичный процесс авторизации по SSH ключу

Создание ssh ключей

И так, генерация ключей ssh выполняется командой:

Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке

/.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub.

Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите.

Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.

Никогда и никому не передавайте свой закрытый ключ.

Загрузка ключа на сервер

Самый простой способ скопировать ключ на удаленный сервер - это использовать утилиту ssh-copy-id . Она входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH.

Если вы хотите указать путь до публичного ключа, используйте команду:

При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id_rsa.pub для загрузки его на сервер в файл

/.ssh/authorizedkeys. Дальше вы можете выполнять аутентификацию с помощью этого ключа.

Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог

/.ssh , а затем поместим наш ключ в файл authorized_keys с помощью символа >> , это позволит не перезаписывать существующие ключи:

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

Также необходимо убедиться, что имеется возможность входа по ssh ключу. Для этого в файле /etc/ssh/sshd_config должна присутствовать строка PubkeyAuthentication yes .

После этого вы можете использовать созданный ключ для аутентификации на сервере:

Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа.

🙅‍♂️ Запрет авторизации по паролю

Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️

Логическим продолжением использования ключей SSH является полное отключение аутентификации по паролю для всех пользователей.

Прежде чем запрещать вход по паролю, проверьте возможность входа по ssh ключу.

Нам нужно отредактировать ваш файл конфигурации SSH.

Находим строчку PasswordAuthentication yes и меняем ее на PasswordAuthentication no .

Теперь сохраните файл и перезапустите службу ssh:

Создание нового пользователя

Эффективность: 🛡️ 🛡️ 🛡️

Это плохая практика - входить в систему как root на вашем сервере. Вы должны войти в систему как обычный пользователь и использовать sudo для выполнения действий, требующих привилегий root.

Root«Root» — это учётная запись, которая имеет доступ ко всем без исключения действиям. Да, вообще ко всем.

Более того, вы не должны позволять root входить в ваш SSH-сервер. Подключение должно быть разрешено только обычным пользователям. Если им нужно выполнить административную задачу, им также следует использовать sudo.

Добавим нового пользователя, на замену root.

Если вас не попросили придумать пароль для пользователя, то установите его вручную.

Я предполагаю, что мы заблокируем root пользователя, поэтому после этого добавим пользователя в группу sudo:

На некоторых ОС эта гурппа называется wheel.

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

🙅‍♂️ Запрет доступа root на сервер

Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️

Самый лучший вариант – это когда у root пользователя нет возможности войти на сервер.

Если вы вынуждены разрешить пользователю root вход в систему, вы можете хотя бы заставить его использовать ключи SSH.

Открываем текстовый файл в любом редакторе:

Нас интересует параметр PermitRootLogin :

  • Если вы хотите вообще запретить пользователю root вход в систему, установите PermitRootLogin no .
  • Если вы собираетесь разрешить пользователю root входить в систему, но хотите использовать только SSH-ключи, установите PermitRootLogin prohibit-password .

После внесения вышеуказанных изменений сохраните и закройте файл. Затем перезапустите службу SSH, чтобы внесенные изменения вступили в силу.

Читайте также: