Приветствую Всех!
В этой статье речь пойдет о безопасности. Мы рассмотрим как закрыть доступ к вашему компьютеру из интернета, настроив встроенного в ядро Linux брандмауэра Netfilter с помощью интерфейса управления iptables на Ubuntu 14.04 LTS. Мы настроим ряд базовых правил брандмауэра.
Как сказано выше, iptables — это по сути пользовательский интерфейс управления встроенного в ядро Linux брандмауэра Netfilter. Iptables работает всеми поступающими пакетами на основе определенных правил (Rules), которые группируются в цепочки (Chains). Все правила и цепочки хранятся в таблице (Tables).
Существует три типа правил iptables — input, forward и output.
Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ.
Forward — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим компьютером. К примеру, если вам необходимо подключиться к еще одному вашему компьютеру расположенному в локальной сети. Если вам этого делать не нужно, то правила этого типа вы не будете использовать.
Output — Такие цепочки используются для исходящих соединений. К примеру, если пользователь пытается отправить запрос ping к сайту serfery.ru, iptables проверит цепочку правил, чтобы понять, что нужно делать в случае ping, и только потом разрешит или запретит соединение.
Посмотрим текущий список правил в таблице filter.
sudo itables -L
Как видим, в исходной конфигурации наш компьютер содержит в таблице filter эти три цепочки правил — это INPUT, OUTPUT и FORWARD. В каждой из этих цепочек установлена политика по умолчанию — ACCEPT, то есть принимаются любые пакеты. И ни в одной из них нет каких-либо правил.
Рассмотрим простой пример настройки цепочки INPUT исходя из принципа – всё, что не разрешено, то запрещено, поменяв политику по умолчанию на запрещающую (DROP) и добавив ряд правил разрешающих только определённый трафик.
Создадим два правила, которые желательно иметь в цепочке INPUT практически для любой конфигурации:
1. Правило, разрешающее любой входящий трафик на служебный внутренний loopback device. Это может потребоваться для корректной работы разных служб и приложений.
sudo iptables -I INPUT 1 -i lo -j ACCEPT
2. Правило для поддержки уже разрешённых ранее и установленных соединений
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Изменяем политику для всего входящего трафика не попавшего ни под одно правило в цепочке INPUT на запрещающую:
sudo iptables -P INPUT DROP
Посмотрим как теперь выглядит наш список правил в таблице filter.
sudo iptables -S
Видим что наши цепочки INPUT изменила свою политику на запрещающую (DROP) и добавились 2 наших правила.
Добавим запрещающую политику и для протокола IPv6.
sudo ip6tables -P INPUT DROP
И посмотрим изменения внесенные в правила для этого протокола.
sudo ip6tables -S
Здесь также видим что наши цепочки INPUT изменили свою политику на запрещающую (DROP).
Также по аналогии с цепочкой INPUT поменяем политики правил брандмауэра по умолчанию в цепочках FORWARD для IPv4 и IPv6 на запрещающие:
sudo iptables -P FORWARD DROP
sudo ip6tables -P FORWARD DROP
И также убеждаемся, что изменения внесены в правила для цепочки FORWARD.
Теперь необходимо проверить как работает наша операционная система и не мешает ли наши правила ее нормальной работе. Для этого запустите приложения которыми вы пользуетесь и проверьте как они работают. Попробуйте выйти в интернет, проверьте почту, подключитесь к Skype. И если видите какие-то проблемы в их работе, можно выполнить сброс всех правил цепочки INPUT и вернуть её политику по умолчанию на разрешающую:
sudo iptables -F INPUT
sudo iptables -P INPUT ACCEPT
Если для редактирования правил нужно узнать порядковый номер какого-то конкретного правила, то можно воспользоваться расширенным форматом вывода правил, в котором явно видны их номера, например, для таблицы filter:
sudo iptables -t filter -n -L -v --line-numbers
Где:
- L : Показать список правил.
- v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски.
- n : Отображать IP адрес и порт числами.
Например для удаления правила номер 2 из цепочки правил INPUT выполним команду
sudo iptables -D INPUT 2
и посмотрим список правил
sudo iptables -t filter -n -L -v --line-numbers
Видим, что теперь в цепочки правил INPUT осталось только одно правило.
Настроенные правила вступают в силу сразу после их создания и будут действовать до следующей перезагрузки системы. Чтобы эти правила восстанавливались при последующих загрузках системы, скачиваем скрипт ip-firewall и сохраняем его в папку «Загрузки». Далее копируем его в системную папку для загрузки скриптов.
sudo cp ~/Загрузки/ip-firewall /etc/init.d
И устанавливаем на него необходимые права.
sudo chmod 755 /etc/init.d/ip-firewall
Запустим скрипт и посмотрим с какими ключами его можно запускать
sudo /etc/init.d/ip-firewall
start — служит для загрузки правил iptables
stop — служит для очистки цепочек правил INPUT, OUTPUT и FORWARD. А также для установки политик в состояние ACCEPT.
list — показывает сохраненные конфигурации правил и конфигурацию используемую по умолчанию.
makedefault — активирует конфигурацию которая будет использоваться по умолчанию.
savecurrent— сохраняет текущую конфигурацию.
Сохраним нашу текущую конфигурацию.
sudo /etc/init.d/ip-firewall savecurrent
Система сообщает нам об успешном сохранении.
Посмотрим какие у нас есть сохраненные конфигурации и какая из них используется по умолчанию при старте системы
sudo /etc/init.d/ip-firewall list
Сейчас сохранено 2 конфигурации «iptables.clean» и созданная нами «iptables-20151230-093419». По умолчанию используется конфигурации «iptables.clean». Изменим ее на нашу.
sudo /etc/init.d/ip-firewall makedefault iptables-20151230-093419
Запустив повторно команду
sudo /etc/init.d/ip-firewall list
видим, что конфигурация используемая по умолчанию сменилась на нашу «iptables-20151230-093419».
Теперь осталось только добавить наш скрипт в автозагрузку. Для этого выполним команду
sudo update-rc.d ip-firewall defaults
И после перезагрузки наши правила будут активированы.
Мы рассмотрели как закрыть доступ к компьютеру из интернета, как добавлять правила брандмауэра Netfilter с помощью iptables, как сохранять текущие настройки брандмауэра и восстанавливать эти настройки после перезапуска системы. И если остались непонятные вопросы по данной теме и есть предложения, то прошу их писать в комментариях. Всем пока!
Оставить комментарий