Last active 9 months ago

drholy revised this gist 9 months ago. Go to revision

1 file changed, 1 insertion, 1 deletion

block_port_with_firewall.md

@@ -1,4 +1,4 @@
1 - # Чтобы настроить файервол так, чтобы **один порт был доступен только с конкретного IP-адреса**, можно использовать `iptables` (на большинстве Linux-систем) или `nftables` (более современная альтернатива). Ниже приведены примеры для обоих случаев.
1 + Чтобы настроить файервол так, чтобы **один порт был доступен только с конкретного IP-адреса**, можно использовать `iptables` (на большинстве Linux-систем) или `nftables` (более современная альтернатива). Ниже приведены примеры для обоих случаев.
2 2
3 3 ---
4 4

drholy revised this gist 9 months ago. Go to revision

1 file changed, 1 insertion, 5 deletions

block_port_with_firewall.md

@@ -1,4 +1,4 @@
1 - Чтобы настроить файервол так, чтобы **один порт был доступен только с конкретного IP-адреса**, можно использовать `iptables` (на большинстве Linux-систем) или `nftables` (более современная альтернатива). Ниже приведены примеры для обоих случаев.
1 + # Чтобы настроить файервол так, чтобы **один порт был доступен только с конкретного IP-адреса**, можно использовать `iptables` (на большинстве Linux-систем) или `nftables` (более современная альтернатива). Ниже приведены примеры для обоих случаев.
2 2
3 3 ---
4 4
@@ -92,7 +92,3 @@ sudo nft list ruleset > /etc/nftables.conf
92 92 sudo ufw deny 2375
93 93 ```
94 94 Но `ufw` применяет правила в определённом порядке, поэтому лучше напрямую через `iptables`, если нужна точность.
95 -
96 - ---
97 -
98 - Если скажете, какой дистрибутив вы используете (Ubuntu, Debian, CentOS и т.д.) и какой порт/IP нужно ограничить — могу дать точную команду под ваш случай.

drholy revised this gist 9 months ago. Go to revision

1 file changed, 98 insertions

block_port_with_firewall.md(file created)

@@ -0,0 +1,98 @@
1 + Чтобы настроить файервол так, чтобы **один порт был доступен только с конкретного IP-адреса**, можно использовать `iptables` (на большинстве Linux-систем) или `nftables` (более современная альтернатива). Ниже приведены примеры для обоих случаев.
2 +
3 + ---
4 +
5 + ## 🔧 Вариант 1: Использование `iptables` (классический)
6 +
7 + Допустим:
8 + - Порт: **2375** (например, Docker TCP API)
9 + - Разрешённый IP: **203.0.113.42**
10 +
11 + ### 1. Разрешить подключение с конкретного IP к порту
12 + ```bash
13 + sudo iptables -A INPUT -p tcp -s 203.0.113.42 --dport 2375 -j ACCEPT
14 + ```
15 +
16 + ### 2. Запретить подключение к этому порту со всех остальных адресов
17 + ```bash
18 + sudo iptables -A INPUT -p tcp --dport 2375 -j DROP
19 + ```
20 +
21 + > ⚠️ **Важно**: порядок правил имеет значение! Сначала разрешаем нужный IP, потом блокируем всё остальное.
22 +
23 + ### 3. (Опционально) Сохранить правила
24 + На разных дистрибутивах сохранение отличается:
25 +
26 + - **Ubuntu/Debian**:
27 + ```bash
28 + sudo apt install iptables-persistent
29 + sudo netfilter-persistent save
30 + ```
31 +
32 + - **CentOS/RHEL**:
33 + ```bash
34 + sudo service iptables save
35 + # или
36 + sudo iptables-save > /etc/sysconfig/iptables
37 + ```
38 +
39 + ---
40 +
41 + ## 🔧 Вариант 2: Использование `nftables` (современный)
42 +
43 + Если у вас `nftables` (по умолчанию в новых версиях Debian, Ubuntu, RHEL):
44 +
45 + ```bash
46 + # Создать таблицу и цепочку (если ещё не существуют)
47 + sudo nft add table inet filter
48 + sudo nft add chain inet filter input { type filter hook input priority 0 \; }
49 +
50 + # Разрешить доступ с конкретного IP
51 + sudo nft add rule inet filter input ip saddr 203.0.113.42 tcp dport 2375 accept
52 +
53 + # Запретить доступ к порту со всех остальных
54 + sudo nft add rule inet filter input tcp dport 2375 drop
55 + ```
56 +
57 + Сохранить правила:
58 + ```bash
59 + sudo nft list ruleset > /etc/nftables.conf
60 + ```
61 +
62 + (Убедитесь, что служба `nftables` включена: `sudo systemctl enable nftables`)
63 +
64 + ---
65 +
66 + ## 🛡️ Проверка
67 +
68 + После настройки проверьте:
69 + - С разрешённого IP:
70 + ```bash
71 + telnet ваш_сервер 2375
72 + # или
73 + nc -zv ваш_сервер 2375
74 + ```
75 + - С любого другого IP — соединение должно **отклоняться или таймаутиться**.
76 +
77 + ---
78 +
79 + ## 💡 Советы
80 +
81 + - Если вы используете **Docker**, помните, что Docker сам по себе может добавлять правила в `iptables`. Чтобы избежать конфликтов, лучше **не публиковать порт на 0.0.0.0**, а ограничить его на уровне хоста:
82 + ```yaml
83 + # docker-compose.yml
84 + ports:
85 + - "127.0.0.1:2375:2375" # только локально
86 + ```
87 + А внешний доступ организовать через reverse proxy или фаервол.
88 +
89 + - Для временного тестирования можно использовать `ufw` (если включён):
90 + ```bash
91 + sudo ufw allow from 203.0.113.42 to any port 2375
92 + sudo ufw deny 2375
93 + ```
94 + Но `ufw` применяет правила в определённом порядке, поэтому лучше напрямую через `iptables`, если нужна точность.
95 +
96 + ---
97 +
98 + Если скажете, какой дистрибутив вы используете (Ubuntu, Debian, CentOS и т.д.) и какой порт/IP нужно ограничить — могу дать точную команду под ваш случай.
Newer Older