Если пакет не удовлетворяет ни одному из перечисленных условий, далее следуют правила, в которых пакет классифицируется по типу используемого протокола. Пакеты протоколов TCP, UDP и ICMP попадают в одноименные цепочки для их фильтрации по типу запрашиваемого сервиса. Если пакет проходит одну из этих цепочек, и к нему не было применено действие ACCEPT, то есть пакет не является запросом к разрешенному сервису, сначала происходит запись параметров запроса в журнальный файл (действие LOG), а затем применяется политика по умолчанию цепочки INPUT, то есть пакет просто уничтожается.
[root@app /]# /sbin/iptables -A FORWARD -p tcp -j bad_tcp_packets
[root@app /]# /sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@app /]# /sbin/iptables -A FORWARD -i eth0 –s 192.168.0.0/24 -j ACCEPT
[root@app /]# /sbin/iptables -A FORWARD -i eth1 –s 192.168.1.30 -j ACCEPT
[root@app /]# /sbin/iptables -A FORWARD -i eth1 –s 192.168.1.45 -j ACCEPT
[root@app /]# /sbin/iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
Аналогично цепочке INPUT, пакеты, проходящие транзитом, сначала фильтруются на предмет неправильного заголовка с помощью таблицы bad_tcp_packets. Пакеты уже установленного соединения разрешаются без дополнительных проверок. Далее все пакеты, пришедшие с интерфейса eth0, через который к серверу подключена сеть 192.168.0.0, разрешаются, что позволяет всем пользователям сети 192.168.0.0 работать в Интернет. Однако, перед этим необходимо настроить NAT, что и будет сделано дальше.
[root@app /]# /sbin/iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 144.333.333.333
Приведенная команда добавляет в цепочку POSTROUTING таблицы nat правило, которое меняет адрес-источник у пакета, покидающего сервер через интерфейс eth2, то есть пакета, который должен быть отправлен в сеть Интернет, на адрес интерфейса сервера. В результате компьютер, у которого нет реального адреса в сети Интернет, получает возможность посредством локального сервера обмениваться информацией с любым сервером в Интернете.
[root@app /]# /sbin/iptables -A OUTPUT -p tcp -j bad_tcp_packets
[root@app /]# /sbin/iptables -A OUTPUT -s 127.0.0.0/8 -j ACCEPT
[root@app /]# /sbin/iptables -A OUTPUT -s 192.168.0.1 -j ACCEPT
[root@app /]# /sbin/iptables -A OUTPUT -s 192.168.1.1 -j ACCEPT
[root@app /]# /sbin/iptables -A OUTPUT -s 144.333.333.333 -j ACCEPT
[root@app /]# /sbin/iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
Для цепочки OUTPUT необходимо указать, с каких IP адресов разрешать пакеты. Здесь должны быть перечислены все адреса, которые присвоены сетевым картам сервера.
В конце созданные правила необходимо сохранить командой
[root@app /]# /sbin/iptables-save > /etc/sysconfig/iptables
В дальнейшем при загрузке сервера эти правила автоматически будут загружены в ядро.
На этом настройку брандмауэра можно считать оконченной.
ПРИМЕР 7.
Исходные данные: ОС Linux RedHat 7.3 без графической оболочки. Назначение – маршрутизатор. Программное обеспечение – пакет OpenSSH-3.6.1p2.
Задача: выполнить безопасную настройку сервиса SSH с учетом уязвимостей в версии SSH 1.0.
Реализация.
Версия 1.0 протокола SSH имеет уязвимость, которая позволяет при определенных условиях получить доступ с правами привилегированного пользователя. Версия 2.0 от этой недоработки в системе безопасности избавлена, поэтому ее использование будет самым оптимальным решением. Настройка сервиса SSH по молчанию позволяет использовать обе версии протокола, выбор осуществляется в зависимости от того, какой протокол поддерживает клиентская программа. Чтобы явно запретить использование протокола версии 1.0, необходимо в файл конфигурации sshd_config внести следующую строку
Protocol 2
Эта строка указывает демону sshd использовать только протокол версии 2.0. В противном случае, если клиент запросит разрешение на открытие сеанса с использованием протокола 1.0, запрос будет отвергнут.
OpenSSH версии 3.6 и некоторых более ранних версий имеет специальный параметр UsePrivilegeSeparation, который позволяет запускать процесс sshd от имени аутентифицированного пользователя. После того, как пользователь успешно прошел аутентификацию, основной процесс sshd, запущенный от имени привилегированного пользователя, передает управление дополнительному процессу sshd, который выполняется уже от имени аутентифицированного пользователя. Такая технология позволяет добиться более высокого уровня безопасности по сравнению с предыдущими версиями пакета OpenSSH, в которых доступ пользователей контролировался процессом, запущенным с правами пользователя root. Конфигурация демона по умолчанию уже использует этот параметр, однако в некоторых более ранних версиях этот параметр выключен. Для активации разделения пользовательских привилегий в файл sshd_config необходимо добавить строку
UsePrivilegeSeparation yes
Если сборка пакет производилась из исходных файлов, для настройки разделения привилегий необходимо совершить несколько дополнительных операций. Эти операции хорошо документированы и последовательность их выполнения в документации по установке пакета OpenSSH расписана практически по шагам.
Чтобы ограничить доступ привилегированному пользователю, можно использовать параметр PermitRootLogin. Установка этого параметра в значение
PermitRootLogin no
не позволит пользователю root получить доступ к удаленному терминалу. Получение привилегий пользователя root в таком случае можно будет осуществить только запуском команды su.
Для настройки ограничения доступа существуют также параметры AllowGroups, DenyGroups и AllowUsers, DenyUsers для разрешения и запрета на доступ определенным группам и пользователям соответственно. Например, для запрета доступа всем группам пользователей кроме пользователей группы wheel, конфигурационный файл должен содержать такие строки
DenyGroups *
AllowGroups wheel
Для усиления уровня безопасности можно поменять еще два параметра. Значения этих параметров по умолчанию являются приемлемыми для большинства систем и их изменение в данном случае большой роли не играет. Параметр MaxStartups позволяет задать максимальное количество одновременно запущенных процессов демона sshd, другими словами, этот параметр определяет максимальное количество одновременно подключенных пользователей. По умолчанию ограничение на количество пользователей равно 10. Если в систему должен иметь доступ только администратор и еще пара человек обслуживающего персонала, этот параметр можно выставить в значение 5. Параметр LoginGraceTime определяет период времени, в течение которого, начиная с момента установления соединения, должна быть осуществлена аутентификация пользователя. По умолчанию это значение равно 2 минутам. Если в течение этого времени пользователь не пройдет аутентификацию, серверная сторона просто закроет соединение. Если администрирование производится из локальной сети, для аутентификации может быть достаточно 30 секунд, если же существует хотя бы вероятность, что доступ будет осуществляться через низкоскоростное соединение, например, посредством телефонного соединения, имеет смысл выставить это значение в 60 секунд минимум.
Далее приводится часть конфигурационного файла, сформированная с учетом всего вышеуказанного
…
Protocol 2
UsePrivilegeSeparation yes
PermitRootLogin no
MaxStartups 5
LoginGraceTime 30
…
Сервис SSH изначально настроен с максимальными требованиями к безопасности, поэтому изменение каких-либо дополнительных настроек для стандартной конфигурации не требуется. Изменения могут потребоваться лишь в том случае, если к работе сервиса предъявляются особые требования.