С помощью утилиты iptables мы можем: ограничить все входящие соединения на свой компьютер или сервер; создать белый список IP адресов, с которых можно подключиться или наоборот заблокировать конкретный IP; а также открывать и закрывать порты и многое другое. В этой статье мы разберем только основные настройки iptables. Не будем погружаться в подробности и делать обзор всех возможностей утилиты, а лишь разберем те, которые требуются чаще всего.
Если вы хотите разобраться с утилитой более подробно, тогда стоит открыть статью в wikibooks и хорошенько запастись энтузиазмом и терпением, а в этой статье будут следующие, довольно простые, но в тоже время важные темы (кликабельно):
- Установка iptables
- Основные настройки iptables для десктопа
- Просмотр правил iptables
- Как открыть порт в iptables
- Как заблокировать IP адрес в iptables
- Как сохранить правила iptables
- Как откатить сохраненные правила iptables
- Как удалить правило в iptables
- Как сбросить все правила iptables
- Основные настройки iptables для веб-сервера
Перед тем, как начинать настраивать фаервол, необходимо авторизоваться под root. Если вы уже авторизованы под обычным пользователем в группе sudo
, то перейти в root можно простой командой:
sudo su
Если ввести команду с sudo не предоставляется возможности, тогда нужно ввести просто su
, но для этого потребуется ввести пароль от root.
- Установка iptables
- Основные настройки iptables для десктопа
- Просмотр правил iptables
- Как открыть порт в iptables
- Как заблокировать IP адрес в iptables
- Как сохранить правила iptables
- Как откатить сохраненные правила iptables
- Как удалить правило в iptables
- Как сбросить все правила iptables
- Основные настройки iptables для веб-сервера
Установка iptables
Для начала убедимся, что утилита iptables установлена. Для этого введем команду iptables -h
и если вывод будет command not found
, значит утилиту требуется установить.
iptables -h
bash: iptables: command not found
Установка iptables очень простая, для этого достаточно ввести:
apt install iptables
Вместо apt
может быть ваш вариант, который зависит от вашего дистрибутива и что там стоит по-умолчанию. Дожидаемся конца установки.
Основные настройки 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
Если вы вводили команды из прошлого раздела, то у вас должен быть примерно такой вывод:
Как открыть порт в iptables
Чтобы разрешить подключаться к нашей ОС по SSH, нам потребуется разрешить подключение через порт 22, прописав правило в iptables:
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
Далее проверим все наши правила с помощью команды iptables -L
Как мы видим, появилось новое правило для ssh по стандартному порту 22. Теперь он открыт и можно подключаться, так как теперь блокируются все входящие соединения, кроме соединений по этому порту. О том, как подключаться к серверу по SSH, вы можете почитать здесь.
Как заблокировать IP адрес в iptables
После того, как мы настроили исключение для входящих соединений для 22 порта, возможно потребуется ограничить подключение с конкретного IP. Допустим адрес с которого мы хотим ограничить любые подключения — 192.168.122.122
, для этого введем команду:
iptables -I INPUT -s 192.168.122.122 -j DROP
Вместо используемого адреса в примере может быть любой, как внутренний, так и внешний. Проверим правила с помощью iptables -L
Как сохранить правила 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.
То попробуйте перезапустить службу с другим названием:
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
Если вы вводили команды из прошлых разделов, то у вас должен быть примерно такой вывод:
В данном примере мы будем удалять правило под номером 1, который запрещает все входящие соединения с IP адреса 192.168.122.122
:
Уникальный номер правила мы знаем, теперь смотрим название его цепочки:
Наша «жертва» находится в цепи INPUT (Chain INPUT). Теперь у нас есть все переменные, для того, чтобы ввести команду удаления правила и можно уже вводить ее с опцией -D
:
# INPUT - имя цепочки, а 1 - это уникальный номер правила
iptables -D INPUT 1
Теперь выведем весь список и проверим удалилось ли правило:
Как мы видим, правило успешно удалилось.
Как сбросить все правила iptables
Если необходимо сбросить все правила сразу, то нужно ввести следующие команды:
# Очистим все правла
iptables -F
# Разрешим все входящие соединения
iptables -P INPUT ACCEPT
# Разрешим все перенаправляющие соединения
iptables -P FORWARD ACCEPT
# Разрешим все исходящие соединения
iptables -P OUTPUT ACCEPT
Теперь выведем список правил и проверим сбросились ли они:
Основные настройки 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
И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.