Основные настройки iptables, или как настроить фаервол в Linux

Основные настройки iptables Программы

С помощью утилиты iptables мы можем: ограничить все входящие соединения на свой компьютер или сервер; создать белый список IP адресов, с которых можно подключиться или наоборот заблокировать конкретный IP; а также открывать и закрывать порты и многое другое. В этой статье мы разберем только основные настройки iptables. Не будем погружаться в подробности и делать обзор всех возможностей утилиты, а лишь разберем те, которые требуются чаще всего.

Если вы хотите разобраться с утилитой более подробно, тогда стоит открыть статью в wikibooks и хорошенько запастись энтузиазмом и терпением, а в этой статье будут следующие, довольно простые, но в тоже время важные темы (кликабельно):

Перед тем, как начинать настраивать фаервол, необходимо авторизоваться под root. Если вы уже авторизованы под обычным пользователем в группе sudo, то перейти в root можно простой командой:

sudo su
Debian 9: переход в root
Debian 9: переход в root

Если ввести команду с sudo не предоставляется возможности, тогда нужно ввести просто su, но для этого потребуется ввести пароль от root.

Установка iptables

Для начала убедимся, что утилита iptables установлена. Для этого введем команду iptables -h и если вывод будет command not found, значит утилиту требуется установить.

iptables -h
bash: iptables: command not found
Debian 9: проверка наличия iptabes
Debian 9: проверка наличия iptabes

Установка iptables очень простая, для этого достаточно ввести:

apt install iptables

Вместо apt может быть ваш вариант, который зависит от вашего дистрибутива и что там стоит по-умолчанию. Дожидаемся конца установки.

Debian 9: установка iptables завершена
Debian 9: установка iptables завершена

Основные настройки iptables для десктопа

Чтобы защитить наш десктоп огненной стеной и не бояться, что к нам подключатся извне посторонние, технически подкованные персоны, следует прописать базовые правила в фаервол. Это не даст 100% гарантии безопасности вашего ПК (что в принципе невозможно), но существенно усложнит жизнь незваным гостям, которые скорее всего выберут цель полегче.

И так, если вы уже авторизованы под root в вашем домашней ОС и готовы забаррикадироваться от недоброжелателей, то стоит начать с правил по-умолчанию. Они будут срабатывать, если для соединения не нашлось других правил.

# Запретим все входящие соединения 
iptables -P INPUT DROP

# Запретим все перенаправления
iptables -P FORWARD DROP

# Разрешим все исходящие соединения
iptables -P OUTPUT ACCEPT

Теперь по-умолчанию у нас стоит запрет на все соединения, кроме исходящих. Но для комфортной работы этого мало и необходимо добавить несколько исключений:

# Разрешить входящие соединения с localhost
iptables -A INPUT -i lo -j ACCEPT

# Разрешить входящие соединения, которые уже были установлены
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Просмотр правил iptables

После того, как мы внесли новые правила в iptables, необходимо их проверить и убедиться, что мы все сделали правильно. Для этого достаточно ввести простую команду, которая отобразит все установленные правила:

itables -L

Если вы вводили команды из прошлого раздела, то у вас должен быть примерно такой вывод:

Debian 9: просмотр списка правил iptables
Debian 9: просмотр списка правил iptables

Как открыть порт в iptables

Чтобы разрешить подключаться к нашей ОС по SSH, нам потребуется разрешить подключение через порт 22, прописав правило в iptables:

iptables -A INPUT -p TCP --dport 22 -j ACCEPT

Далее проверим все наши правила с помощью команды iptables -L

Debian 9: просмотр списка правил iptables
Debian 9: просмотр списка правил iptables

Как мы видим, появилось новое правило для ssh по стандартному порту 22. Теперь он открыт и можно подключаться, так как теперь блокируются все входящие соединения, кроме соединений по этому порту. О том, как подключаться к серверу по SSH, вы можете почитать здесь.

Как заблокировать IP адрес в iptables

После того, как мы настроили исключение для входящих соединений для 22 порта, возможно потребуется ограничить подключение с конкретного IP. Допустим адрес с которого мы хотим ограничить любые подключения — 192.168.122.122, для этого введем команду:

iptables -I INPUT -s 192.168.122.122 -j DROP

Вместо используемого адреса в примере может быть любой, как внутренний, так и внешний. Проверим правила с помощью iptables -L

Debian 9: просмотр списка правил iptables
Debian 9: просмотр списка правил iptables

Как сохранить правила iptables

Одной из особенностей утилиты iptables является то, что прописанные правила полностью сбрасываются после перезагрузки системы. Самый простым способом сохранить настройки iptables будет поставить утилиту iptables-persistent. В debian и ubuntu это делается так, если вы по прежнему авторизованы под root:

