Ubuntu 16.04에서 웹 애플리케이션을 호스팅하고 있습니다. 애플리케이션의 모든 구성 요소는 Docker 컨테이너 내에 있으며 대부분은 외부 세계(예: PostgreSQL 또는 ElasticSearch)가 아닌 서로 통신만 하면 됩니다. 예를 들어 ElasticSearch는 기본적으로 포트 9200에 플러그인 인터페이스를 노출합니다.
관리자로서 이러한 인터페이스에 액세스해야 하지만 이를 업무 컴퓨터로만 제한하고 싶습니다.
나는 다음을 시도했다특정 포트에서만 특정 IP를 사용하도록 허용하는 지시어, 하지만 Docker가 내 규칙을 재정의하는 것 같습니다.
## ALLOW specific ports only on ONE IP address:
# ElasticSearch
iptables -I INPUT -p tcp -s MyWorkIP --dport 9200 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9200 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 9300 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 9300 -j DROP
iptables -I INPUT -p tcp -s MyWorkIP --dport 5601 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5601 -j DROP
# PostgreSQL
iptables -I INPUT -p tcp -s MyWorkIP --dport 5432 -j ACCEPT
iptables -I INPUT -p tcp -s 0.0.0.0/0 --dport 5432 -j DROP
page:port
업무용 컴퓨터( MyWorkIP
스크립트)와 휴대폰(동적 IP)에서 특정 콘텐츠에 액세스하려고 시도하여 모든 것을 테스트하고 있지만 어떤 시도라도 두 장치 모두에서 액세스할 수 있습니다. 나에게 필요한 것은 MyWorkIP
다른 IP를 거부하여 내 전화기가 해당 IP에 액세스할 수 없도록 하는 것입니다.
저는 IPtables 구성을 잘 못해서 어디서부터 조사를 시작해야 할지 모르겠습니다... (이 서버에는 X가 설치되어 있지 않습니다. 모든 작업을 한 학기 내에 수행합니다)
어떤 아이디어/생각이 있나요?
답변1
나는 이것을 사용하여 작업할 수 있었습니다:
ipyouwanttoallow를 제외한 모든 연결(인바운드 및 아웃바운드)을 제거합니다. iptables -I DOCKER ! -s ipyouwanttoallow -j DROP
컨테이너 로컬 IP에서 전 세계로의 모든 연결을 수락합니다.
iptables -I DOCKER -s localipofyourcontainer -d 0.0.0.0/0 -j ACCEPT
외부 서버가 컨테이너 요청에 응답하도록 허용하는 데 필요합니다.
iptables -I DOCKER -m state --state ESTABLISHED,RELATED -j ACCEPT
답변2
두 가지 문제가 있을 수 있습니다.
- 인터페이스에서 전달을 활성화하거나 기본적으로 전달을 활성화해야 합니다.
- 모바일에서 전달해야 합니다(work_ip도 가능).
방화벽 규칙을 작성하려면 방화벽 작성 도구를 사용하는 것이 좋습니다. 나는 이 방법을 선호하는데, shorewall
그 이유는 문서화가 잘 되어 있고, 구성 예시가 좋고, 파일로 구성되어 있기 때문입니다. ufw
대안입니다. 둘 다 Ubuntu 패키지로 제공됩니다.
터널이나 프록시를 사용하여 액세스를 제공할 수 있습니다.