docker 컨테이너에서 실행 중인 gitlab에 fail2ban 적용하기

구글 AI가 외곡 된 개요를 보여줄 때도 있지만 종종 도움되는 설명을 해주는 경우도 자주 있다. 몇시간동안 삽질하다가 “docker container reject ip”로 구글링하여 표시된 AI 개요를 바탕으로 ChatGPT에 “fail2ban에서 sudo iptables -I DOCKER-USER -s 1.2.3.4 -j DROP 명령으로 ip를 차단하도록 하려면?”을 입력하여 출력 된 결과를 옮겨적는다.

설정파일 추가 (/etc/fail2ban/action.d/iptables-docker.conf)

[Definition]
actionstart = true
actionstop = true
actioncheck = true

actionban = iptables -I DOCKER-USER -s <ip> -j DROP
actionunban = iptables -D DOCKER-USER -s <ip> -j DROP

[Init]
name = default

gitlab의 ssh 로그 규칙 추가 (젠투 리눅스 기준 /etc/fail2ban/jail.conf)

[gitlab-sshd]
enabled   = true
port      = 1022
filter    = sshd
logpath   = /opt/docker/gitlab/logs/sshd/current
maxretry  = 5
findtime  = 60
bantime   = 7d
mode      = extra
action    = iptables-docker[name=gitlab-sshed]

gitlab 컨테이너는 1022 -> 22로 포워딩 설정 되어 있으며 /var/log/gitlab를 호스트의 /opt/docker/gitlab/logs로 마운트 시킨 상태. 위 규칙은 sshd 필터를 사용(잰투 기준으로 gitlab 컨테이터의 sshd 로그가 필터링 되었다), mode는 extra로 복잡한 규칙까지 사용, 1022로 외부에서 연결되며 60초동안 5회 로그인 실패하면 7일간 차단한다.

iptable 액션으로 차단 안되던 아이피가 iptables-docker 액션을 추가하여 추가한 gitlab-sshd 규칙에 해당 action을 설정 후 fail2ban을 재시작하면 아래와같이 바로 차단되는것을 확인할 수 있다.

이번 삽질에서 또한번 겪게 된 문제지만, ChatGPT는 명확한 답을 가지고 있음에도 해결법을 찾아서 질의를 보내지 않으면 절대로 알려주지 않는 경우나 잘못 된 정보를 알려주는 경우가 의외로 자주 발생한다.

Continue reading docker 컨테이너에서 실행 중인 gitlab에 fail2ban 적용하기

PS4 Remote 로그인 문제 해결

포맷 후 오랜만에 PS4 Remote로 플스에 접속하려고하니 아래와같이 ‘서버에 연결할 수 없습니다.’라는 메시지가 출력되었다.

몇번 시도하면 되겠지 하고 오기로 로그인 해보려하니 마찬가지. 다른 사람들도 겪을 문제일거같아 구글링해보니 아래와같은 영상이 나왔다.

영상의 업로드 날짜는 4월 23일. 최소한 이것보다 더 전부터 발생하던것인거같다. 지금보다 약 두달 전 부터 있던 문제인것. 많은 유저가 버그리포트 했을것이고 왜 아직도 해결안되고 있는지 이해가 되지않는다.

혹시모르니 간략하게 요약

1. 로그인 화면에서 우클릭
2. ‘속성’ 선택
3. 주소(URL) 우측의 주소를 복사(더블클릭 속도로 빠르게 세번 클릭하면 전체선택됨)
4. ‘속성’ 창 닫고, 브라우저의 주소에 붙여넣기 후 엔터(브라우저는 무엇을 사용해도 상관없음)
5. 로그인 후 주소 표시줄의 주소를 복사
6. PS4 Remote의 로그인 창을 클릭한 후 컨트롤 + L
7. 브라우저에서 복사한 주소를 붙여넣고 [확인] 클릭

브라우저의 주소가 변경되면 code와 cid를 읽고 사용자 정보를 읽는것으로 보인다. 윈도에서 유난히 자주 볼 수 있지만 브라우저를 프로그램 내 넣어서 무언가를 하면 브라우저가 업데이트 된 이후 없던 문제가 발생할 수 있는데… PS4 Remote에서도 시스템 브라우저의 어딘가 바뀐 정책으로 로그인 진행이 안되는거같다. 이런 문제를 되도록 피하려면 브라우저를 직접 프로그램에 포함하면되지만 라이선스 문제나 용량이 필요이상으로 늘어날 수 있기때문에 시스템 브라우저를 넣는것이겠지만 요즘같은 때 10~20메가 용량때문에 그럴 필요가 있을까? 싶다.

암튼 해결되었으니 다행. 그런데 두달 넘도록 이런 문제하나 수정하지못하고 뭘하는걸까?

MariaDB 10버전 설치안될 때

딸랑 윈도 10만 설치된 환경에서 마리아DB를 설치하니 뜬금없이 롤백이 되어버렸다. msi로 만들어진 패키지 대부분은 공통같지만 오류가났으면 로그를 보여주던지 해야할텐데 로그를 참조할 수 있도록 하이퍼링크로 로그파일을 볼 수 있게 보여주는건 그다지 못본거같다. msi의 문제라고 해야할지 패키지를 만드는 사람의 문제라고 해야할지 모르겠지만.

본론으로 들어가면 로그를 보기위해 구글링해보니 msiexec /i “MSI 파일이름” /l*v install.log 이렇게 실행하면 로그파일을 원하는 위치에 생성가능하다. 그렇게 롤백이라는 문구를 검색해보니 아래와같은 로그가 남아있었다.

