- Настройка netfilter с помощью iptables
- Принцип настройки
- Ключи iptables и примеры их использования
- Для работы с таблицами (iptables -t)
- Команды
- Условия
- Действия
- Примеры часто используемых команд iptables
- Общие команды
- How to Open a Port in Linux
- 1. Overview
- 2. What Is a Network Port?
- 3. iptables
- 4. Opening the Network Port
- 5. Conclusion
Настройка netfilter с помощью iptables
Обновлено: 20.06.2023 Опубликовано: 22.02.2017
Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.
Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки.
Принцип настройки
Общий синтаксис использования iptables:
Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.
Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.
В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).
Некоторые команды требуют указания номера правила, например, на удаление или редактирование.
Условие описывает критерии отработки того или иного правила.
Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.
* справедливости ради, стоит отметить, что ключ с действием не обязан идти в конце. Просто данный формат чаще всего встречается в инструкциях и упрощает чтение правил.
Ключи iptables и примеры их использования
Для работы с таблицами (iptables -t)
Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.
Ключ | Описание |
---|---|
-t filter | Таблица по умолчанию. С ней работаем, если упускаем ключ -t. Встроены три цепочки — INPUT (входящие), OUTPUT (исходящие) и FORWARD (проходящие пакеты) |
-t nat | Для пакетов, устанавливающий новое соединение. По умолчанию, встроены три цепочки — PREROUTING (изменение входящих), OUTPUT (изменение локальных пакетов перед отправкой) и POSTROUTING (изменение всех исходящих). |
-t mangle | Для изменения пакетов. Цепочки — INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING. |
-t raw | Для создания исключений в слежении за соединениями. Цепочки: PREROUTING, OUTPUT. |
Команды
Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.
Ключ | Описание и примеры |
---|---|
-A | Добавление правила в конец списка: iptables -A INPUT -s 192.168.0.15 -j DROP запретить входящие с 192.168.0.15. |
-D | Удаление правила: iptables -D INPUT 10 удалить правило в цепочке INPUT с номером 10. |
-I | Вставка правила в определенную часть списка: iptables -I INPUT 5 -s 192.168.0.15 -j DROP вставить правило 5-м по списку. |
-R | Замена правила. iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT заменить наше 5-е правило с запрещающего на разрешающее. |
-F | Сброс правил в цепочке. iptables -F INPUT |
-Z | Обнуление статистики. iptables -Z INPUT |
-N | Создание цепочки. iptables -N CHAINNEW |
-X | Удаление цепочки. iptables -X CHAINNEW |
-P | Определение правила по умолчанию. iptables -P INPUT DROP |
-E | Переименовывание цепочки. iptables -E CHAINNEW CHAINOLD |
Условия
Данные ключи определяют условия правила.
Ключ | Описание и примеры |
---|---|
-p | Сетевой протокол. Допустимые варианты — TCP, UDP, ICMP или ALL. iptables -A INPUT -p tcp -j ACCEPT разрешить все входящие tcp-соединения. |
-s | Адрес источника — имя хоста, IP-адрес или подсеть в нотации CIDR. iptables -A INPUT -s 192.168.0.50 -j DROP запретить входящие с узла 192.168.0.50 |
-d | Адрес назначения. Принцип использования аналогичен предыдущему ключу -s. iptables -A OUTPUT -d 192.168.0.50 -j DROP запретить исходящие на узел 192.168.0.50 |
-i | Сетевой адаптер, через который приходят пакеты (INPUT). iptables -A INPUT -i eth2 -j DROP запретить входящие для Ethernet-интерфейса eth2. |
-o | Сетевой адаптер, с которого уходят пакеты (OUTPUT). iptables -A OUTPUT -o eth3 -j ACCEPT разрешить исходящие с Ethernet-интерфейса eth3. |
—dport | Порт назначения. iptables -A INPUT -p tcp —dport 80 -j ACCEPT разрешить входящие на порт 80. |
—sport | Порт источника. iptables -A INPUT -p tcp —sport 1023 -j DROP запретить входящие с порта 1023. |
Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.
Действия
Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.
Таблица | Действие | Описание |
---|---|---|
filter | ACCEPT | Разрешает пакет. |
DROP | Запрещает пакет. | |
REJECT | Запрещает с отправкой сообщения источнику. | |
nat | MASQUERADE | Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет. |
SNAT | Аналогично MASQUERADE, но с указанием конкретного сетевого интерфейса, чей адрес будет использоваться для подмены. | |
DNAT | Подмена адреса для входящих пакетов. | |
REDIRECT | Перенаправляет запрос на другой порт той же самой системы. | |
mangle | TOS | Видоизменение поля TOS (приоритезация трафика). |
DSCP | Изменение DSCP (тоже приоритезация трафика). | |
TTL | Изменение TTL (время жизни пакета). | |
HL | Аналогично TTL, но для IPv6. | |
MARK | Маркировка пакета. Используется для последующей фильтрации или шейпинга. | |
CONNMARK | Маркировка соединения. | |
TCPMSS | Изменение значения MTU. |
Примеры часто используемых команд iptables
Общие команды
Просмотр правил с их номерами:
Для каждой таблицы смотреть правила нужно отдельно:
How to Open a Port in Linux
The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.
To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.
Connect your cluster and start monitoring your K8s costs right away:
1. Overview
Indeed, every application employs ports to interact with other devices across the network. With TCP and UDP as the two primary transport protocols, we need ports to transmit/receive data over the networks. All operating systems require this logical entity for effective communication. Whenever we start the application services, they automatically get mapped to the available network ports.
However, the ports are closed by default in many operating systems. That’s why we have to open network ports at the base operating system to enable the communication flow from the base to the remote system.
This article explains how to open a network port in Linux.
2. What Is a Network Port?
Fundamentally, every host machine can run several applications within the system. If an application has to communicate with other devices, it uses the network interface with the host-associated IP address. However, if two or more applications running on the same machine, then the associated port helps to distinguish the traffic for that specific application from the network interface. When we say that a port is open or listening, it means that the application or process is ready to accept traffic.
3. iptables
iptables is the default firewall software that Linux systems use to filter network packets. It uses the Netfilter framework to implement the IP packet filter rules that manage the incoming and outgoing packets. Basically, it revolves around the concept of tables and chains.
A chain is a set of rules for processing the packets, and a table is a collection of chains used to perform a specific function. Here, the filter examines the packets against the rules and routes them accordingly. It’s always a good practice to enable packet filters to improve the application and system security.
Next, let’s list the firewall rules using the iptables command:
$ sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Here, the output shows that by default, all the input traffic gets blocked. As a result, any packet reaching the server from the other devices gets dropped.
In general, the application of rules is temporary and, upon system restart, gets removed. To avoid this occurrence, let’s save the iptables rules using the iptables-save command:
4. Opening the Network Port
For the sake of discussion, let’s take the below example:
Here, we have a web application hosted on port 8080 in the Linux Machine. The firewall software in the Linux system monitors the incoming and outgoing traffic. However, based on the user-defined firewall rules, it filters the network packets. Even though the web application is running successfully within the system, exposing it to the outside world depends on the firewall rules.
Let’s deploy a simple nodejs application on the server that runs on port 8080:
$ npm start > [email protected] start /home/tools/baeldung-iptables/node-hello > node index.js Server running on http://192.168.56.109:8080/ .. ..
We deployed the application successfully, and it’s accessible on the machine as we can verify using the curl command:
$ curl https://localhost:8080/ Hello Node!
Now, let’s open http://192.168.56.109:8080 from the browser. Though the “nodejs” application is running with no exception, the site is not opening from the browser:
Here, the issue arises because of the packet filter deployment in the server. As per the below illustration, the server drops the request at the interface:
To overcome this problem, we have to create a rule in the iptable that allows all the web traffic coming into the server at port 8080:
$ sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
In this case, we are appending a rule into the INPUT chain to ACCEPT any TCP packets with the destination port of 8080:
Now, let’s refresh the browser page and check:
Likewise, let’s look at a few more examples of blocking incoming network connections.
To block all incoming TELNET connections to the server, we add the below rule into the INPUT chain:
$ sudo iptables -I INPUT -p tcp --dport 23 -j DROP
If we want to block any incoming web traffic connections to the server from a specific IP address, we can do so by adding a similar rule into the INPUT chain:
$ sudo iptables -I INPUT -p tcp --dport 80 -s 192.168.56.109 -j DROP
5. Conclusion
In summary, network ports are essential for applications to interact with other devices. The enablement of iptables in the server is critical in enriching its security constructs as it helps to manage the application traffic over the network. As a best practice, the rules need to be tailored using iptables based on our applications’ needs.