Настройка брандмауэра FirewallD в CentOS 7

Настройка брандмауэра FirewallD в CentOS 7 Хостинг
Содержание
  1. Настраиваем время
  2. Step One — Root Login
  3. About Root
  4. Настройка хранения истории в bash_history
  5. Установка OpenSSH на Windows 10
  6. Step Two — Create a New User
  7. # Установка и настройка фаервола
  8. Указываем сетевые параметры
  9. Установка iftop, atop, htop, lsof на CentOS 7
  10. Автоматическое обновление системы
  11. Настройка Open SSH на Windows 10
  12. Настраиваем firewall
  13. Step Three — Root Privileges
  14. Этап 3. Отключение аутентификации по паролю
  15. Примеры часто используемых команд iptables
  16. Разрешить все
  17. Работа с правилами
  18. Проброс портов (port forwarding)
  19. Один порт (одинаковые порты)
  20. Один порт (разные порты)
  21. Диапазон портов
  22. Стартовая настройка
  23. Настройка по умолчанию
  24. Этап 4. Аутентификация на сервере
  25. Этап 1. Создание ключей
  26. Назначение брандмауэра
  27. Настройка netfilter с помощью iptables
  28. Отключаем флуд сообщений в /var/log/messages
  29. Настройка SSH в CentOS 7
  30. Добавление репозиториев
  31. Ubuntu и CentOS
  32. В Ubuntu
  33. Настройка системной почты
  34. Установка OpenSSH на Ubuntu 20
  35. Брандмауэр в Linux
  36. Step Five — Configure SSH Daemon
  37. Reload SSH
  38. Configuring SSH
  39. Changing SSH Port
  40. Changing Listening Address
  41. Disable Root Login
  42. Change Number of Allowed Sessions and Authentication Attempts
  43. Change Grace Time
  44. Allow SSH through Firewall
  45. Сохранение правил (permanent)
  46. Способ 1. iptables-save (универсальный)
  47. Способ 2. iptables-persistent (Debian/Ubuntu)
  48. Способ 3. service iptables (CentOS)
  49. # SSH-подключение к серверу с аутентификацией по ключу
  50. # Ограничение SSH-доступа для root-пользователя
  51. Настройка OpenSSH на Ubuntu 20
  52. Принцип настройки
  53. Для работы с таблицами (iptables -t)
  54. Команды
  55. Условия
  56. Действия
  57. Видео по настройке CentOS 7
  58. Where To Go From Here?
  59. Этап 2. Копирование открытого ключа на сервер
  60. Способ 1. Копирование открытого ключа с помощью утилиты ssh-copy-id
  61. Способ 2. Копирование открытого ключа с помощью SSH
  62. # Создание нового пользователя

Настраиваем время

Узнать, какое время на сервере можно с помощью команды date:

Либо можете воспользоваться специальной утилитой, которая входит в комплект CentOS 7. Делает она ровно то же самое:

# timedatectl set-timezone Europe/Moscow

В CentOS 7 есть утилита для синхронизации времени chrony. В стандартной установке она должна быть установлена в системе, в минимальной ее нет. Если у вас она не стоит, то устанавливайте вручную:

# yum install chrony

Запускаем chrony и добавляем в автозагрузку:

# systemctl start chronyd
# systemctl enable chronyd

Проверяем, нормально ли запустился:

Все в порядке, сервис работает. После запуска он автоматически синхронизирует время.

Для синхронизации времени вы можете воспользоваться более привычно программой, которая присутствует практически во всех unix дистрибутивах — ntp. Устанавливаем утилиту синхронизации времени ntp в CentOS:

# yum install ntp

Разово синхронизируем время:

# /usr/sbin/ntpdate pool.ntp.org

Если ntpdate не работает, посмотрите материал, может это ваш случай. Запустим демон синхронизации и запишем его запуск в автозагрузку:

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

Не используйте одновременно оба демона синхронизации времени — chrony и ntp. Выберите какой-нибудь один. Лично я не вижу в них разницы, сам чаще всего ставлю привычный ntp.

Step One — Root Login

Complete the login process by accepting the warning about host authenticity, if it appears, then providing your root authentication (password or private key). If it is your first time logging into the server, with a password, you will also be prompted to change the root password.

