iptables DROP на порт только для удаленных подключений - PullRequest
0 голосов
/ 10 июня 2019

На моей виртуальной машине запущено несколько док-контейнеров.

Один из них предоставляет порт 8000 с HTTP-сервером (django / python).С другой стороны, nginx установлен, он слушает 80 порт и прокси проходят 8000:

proxy_pass http://127.0.0.1:8000

Работает отлично.Но если я подключаюсь к порту 8000 напрямую из браузера, например:

http://example.com:8000/

, он возвращает ответ от внутреннего обработчика докера.

Как закрыть этот порт 8000 и не навредить всему?

Я пытался сделать это с помощью утилиты iptables, но похоже, что Docker создал много собственных правил, и я не знаю, буду ли я создавать нормальные, не нарушая правил этих докеров:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (2 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

Планируется сделать:

iptables -A INPUT -p tcp --dport 8000 -j REJECT

Это нормально?

1 Ответ

0 голосов
/ 10 июня 2019

Только порты, которые вы явно публикуете с опцией docker run -p (или опцией Docker Compose ports:), доступны с других хостов.Вам не нужна эта опция только для связи между контейнерами;два контейнера, которые находятся в одной и той же внутренней сети Docker, могут обмениваться данными, используя имена контейнеров друг друга в качестве имен хостов и внутренний порт контейнера, без какой-либо опции «публикации» или «раскрытия».

Короче говоря, удалитеопция -p из вашего внутреннего контейнера, и она не будет напрямую доступна из внешнего хоста.Вам не нужно вручную изменять iptables правила.

...