Iptables как узнать, поддерживается телефон или нет

Обновлено: 06.06.2023

На первый взгляд правила IPTables могут показаться загадочными.

В этой статье я дал 25 практических правил IPTables, которые вы можете скопировать/вставить и использовать для своих нужд.

Эти примеры послужат базовыми шаблонами для настройки этих правил в соответствии с вашими конкретными требованиями.

Для удобства все эти 25 правил iptables представлены в формате сценария оболочки: iptables-rules

1. Удалить существующие правила

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

2. Установить политики цепочки по умолчанию

По умолчанию для цепочки используется ACCEPT. Измените это значение на DROP для всех цепочек INPUT, FORWARD и OUTPUT, как показано ниже.

Когда вы устанавливаете политику по умолчанию цепочки INPUT и OUTPUT как DROP, для каждого требования правила брандмауэра, которое у вас есть, вы должны определить два правила. т. е. один для входящих и один для исходящих.

Во всех приведенных ниже примерах у нас есть два правила для каждого сценария, поскольку мы установили DROP в качестве политики по умолчанию для цепочек INPUT и OUTPUT.

Если вы доверяете своим внутренним пользователям, последнюю строку выше можно опустить. т.е. НЕ DROP все исходящие пакеты по умолчанию. В этом случае для каждого требования правила брандмауэра вам нужно определить только одно правило. т. е. определить правило только для входящих, так как исходящие — ПРИНЯТЬ для всех пакетов.

Примечание. Если вы не знаете, что такое цепочка, вам следует сначала ознакомиться с основами IPTables.

3. Заблокировать определенный IP-адрес

Прежде чем мы продолжим, рассмотрим другие примеры. Если вы хотите заблокировать определенный IP-адрес, вы должны сначала сделать это, как показано ниже. Измените «x.x.x.x» в следующем примере на конкретный IP-адрес, который вы хотите заблокировать.

Это полезно, когда вы обнаруживаете странные действия с определенного IP-адреса в файлах журналов и хотите временно заблокировать этот IP-адрес на время проведения дальнейших исследований.

Вы также можете использовать один из следующих вариантов, который блокирует только TCP-трафик по соединению eth0 для этого IP-адреса.

4. Разрешить ВСЕ входящие SSH

Следующие правила разрешают ВСЕ входящие соединения ssh на интерфейсе eth0.

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

5. Разрешить входящий SSH только из определенной сети

Следующие правила разрешают входящие подключения ssh только из сети 192.168.100.X.

В приведенном выше примере вместо /24 можно также использовать полную маску подсети. то есть «192.168.100.0/255.255.255.0».

7. Объединение нескольких правил вместе с помощью нескольких портов

Когда вы разрешаете входящие соединения из внешнего мира на несколько портов, вместо того, чтобы писать отдельные правила для каждого порта, вы можете объединить их вместе, используя многопортовое расширение, как показано ниже.

8. Разрешить исходящий SSH

Следующие правила разрешают исходящие соединения ssh. т. е. когда вы подключаетесь по ssh изнутри к внешнему серверу.

Обратите внимание, что это немного отличается от входящего правила. т. е. Мы допускаем состояние NEW и ESTABLISHED в цепочке OUTPUT и только состояние ESTABLISHED в цепочке INPUT. Для входящего правила наоборот.

9. Разрешить исходящий SSH только в определенную сеть

Следующие правила разрешают исходящие ssh-подключения только к определенной сети. т.е. вы подключаетесь по ssh только к сети 192.168.100.0/24 изнутри.

Следующие правила разрешают исходящий безопасный веб-трафик. Это полезно, когда вы хотите разрешить интернет-трафик для своих пользователей. На серверах эти правила также полезны, когда вы хотите использовать wget для загрузки некоторых файлов извне.

11. Балансировка нагрузки входящего веб-трафика

Вы также можете сбалансировать нагрузку входящего веб-трафика с помощью правил брандмауэра iptables.

12. Разрешить проверку связи снаружи внутрь

Следующие правила позволяют внешним пользователям проверять связь с вашими серверами.

13. Разрешить эхо-запрос изнутри наружу

Следующие правила позволяют выполнять эхо-запрос изнутри на любой из внешних серверов.

14. Разрешить циклический доступ

Вы должны разрешить полный циклический доступ на своих серверах. т. е. доступ с использованием 127.0.0.1

15. Разрешить внутреннюю сеть внешней сети.

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

В этом примере eth1 подключен к внешней сети (интернету), а eth0 подключен к внутренней сети (например: 192.168.1.x).

16. Разрешить исходящий DNS

Следующие правила разрешают исходящие подключения DNS.