About Root

First, you will have to install an OpenSSH server on the machine you want to remotely access via SSH. Use the command below to install the OpenSSH server on your CentOS machine:

$ sudo dnf install openssh-server

Enter sudo password and then you will see the installation started. Press y if prompted for confirmation.

Настройка брандмауэра FirewallD в CentOS 7

This should install the OpenSSH server on your system.

Настройка хранения истории в bash_history

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

  • По-умолчанию, сохраняются только последние 1000 команд. Если их будет больше, то более старые будут удаляться и заменяться новыми.
  • Не указаны даты выполнения команд, только их список в порядке выполнения.
  • Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.
  • Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.

Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка). Его можно открыть любым редактором и посмотреть. Для более удобного вывода списка, можно в консоли ввести команду:

и увидеть пронумерованный список. Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:

Так мы увидим все варианты запуска команды yum, которые хранятся в истории. Исправим перечисленные недостатки стандартных настроек хранения истории команд в CentOS 7. Для этого нужно отредактировать файл .bashrc, который находится в том же каталоге, что и файл с историей. Добавляем в него следующие строки:

export HISTSIZE=10000
export HISTTIMEFORMAT=»%h %d %H:%M:%S »
PROMPT_COMMAND=’history -a’
export HISTIGNORE=»ls:ll:history:w:htop»

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

# source ~/.bashrc

Установка OpenSSH на Windows 10

  • В меню «Пуск» нажмите Параметры:
  • Перейдите в раздел Приложения:
  • Выберите Приложения и возможности и нажмите Дополнительные компоненты:
  • Проверьте, установлен ли компонент «Клиент OpenSSH». Для этого в поисковой строке наберите «OpenSSH». Если компонент уже установлен, переходите к шагу Настройка SSH на Windows 10.Если компонент ещё не установлен, используйте PowerShell.

Что такое PowerShell

PowerShell — это утилита командной строки в ОС Windows. Она выпущена в составе Windows 7, Windows 8, Windows 8.1 и Windows 10 как неотъемлемая часть системы.
Управлять ОС через PowerShell можно при помощи командлетов — специальных команд. Командлеты работают аналогично с командами в терминале Linux.

Использование командлетов позволяет:

  • работать с файловой системой и реестром Windows,
  • изменять настройки операционной системы,
  • управлять службами и процессами,
  • устанавливать программы,
  • управлять установленным ПО,
  • встраивать исполняемые компоненты в программы,
  • создавать сценарии, которые помогут автоматизировать администрирование.
  • Перейдите в меню «Пуск». Правой кнопкой мыши кликните на Windows PowerShell и выберите Запуск от имени администратора:
  • Дайте согласие на запуск программы. Для этого нажмите Да:
  • Установите OpenSSH с помощью командлета:Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0После установки вы увидите сообщение. Если для параметра «RestartNeeded» указан статус «True», перезагрузите компьютер.

Готово, вы установили OpenSSH на Windows.

Step Two — Create a New User

Enter a strong password, and repeat it again to verify it.

# Установка и настройка фаервола

Для установки фаервола будем использовать программу-установщик YUM. Как правило, YUM установлен по умолчанию и сразу готов к работе.

Начнём с обновления репозиториев YUM:

Программа-установщик укажет дисковый объём, который будет занят при установке обновлённых пакетов, и попросит согласие на продолжение.

После успешного обновления YUM (в строке выдачи появится сообщение Complete!) можно переходить непосредственно к установке фаервола:

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

Активируем его и запустим:

Активация позволит фаерволу запускаться после перезагрузки сервера.

Сейчас можем проверить, какая зона (группа настроек) активна и какие службы разрешены.

Она выведет на экран активную зону с её настройками.

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

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

Указываем сетевые параметры

Теперь произведем настройку сети в CentOS.  Для этого открываем файл /etc/sysconfig/network-scripts/ifcfg-eth0

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

В поле IPADDR вводим свой адрес, в NETMASK маску сети, в GATEWAY шлюз, DNS1 адрес днс сервера. Сохраняем файл и перезапускаем сеть для применения настроек:

# /etc/init.d/network restart