CAQuietExec: Running bootstrap
CAQuietExec: Executing “”C:\Program Files\MariaDB 10.4\bin\mysqld.exe” –no-defaults –console –innodb-page-size=16384 –bootstrap “–lc-messages-dir=C:/Program Files/MariaDB 10.4/share” –basedir=. –datadir=. –default-storage-engine=myisam –max_allowed_packet=9M –net-buffer-length=16k”
CAQuietExec: ERROR: Can’t write to mysqld’s stdin
CAQuietExec: FATAL ERROR: database creation failed
CAQuietExec: https://mariadb.com/kb/en/installation-issues-on-windows contains some help
CAQuietExec: for solving the most common problems. If this doesn’t help you, please
CAQuietExec: leave a comment in the Knowledge Base or file a bug report at
CAQuietExec: Error 0x80070001: Command line returned an error.
CAQuietExec: Error 0x80070001: QuietExec Failed
CAQuietExec: Error 0x80070001: Failed in ExecCommon method
CustomAction CreateDatabase returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

은근슬적 들어간 https://mariadb.com/kb/en/installation-issues-on-windows 링크로 들어가고 아무것도 깔리지않은 윈도에서 심심치않게 겪어본 재배포 패키지 문제때문에 딴건 신경안쓰고 https://aka.ms/vs/16/release/vc_redist.x64.exe 이 링크로 재배포 패키지를 설치하고 MariaDB를 설치하니 잘 설치되었다(…)

사실 installer라고하면 이런 필요한 패키지를 검사하거나 필수로 깔아야하는게있을경우 설치 실패시 저 페이지의 링크로 방문하라고 메시지가 뜨거나 다운 받아서 설치하도록 둘 중 한가지로 해야할텐데 뜬금없이 롤백되고 하이퍼링크같이 명확하게 보여주지도않고 Finish 버튼이 딱 뜨는건 음… 납득불가다. 덕분에 한시간가량 손해봤지만 그래도 한가지 경험을 하게되었다(…).

emerge –sync가 안될 때

(제목은 왜 저렇게 되는거지. 하이픈 두개가 이상하게 포맷되는건 왜그런걸까?)

아래와같은 메시지가 계속 떠서 구글링해보다가 emerge-websync로 sync가 되긴 되기때문에 몇달동안 그냥 무시했지만 이건 올바른 방법이 아니기때문에 다시 구글링을 해보았다.

>>> Syncing repository 'gentoo' into '/usr/portage'...
* Using keys from /usr/share/openpgp-keys/gentoo-release.asc
* Refreshing keys via WKD ... [ !! ]
* Refreshing keys from keyserver hkps://keys.gentoo.org ...OpenPGP keyring refresh failed:
gpg: refreshing 4 keys from hkps://keys.gentoo.org
gpg: keyserver refresh failed: General error

OpenPGP keyring refresh failed:
gpg: refreshing 4 keys from hkps://keys.gentoo.org
gpg: keyserver refresh failed: General error

OpenPGP keyring refresh failed:
gpg: refreshing 4 keys from hkps://keys.gentoo.org
gpg: keyserver refresh failed: General error
[반복]

해결법이 달려있는 글은 이곳에서 볼 수 있다. 결론은 emerge -av –oneshot net-libs/gnutls 명령으로 gnutls을 다시 빌드하는것. 아마 얼마전 리눅스 머신을 완전히 새로 설치하기위해 다운받았던 stage파일에 무언가 문제가 있었던것이 아닐까 싶은 생각이 든다.

결과적으로 gnutls를 다시 빌드하고난 후 emerge –sync 명령을 내리니 바로 키가 업데이트되고 싱크가 되었다. (sync하고나서 보니 webkit-gtk를 빌드한지 한시간도 안지났는데 또 업뎃되어 또 빌드되고있다는건 안비밀.)

SATA 확장카드

PCI-e인터페이스의 SATA 확장카드가 필요해서 약 3개월 전 아래 링크의 제품을 구입했다. (인터페이스는 PCI-e 2.0 x 1)
https://www.amazon.com/gp/product/B00AZ9T3OU

국내의 쇼핑몰에서 구입가능한것은 2포트 아니면 4포트에 PCI-e 2배속 이상의 슬롯에만 호환되었다. 그리고 이러한 4포트짜리를 구입하여 리눅스 머신으로 사용중인 AMD 데스크톱에 꼽고 부팅해보니… 호환이 안되었다. 내장 SATA 컨트롤러마저 오동작하여 파일시스템 인식에 문제까지 발생되었다. 보드모델은 B450 AORUS PRO. (다행스럽게 파일시스템이 깨지지는 않았지만 순간 느꼈던 위화감은…)

제품 설명서에 Supports Port Multiplier FIS based switching or command based switching 이라는 문구가 있으니 외장 케이스 중 이러한 기술을 지원하는 제품을 쓴다면 유용하게 사용가능하다.

아래 이미지는 https://sata-io.org/developers/sata-ecosystem/port-multipliers 이곳에서 가지고 온 Port Multiplier 방식

FIS based switching
Command based switching

요즘 컨트롤러는 다 지원하지않을까 생각되지만 확인해서 나쁠것 없는 사양. 혹시나 SATA 컨트롤러가 필요하다면 링크걸린 아마존의 상품을 추천하고싶다.