17. Разрешить подключения NIS

Если вы используете NIS для управления учетными записями пользователей, вам следует разрешить подключения NIS. Даже если соединение SSH разрешено, если вы не разрешите соединения ypbind, связанные с NIS, пользователи не смогут войти в систему.

Порты NIS являются динамическими. т. е. при запуске ypbind выделяет порты.

Сначала выполните команду rpcinfo -p, как показано ниже, и получите номера портов. В этом примере использовались порты 853 и 850.

Теперь разрешите входящие подключения к порту 111 и портам, которые использовались ypbind.

Описанное выше не будет работать при перезапуске ypbind, так как в этот раз у него будут другие номера портов.

Есть два решения этой проблемы: 1) использовать статический IP-адрес для вашей NIS или 2) использовать некоторые хитроумные методы сценариев оболочки для автоматического получения номера динамического порта из вывода команды «rpcinfo -p» и использовать его. в приведенных выше правилах iptables.

18. Разрешить Rsync из определенной сети

Следующие правила разрешают rsync только из определенной сети.

19. Разрешить подключение к MySQL только из определенной сети

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

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

20. Разрешить трафик Sendmail или Postfix

Следующие правила разрешают почтовый трафик. Это может быть sendmail или postfix.

21. Разрешить IMAP и IMAP

Следующие правила разрешают трафик IMAP/IMAP2.

Следующие правила разрешают трафик IMAPS.

22. Разрешить POP3 и POP3S

Следующие правила разрешают доступ по протоколу POP3.

Следующие правила разрешают доступ по протоколу POP3S.

23. Предотвратить DoS-атаку

Следующее правило iptables поможет вам предотвратить атаку типа "отказ в обслуживании" (DoS) на ваш веб-сервер.

В приведенном выше примере:

  • -m limit: используется расширение limit iptables
  • –limit 25/min: Это ограничивает максимум 25 подключений в минуту. Измените это значение в зависимости от ваших конкретных требований.
  • –limit-burst 100: это значение указывает, что ограничение/минута будет применяться только после того, как общее количество подключений достигнет уровня limit-burst.

24. Переадресация портов

В следующем примере весь трафик, поступающий на порт 442, перенаправляется на порт 22. Это означает, что входящее соединение ssh может поступать как с порта 22, так и с порта 422.

Если вы делаете это выше, вам также необходимо явно разрешить входящие соединения через порт 422.

25. Регистрировать отброшенные пакеты

Вы также можете записывать в журнал все потерянные пакеты. Эти правила должны быть внизу.

Сначала создайте новую цепочку под названием LOGGING.

Затем убедитесь, что все оставшиеся входящие подключения переходят к цепочке LOGGING, как показано ниже.

Далее зарегистрируйте эти пакеты, указав собственный префикс журнала.

Наконец, отбросьте эти пакеты.

Все вышеперечисленные 25 правил iptables представлены в формате сценария оболочки: iptables-rules

Предыдущие статьи из серии iptables:

Если вам понравилась эта статья, вам также может понравиться...

Комментарии к этой записи закрыты.

Хорошо, и ожидаю, что все ваши записи, связанные с iptables, будут в одном файле pdf. Спасибо

Привет! Большое спасибо за приведенную выше информацию. Однако хотелось бы знать, возможна ли блокировка или разрешение через iptables для определенного MAC-адреса через Интернет, например, если мой eth0 использует локальный IP-адрес 10.10.10.10, который является natted через общедоступный IP-адрес, например 100.100.100.100, и подключенный к Интернету через интернет-провайдера, тогда кто-то из Интернета с определенным идентификатором MAC (разрешенным в iptables) должен иметь возможность подключиться по ssh к моему общедоступному IP-адресу (100.100.100.100), а остальные должны быть удалены.

Возможно ли это через Интернет?

Продолжайте писать 🙂 Работа Gr8.

Диптану нельзя фильтровать пакеты по mac-адресам. Даже если бы это было возможно, то хост не находится в вашей подсети, поэтому вы не общаетесь с ним или он с вами, используя MAC-адрес. При обмене данными с этим хостом весь трафик направляется через шлюз по умолчанию.

Первый набор правил должен быть очень глубоким, если кто-то отбрасывает политику по умолчанию – первое правило:
iptables -F, отключит его. Вас предупредили 🙂

Правило по умолчанию всегда должно блокировать ВЕСЬ исходящий трафик по TCP25, кроме вашего собственного почтового сервера.

