С помощью утилиты 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
И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.