Руководство для начинающих по iptables, брандмауэр Linux
Iptables - чрезвычайно гибкая утилита брандмауэра, созданная для операционных систем Linux. Являетесь ли вы новичком в Linux или системным администратором, возможно, iptables вам пригодится. Читайте дальше, как мы покажем вам, как настроить самый универсальный брандмауэр Linux.
фото ezioman.
О iptables
iptables - это утилита брандмауэра командной строки, которая использует цепочки политик для разрешения или блокировки трафика. Когда соединение пытается установить себя в вашей системе, iptables ищет правило в своем списке, чтобы соответствовать ему. Если он не находит, он прибегает к действию по умолчанию.
iptables почти всегда поставляется предварительно установленным в любом дистрибутиве Linux. Чтобы обновить / установить его, просто получите пакет iptables:
sudo apt-get установить iptables
Существуют альтернативы GUI для iptables, такие как Firestarter, но iptables не так уж и сложен, когда у вас несколько команд. Вы хотите быть предельно осторожным при настройке правил iptables, особенно если вы используете SSH на сервере, потому что одна неправильная команда может навсегда заблокировать вас, пока она не будет исправлена вручную на физическом компьютере..
Типы цепей
iptables использует три различных цепочки: ввод, пересылка и вывод.
вход - Эта цепочка используется для управления поведением входящих соединений. Например, если пользователь пытается выполнить SSH на вашем ПК / сервере, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке ввода.
Вперед - Эта цепочка используется для входящих соединений, которые на самом деле не доставляются локально. Подумайте о маршрутизаторе - данные всегда отправляются на него, но редко на самом деле предназначены для самого маршрутизатора; данные просто перенаправляются к своей цели. Если вы не используете в своей системе какую-либо маршрутизацию, NAT или что-то еще, что требует пересылки, вы даже не будете использовать эту цепочку.
Есть один верный способ проверить, использует ли ваша система прямую цепочку или нет.
iptables -L -v
На приведенном выше снимке экрана показан сервер, который работает несколько недель и не имеет ограничений на входящие или исходящие подключения. Как видите, входная цепочка обработала 11 ГБ пакетов, а выходная - 17 ГБ. С другой стороны, прямой цепочке не нужно обрабатывать один пакет. Это связано с тем, что сервер не выполняет переадресацию и не используется в качестве транзитного устройства..
Выход - Эта цепочка используется для исходящих соединений. Например, если вы попытаетесь пропинговать howtogeek.com, iptables проверит свою цепочку вывода, чтобы узнать, какие правила относятся к ping и howtogeek.com, прежде чем принять решение о разрешении или запрете попытки подключения..
Предостережение
Несмотря на то, что проверка связи с внешним хостом кажется чем-то, что требуется только для обхода цепочки вывода, имейте в виду, что для возврата данных также будет использоваться цепочка ввода. При использовании iptables для блокировки вашей системы помните, что для многих протоколов требуется двусторонняя связь, поэтому необходимо правильно настроить как входную, так и выходную цепочки. SSH - это общий протокол, который забывают разрешить в обеих цепях.
Поведение по умолчанию в цепочке политики
Прежде чем приступить к настройке конкретных правил, вы захотите решить, каким будет поведение трех цепочек по умолчанию. Другими словами, что вы хотите, чтобы iptables делал, если соединение не соответствует ни одному из существующих правил??
Чтобы увидеть, что ваши цепочки политик в настоящее время настроены делать с несогласованным трафиком, запустите iptables -L
команда.
Как видите, мы также использовали команду grep, чтобы получить более чистый вывод. На этом скриншоте наши цепочки в настоящее время рассчитаны на прием трафика.
Больше раз вы захотите, чтобы ваша система принимала соединения по умолчанию. Если вы ранее не изменяли правила цепочки политик, этот параметр уже должен быть настроен. В любом случае, вот команда для принятия соединений по умолчанию:
iptables --policy INPUT ПРИНЯТЬ
iptables --policy OUTPUT ПРИНЯТЬ
iptables --policy FORWARD ACCEPT
По умолчанию правило принятия позволяет использовать iptables для запрета определенных IP-адресов или номеров портов, продолжая принимать все другие подключения. Мы доберемся до этих команд через минуту.
Если вы предпочитаете запрещать все соединения и вручную указывать, какие из них вы хотите разрешить для подключения, вам следует изменить политику по умолчанию для ваших цепочек, чтобы отбросить. Это, вероятно, будет полезно только для серверов, которые содержат конфиденциальную информацию и имеют только те же IP-адреса, к которым подключаются.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Ответы для конкретного соединения
С настроенными политиками цепочки по умолчанию вы можете начать добавлять правила в iptables, чтобы он знал, что делать, когда он обнаруживает соединение с определенным IP-адресом или портом. В этом руководстве мы рассмотрим три самых основных и часто используемых «ответа».
принимать - Разрешить соединение.
Капля - Прервите связь, ведите себя так, как будто этого никогда не было. Это лучше, если вы не хотите, чтобы источник осознал, что ваша система существует.
отклонять - Не разрешайте соединение, но отправьте сообщение об ошибке. Это лучше, если вы не хотите, чтобы конкретный источник подключался к вашей системе, но вы хотите, чтобы они знали, что ваш брандмауэр заблокировал их..
Лучший способ показать разницу между этими тремя правилами - показать, как он выглядит, когда ПК пытается пропинговать компьютер Linux с iptables, настроенным для каждого из этих параметров..
Разрешить соединение:
Отключение соединения:
Отказ от соединения:
Разрешение или блокировка определенных подключений
После настройки цепочек политик вы можете настроить iptables для разрешения или блокировки определенных адресов, диапазонов адресов и портов. В этих примерах мы установим соединения на DROP
, но вы можете переключить их на ACCEPT
или же БРАК
, в зависимости от ваших потребностей и от того, как вы настроили свои цепочки политик.
Примечание. В этих примерах мы будем использовать Iptables -A
добавить правила в существующую цепочку. iptables начинается с верхней части списка и просматривает каждое правило, пока не найдет то, которое ему соответствует. Если вам нужно вставить правило над другим, вы можете использовать iptables -I [цепочка] [номер]
указать номер, который должен быть в списке.
Соединения с одного 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 NEW, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m состояние --state УСТАНОВЛЕНО -j ПРИНЯТЬ
Сохранение изменений
Изменения, внесенные в ваши правила 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