Хорошая коллекция правил iptables!
Просто хотел отметить, что «-m limit» соответствует пакетам, а не соединениям, поэтому в вашем примере вы сопоставите 25 пакетов в минуту, что, я думаю, не то, что вам нужно.
Решение ограничить количество подключений — использовать connlimit match.
пример:
iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-выше 15 –connlimit-mask 32 -j REJECT –reject-with tcp-reset
который будет отклонять более 15 подключений с одного IP-адреса источника — очень хорошее правило для защиты веб-сервера.

Также было бы здорово добавить в список правил пример с совпадением «hashlimit», в котором есть больше вариантов, когда вы хотите защититься от DDoS-атаки.
С помощью «limit» вы можете ограничить глобальную скорость пакетов за интервал времени, а с «hashlimit» вы можете ограничить их по IP, по комбинации IP + порт и т. д.
Итак, пример для веб-сервер будет примерно таким:
iptables -A INPUT -p tcp –dport 80 -m hashlimit –hashlimit 45/sec –hashlimit-burst 60 –hashlimit-mode srcip
–hashlimit-name DDOS –hashlimit-htable-size 32768 –hashlimit-htable-max 32768 –hashlimit-htable-gcinterval 1000
–hashlimit-htable-expire 100000 -j ПРИНЯТЬ

Надеюсь, это кому-нибудь поможет.

В любом случае, спасибо за хорошую статью!

имеет смысл иметь общее правило, разрешающее установление/связь для ввода и пересылки, разрешающее весь исходящий трафик от самого брандмауэра, а затем контролировать трафик в цепочке переадресации или ввода, в противном случае она слишком быстро становится слишком сложной.

и не забудьте добавить правила для интерфейса lo.

очень хорошо… спасибо

Мне очень помогло…

Только 1 вопрос: после реализации некоторых политик Мой сервер не может разрешить ни одно доменное имя.

Это сработало для меня, пожалуйста, посоветуйте, если есть лучший или более безопасный способ 😉

Могу ли я разрешить хост/домен google на iptables? подскажите пожалуйста помогите..

ОЧЕНЬ ПОЛЕЗНАЯ СТАТЬЯ….

@vierupro, у меня есть маршрутизатор с busybox, и я определил множество правил для установки ограничений сети. напишите, пожалуйста, правило, которое может ограничить скорость скачивания до 20 кб/с для указанного IP.

«Ошибка применения правил iptables. Код выхода: 11.
iptables v1.4.10
iptables: Цепочка/цель/ не совпадает с таким именем».

Может ли кто-нибудь сказать, что это за ошибка и как ее преодолеть.
У меня есть телефон Android, и я пытаюсь установить брандмауэр на своем корневом устройстве, и я застрял с этой ошибкой.

Как сравнить два брандмауэра Linux с точки зрения сетевой безопасности?

это правильно, Пол М …
iptables –flush
iptables –policy INPUT DROP
iptables –policy OUTPUT DROP
iptables –policy FORWARD DROP
iptables –append INPUT -i lo -j ПРИНЯТЬ
iptables –дополнить ВЫВОД -o lo -j ПРИНЯТЬ
iptables –дополнить ВВОД -m состояние –состояние \
УСТАНОВЛЕНО,СВЯЗАННО -j ПРИНЯТЬ
iptables – добавить ВЫВОД -m состояние –состояние \
НОВОЕ, УСТАНОВЛЕННОЕ, СВЯЗАННОЕ -j ПРИНЯТЬ

Пожалуйста, дайте мне знать, как ограничить доступ к серверу с помощью iptables с mac-адресами.

Я хочу дать разрешение только двум MAC-адресам и запретить остальным MAC-адресам подключаться к серверу.

Спасибо за эту замечательную статью! У меня есть один вопрос относительно удаления правила.
Я создаю статическое правило nat в iptables с помощью команды

iptables -t nat -I POSTROUTING 1 -j SNAT -p ip -s 1.1.1.10/32 –to-source 2.2.2.30-2.2.2.30 -o eth2

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

После того, как я удалю правило, выполнив приведенную ниже команду

iptables -t nat -D POSTROUTING -j SNAT -p ip -s 1.1.1.10/32 –to-source 2.2.2.30-2.2.2.30 -o eth2

Запись в iptables nat удалена, но я все еще могу наблюдать исходный перевод, происходящий с 1.1.1.10 на 2.2.2.30.

Пожалуйста, подскажите, что мне нужно сделать, чтобы полностью удалить запись из таблицы nat, или я что-то пропустил.

Заранее спасибо!

Я бы посоветовал вам подумать об изменении порядка обсуждения команд.

БОЛЬШИНСТВО вещей в Linux требует перезапуска службы x, чтобы изменения вступили в силу.

Похоже, не iptables.

Приказывать VPS отбрасывать ВЕСЬ трафик, пока вы подключаетесь к нему по SSH, никогда не бывает хорошей идеей.

