Как настроить iptables таким образом, чтобы порт был доступен только внутри Docker, на интерфейсе loopback и для одного внешнего IP?

Почему порт 1111 недоступен с localhost и в сетях докера, но доступен любому внешнему IP-адресу, после настройки правил iptables в Linux?
  • 7 декабря 2023 г. 16:39
Ответы на вопрос 2
Для настройки iptables таким образом, чтобы порт был доступен только внутри Docker, на интерфейсе loopback и для одного внешнего IP, можно использовать следующие правила:

1. Разрешить трафик на интерфейсе loopback:
```
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
```

2. Разрешить доступ только с определенного внешнего IP:
```
iptables -A INPUT -p tcp -s <внешний_IP> --dport 1111 -j ACCEPT
```

3. Запретить доступ со всех остальных IP:
```
iptables -A INPUT -p tcp --dport 1111 -j DROP
```

4. Разрешить трафик внутри Docker:
```
iptables -A INPUT -p tcp -s <IP_диапазон_докер_сети> --dport 1111 -j ACCEPT
```

5. Запретить доступ из Docker в локальной сети:
```
iptables -A INPUT -i docker0 ! -s 127.0.0.1 -j DROP
```

6. Запретить доступ из Docker на loopback:
```
iptables -A INPUT -i docker0 -s 127.0.0.0/8 -j DROP
```

7. Запретить доступ из локальной сети в Docker:
```
iptables -A INPUT -i eth0 ! -d 127.0.0.1 -j DROP
```

8. Запретить доступ из локальной сети на loopback:
```
iptables -A INPUT -i eth0 -d 127.0.0.0/8 -j DROP
```

После применения этих правил, порт 1111 будет доступен только с указанного внешнего IP, на интерфейсе loopback и внутри Docker.
 

Почему порт 1111 недоступен с localhost и в сетях Docker, но доступен любому внешнему IP-адресу, после настройки правил iptables в Linux?

Причина, почему порт 1111 недоступен с localhost и в сетях Docker после настройки правил iptables, может быть связана с тем, что в правилах не прописано разрешение доступа с loopback-интерфейса (127.0.0.1). 

Исправить это можно путем добавления следующих строк в правила iptables:
```
iptables -A INPUT -i lo -p tcp --dport 1111 -j ACCEPT
iptables -A OUTPUT -o lo -p tcp --dport 1111 -j ACCEPT
```

Эти правила разрешат трафик на порту 1111 внутри loopback-интерфейса, что позволит доступ к порту как с localhost, так и в сети Docker.
почему ты делаешь это в INPUT ? тебе нужно работать с транзитным трафиком. Для этого есть даже специальная цепочка, которую докер при установке сделал - DOCKER-USER.И по традиции - документацияhttps://docs.docker.com/network/packet-filtering-f...
Похожие вопросы