암호 관리를 위해 Bitwarden 솔루션을 쓰고 있다.
사실 암호 관련된 저장을 Bitwarden 서버를 이용하면서 비용을 지불하는게 일반적이긴 하지만, Bitwarden 에서는 자신들이 운영하는 서버 자체를 Open Source로 제공하고, 이것을 가지고 스스로 서버를 구축해서 Bitwarden 서비스를 스스로 구성할 수 있다.
이를 위한 준비작업은 단계적으로 복잡하긴 하지만, Synology에서 제공하는 Docker를 이용해 vaultwarden 이란느 이름의 이미지를 받아 설치하면 약간의 환경 변수등을 통해 충분히 구성할 수 있다.
그런데 어느날 갑자기 이 Vaultwarden 서버에서 메일이 나가지 않게 되었다.
메일이 중요한 이유는 공지나, 암호를 잃어버리는 등의 문제가 발생할 때 대응을 하기 위해서는 메일 서비스가 필수 인데, 이게 되지 않는 것이였다.
관리자 화면에 들어가보니, 진단 항목이 아래와 같이 나왔다.
즉 외부 연결이 끊어졌거나, DNS가 동작하지 않는다는 의미였다.
갑자기 왜 이렇게 되었을까.... 하면서 다양한 블로그 및 질의응답 사이트들을 뒤적였다.
/etc/resov.conf 를 수정하는 것 부터, 뭐 여튼 굉장히 다양했다.
하지만 뭘 시도해도 저 문제가 해결되지는 않았다.
더욱이 Docker 이미지 안에는 네트워크나 편집기 관련된 도구가 일체 존재하지 않아, 정말 외부로 나가는 네트워크가 안되는 문제인지 조차 알 수 없었다.
문제의 원인은 방화벽을 설정하면 Docker에서 나가는 모든 패킷도 막힌다는 것이다.
실제로 방화벽을 끄면 정상 모든 내용이 정상적으로 동작하고, 다시켜면 위의 문제가 다시 발생한다.
즉 외부에서 들어오는 패킷은 시놀로지 방화벽에 있는 설정에서 충분히 설정해서 패킷을 받을 수 있다.
문제는 Docker 컨테이너에서 나가는 패킷은 다음 설정에 모두 막힌다.
이걸 끌수도 없고, 기본적으로 Docker 컨테이너가 고정 IP가 아니다보니(물론 컨테이너 빌드를 스스로 하고, Docker에 익숙한 분은 가능할 수도 있겠지만) 특정지어 피할 방법도 없었다.
고민 중에... 이런 포스팅을 찾았다.
https://drfrankenstein.co.uk/bitwarden-vaultwarden-in-docker-on-a-synology-na/
위의 내용을 보면서 하나씩 설정을 하면 된다.
Vaultwarden 전용 Docker 네트워크 생성
1) Docker 관리 페이지를 연다.
2) Vaultwarden용 Docker 네트워크를 하나 생성한다.
3) 이름을 정해주고 "추가" 버튼을 눌러 새로 생성한다. 물론 수동 구성을 통해 적당한 네트워크를 만들 수도 있지만, 그냥 편하게 만들어 봤다.
4) 기존에 만들어진 Vaultwarden 컨테이너가 연결된 네트워크 부분을 클릭하고 상단의 "관리" 버튼을 클릭한다.
5) 팝업이 떴으면 그 안에서 Vaultwarden 컨테이너 이름을 클릭한 뒤, "삭제"를 클릭한다. 그리고 "적용"을 눌러 나온다.
6) 이제 새로 생성한 네트워크 (위의 예제에서는 vaultwarden )을 클릭한 뒤, "관리"를 클릭한다.
7) 팝업 화면에서 이번에는 "추가"를 누른 뒤, Vaultwarden 컨테이너를 선택하고 "적용"을 클릭해서 닫는다.
8) 이제 이 네트워크에 걸쳐진 네트워크 정보를 가져온다. Docker 네트워크 전체 나오는 부분에 vaultwarden 네트워크 부분을 펼치면 아래와 같이 확인 가능하다.
9) 확인된 정보를 IP 범위를 알아낸다. 물론 네트워크 지식이 많으면 단번에 172.18.0.1 ~ 172.18.255.254 라는 것을 알 수 있지만, 대개는 알기 어렵다. IP Subnet Calculator 사이트에 들어가 아래와 같이 정보를 넣고 계산을 하면 IP 범위를 알 수 있다.
(주의! 아래부터 있는 예제 값은 이미지 안의 172.28.0.1 은 잘못 들어갔고, 172.18.0.1 이 맞다. 이미지 수정하기가 귀찮아서 그냥 뒀는데, 실제 적용은 172.18.0.1 ~ 172.18.255.254 로 했다.)
방화벽 설정
1) 먼저 Synology 제어판 안에 있는 보안 -> 방화벽에 들어가서 "규칙 편집"을 클릭한다.
2) 이제 "생성" 버튼을 누른 뒤, 소스 IP의 특정 IP 부분에 있는 "선택" 버튼을 클릭한다.
3) 소스 IP 설정 창에서 "IP 범위"을 선택하고, 위에서 찾아낸 IP 범위의 시작과 끝을 입력한다. 그리고 확인을 클릭해서 닫는다.
4) "허용"상태인지만 확인하고(신규 생성은 기본적으로 허용임) 확인을 눌러 닫는다.
5) 이제 마지막으로 아래와 같은 화면이 나오는데, 잘 보면, 방금 생성한 규칙이 방화벽 최종 규칙인 모두 거부 밑에 새로 생긴 것을 볼 수 있다.
개인적으로는 위의 설정을 이해못해 계속 안되서 이 방법이 아닌가 했는데... 해결 방법은 간단하다.
"거부" 항목을 맨 아래로 옮기면 된다. 항목의 맨 왼편을 보면 마우스로 잡고 아래로 끌어내릴 수 있는데, 바로 거부 규칙을 맨 아래로 끄집어 내리면 된다. 그리고 "확인" 버튼을 눌러 닫으면 방화벽이 적용된다.
아래와 같이 확인 가능하다!
정리
1. Synology NAS의 방화벽은 Docker 등 내부 응용프로그램의 Outgoing도 제어한다.
2. Docker의 네트워크로 나누어 다른 컨테이너에 영향이 가지 않게 한다.
(물론 상관 없다면, 그냥 기본 네트워크의 IP 범위 값으로 넣어도 무방)
3. 방화벽 규칙 순서는 아래에서 위로 진행되며, 아래에 있는 내용보다 위에 있는 내용을 우선한다.
(개인적으로 고생해서 인지 이게 제일 중요한 것 같음)