Привет,
Спасибо за этот замечательный список.
Только с электронными письмами — единственная конфигурация, которая работала, была со следующими тремя правилами:
iptables -A OUTPUT -o eth0 -p tcp –sport 25 -m state –state NEW, ESTABLISHED -j ACCEPT < br />iptables -A ВЫХОД -o eth0 -p tcp –dport 25 -m состояние –состояние НОВОЕ, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A ВХОД -i eth0 -p tcp –sport 25 -m состояние –состояние УСТАНОВЛЕНО -j ПРИНЯТЬ

Еще раз большое спасибо

Вот iptables для пассивного ftp, если кому интересно.
& Спасибо Рамешу за ваши замечательные блоги.

iptables -A ВХОД -p tcp -m tcp –dport 21 -m состояние –состояние НОВОЕ, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A ВЫВОД -p tcp -m tcp –sport 21 -m состояние –состояние УСТАНОВЛЕНО -j ПРИНЯТЬ

iptables -A INPUT -p tcp -m tcp –sport 1024:65535 –dport 1024:65535 -m state –state NEW, RELATED, ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp –sport 1024:65535 –dport 1024:65535 -m состояние –состояние НОВОЕ,СВЯЗАННОЕ,УСТАНОВЛЕНО -j ПРИНЯТЬ

хороший урок. У меня следующий вопрос:

Я создаю портал авторизации (точку доступа) с помощью iptables. с самого начала я блокирую каждый порт и маршрутизацию на заставку на собственном сервере apache:

iptables -t mangle -A PREROUTING -i wlan0 -p tcp -m tcp –dport 1:65535 -j internet
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m mark –mark 99 -m tcp –dport 1:65535 -j DNAT –адрес назначения 10.0.0.254

Но мне нужно исключение для определенного домена, чтобы загрузить некоторые файлы css и javascript на эту заставку. Как я могу это сделать?

Iptables — это программный брандмауэр для дистрибутивов Linux. Это руководство в стиле шпаргалки содержит краткий справочник по командам iptables, которые создают правила брандмауэра, полезные в обычных повседневных сценариях. Сюда входят примеры iptables для разрешения и блокировки различных служб по порту, сетевому интерфейсу и исходному IP-адресу.

Как пользоваться этим руководством

  • Большинство описанных здесь правил предполагают, что ваш iptables настроен на DROP входящего трафика с помощью политики ввода по умолчанию, и вы хотите выборочно разрешать входящий трафик.
  • Используйте последующие разделы в зависимости от того, чего вы пытаетесь достичь. Большинство разделов не связаны ни с какими другими, поэтому приведенные ниже примеры можно использовать независимо
  • Используйте меню "Содержание" в правой части этой страницы (при большой ширине страницы) или функцию поиска в браузере, чтобы найти нужные разделы.
  • Скопируйте и вставьте приведенные примеры командной строки, заменив выделенные значения своими собственными.

Имейте в виду, что порядок ваших правил имеет значение. Все эти команды iptables используют параметр -A для добавления нового правила в конец цепочки. Если вы хотите поместить его в другое место в цепочке, вы можете использовать параметр -I, который позволяет указать позицию нового правила (или поместить его в начало цепочки, не указывая номер правила).

Примечание. При работе с брандмауэрами будьте осторожны, чтобы не заблокировать доступ к собственному серверу, заблокировав трафик SSH (порт 22 по умолчанию). Если вы потеряете доступ из-за настроек брандмауэра, вам может потребоваться подключиться к нему через веб-консоль, чтобы исправить свой доступ. Если вы используете DigitalOcean, вы можете прочитать нашу документацию по продукту Recovery Console для получения дополнительной информации. Подключившись через консоль, вы можете изменить правила брандмауэра, чтобы разрешить доступ по SSH (или разрешить весь трафик). Если ваши сохраненные правила брандмауэра разрешают доступ по SSH, другим способом является перезагрузка сервера.

Помните, что вы можете проверить текущий набор правил iptables с помощью sudo iptables -S и sudo iptables -L .

Давайте посмотрим на команды iptables!

Сохранение правил

Правила Iptables являются эфемерными, что означает, что их нужно сохранять вручную, чтобы они сохранялись после перезагрузки.

В Ubuntu одним из способов сохранения правил iptables является использование пакета iptables-persistent. Установите его с помощью apt следующим образом:

Во время установки вас спросят, хотите ли вы сохранить текущие правила брандмауэра.

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

В других дистрибутивах Linux могут быть альтернативные способы сделать ваши изменения iptables постоянными. Дополнительную информацию см. в соответствующей документации.

