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

+ Recent posts