Пример настройки NAT (шлюза)
Включить маскарадинг:
firewall-cmd —permanent —zone=dmz —add-masquerade
* без указания зон, будет включен для public и external.
Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:
firewall-cmd —permanent —direct —add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE
* правило включает маскарадинг на внешнем интерфейсе ens33. Где опция —direct требуется перед всеми пользовательскими правилами (—passthrough, —add-chain, —remove-chain, —query-chain, —get-chains, —add-rule, —remove-rule, —query-rule, —get-rules); nat — таблица, в которую стоит добавить правило; POSTROUTING 0 — цепочка в таблице nat; опция MASQUERADE указывает сетевому экрану менять внутренний IP-адрес на внешний.
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT
* добавляет в таблицу filter (цепочку FORWARD) правило, позволяющее хождение трафика с ens32 на ens33.
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT
* добавляет правило в таблицу filter (цепочку FORWARD), позволяющее хождение трафика с ens33 на ens32 для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED) и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).
systemctl restart firewalld
* для того, чтобы сервер CentOS заработал в качестве шлюза, также необходимо настроить ядро. Подробнее в статье Настройка Интернет шлюза на CentOS 7.
Для просмотра созданных данным способом правил используем команду:
firewall-cmd —direct —get-all-rules
Основные различия
CentOS, как и RHEL, получает всесторонне протестированные апдейты, в особенности что касается безопасности, и тем самым достигается стабильная работа системы. CentOS Stream – это своего рода тестовый полигон для нововведений. Обновления для него выходят в несколько раз чаще – например, пользователи CentOS Stream смогут в числе первых опробовать возможности, которые лишь через некоторое время появятся в стабильной сборке RHEL. Однако в этом случае разработчики не могут (и не станут) гарантировать полную стабильность работы ОС, поскольку апдейты не проходят многочисленные фазы тестирования.
Интерфейс CentOS 8
Примечательно, что Red Hat отказалась от поддержки только CentOS 8 – дистрибутив CentOS 7, дебютировавший больше шести лет назад, в июле 2014 г., получил основную поддержку до IV квартала 2020 г, а критические обновления для него Red Hat продолжит выпускать вплоть до 30 июня 2024 г. Техподдержка еще более раннего дистрибутива, CentOS 6, истекла 30 ноября 2020 г.
Основы использования Firewalld
Как я уже сказал выше, Firewalld работает не с цепочками правил, а с зонами. Каждому сетевому интерфейсу может быть присвоена определенная зона. Зона представляет из себя набор правил, ограничений и разрешений, которые применяются к этому сетевому интерфейсу. Для одного интерфейса может быть выбрана только одна зона. Разработчики создали несколько предустановленных зон:
- drop — блокировать все входящие пакеты, разрешить только исходящие
- block — в отличие от предыдущего варианта отправителю пакета будет отправлено сообщение по блокировке его пакета;
- public — поддерживаются входящие соединения только для ssh и dhclient;
- external — поддерживает NAT для скрытия внутренней сети;
- internal — разрешены сервисы ssh, samba, mdns и dhcp;
- dmz — используется для изолированных сервров, у которых нет доступа к сети. Разрешено только подключение по SSH;
- work — разрешенны сервисы ssh и dhcp;
- home — аналогично internal;
- trusted — всё разрешено.
Таким образом, чтобы разрешить или запретить какой-либо сервис, вам достаточно добавить или удалить его из текущей зоны или сменить зону интерфейса на ту, где он разрешён. Можно провести аналогию с политикой действий по умолчанию для пакетов в iptables. Зона trusted имеет политику ACCEPT и разрешает все подключения, зона block имеет политику DENY, которая запрещает все подключения, а все остальные зоны можно считать наследниками зоны block, плюс в них уже предопределены правила разрешения сетевых подключений для некоторых сервисов.
Также у Firewalld есть два вида конфигурации:
- runtime — действительна только до перезагрузки, все изменения, в которых явно не указано другое, применяются к этой конфигурации;
- permanent — постоянные настройки, которые будут работать и после перезагрузки.
Теперь вы знаете всё необходимое, поэтому перейдём к утилите firewalld-cmd.
Управление сетевыми интерфейсами.
Для просмотра состояния и конфигурации интерфейса существуют специальные команды.
# ifconfig # ip a
Посмотреть таблицу маршрутизации модно используя команду:
# netstat -r
В Red Hat Enterprise Linux (RHEL) / CentOS / Fedora существуют специальные сценарии для управления сетевыми интерфейсами.
Сценарии ifup и ifdown позволяют включить или отключить сетевой интерфейс. В качестве аргумента эти сценарии принемают имя интерфейса.
ifdown eth0 - отключит интерфейс. ifup eth0 - включить интерфейс.
Сценарий service network или /etc/init.d/network позволяют включить (start), отключить (stop) или перезапустить (restart) все интерфейсы разом.
service network stop service network restart /etc/init.d/network start
И на последок, функция маршрутизации между интерфейсами по умолчанию отключена, однако ее можно включить для этого надо добавить в файл /ete/sysctl.conf запись net.ipv4.ip_forward=1 и перезапустить систему.
На этом рассмотрение настройки сети в операционных системах Red Hat Enterprise Linux (RHEL) / CentOS / Fedora завершено.
Возможные ошибки
Разберем некоторые ошибки, которые могут возникнут в процессе установки FreeIPA.
Ошибка появляется при попытке запустить команду ipa-server-install.
Причина: если в системе отключен IPv6 с помощью параметра в ядре net.ipv6.conf.all.disable_ipv6 или net.ipv6.conf.default.disable_ipv6, то команда выдаст ошибку, так как для локальной петли нам нужен IPv6. Если же IPv6 отключен через GRUB, то необходимо его включить.
Решение:
1. sysctl
Открываем конфигурационный файл sysctl:
vi /etc/sysctl.d/99-sysctl.conf
Добавляем строку:
net.ipv6.conf.lo.disable_ipv6 = 0
Применяем настройки:
sysctl -p /etc/sysctl.d/99-sysctl.conf
2. GRUB
Открываем конфигурационный файл grub:
vi /etc/default/grub
Находим строку опцию GRUB_CMDLINE_LINUX — в ее значении мы должны найти ipv6.disable=1:
GRUB_CMDLINE_LINUX=»crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap ipv6.disable=1 crashkernel=auto rhgb quiet»
Удаляем данную опцию из значения — в моем случае получилось:
GRUB_CMDLINE_LINUX=»crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap crashkernel=auto rhgb quiet»
Переконфигурируем grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
Для применения, перезагрузим систему:
shutdown -r now
2. Invalid hostname ‘XXX’, must be fully-qualified
Появляется при запуске команды ipa-server-install.
Причина: имя нашего сервера не является FQDN (полным доменным).
Решение: задаем полное имя с доменом командой:
hostnamectl set-hostname ipa-server.dmosk.local
* в данном примере у сервера будет имя ipa-server в домене dmosk.local.
Голос в поддержку Red Hat
Несмотря на то, что большинство специалистов не поддерживают решение Red Hat свернуть поддержку CentOS 8 существенно раньше срока, нашлись и те, кто оценил идею компании сконцентрироваться CentOS Stream. В пользу такого решения высказался ни кто иной, как Джим Перрин (Jim Perrin), бывший разработчик Red Hat, вносивший свой вклад в развитие CentOS, и нынешний старший программный инженер Microsoft.
Red Hat нашла поддержку в лице бывших сотрудников
Перрин назвал три преимущества нового подхода, из которых, тем не менее, лишь два имеют отношение к CentOS. По его словам, шаг, на который пошла Red Hat, позволит сделать разработку RHEL более прозрачной. Также он позволяет независимым разработчикам вносить исправления в код CentOS Stream, которые затем могут быть добавлены в итоговую версию RHEL. Третье преимущество, по мнению Перрина – это возможность сообщества высказывать свое мнение по поводу дальнейшего развития ОС, добавления тех или иных функций и т.д.
Отключение firewalld в CentOS 7
В CentOS 7 для управления файрволом по умолчанию используется системная служба firewalld. Она предоставляет свой интерфейс, но в итоге также работает через утилиту iptables. При этом управление файроволом должно осуществляться либо через firewalld, либо напрямую через iptables.
firewalld не замена, а обертка вокруг iptables, пользоваться из этого можно тем, что больше нравится, или больше подходит в конкретных условиях. iptables более универсален, это базовый инструмент, но он немного сложнее в освоении. firewalld предоставляет более простой интерфейс, но, например, в CentOS 6 воспользоваться им не получится, да и для других дистрибутивов необходимо наличие нужных установочных пакетов. К тому же, если вы используете приложения, которые производят свои настройки в файрволе, они должны быть совместимы с firewalld (пример таких приложений docker, fail2ban).
Проверим статус firewalld и отключим его.
В выводе команды обведенная красным область со словом enabled, означает включенную автозагрузку, а область, обведенная желтым, со словом active, означает, что служба запущена.
Останавливаем службу и выключаем для нее автозагрузку:
Повторно проверяем статус:
Теперь вывод команды показывает disabled для автозагруки (выключена), и inactive означает, что служба выключена.
Дополнительные настройки
Рассмотрим отдельно некоторые настройки и возможности работы с FreeIPA.
SSH аутентификация через FreeIPA
По умолчанию, клиент конфигурируется на возможность входа по SSH с использованием пользователей из FreeIPA. Внесем некоторые изменения для удобства.
Открываем конфигурационный файл для pam:
vi /etc/pam.d/common-session
Добавим в конец одну строку:
…
session required pam_mkhomedir.so skel=/etc/skel umask=0022
* данная настройка укажет на необходимость автоматического создания домашней директории для пользователя.
Готово.
Вывод клиента из домена
Если необходимо вывести клиентский компьютер из домена, вводим команду:
ipa-client-install —uninstall
Система выполнит необходимые настройки самостоятельно:
Unenrolling client from IPA server
Removing Kerberos service principals from /etc/krb5.keytab
Disabling client Kerberos and LDAP configurations
Redundant SSSD configuration file /etc/sssd/sssd.conf was moved to /etc/sssd/sssd.conf.deleted
Restoring client configuration files
Unconfiguring the NIS domain.
nscd daemon is not installed, skip configuration
nslcd daemon is not installed, skip configuration
Systemwide CA database updated.
Client uninstall complete.
The original nsswitch.conf configuration has been restored.
И отправляем компьютер в перезагрузку:
You may need to restart services or reboot the machine.
Do you want to reboot the machine? : yes
Сохранение и восстановление правил фильтрации iptables
В заключении, настроим автозагрузку правил, после перезагрузки сервера. Для этого должен быть установлен пакет iptables-services и активирован сервис. Установим пакет через yum:
Проверим статус службы iptables:
Параметр автозагрузки установлен в enabled (включена), параметр active указывает, что служба запущена.
При загрузке сервис будет читать содержимое файла /etc/sysconfig/iptables, и восстанавливать сохраненные правила. Чтобы сохранить в него наши правила, воспользуемся командой:
Можно восстановить правила из файла командой:
Теперь можно перезагрузить сервер, и убедиться, что правила файервола восстановились при загрузке.
Работа с файловой системой: навигация, создание-перемещение-удаление файлов, ссылки
Основные команды, используемые для навигации по файловой системе из окна терминала, создание, перемещение и удаление файлов и каталогов:
В ОС Linux существует два вида ссылок.
Жесткие ссылки привязываются к иноду, таким образом, файл присутствует в системе под несколькими разными именами. Файл существует до тех пор, пока с его инодом связано хотя бы одно имя. Понятия «жёсткая ссылка на файл» и «имя файла» являются синонимами.
Жесткие ссылки могут быть только на файлы, не на директории. Также нельзя создать жесткую ссылку на файл в другой файловой системе (у каждой ФС свой набор инодов).
Cимволические ссылки (или симлинки) — специальный вид файла, который ссылается на другой файл по имени, а не напрямую на инод. Симлинки не предохраняют файл от удаления. Если файл удалить, то симлинк на него станет нерабочим (или битым).
Симлинки создаются командой ln с опцией ‘-s’:
При работе с большим количеством файлов бывает удобно использовать маски — т.н. wildcards.
Wildcard «*» соответствует нулю или большему количеству символов:
Wildcard «?» заменяет один любой символ:
Шаблон «[]» позволяет явно указать набор символов — будут найдеты совпадения, содержащие один из указанных в скобках символов. Также в можно указать диапазон символов (для этого используется символ –/дефис) или несколько диапазонов подряд, тогда шаблон будет совпадать с одним любым символом из этого диапазона:
SSH и передача файлов
SSH (Secure Shell) — защищенный протокол для удаленного доступа к компьютерам. В *nix-подобных системах (Linux, macOS) ssh-клиент обычно установлен по умолчанию и подключаться можно напрямую из терминала. Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт.
Простейший вариант — подключение по паролю. В таком случае система будет запрашивать пароль каждый раз при подключении.
Для подключения без ввода пароля можно использовать ключи: приватный (закрытый) и публичный (открытый). Эти ключи связаны друг с другом таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим.
Для создания ключей необходимо выполнить команду:
Опционально можно ввести passphrase.
Будут созданы два файла:
~/.ssh/id_rsa — приватный ключ. Его нельзя никому передавать.
~/.ssh/id_rsa.pub — публичный ключ. Можно спокойно распространять.
Для загрузки публичного ключа на сервер нужно выполнить на локальной машине команду:
Другой вариант — добавить на удаленной машине в файл ~/.ssh/authorized_keys содержимое публичного ключа.
Для более удобной работы с ключами можно добавить ключ к ssh-агенту. После этого для него больше не будет спрашиваться passphrase (если был задан) и не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении.
ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.
Протокол SSH можно использовать для передачи файлов на удалённый сервер и загрузки их оттуда.
Примеры команд
Рассмотрим отдельно примеры работы с FreeIPA посредством командной строки.
Работа с группами
1. Создание группы безопасности:
ipa group-add —desc=’Group for managers departmen’ managers
* создаем группу безопасности managers.
2. Добавить пользователя в группу:
ipa group-add-member managers —users=user1,user2,user3
* добавим в группу managers пользователей user1, user2 и user3.
3. Переименовать группу:
ipa group-mod —rename=<новое имя> <старое имя>
Например:
ipa group-mod —rename=admins users
* в данном примере мы переименуем группу users в группу admins.
Работа с сертификатами
1. Выпустить сертификат для компьютера (выполняется на компьютере, который присоединен к freeipa):
ipa-getcert request -k /etc/pki/tls/certs/freeipa.key -f /etc/pki/tls/certs/freeipa.crt -r
* в данном примере будет сформирован запрос на получение сертификата и сохранен в каталог /etc/pki/tls/certs.
2. Посмотреть список запросов на сертификат с узла можно командой:
ipa-getcert list
3. Удалить запрос можно командой:
ipa-getcert stop-tracking -i <идентификатор>
Например:
ipa-getcert stop-tracking -i openvpn
4. Обновить сертификат:
ipa-getcert resubmit —id=»20210923072007″
* где 20210923072007 — идентификатор запроса, который можно посмотреть командой ipa-getcert list.