Установка iftop, atop, htop, lsof на CentOS 7

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

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

# yum install iftop

И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:

# yum -y install htop
# yum -y install atop

Вот как выглядит htop:

Настройка брандмауэра FirewallD в CentOS 7

Для вывода информации о том, какие файлы используются теми или иными процессами, советую поставить утилиту lsof. Она скорее всего рано или поздно пригодится, когда будете диагностировать работу сервера.

# yum install lsof

Рекомендую еще установить несколько нужных и полезных программ, которые часто необходимы, но отсутствуют в минимальной установке — wget, bzip2, traceroute, gdisk.

Читайте также:  Демистификация триггеров SQL: все, что вам нужно знать

# yum install wget bzip2 traceroute gdisk

На этом у меня все. Базовая настройка CentOS 7 закончена, можно приступать к установке и настройке основного функционала.

Автоматическое обновление системы

Для поддержания безопасности сервера на должном уровне необходимо как минимум своевременно его обновлять — как само ядро с системными утилитами, так и остальные пакеты. Можно делать это вручную, но для более эффективной работы лучше автоматизировать рутинные действия. Не обязательно устанавливать обновления автоматически, но как минимум проверять их появление. Я обычно придерживаюсь такой стратегии.

Для автоматической проверки обновлений нам поможет утилита yum-cron. Ставится она традиционно через yum из стандартного репозитория.

# yum install yum-cron

После установки создается автоматическое задание на выполнение утилиты в /etc/cron.daily и /etc/cron.hourly. По-умолчанию, утилита скачивает найденные обновления, но не применяет их. Вместо этого, администратору на локальный почтовый ящик root отправляется уведомление об обновлениях. Дальше вы уже в ручном режиме заходите и решаете, устанавливать обновления или нет в удобное для вас время. Мне такой режим работы видится наиболее удобным, поэтому я не меняю эти настройки.

Настройка Open SSH на Windows 10

  • В меню «Пуск» и кликните на Windows PowerShell:
  • В выводе отобразится справочная информация о командлетах:

Готово, теперь вы можете как открыть доступ по SSH, так и внести дополнительные настройки на сервере.

Настраиваем firewall

Сейчас мы быстро и просто настроим firewall. В CentOS 7 в качестве фаервола выступает iptables. По-умолчанию он запущен. Чтобы посмотреть текущие правила, нужно ввести команду:

# iptables -L -v -n

Сразу хочу предупредить, что не имея доступа к консоли сервера, настраивать firewall плохая идея. Даже если вы очень хорошо понимаете что делаете и проделывали подобное много раз, все равно есть шанс остаться без доступа к серверу. Так что первым делом перед настройкой iptables проверяем доступ к консоли через KVM или физически.

В 7-й версии CentOS для управления iptables разработан новый инструмент под названием firewalld и все управление производится через него. Я не понял зачем это сделали, и не могу сказать, удобнее с ним стало или нет. По мне, так удобнее использовать одни и те же наработки по iptables. Мигрируя от сервера к серверу и от дистрибутива к дистрибутиву, я просто редактирую скрипт настроек фаервола.

Но CentOS зачем-то придумали firewalld, в Ubuntu стоит ufw, но суть одна и та же — это утилиты для конфигурирования iptables, который один и тот же во всех дистрибутивах. Я привык управлять iptables через самописный скрипт, который переношу от сервера к серверу и редактирую под конкретные потребности. Этим скриптом я и поделюсь. Так что для начала остановим и отключим firewalld:

# systemctl stop firewalld
# systemctl disable firewalld
rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’
rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’

Установим утилиты для iptables:

# yum -y install iptables-services

Включим автозапуск iptables:

# systemctl enable iptables

Теперь создадим файл /etc/iptables_rules.sh следующего содержания:

Делаем файл c правилами исполняемым и запускаем:

# chmod 0740 /etc/iptables_rules.sh
# /etc/iptables_rules.sh

Проверяем, применились ли правила:

При каждом запуске файла с правилами iptables, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.

Step Three — Root Privileges

gpasswd demo wheel

