Перечисление правил по спецификации
Чтобы перечислить все действующие правила Iptables, запустите команду с опцией :
Как вы видите, вывод выглядит примерно так, как и команды, которые использовались для их создания, но не имеют команды в начале. Также вывод будет напоминать файлы конфигурации правил Iptables, если вы когда-либо использовали или .
Перечисление списка правил конкретной цепочки
Если вы хотите ограничить вывод конкретной цепочкой (, , и т. д.), вы можете указать название цепочки сразу после опции . Например, для отображения всех спецификаций правил в цепочке необходимо запустить следующую команду:
Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.
Проблема, которую мы решим
Чтобы установить контекст, давайте представим очень возможную сетевую архитектуру. Я видел много небольших компаний, управляющих чем-то похожим на это.
То, что мы имеем здесь, на самом деле довольно просто:
- Несколько компьютеров и других сетевых устройств — зеленые ящики
- Почтовый сервер — красная коробка
- Сервер Microsoft Active Directory — синий ящик
- Шлюз, который также является брандмауэром, для нашей сети под управлением Linux — черный ящик
- Между всем этим простой сетевой коммутатор
В следующем разделе мы настроим iptables на этом шлюзе, чтобы он позволял всем устройствам в сети подключаться к Интернету. Это позволит нам подключаться к нему через SSH и позволит внешним почтовым серверам достигать почтового сервера в нашей сети — компьютера, который даже не имеет публичного IP-адреса; только частный.
Перечисление правил в виде таблицы
Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.
Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду с опцией :
Эта команда будет выводить все действующие правила, отсортированные по цепочкам.
Если вы хотите ограничить вывод конкретной цепочкой (, , и т. д.), вы можете указать название цепочки сразу после опции .
Давайте рассмотрим пример цепочки INPUT:
Первая строка вывода указывает имя цепочки (в данном случае ), за которым следует используемая по умолчанию политика (). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:
- : если пакет отвечает правилу, заголовок target указывает, что с ним нужно сделать. Например, пакет можно принять, отклонить, записать или отправить другой цепочке для сопоставления с другими правилами.
- : протокол, например , , или
- : данный параметр используется редко и отображает опции IP
- : исходный IP-адрес или подсеть трафика, либо (отовсюду)
- : IP-адрес назначения или подсеть трафика, либо (везде)
Последняя колонка, которая не имеет заголовка, указывает опции правила. Другими словами, это может быть любая часть правила, которая не указана предыдущими столбцами. Это может быть любая информация, начиная с портов назначения и исходных портов и заканчивая состоянием подключения пакета.
Отображение счетчиков пакетов и общего размера
При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями и в одной команде.
Например, давайте снова рассмотрим цепочку с опцией :
Обратите внимание, что список сейчас содержит два дополнительных столбца, и. Теперь, когда вы знаете, как выводить список действующих правил брандмауэра различными способами, давайте рассмотрим возможность сброса счетчиков пакетов и байтов
Теперь, когда вы знаете, как выводить список действующих правил брандмауэра различными способами, давайте рассмотрим возможность сброса счетчиков пакетов и байтов.
Компоненты Iptables
Имя Iptables на самом деле имеет смысл в его функциональности. Это набор таблиц IP-адресов и портов с некоторыми привязанными действиями. В терминах iptable эти таблицы называются цепочками . Не сконфигурированные, пустые iptables могут выглядеть так:
1 2 3 4 5 6 7 8 9 |
csaba ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination |
Вы можете заметить, что есть три основные цепи:
- INPUT — все входящие соединения
- FORWARD — соединения, проходящие через
- ВЫХОД — соединения, отправляемые с этого сервера
Термин « политика ПРИНЯТЬ » в скобках означает, что ПРИНЯТЬ установлено в качестве политики по умолчанию для этой конкретной цепочки. Таким образом, если для соединения нет соответствия, это правило будет применено. При настройке брандмауэра можно использовать три основных понятия:
- политика по умолчанию ПРИНЯТЬ & отрицать выборочно все, что вам нужно — может быть трудно указать все, что в нем отказано. Я не рекомендую этот подход.
- политика по умолчанию DROP или REJECT & позволяет выборочно все, что вам нужно — это лучше, но есть проблема. Если вы допустили ошибку в конфигурации iptables, вы легко можете остаться с пустыми цепями, лишающими доступ ко всему и всем, включая вас. Поэтому, если у вас нет физического доступа к вашему серверу / компьютеру брандмауэра, я рекомендую вам использовать следующий подход.
- политика по умолчанию ПРИНЯТЬ & явная политика DROP all & затем выборочно разрешить все, что вам нужно — это комбинированное решение между первыми двумя возможностями. Он будет использовать политику ПРИНЯТЬ по умолчанию, поэтому, если что-то пойдет не так, вы можете вернуться через SSH или любое другое удаленное соединение, которое вы используете для брандмауэра. В то же время, явное правило DROP для любых непревзойденных соединений гарантирует, что вы в безопасности. Предоставление только того, о чем вы знаете и что действительно нужно использовать, обеспечивает наилучшую защиту.
Что такое проброс порта. Как пробросить порты на роутере
Перенаправление порта — это сопоставление определённого порта на внешнем интерфейсе роутера с определённым портом нужного устройства в локальной сети.
Перенаправление порта является одной из функций механизма NAT (трансляции сетевых адресов). Суть NAT заключается в использовании несколькими устройствами в локальной сети одного внешнего интерфейса.
В домашних сетях внешний интерфейс — это WAN-порт роутера, а сетевые устройства — это компьютеры, планшеты и смартфоны.
А суть перенаправления заключается в том, чтобы предоставить доступ к какому-то устройству в сети из Интернета, используя какой-либо открытый порт роутера.
Как сделать проброс порта на шлюзе (роутере, модеме)
Это то, что в народе называется «как открыть порт на роутере».
Допустим, есть задача предоставить доступ к удалённому рабочему столу компьютера, который подключён к Интернету через роутер. Для этого нужно создать правило перенаправления любого свободного порта WAN-интерфейса роутера на порт 3389 нужного компьютера.
3389 — это порт, который используется по умолчанию для приёма входящих подключений службы сервера удалённых рабочих столов.
После создания такого правила и применения настроек на роутере запросы, поступившие на указанный внешний порт будут перенаправлены на 3389 нужного компьютера в сети.
Для этого на роутере необходимо зайти в настройки перенаправления портов и добавить правило.
Пример настройки перенаправления порта на роутере D-Link.
1 Откройте раздел Advanced (Расширенные настройки).
2 Выберите настройку Port Forwarding (перенаправление портов).
3 Настройте правило перенаправления:
- Укажите любое удобное для вас имя правила;
- Укажите номер публичного порта (или диапазон). Публичный порт — это тот, который будет открыт на роутере для доступа из Интернета через WAN-интерфейс. Если нужно открыть только один порт, укажите один и тот же порт и в качестве начального в диапазоне, и в качестве конечного.В нашем случае нам нужно открыть порт 3389, поэтому мы два раза указали его в верхней строке настроек.
- Укажите IP-адрес компьютера (сервера) в локальной сети, на котором запущена служба, доступ к которой нужно предоставить. Рекомендуется зарезервировать IP-адрес для данного сервера в настройках DHCP-резервирования на роутере, чтобы он не поменялся в дальнейшем. Вместо этого также можно указать IP-адрес вручную в настройках сетевого адаптера на компьютере, проброс до которого вы будете делать на роутере.В нашем примере мы указываем внутренний серый IP-адрес 192.168.1.100, который принадлежит компьютеру с Windows Server 2008 с настроенным сервером удалённых рабочих столов.
- Укажите порт для приёма входящих подключений на компьютере в локальной сети.В нашем случае на сервере для службы Сервер удалённых рабочих столов используется порт по умолчанию 3389.
- Установите флажок слева для включения правила.
4 Нажмите Save Setting (Сохранить настройки)
Проверка работы перенаправления порта
Для проверки работы перенаправления портов нужно подключиться к компьютеру, используя внешний IP-адрес или имя хоста.
Нажмите win+r, введите mstsc и нажмите Enter:
В поле Компьютер dведите внешний IP-адрес роутера (который присвоен провайдером WAN-интерфейсу) либо имя хоста.
Нажмите Подключить:
(Тем самым вы устанавливаете соединение с WAN-портом роутера на 3389. При этом на роутере срабатывает перенаправление порта согласно правилу на внутренний IP-адрес 192.168.1.100 и указанный порт 3389)
Если вы увидите подпись Настройка удалённого сеанса, значит перенаправление порта работает:
В итоге вы должны увидеть рабочий стол удалённого компьютера (сервера удалённых рабочих столов):
Примечание
В веб-интерфейсе маршрутизаторов вместо настройки Port Forwarding может присутствовать настройка Virtual Server. А иногда — и та, и другая.
Имейте в виду, что для публикации одного порта можно использовать как настройку Port Forwarding, так и Virtual Server.
Разница в том, что настройка Виртуальный сервер позволяет переадресовывать (публиковать) только один порт на локальном компьютере, а с помощью настройки Перенаправление можно пробрасывать и отдельные порты, и диапазоны.
Рекомендуемые к прочтению статьи:
Mitigating SYN Floods With SYNPROXY
SYNPROXY is a new target of iptables that has been added in Linux kernel version 3.12 and iptables 1.4.21. CentOS 7 backported the feature and it’s available in its 3.10 default kernel.
The purpose of SYNPROXY is to check whether the host that sent the SYN packet actually establishes a full TCP connection or just does nothing after it sent the SYN packet.
If it does nothing, it discards the packet with minimal performance impact.
While the iptables rules that we provided above already block most TCP-based attacks, the attack type that can still slip through them if sophisticated enough is a SYN flood.
It’s important to note that the performance of the rules will always be better if we find a certain pattern or signature to block, such as packet length (-m length), TOS (-m tos), TTL (-m ttl) or strings and hex values (-m string and -m u32 for the more advanced users).
But in some rare cases that’s not possible or at least not easy to achieve. So, in these cases, you can make use of SYNPROXY.
Here are iptables SYNPROXY rules that help mitigate SYN floods that bypass our other rules:
iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
These rules apply to all ports. If you want to use SYNPROXY only on certain TCP ports that are active (recommended – also you should block all TCP ports that are not in use using the mangle table and PREROUTING chain), you can just add –dport 80 to each of the rules if you want to use SYNPROXY on port 80 only.
To verify that SYNPROXY is working, you can do watch -n1 cat /proc/net/stat/synproxy. If the values change when you establish a new TCP connection to the port you use SYNPROXY on, it works.
Удаление правил по цепочке и номеру
Другой способ удаления правил Iptables состоит в использовании цепочки и номера строки. Чтобы определить номер строки правила, выведите список правил в формате таблицы и добавьте опцию :
Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком .
Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду , указав далее цепочку и номер правила.
Например, если мы хотим удалить правило для входящего трафика, которое отклоняет недействительные пакеты, мы видим, что это правило с номером в цепочке . Поэтому нам нужно запустить следующую команду:
Теперь, когда вы знаете, как удалить отдельные правила брандмауэра, давайте рассмотрим возможность сброса цепочек правил.
Как сделать переброс портов за 3 шага
Весь трафик в сети проходит через порты, каждый из которых предназначен для определенной цели. Открытие порта и выбор устройства в сети для отправки входящих сообщений называется перенаправлением портов. Ниже приведены способы настройки переадресации портов:
Назначьте статический IP-адрес
Вы можете назначить фиксированный IP-адрес компьютеру в вашей локальной сети. Таким образом, вам не придется менять переадресацию порта каждый раз, когда он получает новый IP. Для этого вам нужно открыть командную строку на устройстве Windows и записать результаты команды ipconfig. Затем вы можете открыть свойства своего подключения в Сетевом центре и настроить свой статический IP-адрес. Вы также можете получить доступ к своему маршрутизатору как администратор и «зарезервировать» IP-адрес в его списке устройств.
Настройте переадресацию портов
После настройки статического IP-адреса вы можете настроить параметры переадресации портов на своем маршрутизаторе. Вам необходимо получить доступ к маршрутизатору с правами администратора и проверить настройки переадресации портов. Это могут быть такие категории, как сеть, беспроводная связь или расширенные возможности. После этого вам необходимо указать номер порта, который вы хотите перенаправить. Заполните поля начала и конца для диапазонов портов. Вы можете проверить, какие порты вам необходимо открыть для обслуживания. Затем вам нужно будет выбрать протокол (TCP, UDP или оба), ввести статический IP-адрес и включить переадресацию портов. У большинства маршрутизаторов есть аналогичные способы переадресации портов, но вы также можете найти конкретные инструкции для вашего Mikrotik, Tplink, Netgear router или Google wifi.
Проверьте порт
Проверьте наличие открытых портов: возможно, даже после настройки переадресации портов программа не может получить доступ к порту из-за брандмауэра. Следовательно, вам нужно увидеть в онлайн-инструменте проверки портов, открыт порт или нет. Если это не так, возможно, вам придется изменить его статус или перенастроить настройки на другой порт.
Добавление правил в Iptables
Есть два способа добавить новое правило в iptables. Один из них — вставить его в начале цепочки. Другой вариант — добавить его в конец цепочки
Почему важно, в каком порядке действуют правила?
Важно: iptables проверяет правила в цепочке сверху вниз. Он остановит поиск при первом совпадении
Вы должны разработать свои правила таким образом, чтобы учитывать вышеупомянутое поведение iptables. После первого соответствия правила iptables выполнит действия, указанные в правиле, и затем прекратит поиск. Если ни одно правило не соответствует проверенному соединению, применяется политика по умолчанию.
Вставка нового правила
Допустим, мы хотим добавить в наши iptables правило, которое позволит любому подключаться к порту 22 нашего брандмауэра. Порт 22 является портом для протокола SSH. Конечно, хороший администратор сервера изменит этот порт на что-то неожиданное по очевидным причинам безопасности / неясности, но это другая история для другого урока. Мы будем придерживаться 22.
1 2 3 4 5 |
csaba ~ # iptables -I INPUT -i eth0 -p tcp -dport 22 -j ACCEPT csaba ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh |
Я предположил, что IP-адрес в Интернете с общедоступным IP-адресом находится в сетевом интерфейсе, называемом eth0 . Давайте разберем эту команду:
- — Я — обозначает вставить правило
- INPUT — указывает желаемую цепочку
- -i — обозначает сетевой интерфейс — в нашем случае eth0
- -p — для протокола (tcp или udp)
- -dport 22 — для порта назначения 22 — имеет соответствующую версию —sport для проверки порта источника
- -j — на самом деле происходит от «прыжка» и сопровождается действием — в нашем случае — действием, чтобы принять соединение
Тем не менее, вы, возможно, уже догадались, что это правило имеет небольшой эффект в настоящее время. Наша политика по умолчанию — ПРИНЯТЬ, поэтому принятие чего-либо явно не дает нам никакой дополнительной функциональности. Теперь запомните третий рекомендуемый способ настройки нашего брандмауэра: явное правило, запрещающее все несоответствие. Давайте добавим это правило.
Добавление правил
Мы хотим добавить правило, которое блокирует входящий трафик. Но будьте осторожны: мы хотим блокировать только то, что может быть вредным. Если мы заблокируем все, мы не сможем ничего сделать, потому что ответы на наши запросы будут отклонены. Например, когда вы просматриваете веб-страницу, вы делаете запрос, а затем получаете ответ. Этот ответ приходит на ваш компьютер, поэтому в цепочке INPUT у нас должно быть правило, разрешающее его.
Сначала мы добавим правило для приема входящего трафика для уже установленных соединений, например ответов на запросы.
1 2 3 4 5 6 |
csaba ~ # iptables -A INPUT -i eth0 -m conntrack -cte ESTABLISHED, -j ACCEPT csaba ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh ACCEPT all — anywhere anywhere cte ,ESTABLISHED |
Теперь, когда мы защитили наши существующие соединения и ответы на инициированные нами соединения, мы можем отрицать все остальное, что не соответствовало.
1 2 3 4 5 6 7 |
csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh ACCEPT all — anywhere anywhere cte ,ESTABLISHED DROP tcp — anywhere anywhere |
Мы добавили еще одну строку с правилом, чтобы УБРАТЬ все соединения, которые соответствуют. Помните: это правило будет применяться, только если ни одно из предыдущих не соответствует.
Есть два способа отказаться от подключения.
- Вы можете использовать DROP, что эквивалентно набору несуществующего телефонного номера с той разницей, что через некоторое время сетевое соединение истекает. По номеру телефона робот сообщает, что номер не существует. Но конечный результат с точки зрения звонящего такой же: он думает, что пункт назначения не существует.
- Второй способ отклонить соединение — это правило REJECT и необязательное сообщение. Это аналогично номеру, который вы пытаетесь назвать занятым. Вы можете знать, что есть номер, вы знаете, что его можно назвать, но он просто отказывается отвечать на ваши звонки. При желании вы можете предоставить сообщение с правилом REJECT; по умолчанию используется «ICMP-порт недоступен» или что-то подобное.
Утилита Iptables
Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:
А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:
Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:
$ iptables -t таблица действие цепочка дополнительные_параметры
Теперь давайте рассмотрим параметры iptables, таблица указывает таблицу, с которой нужно работать, этот параметр можно упустить, действие — нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.
Осталось рассмотреть основные действия, которые позволяет выполнить iptables:
- -A — добавить правило в цепочку;
- -С — проверить все правила;
- -D — удалить правило;
- -I — вставить правило с нужным номером;
- -L — вывести все правила в текущей цепочке;
- -S — вывести все правила;
- -F — очистить все правила;
- -N — создать цепочку;
- -X — удалить цепочку;
- -P — установить действие по умолчанию.
Дополнительные опции для правил:
-
-p — указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
mh; - -s — указать ip адрес устройства-отправителя пакета;
- -d — указать ip адрес получателя;
- -i — входной сетевой интерфейс;
- -o — исходящий сетевой интерфейс;
- -j — выбрать действие, если правило подошло.
Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.
Перенаправление пакетов на другой порт
Перенаправление портов можно использовать для самых разных задач. Например, перенаправление пользователей из разных сетей на разные экземпляры веб-сервера, перенаправление порта на другой, если изменился порт какого-то сервиса, настройка прозрачного проксирования и так далее. Общая идея в том, что пакеты с определенного порта перенаправляются на другой порт на том же сетевом интерфейсе той же самой машины, либо на loopback’е.
Для перенаправления порта, например, 80, с внешнего интерфейса на порт 80 на loopback-интерфейсе мы можем использовать правило
iptables -t nat -A PREROUTING -d 192.168.0.1/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
Это правило позволит перенаправить пакеты на loopback, изменив назначение пакета путем трансляции адреса (Destination NAT), и после этого можно будет их отфильтровать в цепочке, которая будет задана для loopback-интерфейса. Естественно, нужно будет сделать и обратную трансляцию:
iptables -t nat -A POSTROUTING -s 127.0.0.1/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.1
Таким образом, происходит обратный процесс, при этом изменяется Source NAT, то есть, транслируется адрес источника соединения.
Последние мысли
В заключение, вот некоторые мысли о том, когда и когда не следует использовать брандмауэр с компьютером с Linux.
Используйте брандмауэр в Linux, когда вы настраиваете сервер (например, шлюз в нашем примере), или когда у вас есть компьютер с важной информацией, напрямую подключенный к Интернету. Прежде чем приступить к настройке iptables, рассмотрите потенциальную опасность
Спросите себя: мой компьютер известен в Интернете? Там есть несколько миллиардов компьютеров. Если у вас только один, шанс стать мишенью невероятно низок. Есть ли люди, непосредственно заинтересованные в вашей информации? Хакеры не тратят время на кражу случайных данных в надежде, что они что-нибудь найдут. Обычно они знают, что ищут, и затем выбирают компьютеры, содержащие нужную информацию. Конечно, существует бесчисленное множество атак на случайные компьютеры, которые пытаются установить своего рода червя или вируса, но в Linux вы неуязвимы.
Не тратьте свое время на настройку брандмауэра в Linux, когда это компьютер, который всегда находится за брандмауэром, например, домашний ПК за домашним маршрутизатором или когда у вас нет особо важной информации на вашем ноутбуке. Если вы сводите службы, которые прослушивают сеть, к минимуму и имеют достаточно надежный пароль, вы можете забыть свой брандмауэр
У меня лично нет персонального компьютера, ноутбука или смартфона с запущенным брандмауэром. Однако у меня есть домашний маршрутизатор с хорошо настроенным межсетевым экраном.
Спасибо за прочтение. Вопросов?