apt install iptables-persistent

Во время установки будет вопрос, сохранить ли текущие настройки iptables, пока выберем не сохранять, то есть No, потому что для начала нужно сохранить их в отдельный текстовый файл. В противном случае iptables-persistent ничего не сохранит.

После установки сохраним текущие настройки iptables в отдельный файл, который будет располагаться в папке утилиты:

iptables-save > /etc/iptables/rules.v4

А затем перезапустим службу iptables-persistent

service iptables-persistent restart

Если вы получили сообщение, что данная служба не найдена…

Failed to restart iptables-persistent.service: Unit iptables-persistent.service not found.
Debian 9: неудачный перезапуска службы iptables-persistent
Debian 9: неудачный перезапуска службы iptables-persistent

То попробуйте перезапустить службу с другим названием:

service netfilter-persistent restart

В debian и ubuntu должен работать второй вариант.

Все, теперь можно смело перезагружать компьютер или сервер, все настройки iptables при это сохранятся.

Как откатить сохраненные правила iptables

Если вы ввели несколько правил по ошибке и хотите откатиться к тому набору правил, которые мы сохранили в файл в предыдущем разделе с помощью команды iptables-save, то для их восстановления достаточно ввести команду iptables-restore и указать пусть к этому файлу с сохраненными настройками:

# Указываем путь к файлу с настройками /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

Как удалить правило в iptables

Чтобы удалить одно конкретное правило из iptables, для начала нужно выяснить его номер и цепочку. Для этого нужно получить список всех правил с опцией --line-numbers:

iptables -L --line-numbers

Если вы вводили команды из прошлых разделов, то у вас должен быть примерно такой вывод:

Debian 9: вывод всех правил с их уникальными номерами
Debian 9: вывод всех правил с их уникальными номерами

В данном примере мы будем удалять правило под номером 1, который запрещает все входящие соединения с IP адреса 192.168.122.122:

Уникальный номер правила мы знаем, теперь смотрим название его цепочки:

Наша «жертва» находится в цепи INPUT (Chain INPUT). Теперь у нас есть все переменные, для того, чтобы ввести команду удаления правила и можно уже вводить ее с опцией -D:

# INPUT - имя цепочки, а 1 - это уникальный номер правила
iptables -D INPUT 1

Теперь выведем весь список и проверим удалилось ли правило:

Debian 9: проверка удалилось ли правило под номером 1
Debian 9: проверка удалилось ли правило под номером 1

Как мы видим, правило успешно удалилось.

Как сбросить все правила iptables

Если необходимо сбросить все правила сразу, то нужно ввести следующие команды:

# Очистим все правла
iptables -F

# Разрешим все входящие соединения
iptables -P INPUT ACCEPT

# Разрешим все перенаправляющие соединения
iptables -P FORWARD ACCEPT

# Разрешим все исходящие соединения
iptables -P OUTPUT ACCEPT

Теперь выведем список правил и проверим сбросились ли они:

Debian 9: сброс всех правил iptables
Debian 9: сброс всех правил iptables

Основные настройки iptables для веб-сервера

Для начала следует очистить правила, которые выставляет хостер по-умолчанию, потому что при определенных обстоятельствах прописанные ниже правила могут конфликтовать с теми, что уже есть.

iptables -F

Затем выставим настройки по-умолчанию, запретив все входящие соединения. А потом будем уже настраивать исключения из этих правил.

# Запретим все входящие соединения 
iptables -P INPUT DROP

# Разрешим все исходящие соединения
iptables -P OUTPUT ACCEPT

Теперь разрешим внутренние соединения с 127.0.0.1 (localhost), а также установленные соединения для приложений и пинга.

# Разрешить входящие соединения с localhost
iptables -A INPUT -i lo -j ACCEPT

# Разрешить входящие соединения, которые уже были установлены
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Добавим несколько дополнительных фильтров:

# Блокировать все нулевые пакеты
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Блокировать все пакеты XMAS
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Защищаемся от syn-flood
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Далее откроем порт 22, чтобы была возможность подключаться к серверу по SSH:

iptables -A INPUT -p TCP --dport 22 -j ACCEPT

Открываем порты для базовых сервисов веб-сервера:

# Открываем порт 80 для http
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# Открываем порт 443 для https
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Если дополнительно планируется настраивать на сервере почту, то следует открыть порты и для этих служб:

# Открываем порты 25 и 465 для smtp-трафика
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

# Открываем порты 110 и 995 для pop-трафика
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

# Открываем порты 143 и 993 для imap-трафика
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Затем проверим все настройки командой iptables -L

Debian 9: Базовые правила iptables для веб-сервера
Debian 9: Базовые правила iptables для веб-сервера

И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.

LINUXINSIDER.RU
Добавить комментарий