Этап 3. Отключение аутентификации по паролю

  • Убедитесь, что вы настроили вход с помощью SSH-ключей для учётной записи root на сервере.
  • Откройте файл конфигурации демона SSH:sudo nano /etc/ssh/sshd_config
  • Найдите в файле директиву PasswordAuthentication. Установите значение no:
  • Сохраните и закройте файл.
  • Перезапустите службу sshd:sudo systemctl restart sshd.service

Готово, вы отключили вход по паролю.

Примеры часто используемых команд iptables

Просмотр правил с их номерами:

iptables -L —line-numbers

Для каждой таблицы смотреть правила нужно отдельно:

iptables -t nat -L —line-numbers

Удалить все правила:

Установить правила по умолчанию:

iptables -P OUTPUT DROP

* в данных примерах по умолчанию для всех входящих (INPUT) и исходящих (OUTPUT) пакетов будет работать запрещающее правило (DROP).

Разрешить все

Способ 1. С помощью добавления правила:

iptables -I INPUT 1 -j ACCEPT

iptables -I OUTPUT 1 -j ACCEPT

iptables -I FORWARD 1 -j ACCEPT

* данные три команды создадут правила, которые разрешают все входящие, исходящие и транзитные пакеты.

Способ 2. Чисткой правил:

* здесь мы сначала удаляем все правила (-F), затем устанавливаем политику по умолчанию — разрешать входящие, исходящие и транзитные (-S).

Способ 3. Отключение сервиса (удобно для диагностики проблем на время отключить firewall):

service iptables stop

Работа с правилами

1. Добавить правило в конец списка:

iptables -A INPUT -p tcp —dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s ! 192.168.0.25 —dport 993 -i eth0 -j ACCEPT

2. Добавить диапазон портов:

iptables -A INPUT -p tcp —dport 3000:4000 -j ACCEPT

* в данном случае, от 3000 до 4000.

3. Вставить правило:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 —dport 53 -i eth1 -j ACCEPT

iptables -I INPUT 1 -s 1.1.1.1 -p tcp —dport 25 -j DROP

5. Разрешить несколько портов:

iptables -A INPUT -p tcp —match multiport —dports 20,21,25,80,8080,3000:4000 -j ACCEPT

Проброс портов (port forwarding)

Рассмотрим пример проброса одного порта и диапазона портов.

Один порт (одинаковые порты)

Существует два способа настройки.

1. Правила PREROUTING + POSTROUTING:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —to-destination 192.168.1.15:22

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 22 -j SNAT —to-source 19.8.232.80:22

2. Правила PREROUTING + FORWARD:

iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 22 -j DNAT —to-destination 192.168.1.15:22

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

Один порт (разные порты)

Рассмотрим ситуацию, когда мы слушаем один порт, а пробрасываем на другой.

iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 8022 -j DNAT —to-destination 192.168.1.15:22

Диапазон портов

При необходимости пробросить диапазон портов, используем команды:

iptables -t nat -I PREROUTING -p tcp -m tcp —dport 1000:5000 -j DNAT —to-destination 192.168.1.15:1000-5000

iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp —dport 1000:5000 -j ACCEPT

Стартовая настройка

Мы можем начать настройку брандмауэра на сервере с этих команд.

iptables -A INPUT -p tcp —dport 22 -j ACCEPT

Создаем правила для нормальной работы apt или yum:

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

Разрешаем ICMP (для выполнения команды ping):

iptables -A INPUT -p icmp -j ACCEPT

Разрешаем все входящие на адрес локальной петли:

iptables -A INPUT -i lo -j ACCEPT

Ставим политику запрета на входящие и разрешаем все исходящие:

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

Настройка по умолчанию

Если мы хотим вернуть настройки в первоночальное значение (разрешено все, правил нет), выполняем команды ниже.

Сначала ставим разрешающую политику для основных цепочек:

Ставим политику разрешения на входящие и исходящие:

iptables -P INPUT ACCEPT

Удаляем все правила во всех таблицах:

iptables -t nat -F

iptables -t mangle -F

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

Этап 4. Аутентификация на сервере

Если всё настроено верно, включить SSH-подключение можно без пароля с помощью команды:

Готово, теперь вы можете открыть SSH без пароля.

Этап 1. Создание ключей

