фото ezioman.
О iptables
iptables - это утилита межсетевого экрана командной строки, которая использует цепочки политик для разрешения или блокировки трафика. Когда соединение пытается установить себя в вашей системе, iptables ищет правило в своем списке, чтобы соответствовать ему. Если он не находит его, он прибегает к действию по умолчанию.
iptables почти всегда поставляется с предустановкой на любом дистрибутиве Linux. Чтобы обновить / установить его, просто загрузите пакет iptables:
sudo apt-get install iptables
Есть альтернативы GUI для iptables, таких как Firestarter, но iptables на самом деле не так сложно, как только у вас есть несколько команд. Вы хотите быть предельно осторожными при настройке правил iptables, особенно если вы используете SSH'd на сервере, потому что одна неправильная команда может навсегда заблокировать вас, пока она не будет исправлена вручную на физической машине.
Типы цепочек
iptables использует три разные цепи: вход, вперед и выход.
вход - Эта цепочка используется для управления поведением для входящих соединений. Например, если пользователь пытается SSH на вашем ПК / сервере, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке ввода.
Вперед - Эта цепочка используется для входящих соединений, которые фактически не доставляются локально. Подумайте о маршрутизаторе - данные всегда отправляются на него, но редко на самом деле предназначены для самого маршрутизатора; данные просто перенаправляются на его цель. Если вы не выполняете какую-либо маршрутизацию, NATing или что-то еще в вашей системе, которая требует пересылки, вы даже не будете использовать эту цепочку.
Есть один верный способ проверить, использует ли ваша система / нуждается в прямой цепочке.
iptables -L -v
Выход - Эта цепочка используется для исходящих соединений. Например, если вы попытаетесь выполнить ping howtogeek.com, iptables проверит его выходную цепочку, чтобы узнать, что правила касаются ping и howtogeek.com, прежде чем принимать решение разрешить или отклонить попытку подключения.
Оговорка
Несмотря на то, что pinging внешнего хоста кажется чем-то, что должно было бы только пересечь производственную цепочку, имейте в виду, что для возврата данных будет использоваться цепочка ввода. При использовании iptables для блокировки вашей системы помните, что для большого количества протоколов требуется двухсторонняя связь, поэтому необходимо правильно настроить цепочки ввода и вывода. SSH - это общий протокол, который люди забывают разрешить для обеих цепей.
Поведение по умолчанию в цепочке политик
Прежде чем приступать к настройке и настраивать определенные правила, вы должны решить, какими должны быть поведение по умолчанию трех цепей. Другими словами, что вы хотите делать iptables, если соединение не соответствует существующим правилам?
Чтобы узнать, какие конфигурации в настоящее время настроены для работы с непревзойденным трафиком, выполните
iptables -L
команда.
Больше времени, чем нет, вы хотите, чтобы ваша система принимала подключения по умолчанию. Если вы ранее не изменяли правила цепи политики, этот параметр уже должен быть настроен. В любом случае, вот команда принимать соединения по умолчанию:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
По умолчанию с помощью правила accept вы можете использовать iptables для запрета определенных IP-адресов или номеров портов, продолжая принимать все остальные соединения. Через минуту мы получим эти команды.
Если вы предпочитаете отклонять все подключения и вручную указывать, какие из них вы хотите разрешить подключать, вы должны изменить политику своих цепей по умолчанию. Выполнение этого, вероятно, было бы полезно только для серверов, содержащих конфиденциальную информацию, и только когда-либо у них одинаковые IP-адреса.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Ответы, связанные с подключением
С настроенными политиками цепочки по умолчанию вы можете начать добавлять правила к iptables, чтобы он знал, что делать, когда он сталкивается с подключением или с определенным IP-адресом или портом. В этом руководстве мы рассмотрим три наиболее простых и часто используемых «ответа».
принимать - Разрешить соединение.
Капля - Бросьте соединение, действуйте так, как никогда не было. Это лучше, если вы не хотите, чтобы источник понял, что ваша система существует.
отклонять - Не разрешайте подключение, но отправляйте сообщение об ошибке. Это лучше всего, если вы не хотите, чтобы определенный источник подключался к вашей системе, но вы хотите, чтобы они знали, что ваш брандмауэр заблокировал их.
Лучший способ показать разницу между этими тремя правилами состоит в том, чтобы показать, на что похоже, когда ПК пытается выполнить ping Linux-машину с iptables, настроенным для каждого из этих параметров.
Разрешение соединения:
Разрешение или блокировка определенных подключений
С настройками вашей политики вы можете настроить iptables для разрешения или блокировки определенных адресов, диапазонов адресов и портов. В этих примерах мы установим соединения с
DROP
но вы можете переключить их на
ACCEPT
или же
REJECT
в зависимости от ваших потребностей и способов настройки цепочек политик.
Примечание. В этих примерах мы собираемся использовать
iptables -A
для добавления правил в существующую цепочку. iptables начинается в верхней части списка и проходит через каждое правило, пока не найдет тот, который соответствует. Если вам нужно вставить правило выше другого, вы можете использовать
iptables -I [chain] [number]
указать номер, который должен быть в списке.
Соединения с одного IP-адреса
В этом примере показано, как заблокировать все подключения с IP-адреса 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Соединения с диапазоном IP-адресов
В этом примере показано, как заблокировать все IP-адреса в сетевом диапазоне 10.10.10.0/24. Вы можете использовать сетевую маску или стандартную нотацию косой черты, чтобы указать диапазон IP-адресов.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
или же
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Соединения с определенным портом
В этом примере показано, как заблокировать SSH-соединения от 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Вы можете заменить «ssh» на любой протокол или номер порта.
-p tcp
часть кода сообщает iptables, какое соединение использует протокол. Если вы блокировали протокол, который использует UDP, а не TCP, то
-p udp
было бы необходимо.
В этом примере показано, как блокировать соединения SSH с любого IP-адреса.
iptables -A INPUT -p tcp --dport ssh -j DROP
Соединения
Как мы уже упоминали ранее, многие протоколы потребуют двухсторонней связи. Например, если вы хотите разрешить SSH-подключения к вашей системе, для цепей ввода и вывода потребуется добавленное правило. Но что, если вы хотите, чтобы SSH, входящий в вашу систему, разрешался? Не добавит ли правило к выходной цепочке также возможность исходящих попыток SSH?
Вот где подключаются состояния соединения, которые дают вам возможность, необходимую для двухсторонней связи, но позволяющие устанавливать односторонние соединения. Взгляните на этот пример, где разрешены соединения SSH от 10.10.10.10, но SSH-соединения до 10.10.10.10 не являются. Тем не менее, системе разрешено отправлять обратно информацию по SSH, пока сессия уже установлена, что делает возможным соединение SSH между этими двумя узлами.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Сохранение изменений
Изменения, внесенные вами в правила iptables, будут отменены при следующем запуске службы iptables, если вы не выполните команду для сохранения изменений. Эта команда может отличаться в зависимости от вашего дистрибутива:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Или же
/etc/init.d/iptables save
Другие команды
Перечислите настроенные в настоящее время правила iptables:
iptables -L
Добавление
-v
опция даст вам пакетную и байтовую информацию и добавление
-n
будет перечислять все численно. Другими словами - имена хостов, протоколы и сети перечислены как числа.
Чтобы очистить все текущие настроенные правила, вы можете выполнить команду flush.
iptables -F