Список и удаление правил

Если вы хотите научиться составлять список и удалять правила iptables, ознакомьтесь с этим руководством: Как составить список и удалить правила брандмауэра Iptables.

Общие полезные правила

В этом разделе представлены различные команды iptables, которые создают правила, полезные на большинстве серверов.

Разрешение замыкания на себя

Интерфейс замыкания на себя, также называемый lo , используется компьютером для перенаправления сетевых подключений к самому себе. Например, если вы запустите ping localhost или ping 127.0.0.1 , ваш сервер будет пинговать себя, используя петлю. Интерфейс loopback также используется, если вы настраиваете сервер приложений для подключения к серверу базы данных с локальным адресом. Таким образом, вы должны быть уверены, что ваш брандмауэр разрешает эти соединения.

Чтобы принять весь трафик через интерфейс loopback, выполните следующие команды:

Разрешение установленных и связанных входящих подключений

Поскольку сетевой трафик обычно должен быть двусторонним — входящим и исходящим — для правильной работы обычно создается правило брандмауэра, которое разрешает установленный и связанный входящий трафик, чтобы сервер разрешал обратный трафик для инициированных исходящих подключений. самим сервером. Эта команда позволит:

Разрешение установленных исходящих соединений

Возможно, вы захотите разрешить исходящий трафик всех установленных соединений, которые обычно являются ответом на законные входящие соединения. Эта команда позволит:

Разрешение внутренней сети для доступа к внешней

Предполагая, что eth0 — это ваша внешняя сеть, а eth1 — ваша внутренняя сеть, это позволит вашей внутренней сети получить доступ к внешней:

Отбрасывание недопустимых пакетов

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

Блокировка IP-адреса

Чтобы заблокировать сетевые подключения, исходящие с определенного IP-адреса, например 203.0.113.51, выполните следующую команду:

В этом примере -s 203.0.113.51 указывает исходный IP-адрес «203.0.113.51». Исходный IP-адрес можно указать в любом правиле брандмауэра, включая правило разрешения.

Если вы хотите вместо этого отклонить соединение, которое ответит на запрос соединения ошибкой «соединение отклонено», замените «DROP» на «REJECT» следующим образом:

Блокировка подключений к сетевому интерфейсу

Чтобы заблокировать подключения с определенного IP-адреса, например. 203.0.113.51 на определенный сетевой интерфейс, например. eth0, используйте эту команду:

Это то же самое, что и в предыдущем примере, с добавлением -i eth0 . Сетевой интерфейс можно указать в любом правиле брандмауэра, и это отличный способ ограничить правило определенной сетью.

Сервис: SSH

Если вы используете сервер без локальной консоли, вы, вероятно, захотите разрешить входящие подключения SSH (порт 22), чтобы иметь возможность подключаться к серверу и управлять им. В этом разделе рассказывается, как настроить брандмауэр с различными правилами, связанными с SSH.

Разрешение всех входящих SSH

Чтобы разрешить все входящие SSH-соединения, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений SSH, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение входящего SSH с определенного IP-адреса или подсети

Чтобы разрешить входящие подключения SSH с определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 203.0.113.0/24, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений SSH, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение исходящего SSH

Если для политики OUTPUT брандмауэра не задано значение ACCEPT и вы хотите разрешить исходящие SSH-подключения — ваш сервер инициирует SSH-подключение к другому серверу — вы можете выполнить следующие команды:

Разрешение входящей Rsync с определенного IP-адреса или подсети

Rsync, работающий через порт 873, можно использовать для передачи файлов с одного компьютера на другой.

Чтобы разрешить входящие подключения rsync с определенного IP-адреса или подсети, укажите исходный IP-адрес и порт назначения. Например, если вы хотите, чтобы вся подсеть 203.0.113.0/24 могла синхронизироваться с вашим сервером, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений rsync, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Сервис: веб-сервер

Сервис: MySQL

MySQL прослушивает клиентские подключения через порт 3306. Если ваш сервер базы данных MySQL используется клиентом на удаленном сервере, вы должны разрешить этот трафик.

Разрешение MySQL с определенного IP-адреса или подсети

Чтобы разрешить входящие подключения MySQL с определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 203.0.113.0/24, выполните следующие команды:

Вторая команда, разрешающая исходящий трафик установленных соединений MySQL, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение MySQL на определенный сетевой интерфейс

Чтобы разрешить подключения MySQL к определенному сетевому интерфейсу — скажем, у вас есть частный сетевой интерфейс eth1, например, — используйте следующие команды:

Вторая команда, разрешающая исходящий трафик установленных соединений MySQL, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Сервис: PostgreSQL