Для аутентификации на сервере нужно создать пару SSH-ключей — открытый и закрытый.

  • Появится строка, в которой нужно указать путь хранения ключа. Введите путь или оставьте путь по умолчанию. Нажмите Enter:
  • Создайте надёжный пароль для учётной записи:
  • На экране появится ключ и его изображение: CentOS install SSH

Готово, вы создали открытый и закрытый ключи. Теперь для входа в систему с помощью SSH-ключей нужно разместить открытый ключ на сервере и отключить аутентификацию (вход) по паролю.

Назначение брандмауэра

Межсетевой экран (брандмауэр/фаервол) — это программа для обеспечения контроля доступа на сетевом уровне. Основываясь на прописанных правилах, брандмауэр определяет, какие устройства имеют доступ к участкам сети. Иными словами, какой-то трафик разрешить, остальное заблокировать. В Linux эти функции выполняет программа netfilter, встроенная в ядро.

Настройка netfilter с помощью iptables

Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.

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

Общий синтаксис
Ключи
Примеры
    Общие команды
    Разрешить все
    Работа с простыми правилами
    Проброс портов
    Стартовая настройка
    Сброс на стандартные настройки
Сохранение правил
Использование в Ubuntu и CentOS

Отключаем флуд сообщений в /var/log/messages

В дефолтной установке системы CentOS 7, весь ваш системный лог /var/log/messages через некоторое время работы сервера будет забит следующими записями.

Никакой практической пользы они не несут, поэтому отключим их. Для этого создадим отдельное правило для rsyslog, где перечислим все шаблоны сообщений, которые будем вырезать. Разместим это правило в отдельном файле /etc/rsyslog.d/ignore-systemd-session-slice.conf.

# cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf

Сохраняем файл и перезапускаем rsyslog для применения настроек.

# systemctl restart rsyslog

Необходимо понимать, что в данном случае мы отключаем флуд в лог файл только на локальном сервере. Если вы храните логи на удаленном syslog сервере, то данное правило нужно будет настраивать именно на нем.

Настройка SSH в CentOS 7

Дальше внесем некоторые изменения в работу ssh для увеличения безопасности. По-умолчанию, сервис работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Чтобы обезопасить себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит. Повесим демон ssh на 25333 порт. Для этого редактируем файл /etc/ssh/sshd_config

Читайте также:  Разблокируйте бесшовную сетевую интеграцию с Centos и Windows

# mcedit /etc/ssh/sshd_config

Раскомментируем строку Port 22 и заменим значение 22 на 25333. Так же я обычно разрешаю подключаться по ssh пользователю root. Мне так удобнее. Проблем с этим у меня никогда не возникало. Если вы считаете, что это не безопасно, не трогайте эту настройку. Чтобы разрешить пользователю root подключаться по ssh, раскомментируйте строку PermitRootLogin yes.

Сохраняем файл. Теперь обязательно изменяем настройки iptables, добавляем в разрешенные подключения вместо 22 порта 25333. Если этого не сделать, то после перезапуска sshd мы потеряем удаленный доступ к серверу. Итак, открываем /etc/iptables_rules.sh и меняем в строке

$IPT -A INPUT -i $WAN -p tcp —dport 22 -j ACCEPT

22 на 25333 и исполняем файл. Наше текущее соединение не оборвется, так как оно уже установлено, но заново подключиться по ssh к 22 порту уже н получится.

# systemctl restart sshd

Проверяем какой порт слушает sshd:

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

Для применения изменений нужно перезапустить ssh службу, как мы уже делали ранее.

Добавление репозиториев

Для инсталляции различного софта необходимо подключить репозитории в CentOS. Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:

# yum install epel-release

# rpm —import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

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

# yum install http://repository.it4i.cz/mirrors/repoforge/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

Ubuntu и CentOS

В современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами.

В качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS.

Если необходимо пользоваться iptables, устанавливаем пакет с утилитой:

Разрешаем и запускаем iptables:

systemctl start iptables

В Ubuntu

Для управления брандмауэром теперь используется ufw.

Для работы с iptables, устанавливаем следующий пакет:

Настройка системной почты

