Что лучше iptables или firewalld
Двенадцать советов по повышению безопасности Linux
Мы живём в опасное время: едва ли не каждый день обнаруживаются новые уязвимости, на их основе создают эксплойты, под ударом может оказаться и обычный домашний компьютер на Linux, и сервер, от которого зависит огромная организация.
Возможно, вы уделяете внимание безопасности и периодически обновляете систему, но обычно этого недостаточно. Поэтому сегодня мы поделимся двенадцатью советами по повышению безопасности Linux-систем на примере CentOS 7.
Защита терминала
Рекомендуется, хотя это и не обязательно, позволить суперпользователю входить в систему только из одного терминала, оставив остальные для других пользователей.
Напоминания о смене пароля
В наши дни сложный пароль — вещь совершенно необходимая. Однако, ещё лучше, когда пароли регулярно меняют. Об этом легко забыть, поэтому хорошо бы задействовать какой-нибудь системный механизм напоминаний о возрасте пароля, и о том, когда его надо поменять.
Вызов команды chage выглядит так:
Использовать эту команду можно и без ключей, тогда она сама предложит ввести необходимое значение:
Помните о том, что вам, если вы играете роль администратора, следует способствовать тому, чтобы пользователи применяли сложные пароли. Сделать это можно с помощью pam_cracklib.
После установки этой программы, вы можете перейти в /etc/pam.d/system-auth и ввести примерно следующее:
Уведомления sudo
Также надо установить свойство mail_always в значение on :
Защита SSH
Если мы говорим о безопасности Linux, то нам стоит вспомнить и о службе SSH. SSH — это важная системная служба, она позволяет удалённо подключаться к системе, и иногда это — единственный способ спасти ситуацию, когда что-то идёт не так, поэтому об отключении SSH мы тут не говорим.
Кроме того, можно ограничить вход по SSH для root-пользователя, изменив значение параметра PermitRootLogin на no :
И, конечно, стоит отключить аутентификацию с применением пароля и использовать вместо этого публичные и приватные ключи:
Теперь поговорим о тайм-аутах SSH. Проблему тайм-аутов можно решить, настроив некоторые параметры. Например, следующие установки подразумевают, что пакеты, поддерживающие соединение, будут автоматически отправляться через заданное число секунд:
Настроив эти параметры, вы можете увеличить время соединения:
Можно указать то, каким пользователям разрешено использовать SSH:
Разрешения можно назначать и на уровне групп:
Защита SSH с использованием Google Authenticator
Для ещё более надёжной защиты SSH можно использовать двухфакторную аутентификацию, например, задействовав Google Authenticator. Для этого сначала надо установить соответствующую программу:
Затем запустить её для проверки установки:
Так же нужно, чтобы приложение Google Authenticator было установлено на вашем телефоне.
Теперь осталось лишь сообщить обо всём этом SSH, добавив следующую строку в файл /etc/ssh/sshd_config :
Теперь перезапустите SSH:
Когда вы попытаетесь войти в систему с использованием SSH, вам предложат ввести код верификации. Как результат, теперь SSH-доступ к вашей системе защищён гораздо лучше, чем прежде.
Мониторинг файловой системы с помощью Tripwire
Tripwire — это замечательный инструмент для повышения безопасности Linux. Это — система обнаружения вторжений (HIDS).
Задача Tripwire заключается в том, чтобы отслеживать действия с файловой системой, следить за тем, кто меняет файлы, и когда происходят эти изменения.
Для того, чтобы установить Tripwire, нужен доступ к репозиторию EPEL. Это задача несложная, решить её можно следующими командами:
После установки репозитория EPEL, вы сможете установить и Tripwire:
Теперь создайте файл ключей:
Когда настройка программы завершена, следует её инициализировать:
Инициализация, в ходе которой выполняется сканирование системы, займёт некоторое время, зависящее от размеров ваших файлов.
Любые модификации защищённых файлов расцениваются как вторжение, администратор будет об этом оповещён и ему нужно будет восстановить систему, пользуясь файлами, в происхождении которых он не сомневается.
По этой причине необходимые изменения системы должны быть подтверждены с помощью Tripwire. Для того, чтобы это сделать, используйте следующую команду:
У Tripwire есть множество параметров и установок. Посмотреть справку по ней можно так:
Использование Firewalld
Просмотреть предопределённые сетевые зоны можно так:
Каждая из этих зон имеет определённый уровень доверия.
Это значение можно обновить следующим образом:
Получить подробные сведения о конкретной зоне можно так:
Просмотреть список всех поддерживаемых служб можно следующей командой:
Затем можно добавлять в зону новые службы или убирать существующие:
Можно вывести сведения обо всех открытых портах в любой зоне:
Добавлять порты в зону и удалять их из неё можно так:
Можно настраивать и перенаправление портов:
Переход с firewalld на iptables
Сначала отключите firewalld :
Затем установите iptables :
Теперь можно запустить службу iptables :
После всего этого перезагрузите компьютер.
Ограничение компиляторов
Атакующий может скомпилировать эксплойт на своём компьютере и выгрузить его на интересующий его сервер. Естественно, при таком подходе наличие компиляторов на сервере роли не играет. Однако, лучше ограничить компиляторы, если вы не используете их для работы, как происходит в большинстве современных систем управления серверами.
Для начала выведите список всех бинарных файлов компиляторов из пакетов, а затем установите для них разрешения:
Создайте новую группу:
Затем измените группу бинарных файлов компилятора:
И ещё одна важная вещь. Нужно изменить разрешения этих бинарных файлов:
Предотвращение модификации файлов
Иммутабельные файлы не может перезаписать ни один пользователь, даже обладающий root-правами. Пользователь не может модифицировать или удалить такой файл до тех пор, пока установлен флаг иммутабельности, снять который может лишь root-пользователь.
Несложно заметить, что эта возможность защищает вас, как суперпользователя, от ошибок, которые могут нарушить работу системы. Используя данный подход, можно защитить конфигурационные файлы или любые другие файлы по вашему желанию.
Для того, чтобы сделать любой файл иммутабельным, воспользуйтесь командой chattr :
Атрибут иммутабельности можно удалить такой командой:
Так можно защищать любые файлы, но помните о том, что если вы обработали таким образом бинарные системные файлы, вы не сможете их обновить до тех пор, пока не снимите флаг иммутабельности.
Управление SELinux с помощью aureport
Утилита aureport позволяет создавать отчёты на основе лог-файлов аудита.
Список исполняемых файлов можно вывести следующей командой:
Можно использовать aureport для создания полного отчёта об аутентификации:
Также можно вывести сведения о неудачных попытках аутентификации:
Или, возможно, сводку по удачным попыткам аутентификации:
Утилита aureport значительно упрощает работу с SELinux.
Использование sealert
Теперь у нас есть средство, которое будет выдавать оповещения из файла /var/log/audit/audit.log и даст нам дополнительные сведения о проблемах, выявленных SELinux.
Использовать его можно так:
Самое интересное тут то, что в оповещениях можно найти советы о том, как решать соответствующие проблемы.
Итоги
Надеемся, приведённые здесь советы помогут вам сделать вашу установку Linux безопаснее. Однако, если речь идёт о защите информации, нельзя, применив те или иные меры, считать, что теперь вам ничто не угрожает. К любым программным средствам защиты всегда стоит добавлять бдительность и осторожность.
Уважаемые читатели! Знаете ли вы какие-нибудь простые, но неочевидные способы повышения безопасности Linux?
Переход с FirewallD на IPTables в CentOS 7
Как и большинство других дистрибутивов, с целью организации доступа к пакетам, которые проходят через сетевой стек, CentOS 7 использует фреймворк netfilter внутри ядра Linux. Он предоставляет интерфейс, необходимый для проверки и управления пакетами и для внедрения в систему брандмауэра.
Большинство дистрибутивов использует брандмауэр IPTables, который в свою очередь использует хуки netfilter для организации соблюдения правил. CentOS 7 поставляется с альтернативным фаерволом под названием firewalld.
Брандмауэр firewalld – довольно надёжное решение с широким набором функций. Однако некоторые пользователи предпочитают использовать фаервол IPTables, поскольку он не менее продуктивен и имеет более привычный синтаксис. На самом деле, сервис firewalld
Позволяет использовать команду iptables, но сам фаервол IPTablesне установлен в систему CentOS 7 по умолчанию. В этом руководстве показано, как установить сервис IPTables на CentOS 7 и перейти на него с брандмауэра firewalld.
1: Сохраните текущие правила брандмауэра (опционально)
Прежде чем приступить к замене брандмауэра, рекомендуется сохранить текущие правила firewalld на случай. Если что-то пойдёт не так. Как уже говорилось, демон firewalld на самом деле использует команду iptables, чтобы обращаться к ядру netfilter. Потому можно использовать команду iptables, чтобы выполнить дамп текущих правил.
Чтобы создать дамп правил в качестве стандартного вывода в файле домашнего каталога (firewalld_iptables_rules), введите:
Выполните то же самое для ip6tables:
Размер дампа правил зависит от того, какие зоны firewalld и сервисы были активны, и какие правила были переданы из каталога firewall-cmd в iptables.
Сервис firewalld выполняет свою политику при помощи стандартных правил iptables. Для этого он собирает правила в цепочки. Большинство правил используются для создания цепочек и направления в них и из них потока трафика.
Правила сервиса iptables не требуют повторного создания фреймворка управления firewalld. Потому правила, установленные в конечном итоге, вероятно, будут намного проще. Чтобы сохранить как можно больше исходных данных нетронутыми, нужно сохранить весь набор текущих правил.
Чтобы просмотреть некоторые из наиболее важных строк и получить представление о политике, которую нужно воссоздать на сервере, введите:
Это отобразит правила, ведущие к окончательному решению. Правила, которые только передают пакет другому правилу цепи или пользовательским цепям, не будут показаны.
2: Загрузите и установите сервис IPTables
Чтобы начать переход, нужно загрузить и установить пакет iptables-service из репозитория CentOS.
Загрузите и установите сервис при помощи команды:
sudo yum install iptables-services
Это загрузит и установит скрипт systemd, необходимый для управления сервисом iptables, а также некоторые стандартные конфигурационные файлы iptables и ip6tables ( в каталог /etc/sysconfig).
3: Создайте правила IPTables
Затем нужно создать правила iptables, отредактировав файлы /etc/sysconfig/iptables и /etc/sysconfig/ip6tables, содержащие правила, которые потом читает и применяет сервис IPTables.
Способ создания правил зависит от параметра system-config-firewall; проверьте файл /etc/sysconfig/iptables и узнайте, разрешает ли параметр создание правил вручную или нет.
Если вывод выглядит так, можете отредактировать файлы /etc/sysconfig/iptables и /etc/sysconfig/ip6tables вручную:
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
Откройте и отредактируйте файл ыс правами sudo:
sudo nano /etc/sysconfig/iptables
sudo nano /etc/sysconfig/ip6tables
Создав правила, проверьте правила IPv4 и IPv6 при помощи команд:
Если же файл /etc/sysconfig/iptables запрещает редактировать файлы вручную, на экране появится такой вывод:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
В таком случае для управления этими файлами нужно использовать system-config-firewall. Любые изменения, внесённые вручную, будут автоматически переписаны этим инструментом. Чтобы открыть пользовательский интерфейс, введите:
Если же у вас есть графический интерфейс, запустите его:
4: Остановите сервис FirewallD и запустите IPTables
Затем нужно остановить текущий фаервол firewalld и запустить сервис iptables. Используйте условный оператор &&, чтобы запустить новый сервис фаервола сразу после остановки firewalld:
sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables
Убедитесь, что firewalld отключен:
Также можно увидеть, что правила, созданные в каталоге /etc/sysconfig, загружены и теперь выполняются:
На данный момент сервисы iptables и ip6tables активны для текущего сеанса. Однако firewalld будет запускаться автоматически при перезагрузке сервера и менять настройки.
Сейчас нужно проверить политику фаервола, чтобы убедиться, что у вас есть необходимый уровень доступа к серверу, потому что в случае возникновения проблем с настройками вы сможете перезагрузить сервер и вернуться к предыдущему брандмауэру.
5: Отключите FirewallD
Протестировав настойки нового фаервола, отключите FirewallD:
sudo systemctl disable firewalld
Теперь система не будет автоматически загружать FirewallD при запуске. Примените маскировку сервиса, чтобы предотвратить запуск firewalld вручную, если работает Iptables.
sudo systemctl mask firewalld
Теперь можно включить сервисы iptables и ip6tables, и они будут запускаться при загрузке системы:
sudo systemctl enable iptables
sudo systemctl enable ip6tables
Переход с с FirewallD на IPTables успешно завершён.
Заключение
Внедрение фаервола – важнейший шаг в настройке безопасности сервера. Несмотря на то, что firewalld – надёжное решение, многие пользователи предпочитают работать с более знакомыми им инструментами.
🐹 CentOS 7: Первичная настройка брандмауэра web-сервера. Проброс 80 порта и 443 порта. Настройка firewalld или iptables.
Опубликовано 2020-09-19 · Обновлено 2021-10-04
Содержание:
1. Введение.
Для успешной работы web-сервера требуется пробросить 80 порт и 443 порт через брандмауэр.
На сегодняшний день в CentOS 7 популярны 2 фаервола:
Брандмауэр firewalld установлен в CentOS 7 по умолчанию сразу после установки этой операционной системы из любой комплектации. Брандмауэр iptables требуется доустанавливать из сторонних репозиториев. Оба брандмауэра хорошие, но есть люди, которые исторически привыкли работать с iptables. Делайте так, как удобно вам. После настройки брандмауэра на web-сервере лезть снова в его настройку не потребуется.
2. Настройка firewalld.
Начнем с самого простого и с самого ленивого — настройка предустановленного брандмауэра firewalld.
Кому лень устанавливать и настраивать iptables или просто удобнее работать с firewalld выполните следующие команды:
Проверить, открылись ли порты можно командой.
Всё. Настройка окончена успешно. 80 порт и 433 порт проброшены. 22 порт ssh уже был проброшен по умолчанию при установке операционной системы CentOS 7.
3. Установка и настройка iptables.
3.1. Отключение firewalld.
Первым делом отключим firewalld, который присутствует в CentOS 7 по-умолчанию сразу после установки:
# systemctl stop firewalld
Теперь удалим его из автозагрузки, чтобы он не включился снова после рестарта:
# systemctl disable firewalld
Удалим с сервера CentOS 7 брандмауэра firewalld:
После этого на сервере настройки сетевого экрана становятся полностью открытыми.
Посмотреть правила iptables можно командой:
3.2. Установка iptables.
На самом деле межсетевой экран у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто.
Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Дополнительно поставим файловый менеджер Midnight Commander с текстовым редактором.
Теперь можно добавить iptables в автозагрузку и запустить:
# systemctl start iptables.service
# systemctl enable iptables.service
Проверим статус работы iptables:
# systemctl status iptables.service
Ответ:
3.3. Настройка iptables.
Прежде, чем что-то модифицировать в файле конфигурации, всегда нужно иметь резервную копию файла:
# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.original
Открываем файл конфигурации iptables текстовым редактором:
И в середине массива строк, под разрешением работы SSH с портом 22, добавляем строку точно такую же строку:
Должно получиться так:
Чтобы iptables это учел в работе, нужно его перезапустить:
# systemctl restart iptables
Если после этой команды вышла ошибка:
Внимательно проверяйте, что вы там написали. В вашем конфигурационном файле содержатся опечатки!
Проверим работу правил межсетевого экрана:
Ответ:
Всё. Настройка окончена успешно. 80 порт и 433 порт проброшены.
22 порт по ssh уже был проброшен по умолчанию при установке iptables.
Изучаем firewalld: простой и мощный файрвол для Linux на замену iptables
Содержание статьи
Iptables и другие
Проект iptables, разработанный Расти Расселом (Rusty Russell) в 1999 году для управления netfilter и заменивший в ядре 2.4 ipchains и ряд других инструментов вроде ipnatctl, предлагает более расширяемый способ фильтрации пакетов, обеспечивающий сисадмину больший контроль при упрощении самих правил. Так, в ipchains нужно было создавать правило в каждой цепочке, прослеживая весь маршрут пакета, теперь достаточно одного. Появление модулей позволяло очень просто расширять возможности. В процессе развития проекта iptables был портирован для IPv6 (в 2011 году, ip6tables), добавлялись дополнительные модули (ULOG, nf_conntrack), он научился производить разные манипуляции с пакетами, классифицировать трафик (до седьмого уровня OSI), балансировать нагрузку и многое другое. С ростом количества функций усложнились и настройки. При этом, даже несмотря на некоторую унификацию, каждое расширение имеет свой синтаксис, одни поддерживают диапазоны, отрицание, префиксы, другие — нет. Поначалу каждое изменение правил требовало полного перезапуска брандмауэра, включая выгрузку модулей, что приводило к разрыву установленных соединений. Сейчас такой проблемы нет.
Для простых случаев настройка при помощи iptables — дело нехитрое, но в сложных сетях управлять большим количеством правил становится тяжело; чтобы изучить все настройки и понять, как оно работает, нужно потратить время. Трудно с ходу разобраться, что делают все цепочки, правила начинают повторяться, их становится сложно обслуживать, обновлять и переносить на другие системы.
Неудивительно, что для решения этих проблем были придуманы разные надстройки. Так, в Ubuntu для простой настройки правил используется ufw (Uncomplicated Firewall — несложный файрвол). Например, чтобы открыть доступ к SSH-порту, достаточно ввести
Разработчики приложений могут создавать готовые профили, которые активируются при установке пакета, избавляя пользователя от выдумывания и ввода правил.
Еще один известный проект, позволяющий легко поддерживать сложные правила, — FERM (for Easy Rule Making). В FERM все правила хранятся в одном файле, который легко читается, редактируется и загружается одной командой. Такой файл просто переносить между компьютерами. Сами правила группируются в блоки, содержат переменные, списки, что позволяет задать те же настройки в более коротком и понятном виде. Итоговый размер правил FERM раза в три меньше аналогичных для iptables. Например, запрещаем все соединения, кроме HTTP, SSH и FTP.
Под капотом FERM находится обычный Perl-скрипт, который конвертирует конфигурационные файлы в правила iptables.
В Fedora 18 был анонсирован демон firewalld, ставший официальным приложением для управления настройками netfilter в RHEL 7 / CentOS 7. Последние становятся все популярнее на VDS, а значит, придется столкнуться с их особенностями.
Возможности firewalld
Firewalld запускается как демон, новые правила добавляются без перезапуска и без сброса установленного файрвола. Изменения в конфигурации могут быть сделаны в любое время и применяются мгновенно: сохранять или применять изменения не требуется. Поддерживается IPv4, IPv6, автоматическая загрузка модулей ядра и сетевые зоны, определяющие уровень доверия соединений. Предоставляется простой интерфейс добавления правил для служб и приложений, белый список приложений, имеющих право менять правила. В настоящее время такую возможность поддерживает libvirt, Docker, fail2ban, Puppet, скрипт установки Virtuozzo и многие другие проекты. В репозитории YUM уже есть пакеты fail2ban-firewalld и puppet-firewalld, поэтому подключить их можно одной командой.
Firewalld предоставляет информацию о текущих настройках брандмауэра через D-Bus API, а также принимает изменения через D-Bus с использованием методов аутентификации PolicyKit. В качестве бэкенда используются iptables, ip6tables, ebtables, ipset и планируется nftables. Но сами правила, созданные непосредственно этими утилитами, firewalld не может разобрать, поэтому оба метода использовать нельзя.
Графическая firewall-config поддерживает firewalld
Параметры firewall-cmd
Разрешить соединение на определенный порт очень просто:
Чтобы любые изменения вступили в силу, всегда после правок должна быть запущена команда
В firewalld предусмотрен режим, позволяющий одной командой заблокировать все соединения:
Для проверки, в каком режиме находится файрвол, есть специальный ключ:
Отключается panic mode:
В firewalld необязательно знать, какой порт привязан к сервису, достаточно указать название сервиса. Все остальное утилита возьмет на себя.
После установки firewalld знает настройки более 50 сервисов, получаем их список.
Разрешим подключение к HTTP:
Используя фигурные скобки, можно задавать сразу несколько сервисов. Информация по настройкам сервисов доступна при помощи
Firewalld хранит все настройки в XML-файлах в каталогах в /usr/lib/firewalld. В частности, сервисы лежат в services. Внутри файла описание: название, протокол и порт.
Для настройки ICMP используется отдельный набор правил. Получаем список поддерживаемых типов ICMP:
Все настройки firewalld хранит в XML-файлах
Firewalld знает о почти 50 сервисах
Управление зонами
Получаем список зон
Xakep #217. Сценарий для взлома
После установки создается девять зон, в зависимости от назначения может быть использована одна или несколько зон:
После установки системы обычно используется зона public. Если имеющихся зон недостаточно, то можно создавать новые зоны при помощи
Настройки зон по умолчанию
Все пакеты, не попадающие под определенные зоны, обрабатываются в зоне по умолчанию.
Теперь — какие зоны сейчас активны и какие интерфейсы к ним привязаны.
Также можем получить обратную информацию — к какой зоне привязан интерфейс.
Смотрим настройки зоны (сервисы, порты, протоколы. ).
Если параметр пуст, то это значит, что настройки не установлены. При необходимости переназначаем интерфейс зоне:
Удаляется он так же:
К зонам можно привязывать и другие источники, определяемые по MAC, отдельному IP или адресу сети. Пакет, пришедший из такого источника, будет обрабатываться по правилам зоны.
Это все. Для доступа извне настроим форвардинг порта в один из компьютеров. Например, нам нужен доступ по SSH к внутреннему серверу:
Сложные правила
Для отдельного ПК или небольших сетей базовых возможностей вполне хватает, для настройки сложных правил в firewalld изначально предлагался так называемый direct-синтаксис, чуть позже появился собственный язык Rich Language. В первом варианте достаточно знать синтаксис iptables, рекомендуется использовать в крайнем случае, так как правила не сохраняются после перезагрузки.
Синтаксис direct правила такой:
Добавляем правило, разрешающее соединение по 25-му порту:
Пробросим соединение по 22-му на другой сервер:
Rich Language позволяет записывать сложные правила в более удобном для понимания виде. В правиле можно указывать любые параметры, характеризующие пакет: источник, назначение, сервис, порт, протокол, маскарадинг, журналирование, аудит и действие. Например, разрешим подсети соединяться по HTTP и добавляем аудит:
Большой плюс Rich Language в том, что все параметры можно описать в XML в файле зоны. Формат файла очень простой и повторяет названия параметров:
Настройка файрвола — дело привычки. Часто удобнее вбить команду, которой пользуешься уже не один год, чем осваивать новую утилиту. Поэтому иногда все-таки хочется вернуть классический инструмент. Это не проблема. Iptables в CentOS 7 не ставится, поэтому его нужно вернуть:
Чтобы не настраивать все повторно, лучше сохранить текущие правила, сгенерированные firewalld.
Останавливаем firewalld и запускаем iptables:
Проверяем текущие правила:
Запрещаем автозапуск firewalld при загрузке ОС:
Выводы
Как видишь, ничего сложного! Firewalld очень упрощает установки, особенно если учесть, что настройки легко перенести.