PostgreSQL прослушивает клиентские подключения через порт 5432. Если ваш сервер базы данных PostgreSQL используется клиентом на удаленном сервере, вы должны разрешить этот трафик.

PostgreSQL с определенного IP-адреса или подсети

Чтобы разрешить входящие соединения PostgreSQL с определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 203.0.113.0/24, выполните следующие команды:

Вторая команда, разрешающая исходящий трафик установленных соединений PostgreSQL, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение PostgreSQL для определенного сетевого интерфейса

Чтобы разрешить подключения PostgreSQL к определенному сетевому интерфейсу — скажем, у вас есть частный сетевой интерфейс eth1, например, — используйте следующие команды:

Вторая команда, разрешающая исходящий трафик установленных соединений PostgreSQL, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Сервис: Почта

Почтовые серверы, такие как Sendmail и Postfix, прослушивают различные порты в зависимости от протоколов, используемых для доставки почты. Если вы используете почтовый сервер, определите, какие протоколы вы используете, и разрешите соответствующие типы трафика. Мы также покажем вам, как создать правило для блокировки исходящей SMTP-почты.

Блокировка исходящей SMTP-почты

Если ваш сервер не должен отправлять исходящую почту, вы можете заблокировать такой трафик. Чтобы заблокировать исходящую почту SMTP, использующую порт 25, выполните следующую команду:

Это настраивает iptables на отклонение всего исходящего трафика через порт 25. Если вам нужно отклонить другой сервис по номеру порта вместо порта 25, замените этот номер порта на 25, указанный выше.

Разрешение всех входящих SMTP

Чтобы разрешить вашему серверу отвечать на SMTP-подключения через порт 25, выполните следующие команды:

Вторая команда, разрешающая исходящий трафик установленных соединений SMTP, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение всех входящих IMAP

Чтобы разрешить вашему серверу отвечать на подключения IMAP, порт 143, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений IMAP, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение всех входящих IMAPS

Чтобы ваш сервер мог отвечать на подключения IMAPS, порт 993, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений IMAPS, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT.

Разрешение всех входящих POP3

Чтобы разрешить вашему серверу отвечать на подключения POP3, порт 110, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений POP3, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Разрешение всех входящих POP3

Чтобы разрешить серверу отвечать на POP3S-соединения, порт 995, выполните следующие команды:

Вторая команда, которая разрешает исходящий трафик установленных соединений POP3S, необходима только в том случае, если для политики OUTPUT не установлено значение ACCEPT .

Заключение

Это должно охватывать многие команды, которые обычно используются при настройке брандмауэра iptables. Конечно, iptables — очень гибкий инструмент, поэтому не стесняйтесь смешивать и сочетать команды с различными параметрами в соответствии с вашими конкретными потребностями, если они не описаны здесь.

Если вам нужна помощь в настройке брандмауэра, ознакомьтесь с этим руководством: Как выбрать эффективную политику брандмауэра для защиты серверов.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.


Iptables – чрезвычайно гибкая утилита брандмауэра, созданная для операционных систем Linux. Независимо от того, являетесь ли вы новичком в Linux или системным администратором, вероятно, iptables может быть вам полезен. Продолжайте читать, пока мы покажем вам, как настроить самый универсальный брандмауэр Linux.

Об iptables

iptables — это утилита брандмауэра командной строки, которая использует цепочки политик для разрешения или блокировки трафика. Когда соединение пытается установиться в вашей системе, iptables ищет правило в своем списке, чтобы сопоставить его. Если он не находит его, он прибегает к действию по умолчанию.

iptables почти всегда предустановлен в любом дистрибутиве Linux. Чтобы обновить/установить его, просто скачайте пакет iptables:

Существуют альтернативы iptables с графическим интерфейсом, такие как Firestarter, но iptables на самом деле не так уж и сложен, если у вас есть несколько команд. Вы должны быть предельно осторожны при настройке правил iptables, особенно если вы подключены к серверу по SSH, потому что одна неверная команда может навсегда заблокировать вас, пока она не будет исправлена ​​вручную на физическом компьютере. И не забудьте заблокировать свой SSH-сервер, если вы откроете порт.

Типы цепочек

iptables использует три разные цепочки: ввод, пересылка и вывод.

Input – эта цепочка используется для управления поведением входящих подключений. Например, если пользователь попытается подключиться по SSH к вашему ПК/серверу, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке ввода.

Переадресация: эта цепочка используется для входящих подключений, которые на самом деле не доставляются локально. Подумайте о маршрутизаторе — данные всегда отправляются на него, но редко на самом деле предназначены для самого маршрутизатора; данные просто пересылаются к своей цели. Если вы не выполняете какую-либо маршрутизацию, NAT или что-то еще в своей системе, требующее переадресации, вы даже не будете использовать эту цепочку.