В завершение настройки сервера CentOS 7 сделаем так, что бы почта, адресованная локальному root, отправлялась через внешний почтовый сервер на выбранный почтовый ящик. Если этого не сделать, то она будет локально складываться в файл /var/spool/mail/root. А там может быть важная и полезная информация. Настроим ее отправку в ящик системного администратора.

Здесь кратко только команды и быстрая настройка. Ставим необходимые пакеты:

# yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

Рисуем примерно такой конфиг для postfix.

Создаем файл с информацией об имени пользователя и пароле для авторизации.

Создаем db файл.

Теперь можно перезапустить postfix и проверить работу.

# systemctl restart postfix

К стандартному алиасу для root в /etc/aliases, добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.

Обновляем базу сертификатов:

Отправим письмо через консоль локальному руту:

Письмо должно уйти на внешний ящик. На этом настройка локальной почты закончена. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через нормальный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры).

Установка OpenSSH на Ubuntu 20

В качестве примера мы рассмотрим установку Ubuntu 20.04. Настройка SSH Ubuntu Server 18.04 версии проходит аналогично.

При первой установке Ubuntu подключение по SSH запрещено по умолчанию. Включить доступ по SSH можно, если установить OpenSSH.

  • Откройте терминал с помощью комбинации клавиш Ctrl + Alt + T.
  • Обновите репозиторий командой:
  • Установите SSH с помощью команды:
  • sudo apt install openssh-server
  • Добавьте пакет SSH-сервера в автозагрузку:sudo systemctl enable sshd
  • Проверьте работу SSH:Если установка прошла корректно, в выводе вы увидите настройки по умолчанию:
    Настройка SSH Linux

Готово, вы установили OpenSSH на Ubuntu.

Брандмауэр в Linux

Как мы уже поняли, netfilter работает на уровне ядра. Для настройки фаервола нужны инструменты в пользовательском пространстве. В качестве фреймворков для управления netfilter используются ip_tables/nf_tables, реализованные в виде модулей ядра. А поверх них на уровне пользователя работают соответственно или iptables (одноименная утилита командной строки), или nft.

Опытные администраторы знают, что вручную прописывать правила для iptables или nft не так просто. Особенно, когда нужно настроить крупную сеть или перенести правила на другую систему. Поэтому были придуманы более дружелюбные и многофункциональные надстройки. Например, в Ubuntu такой надстройкой является инструмент с говорящим названием ufw (Uncomplicated Firewall). А в семействе RedHat дистрибутивов (CentOS, Alma, Fedora, RHEL, OpenSUSE, SUSE Linux Enterprise) — firewalld.

$ sudo dnf install openssh-clients

Here we are going to test it using our Ubuntu client machine.

Note: If you don’t know how to find the IP address of a machine, visit this post.

Настройка брандмауэра FirewallD в CentOS 7

Step Five — Configure SSH Daemon

Now that we have our new account, we can secure our server a little bit by modifying its SSH daemon configuration (the program that allows us to log in remotely) to disallow remote SSH access to the root account.

Begin by opening the configuration file with your text editor as root:

To disable remote root logins, we need to find the line that looks like this:

Hint: To search for this line, type /PermitRoot then hit ENTER. This should bring the cursor to the “P” character on that line.

Uncomment the line by deleting the “#” symbol (press Shift-x).

Now move the cursor to the “yes” by pressing c.

Now replace “yes” by pressing cw, then typing in “no”. Hit Escape when you are done editing. It should look like this:

Disabling remote root login is highly recommended on every server!

Enter 😡 then ENTER to save and exit the file.

Reload SSH

Now that we have made our changes, we need to restart the SSH service so that it will use our new configuration.

Type this to restart SSH:

systemctl reload sshd

Now, before we log out of the server, we should test our new configuration. We do not want to disconnect until we can confirm that new connections can be established successfully.

Open a new terminal window. In the new window, we need to begin a new connection to our server. This time, instead of using the root account, we want to use the new account that we created.

For the server that we configured above, connect using this command. Substitute your own information where it is appropriate:

Note: If you are using PuTTY to connect to your servers, be sure to update the session’s port number to match your server’s current configuration.

Remember, if you need to run a command with root privileges, type “sudo” before it like this:

