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 нужно ограничить — могу дать точную команду под ваш случай. | |