Есть один верный способ проверить, использует ли ваша система цепочку переадресации или нет.


На приведенном выше снимке экрана показан сервер, который работает уже несколько недель и не имеет ограничений на входящие и исходящие соединения. Как видите, цепочка ввода обработала 11 ГБ пакетов, а цепочка вывода — 17 ГБ. Прямая цепочка, с другой стороны, не нуждалась в обработке одного пакета. Это связано с тем, что сервер не выполняет никакой переадресации и не используется в качестве транзитного устройства.

Несмотря на то, что проверка связи с внешним хостом кажется чем-то, что нужно только для обхода выходной цепочки, имейте в виду, что для возврата данных также будет использоваться входная цепочка. При использовании iptables для блокировки вашей системы помните, что для многих протоколов требуется двусторонняя связь, поэтому цепочки ввода и вывода должны быть правильно настроены. SSH — это распространенный протокол, который люди забывают разрешить в обеих цепочках.

Поведение цепочки политик по умолчанию

Прежде чем переходить к настройке определенных правил, вам нужно решить, каким будет поведение по умолчанию для трех цепочек. Другими словами, что вы хотите, чтобы iptables делал, если соединение не соответствует ни одному из существующих правил?

Чтобы узнать, что ваши цепочки политик в настоящее время настроены для работы с несовпадающим трафиком, выполните команду iptables -L.


Как видите, мы также использовали команду grep, чтобы получить более чистый вывод. На этом снимке экрана показано, что наши сети в настоящее время принимают трафик.

В большинстве случаев вам нужно, чтобы ваша система принимала подключения по умолчанию. Если вы ранее не меняли правила цепочки политик, этот параметр уже должен быть настроен. В любом случае, вот команда для принятия подключений по умолчанию:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
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 или REJECT , в зависимости от ваших потребностей и того, как вы настроили свои цепочки политик.

Примечание. В этих примерах мы будем использовать 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 --state НОВОЕ, УСТАНОВЛЕНО -j ПРИНЯТЬ

iptables -A OUTPUT -p tcp -- спорт 22 -d 10.10.10.10 -m состояние --state УСТАНОВЛЕНО -j ПРИНЯТЬ

Сохранение изменений

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

Красная шляпа/CentOS:

Другие команды

Список текущих настроенных правил iptables:

Добавление параметра -v даст вам информацию о пакетах и ​​байтах, а добавление -n выведет все данные в числовом виде. Другими словами, имена хостов, протоколы и сети перечислены в виде чисел.

Чтобы очистить все настроенные в данный момент правила, вы можете выполнить команду сброса.

Iptables предоставляет мощные возможности для управления входящим и исходящим трафиком вашей системы.

 Запрос командной строки

Подписаться сейчас

Еженедельно получайте самое интересное на свой почтовый ящик.

Современные ядра Linux поставляются с инфраструктурой фильтрации пакетов под названием Netfilter. Netfilter позволяет разрешать, отбрасывать и изменять входящий и исходящий трафик системы. Инструмент командной строки iptables использует эту функциональность для обеспечения мощного брандмауэра, который можно настроить, добавив правила для формирования политики брандмауэра. iptables может быть очень сложным благодаря своему богатому набору возможностей и вычурному синтаксису команд. Давайте рассмотрим некоторые из них и разработаем набор советов и рекомендаций по использованию iptables для многих ситуаций, с которыми может столкнуться системный администратор.

Не замыкайтесь в себе

Сценарий: вы собираетесь внести изменения в правила политики iptables на основном сервере вашей компании. Вы хотите избежать блокировки себя и, возможно, всех остальных. (Это требует времени и денег, а также приводит к тому, что ваш телефон звонит как вкопанный.)

Создайте резервную копию конфигурации с помощью команды:

Добавьте метку времени с помощью команды:

Вы получаете файл с таким именем, как:

Если вы делаете что-то, что мешает работе вашей системы, вы можете быстро восстановить ее:

Избегайте общих правил, подобных этому, в верхней части правил политики:

Чем больше критериев вы укажете в правиле, тем меньше шансов, что вы заблокируете себя. Вместо очень общего правила, приведенного выше, используйте что-то вроде этого:

Это правило добавляет (-A) к цепочке INPUT правило, которое будет УДАЛИТЬ любые пакеты, исходящие из блока CIDR 10.0.0.0/8 на TCP (-p tcp) порт 22 (--dport 22), предназначенный для IP-адреса. 192.168.100.101 (-d 192.168.100.101).