If all is well, you can exit your sessions by typing:

Configuring SSH

The SSH configuration file is located at /etc/ssh/sshd_config. This file contains different configuration options which you can change according to your needs. Here we will look at few common options that might need modifications e.g. changing the default SSH port and the listening address, disabling root login, configuring max sessions and password tries, etc.

To configure or change any option, you will need to edit the sshd_config file:

$ sudo nano /etc/ssh/sshd_config

Remember, after changing any settings in the sshd_config file, make sure to reload the SSH server to implement the changes:

$ sudo systemctl reload ssh

Changing SSH Port

The SSH by default uses port 22 for listening to incoming connections. If for any reason you want to change the SSH port, you can do so by editing the sshd_config file and searching for a line that says:

# Port 22

Uncomment the line by removing the hash (#) and the replace 22 with the port number you want to set for SSH.

Настройка брандмауэра FirewallD в CentOS 7

Once done, save and close the sshd_config file.

Changing Listening Address

By default, SSH listens on all local interfaces. To configure SSH to listen on only a specific network interface, edit the sshd_config file:

Search for the line that says:

Uncomment the above line and replace 0.0.0.0 with the local address on which you want SSH to listen on.

Читайте также:  Centos 7 синхронизация времени chrony

Настройка брандмауэра FirewallD в CentOS 7

Disable Root Login

To disable root login, edit the sshd_config file:

Look for the line that says:

# PermitRootLogin no

Uncomment (if commented) the above line and replace “no” by “yes” to disable root login using SSH.

Настройка брандмауэра FirewallD в CentOS 7

Change Number of Allowed Sessions and Authentication Attempts

By default, the maximum number of sessions allowed per network connection is 10. It can be changed by the MaxSessions parameter in the sshd_config file. Similarly, the maximum number of authentication attempts for one login session is 6 which can be changed using the MaxAuthTries parameter.

To change the number of sessions allowed per network connection, search for the line that says:

Uncomment the above line and replace its value with your desired value.

To change the number of authentication attempts allowed per login session, search for the line that says:

Настройка брандмауэра FirewallD в CentOS 7

Change Grace Time

To change this time, search for the line that says:

Настройка брандмауэра FirewallD в CentOS 7

In this post, we covered how to enable SSH on a CentOS machine and connect to it using a client machine. We also looked at various configuration options for the SSH server. If you want to make your remote access secure, visit our post on 11 Best Ways to Secure Your SSH Server.

Allow SSH through Firewall

Use the command below to allow incoming SSH traffic on port 22:

$ sudo firewall-cmd —permanent —add-port=22/tcp

This command will add a rule in your firewall that will allow traffic on port 22. If you have configured SSH for a port other than 22, make sure to use that port in the firewall rule.

Сохранение правил (permanent)

По умолчанию, все правила перестают работать после перезапуска сети или компьютера. Для сохранения правил после перезагрузки есть несколько способов настройки.

Способ 1. iptables-save (универсальный)

Сохраняем правила в файл:

Чтобы восстановить правила, достаточно ввести команду:

iptables-restore < /etc/iptables.rules

А для автоматического восстановления правил при загрузке сервера или перезагрузки сети, создадим файл:

И делаем его исполняемым:

chmod +x /etc/network/if-pre-up.d/iptables

В версиях постарше открываем настройки сети:

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

pre-up iptables-restore < /etc/iptables.rules

Способ 2. iptables-persistent (Debian/Ubuntu)

Для сохранения правил вводим команду:

Способ 3. service iptables (CentOS)

Работает в старых версиях Linux и CentOS. Необходима установка пакета:

yum install iptables-services

* первая команда для CentOS, вторая — для Ubuntu.

Сохраняем правила командой:

service iptables save

* правила будут сохранены в файл /etc/sysconfig/iptables.

Чтобы правила восстанавливались автоматически при старте компьютера, разрешаем автозапуск сервиса.

а) в более новых версиях Linux:

б) в версиях постарше:

chkconfig iptables on

update-rc.d iptables defaults

* первая команда для CentOS, вторая для Ubuntu.

# SSH-подключение к серверу с аутентификацией по ключу

