728x90
반응형
Docker의 보안에 대해 docker의 구조로 부팅하면 iptables를 편집하고 노출시킨 포트에 대한 접근을 허용하기 때문에 알게 모르게 포트를 모두 개방할 가능성이 있습니다.
위 문제를 해결하기 위해 Docker 부팅 후 iptables 규칙을 추가하는 방법을 기재합니다.
iptables 규칙을 추가할 셸 스크립트를 준비합니다.실행 권한도 설정.
# touch /usr/local/sbin/docker-iptables.sh
# chmod 755 /usr/local/sbin/docker-iptables.sh
# vi /usr/local/sbin/docker-iptables.sh
파일의 내용은 아래와 같이 합니다.
이 내용은 LAN(10.101.39.0/24)에서 TCP80번과 443번 포트에 접속하는 것만 허용하는 예입니다. 컨테이너가 공개하는 포트에 따라서적절히 규칙을 변경해주세요.
/usr/local/sbin/docker-iptables.sh
#!/bin/bash
function _iptables () {
/sbin/iptables "$1" DOCKER-USER ! -i docker0 -o docker0 -j REJECT
/sbin/iptables "$1" DOCKER-USER ! -i docker0 -o docker0 -s 10.101.39.0/24 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
/sbin/iptables "$1" DOCKER-USER ! -i docker0 -o docker0 -s 10.101.39.0/24 -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
/sbin/iptables "$1" DOCKER-USER ! -i docker0 -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
}
function _usage () {
echo "usage: $0 (start|stop)" >&2
}
case "$1" in
start)
_iptables -I
;;
stop)
_iptables -D
;;
*)
_usage
;;
esac
systemd에서 docker를 시작할 때 처리에 이 셸스크립트를 실행하도록 추가합니다.
# mkdir /etc/systemd/system/docker.service.d
# vi /etc/systemd/system/docker.service.d/add_iptables.conf
[Service]
ExecStartPost=/usr/local/sbin/docker-iptables.sh start
ExecStop=/usr/local/sbin/docker-iptables.sh stop
추가한 systemd 설정을 반영합니다
# systemctl daemon-reload
마지막으로 docker 데몬을 중지, 부팅한 상태에서 각각 iptables 규칙이 변경되었는지 확인합니다.
# systemctl stop docker.service
# iptables -vnL
# systemctl start docker.service
# iptables -vnL
728x90
300x250
'IT > Opensource' 카테고리의 다른 글
Stunnel (0) | 2023.06.22 |
---|---|
Redash 설치 및 세팅 (bitnami 버전) (0) | 2021.08.11 |
Redash 설치 및 세팅 (Docker Compose 버전) (0) | 2021.08.11 |
LVS 사전 준비 (0) | 2021.08.09 |
PMM 명령어 (0) | 2021.07.30 |