Чтобы настроить файервол так, чтобы один порт был доступен только с конкретного IP-адреса, можно использовать iptables (на большинстве Linux-систем) или nftables (более современная альтернатива). Ниже приведены примеры для обоих случаев.
🔧 Вариант 1: Использование iptables (классический)
Допустим:
- Порт: 2375 (например, Docker TCP API)
- Разрешённый IP: 203.0.113.42
1. Разрешить подключение с конкретного IP к порту
sudo iptables -A INPUT -p tcp -s 203.0.113.42 --dport 2375 -j ACCEPT
2. Запретить подключение к этому порту со всех остальных адресов
sudo iptables -A INPUT -p tcp --dport 2375 -j DROP
⚠️ Важно: порядок правил имеет значение! Сначала разрешаем нужный IP, потом блокируем всё остальное.
3. (Опционально) Сохранить правила
На разных дистрибутивах сохранение отличается:
-
Ubuntu/Debian:
sudo apt install iptables-persistent sudo netfilter-persistent save -
CentOS/RHEL:
sudo service iptables save # или sudo iptables-save > /etc/sysconfig/iptables
🔧 Вариант 2: Использование nftables (современный)
Если у вас nftables (по умолчанию в новых версиях Debian, Ubuntu, RHEL):
# Создать таблицу и цепочку (если ещё не существуют)
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
# Разрешить доступ с конкретного IP
sudo nft add rule inet filter input ip saddr 203.0.113.42 tcp dport 2375 accept
# Запретить доступ к порту со всех остальных
sudo nft add rule inet filter input tcp dport 2375 drop
Сохранить правила:
sudo nft list ruleset > /etc/nftables.conf
(Убедитесь, что служба nftables включена: sudo systemctl enable nftables)
🛡️ Проверка
После настройки проверьте:
- С разрешённого IP:
telnet ваш_сервер 2375 # или nc -zv ваш_сервер 2375 - С любого другого IP — соединение должно отклоняться или таймаутиться.
💡 Советы
-
Если вы используете Docker, помните, что Docker сам по себе может добавлять правила в
iptables. Чтобы избежать конфликтов, лучше не публиковать порт на 0.0.0.0, а ограничить его на уровне хоста:# docker-compose.yml ports: - "127.0.0.1:2375:2375" # только локальноА внешний доступ организовать через reverse proxy или фаервол.
-
Для временного тестирования можно использовать
ufw(если включён):sudo ufw allow from 203.0.113.42 to any port 2375 sudo ufw deny 2375Но
ufwприменяет правила в определённом порядке, поэтому лучше напрямую черезiptables, если нужна точность.