Принцип установления безопасного соединения с сервером для всех систем одинаков: мы помещаем на сервер публичный ключ, и при подключении сервер сравнивает свой публичный ключ с приватным ключом, который мы предъявляем при подключении.

Основные различия в данном случае обусловлены синтаксисом команд в разных версиях операционных систем.

Зайдём в корневую папку пользователя:

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

Теперь установим на неё права 700:

В этой папке создадим файл, который будет содержать публичный ключ:

В открывшемся текстовом файле разместим наш публичный ключ.Если вы используете ОС Windows, то для генерации пары ключей используйте утилиту PuTTY Key Generator. Сохраним файл и установим на него права 600:

После этого можно отключиться от сервера и проверить правильность подключения к нему с помощью ключа.

# Ограничение SSH-доступа для root-пользователя

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

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

В этом файле нам нужно найти строку #PermitRootLogin yes. Раскомментируем её (уберём # в начале строки) и заменим yes на no. В итоге строка должна выглядеть так: PermitRootLogin no. Сохраним изменения и перезагрузим нашу ssh-службу:

Теперь к нашему серверу нельзя подключиться по SSH от имени root-пользователя — можно только через веб-консоль.

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

Настройка OpenSSH на Ubuntu 20

По умолчанию SSH-соединение работает по порту 22. Из соображений безопасности порт лучше изменить. Для этого:

  • Запустите терминал с помощью комбинации клавиш Ctrl + Alt + T.
  • Откройте конфигурационный файл в текстовом редакторе:sudo nano /etc/ssh/sshd_config
  • В sshd_config замените порт 22 на другое значение в диапазоне от 1 до 65 535. Важно, чтобы выбранный порт не был занят другой службой:
    CentOS 8 настройка SSH
  • Чтобы изменения вступили в силу, перезапустите SSH-сервер:

Готово, вы настроили OpenSSH на Ubuntu 20.04. Теперь вы можете внести дополнительные настройки или в Ubuntu разрешить пользователю доступ по SSH.

Принцип настройки

Общий синтаксис использования iptables:

Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.

Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.

В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).

Некоторые команды требуют указания номера правила, например, на удаление или редактирование.

Условие описывает критерии отработки того или иного правила.

Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.

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

Для работы с таблицами (iptables -t)

Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.

Команды

Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.

Условия

Данные ключи определяют условия правила.

Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.

Действия

Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.

Видео по настройке CentOS 7

Where To Go From Here?

At this point, you have a solid foundation for your server. You can install any of the software you need on your server now.

If you are not sure what you want to do with your server, check out the next tutorial in this series for Additional Recommended Steps for New CentOS 7 Servers. It covers things like enabling fail2ban to reduce the effectiveness of brute force attacks, basic firewall settings, NTP, and swap files. It also provides links to tutorials that show you how to set up common web applications.

Этап 2. Копирование открытого ключа на сервер

Копировать ключ на сервер можно двумя способами:

  • с помощью утилиты ssh-copy-id,
  • с помощью SSH.

Способ 1. Копирование открытого ключа с помощью утилиты ssh-copy-id

Копирование открытого ключа через утилиту ssh-copy-id ― самый быстрый и удобный способ.

  • При первом соединении появится сообщение о том, что сервер является ненадёжным источником. Для подключения введите в консоли yes и нажмите Enter:
  • Введите пароль от учётной записи и нажмите Enter.

Готово, вы скопировали открытый ключ на сервер.

Способ 2. Копирование открытого ключа с помощью SSH

Перед началом этих действий надо выполнить подключение по SSH обычным способом (через пароль) и произвести запуск удалённого соединения.

  • При первом соединении появится сообщение о том, что локальный компьютер не распознаёт хост. Для подключения введите в консоли yes и нажмите Enter: CentOS 7 SSH установка и настройка
  • Введите пароль от учётной записи и нажмите Enter.

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

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

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

Зададим для него пароль:

Далее добавим его в группу пользователей, которые могут выполнять команды от имени администратора:

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

Если пакет sudo не установлен на вашем сервере (после ввода команды появится сообщение Unit sudo.service could not be found) установите его вручную.

Для этого зайдите на сервер от имени root-пользователя и выполните команду:

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

Оцените статью
Хостинги