Существует множество способов уточнить информацию. Например, использование -i eth0 ограничит обработку одной сетевой картой на вашем сервере. Таким образом, действия фильтрации не будут применять правило к eth1.

Это очень эффективный способ не замыкаться в себе. Все остальные не очень.

Чтобы оно работало должным образом, вам нужно указать это правило как первое. Помните, -I вставляет это как первое правило; -A добавляет его в конец списка.

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

Настройка политики брандмауэра рабочей станции

Сценарий: вы хотите настроить рабочую станцию ​​с ограничительной политикой брандмауэра.

Ограничение диапазона IP-адресов

Сценарий. Генеральный директор вашей компании считает, что сотрудники проводят слишком много времени в Facebook и не выполняют никакой работы. Генеральный директор говорит ИТ-директору сделать что-нибудь с сотрудниками, которые тратят время на Facebook. ИТ-директор просит директора по информационной безопасности принять меры, чтобы сотрудники не тратили время на Facebook. В конце концов, вам говорят, что сотрудники тратят слишком много времени на Facebook, и вы должны что-то с этим делать. Вы решаете заблокировать любой доступ к Facebook. Сначала узнайте IP-адрес Facebook с помощью команд host и whois.

Регулировать по времени

Регулировать по времени – вариант 2

Сценарий: во время планового простоя для обслуживания системы вам необходимо запретить весь трафик TCP и UDP между 2 и 3 часами ночи, чтобы входящий трафик не прерывал выполнение задач обслуживания. Для этого потребуется два правила iptables:

С помощью этих правил TCP- и UDP-трафик (-p tcp и -p udp ) запрещается (-j DROP) между 2 часами ночи (--timestart 02:00) и 3 часами ночи (--timestop 03:00). при вводе (-A INPUT).

Ограничение подключений к iptables

Сценарий. Ваши веб-серверы, подключенные к Интернету, подвергаются атаке злоумышленников со всего мира, пытающихся вызвать отказ в обслуживании (DoS). Чтобы смягчить эти атаки, вы ограничиваете количество подключений одного IP-адреса к вашему веб-серверу:

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

Сценарий: поскольку iptables работает по принципу «победа при первом совпадении», поскольку пакеты проходят правила в цепочке, часто совпадающие правила должны находиться в верхней части политики, а менее часто совпадающие правила — в нижней части. Как узнать, какие правила просматриваются чаще или реже, чтобы их можно было расположить ближе к началу или к концу?

Используйте эту команду:

Команда выведет список всех правил в цепочке (-L). Поскольку цепочка не указана, все цепочки будут перечислены с подробным выводом (-v), показывающим счетчики пакетов и байтов в числовом формате (-n) с номерами строк в начале каждого правила, соответствующего положению этого правила в цепочке.< /p>

Используя количество пакетов и байтов, вы можете упорядочить наиболее часто используемые правила вверху, а наименее часто используемые правила внизу.

Какие правила вообще не совпадают? Это были бы хорошие кандидаты на отстранение от политики. Вы можете узнать это с помощью этой команды:

Примечание: это не табуляция между нулями; между нулями пять пробелов.

Вы хотите следить за тем, что происходит с iptables в режиме реального времени, например, с top. Используйте эту команду для динамического мониторинга активности iptables и показа только активно просматриваемых правил:

наблюдайте за запуском 'iptables -nvL | grep -v "0 0"' каждые пять секунд и отображает первый экран своего вывода. Это позволяет наблюдать за изменением количества пакетов и байтов с течением времени.

Отчет по iptables

Сценарий. Ваш руководитель считает, что этот брандмауэр iptables просто великолепен, но ежедневный отчет об активности был бы еще лучше. Иногда важнее написать отчет, чем выполнить работу.

Используйте фильтр пакетов/брандмауэр/анализатор журнала IDS FWLogwatch для создания отчетов на основе журналов брандмауэра iptables. FWLogwatch поддерживает множество форматов журналов и предлагает множество вариантов анализа. Он создает ежедневные и ежемесячные сводки файлов журналов, что позволяет администратору безопасности высвободить значительное время, обеспечить лучший контроль над сетевой безопасностью и сократить число незамеченных атак.

Вот пример вывода FWLogwatch:

fwlogwatch.jpg

Вывод FWLogwatch

Больше, чем просто ПРИНЯТЬ и ОТКАЗАТЬСЯ

Мы рассмотрели множество аспектов iptables, от проверки того, что вы не блокируете себя при работе с iptables, до мониторинга iptables и визуализации активности брандмауэра iptables. Это поможет вам начать путь к реализации еще большего количества советов и приемов iptables.

Читайте также: