- Firewall
- Содержание
- Firewall
- Введение
- ufw — простой Firewall
- Интеграция Приложений в ufw
- Маскировка IP
- Маскировка ufw
- Маскировка iptables
- Журналы
- Другие инструменты
- Ссылки
- Защита Linux-сервера. Что сделать в первую очередь
- Содержание
- Нерутовый юзер
- Ключи вместо паролей SSH
- Файрвол
- Fail2Ban
- Автоматические обновления безопасности
- Смена портов по умолчанию
- На правах рекламы
Firewall
Содержание
Firewall
Введение
Ядро линукс включает подсистему Netfilter (сетевой фильтр), который используется для манипулирования или решения судьбы сетевого трафика передаваемого в или через ваш сервер. Все современные решения линукс по сетевой защите используют эту систему пакетной фильтрации.
Система пакетной фильтрации на уровне ядра была бы малоиспользуема администраторами без пользовательского интерфейса для ее управления. Для этого предназначен iptables. Когда пакет попадает на ваш сервер, он передается подсистеме Netfilter для одобрения, изменения или отказа на основе правил, которые она получает от интерфейса пользователя через iptables. Таким образом iptables — это все, что вам нужно для управления вашей сетевой защитой, если вы хорошо с ним знакомы, однако множество внешних интерфейсов доступны для упрощения этой задачи.
ufw — простой Firewall
Инструмент для настройки сетевой защиты Ubuntu по умолчанию — это ufw. Он разработан для легкой настройки iptables и предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.
По умолчанию изначально ufw выключен. Со страницы man руководства ufw:
«ufw не предназначен для обеспечения полной функциональности брандмауэра через свой командный интерфейс, но он предоставляет легкий способ добавления или удаления простых правил. Сейчас в большинстве случаев он используется для централизованных брандмауэров.»
Далее следуют несколько примеров использования ufw:
1. Для начала требуется разрешить ufw. Наберите в терминале:
2. Открыть порт (в данном примере SSH ):
3. Правила могут быть добавлены с использованием нумерованного формата:
4. Подобным образом можно закрыть открытый порт:
5. Для удаления правила используйте delete:
6. Также можно разрешить доступ к порту с определенных компьютеров или сетей. Следующий пример разрешает на этом компьютере доступ по SSH с адреса 192.168.0.2 на любой IP адрес:
Замените 192.168.0.2 на 192.168.0.0/24 чтобы разрешить доступ по SSH для всей подсети.
7. Добавление опции –dry-run команде ufw выведет список правил, но не применит их. Например, далее показано, что было бы применено, если открыть HTTP порт:
8. ufw можно выключить командой:
9. Чтобы посмотреть статус сетевой защиты:
10. Для более полного отображения информации введите:
11. Для отображения в виде формата numbered:
Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации.
Интеграция Приложений в ufw
Приложения, которые открывают порты, можно включать в профили ufw, которые детализируют какие порты необходимы этому приложению для корректной работы. Профили содержатся в /etc/ufw/applications.d, и могут быть отредактированы, если порты по умолчанию были изменены.
1. Чтобы посмотреть для каких приложений установлен профиль введите следующую команду в терминале:
2. Аналогично, разрешить трафик по порту, используя профиль приложения, можно следующей командой:
3. Также доступен расширенный синтаксис:
Замените Samba и 192.168.0.0/24 на используемый вами профиль приложения и IP диапазон вашей сети.
4. Для просмотра деталей какие порты, протоколы и пр. определены для приложения введите:
Не для всех приложений, которые требуют открытие сетевого порта, поставляется профиль ufw, но если у вас есть профиль для приложения, и вы хотите чтобы этот файл был включен в пакет приложения, зарегистрируйте ошибку о пакете на сайте Launchpad.
Маскировка IP
Цель маскировки ip-адреса состоит в том, чтобы компьютеры с частными, немаршрутизируемыми ip-адресами в вашей сети могли иметь доступ к Интернету через компьютер выполняющий маскировку. Трафик из вашей частной сети попадающий в Интернет должен быть правильно выпущен для корректного ответа, отправленного именно тому компьютеру, который послал запрос. Чтобы сделать это, ядро модифицирует заголовок каждого пакета так, чтобы ответ приходил нужному компьютеру, а не частному ip-адресу, который послал запрос, что невозможно в рамках сети Интернет. Линукс использует Трассировку Соединений (conntrack) для трассировки каждого из соединений принадлежащих соответствующим компьютерам и перенаправляет каждый возвращенный пакет. Трафик, покидает вашу частную сеть «маскируясь» таким образом, будто исходит от вашего шлюза Ubuntu. Этот процесс обозначен в документации Microsoft как Internet Connection Sharing (Общий доступ к Интернет-Соединению).
Маскировка ufw
Маскировка ip-адреса может быть достигнута с использованием различных правил ufw. Это возможно благодаря дополнению к ufw, которым является iptables-restore с файлами правил, расположенных в /etc/ufw/*.rules. Эти файлы являются отличным способом для добавления правил в iptables без использования ufw, а также правил, которые более гибко взаимодействуют со шлюзом или соединением типа «мост».
Эти правила разбиты на два разных файла команд, одни должны быть выполнены ufw перед списком правил, а другие выполняются после списка правил.
1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”:
Затем отредактируйте /etc/ufw/sysctl.conf следующим образом:
Аналогично для IPv6:
2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице filter, а для работы маскировки нам нужно отредактировать таблицу nat. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием:
Комментарии не обязательны, но считается хорошим тоном документировать свою конфигурацию. Также при изменении каких-либо rules файлов в каталоге /etc/ufw, убедитесь, что данные строки являются последними для каждой измененной таблицы:
Для каждой таблицы обязательно присутствие соответствующего ей оператора COMMIT (применение изменений). В данных примерах показаны только таблицы nat и filter, но вы можете также добавлять правила для таблиц raw и mangle.
3. Наконец, выключите и повторно включите ufw для применения изменений:
IP маскировка теперь должна быть включена. Вы также можете добавить дополнительные правила FORWARD в /etc/ufw/before.rules. Рекомендуется чтобы эти дополнительные правила были добавлены в цепочку/секцию (chain) ufw-before-forward.
Маскировка iptables
Iptables также может быть использован для маскировки соединений.
1. Подобно ufw, первым делом нам необходимо включить форвардинг для IPv4 отредактировав следующий файл /etc/sysctl.conf и убрав комментарий со строки:
Если вы хотите включить форвардинг для IPv6 также удалите комментарий:
2. Далее выполните команду sysctl для применения новых настроек в файле конфигурации:
3. Теперь настройка маскировки ip-адреса может быть завершена с выполнением лишь одной команды, которая может немного отличатся в зависимости от вашей конфигурации сети:
После выполнения этой команды можно считать, что ваша частная сеть имеет адрес 192.168.0.0/16, а сетевая карта с выходом в Интернет — ppp0. Синтаксис определен следующим образом:
1. -t nat – правило применяется к таблице nat
2. -A POSTROUTING – правило добавлено (-A) в цепочку POSTROUTING
3. -s 192.168.0.0/16 – правило применено к трафику, исходящему из этого адресного пространства
4. -o ppp0 – правило применено к трафику, который необходимо перенаправить через этот интерфейс
5. -j MASQUERADE – трафик подпадающий под это правило выполняет «прыжок» («jump») (-j) в цепочку MASQUERADE для дальнейшей манипуляции с ним как описаны выше
4. Также каждая цепочка таблицы filter (цепочка, где происходит фильтрация большинства пакетов) по умолчанию имеет правило ACCEPT, но если вы настраиваете ваш firewall с целью создания шлюза, вы должны выбрать либо политику DROP либо REJECT, в этом случае ваш «замаскированный» трафик должен быть пропущен через цепочку FORWARD для срабатывания предыдущих правил:
Вышеперечисленные команды разрешают форвардинг всех соединений из локальной сети в Интернет, а весь трафик относящийся к этим соединениям возвращается к компьютерам, пославшим запрос.
Если вы хотите, чтобы маскировка работала после перезагрузки ПК, отредактируйте файл /etc/rc.local и добавьте туде вышеперечисленные команды. Например, добавьте первую команду без опций фильтрации:
Журналы
Журналы firewall крайне необходимы для обнаружения атак, возникающих проблем с правилами, а также обнаружения повышенной активности в вашей сети. В настройках firewall необходимо включить журналирование для правил, которое должно быть указано перед списком правил (правил, которые решают дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT).
Если вы используете ufw, журналирование можно включить следующей командой:
Чтобы выключить журналирование в ufw просто замените значение on на off.
Для iptables введите:
В этом случае в начале поступит запрос на порт 80 от компьютера в локальной сети, затем будет сгенерирован файл журнала в dmesg который выгдлядит примерно так (одна строка разделена на три для корректного отображения на экране):
Этот текст журнала также появится в файле /var/log/messages, /var/log/syslog и /var/log/kern.log. Эти настройки можно изменить отредактировав файл /etc/syslog.conf аналогично или при установке и настройке ulogd, а также используя ULOG вместо LOG. Демон ulogd это пользовательский сервер который слушает инструкции ядра для дальнейшего журналирования, в частности для firewall, и может вести журналирование даже в PostgreSQL или MySQL базы данных. Для того, чтобы легко разобраться в файлах журнала можно использовать их анализаторы, такие как logwatch, fwanalog, fwlogwatch или lire.
Другие инструменты
Существует множество утилит для помощи в построении полноценного firewall без углубленных навыков в iptables.
Для работы с интерфейсом:
1. fwbuilder очень мощная утилита, которая настраивается подобно проприетарным продуктам вроде Checkpoint FireWall-1.
Если вы предпочитаете утилиты с поддержкой командной строки и списком файлов конфигураций:
2. Shorewall — мощное решение, которое поможет вам создать серьезный firewall для любого типа вашей сети.
Ссылки
1. Вики страница Ubuntu Firewall содержит необходимую информацию о работе над ufw.
2. Также посмотрите man страницу ufw, которая содержит много полезной информации: man ufw.
3. Для более подробной информации об использовании iptables смотрите packet-filtering-HOWTO.
4. Руководство nat-HOWTO содержит полное описание о маскировке соединений.
5. IPTables HowTo Ubuntu Вики также отличный источник.
Источник
Защита Linux-сервера. Что сделать в первую очередь
Habib M’henni / Wikimedia Commons, CC BY-SA
В наше время поднять сервер на хостинге — дело пары минут и нескольких щелчков мыши. Но сразу после запуска он попадает во враждебную среду, потому что открыт для всего интернета как невинная девушка на рокерской дискотеке. Его быстро нащупают сканеры и обнаружат тысячи автоматически скриптовых ботов, которые рыскают по сети в поисках уязвимостей и неправильных конфигураций. Есть несколько вещей, которые следует сделать сразу после запуска, чтобы обеспечить базовую защиту.
Содержание
Нерутовый юзер
Первым делом нужно завести для себя нерутового юзера. Дело в том, что у пользователя root абсолютные привилегии в системе, а если разрешить ему удалённое администрирование, то вы сделаете половину работы для хакера, оставив для него валидный username.
Поэтому нужно завести другого юзера, а для рута отключить удалённое администрирование по SSH.
Новый пользователь заводится командой useradd :
Затем для него добавляется пароль командой passwd :
Наконец, этого пользователя нужно добавить в группу, которая имеет право выполнять команды с повышением привилегий sudo . В зависимости от дитрибутива Linux, это могут быть разные группы. Например, в CentOS и Red Hat юзера добавляют в группу wheel :
В Ubuntu он добавляется в группу sudo :
Ключи вместо паролей SSH
Брутфорс или утечка паролей — стандартный вектор атаки, так что аутентификацию по паролям в SSH (Secure Shell) лучше отключить, а вместо неё использовать аутентификацию по ключам.
Есть разные программы для реализации протокола SSH, такие как lsh и Dropbear, но самой популярной является OpenSSH. Установка клиента OpenSSH на Ubuntu:
Установка на сервере:
Запуск демона SSH (sshd) на сервере под Ubuntu:
Автоматический запуск демона при каждой загрузке:
Нужно заметить, что серверная часть OpenSSH включает в себя клиентскую. То есть через openssh-server можно подключаться к другим серверам. Более того, со своей клиентской машины вы можете запустить SSH-туннель с удалённого сервера на сторонний хост, и тогда сторонний хост будет считать удалённый сервер источником запросов. Очень удобная функция для маскировки своей системы. Подробнее см. статью «Практические советы, примеры и туннели SSH».
На клиентской машине обычно нет смысла ставить полноценный сервер, чтобы не допускать возможность удалённого подключения к компьютеру (в целях безопасности).
Итак, для своего нового юзера сначала нужно сгенерировать ключи SSH на компьютере, с которого вы будете заходить на сервер:
Публичный ключ хранится в файле .pub и выглядит как строка случайных символов, которые начинаются с ssh-rsa .
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
Затем из-под рута создать на сервере директорию SSH в домашнем каталоге пользователя и добавить публичный ключ SSH в файл authorized_keys , используя текстовый редактор вроде Vim:
Наконец, установить корректные разрешения для файла:
и изменить владение на этого юзера:
На стороне клиента нужно указать местоположение секретного ключа для аутентификации:
Теперь можно залогиниться на сервер под именем юзера по этому ключу:
После авторизации можно использовать команду scp для копирования файлов, утилиту sshfs для удалённого примонтирования файловой системы или директорий.
Желательно сделать несколько резервных копий приватного ключа, потому что если отключить аутентификацию по паролю и потерять его, то у вас не останется вообще никакой возможности зайти на собственный сервер.
Как упоминалось выше, в SSH нужно отключить аутентификацию для рута (по этой причине мы и заводили нового юзера).
На CentOS/Red Hat находим строку PermitRootLogin yes в конфигурационном файле /etc/ssh/sshd_config и изменяем её:
На Ubuntu добавляем строку PermitRootLogin no в конфигурационный файл 10-my-sshd-settings.conf :
После проверки, что новый юзер проходит аутентификацию по своему ключу, можно отключить аутентификацию по паролю, чтобы исключить риск его утечки или брутфорса. Теперь для доступа на сервер злоумышленнику необходимо будет достать приватный ключ.
На CentOS/Red Hat находим строку PasswordAuthentication yes в конфигурационном файле /etc/ssh/sshd_config и изменяем её следующим образом:
На Ubuntu добавляем строку PasswordAuthentication no в файл 10-my-sshd-settings.conf :
Инструкцию по подключению двухфакторной аутентификации по SSH см. здесь.
Файрвол
Файрвол гарантирует, что на сервер пойдёт только тот трафик по тем портам, которые вы напрямую разрешили. Это защищает от эксплуатации портов, которые случайно включились с другими сервисами, то есть сильно уменьшает поверхность атаки.
Перед установкой файрвола нужно убедиться, что SSH внесён в список исключений и не будет блокироваться. Иначе после запуска файрвола мы не сможем подключиться к серверу.
С дистрибутивом Ubuntu идёт Uncomplicated Firewall (ufw), а с CentOS/Red Hat — firewalld.
Разрешение SSH в файрволе на Ubuntu:
На CentOS/Red Hat используем команду firewall-cmd :
После этой процедуры можно запустить файрвол.
На CentOS/Red Hat запускаем сервис systemd для firewalld:
На Ubuntu используем такую команду:
Fail2Ban
Сервис Fail2Ban анализирует логи на сервере и подсчитывает количество попыток доступа с каждого IP-адреса. В настройках указаны правила, сколько попыток доступа разрешено за определённый интервал — после чего данный IP-адрес блокируется на заданный отрезок времени. Например, разрешаем 5 неудачных попыток аутентификации по SSH в промежуток 2 часа, после чего блокируем данный IP-адрес на 12 часов.
Установка Fail2Ban на CentOS и Red Hat:
Установка на Ubuntu и Debian:
В программе два конфигурационных файла: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf . Ограничения для бана указываются во втором файле.
Джейл для SSH включён по умолчанию с дефолтными настройками (5 попыток, интервал 10 минут, бан на 10 минут).
Кроме SSH, Fail2Ban может защищать и другие сервисы на веб-сервере nginx или Apache.
Автоматические обновления безопасности
Как известно, во всех программах постоянно находят новые уязвимости. После публикации информации эксплоиты добавляются в популярные эксплоит-паки, которые массово используются хакерами и подростками при сканировании всех серверов подряд. Поэтому очень важно устанавливать обновления безопасности как только они появляются.
На сервере Ubuntu в конфигурации по умолчанию включены автоматические обновления безопасности, так что дополнительных действий не требуется.
На CentOS/Red Hat нужно установить приложение dnf-automatic и включить таймер:
Смена портов по умолчанию
SSH был разработан в 1995 году для замены telnet (порт 23) и ftp (порт 21), поэтому автор программы Тату Илтонен выбрал порт 22 по умолчанию, и его утвердили в IANA.
Естественно, все злоумышленники в курсе, на каком порту работает SSH — и сканируют его вместе с остальными стандартными портами, чтобы узнать версию программного обеспечения, для проверки стандартных паролей рута и так далее.
Смена стандартных портов — обфускация — в несколько раз сокращает объём мусорного трафика, размер логов и нагрузку на сервер, а также сокращает поверхность атаки. Хотя некоторые критикуют такой метод «защиты через неясность» (security through obscurity). Причина в том, что эта техника противопоставляется фундаментальной архитектурной защите. Поэтому, например, Национальный институт стандартов и технологий США в «Руководстве по безопасности сервера» указывает необходимость открытой серверной архитектуры: «Безопасность системы не должна полагаться на скрытность реализации её компонентов», — сказано в документе.
Теоретически, смена портов по умолчанию противоречит практике открытой архитектуры. Но на практике объём вредоносного трафика действительно сокращается, так что это простая и эффективная мера.
Номер порта можно настроить, изменив директиву Port 22 в файле конфигурации /etc/ssh/sshd_config. Он также указывается параметром -p
в sshd. Клиент SSH и программы sftp тоже поддерживают параметр -p
можно использовать для указания номера порта при подключении с помощью команды ssh в Linux. В sftp и scp используется параметр -P
(заглавная P). Указание из командной строки переопределяет любое значение в файлах конфигурации.
Если серверов много, почти все эти действия по защите Linux-сервера можно автоматизировать в скрипте. Но если сервер только один, то лучше вручную контролировать процесс.
На правах рекламы
Закажи и сразу работай! Создание VDS любой конфигурации и с любой операционной системой в течение минуты. Максимальная конфигурация позволит оторваться на полную — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Эпичненько 🙂
Источник