사힐런트 힐 f 팁

짧은 팁 세가지

1. 수수께끼 난이도 짙은 안갯속의 자물쇠 암호는 수첩 그림을 유심히 봐야했다. 수레요괴는 머리가 두개니까 두번째 기호, 우산요괴는 팔이 네개니까 네번째 기호, 솥요괴는 다리가 세개니까 세번째 기호.

2. 포대화상 연관 퍼즐 중 진홍빛 물은 퍼즐 난이도와 관련없이 산-물-나무이며 소즈(대나무 통)에서 나는 통 소리가 발생하는 주기를 하나의 사이클이라고 치면 사이클마다 한번씩 종이 순서대로 울려야 함.

아래는 녹화 영상

Continue reading 사힐런트 힐 f 팁

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 적용하기

Qt 6.7버전 부터 발생한 사소한 QNetworkRequest 문제

사소하면서 어쩌면 사소하지 않은 문제가 6.7버전부터 발생하였다.

6.6버전까지 HTTP 헤더는 아래와같은 형식의 네이밍을 가진다.

6.7버전 부터는 아래와같은 네이밍을 가진다.

문자열이 아닌 QByteArray여서 그런지 라인피드가 이스케이프되어 표시되는데 보기 편하지 않지만 자세히 보면 6.6버전까지는 단어 첫 글자가 대문자로 시작하지만 6.7버전 부터는 모든 글자가 소문자로 변했다. 보통의 웹서버는 문제가 없지만 간혹 문제가 되는 서버가 있다.

예를 들면 SHIP같은 가벼운 웹서버 같은 경우다.

프로젝트 주소: https://github.com/xgfone/ship

대소문자 무시하여 헤더를 얻지않기때문에 소문자로 되어 있으면 Content-Type 헤더를 얻어오지 못한다. 덕분에 Bad Request를 응답하게 된다. 따라서 이걸 사용한 장비가 있다면 직접 HTTP 프로토콜을 구현하거나 Qt 소스를 고쳐야한다.

이것도 Qt의 버그라고 해야할지 모호하기도 하지만 일반적으로 Content-Type로 헤더를 보내지 content-type로 보내는 경우는 지금까지 본적이 없다. 버그리포트 하기가 좀… 귀찮기도하고 그냥 지금은 Qt 6.6.3을 받아서 써야겠다.

GDI의 SelectObject 함수

요즘은 GDI를 사용할 일이 없겠지만 간혹 사용할 일이 생긴다. 최근 uxtheme를 파고들다보니 다시 접하게 되었는데 GDI 정보가 생각보다 일관성이 없다.

일단 내가 오래전에 봤던 내용 중 기억에 남아있고 하던 코딩 방식은 아래와같았다.

static void TestDC()
{
    HDC hdc = GetDC(NULL);
    HDC memDC = CreateCompatibleDC(hdc);
    HBITMAP memBitmap = CreateCompatibleBitmap(hdc, 100, 100);
    HBITMAP oldBitmap = (HBITMAP)SelectObject(memDC, memBitmap);

    // ...

    SelectObject(memDC, oldBitmap);

    DeleteObject(memBitmap);
    DeleteDC(memDC);
    ReleaseDC(NULL, hdc);
}

DC 객체를 생성하고 처음 SelectObject하면 반환되는 기본 객체는 DC를 지우기 전 다시 SelectObject로 기본 객체를 선택하여 DC를 지워야한다는 것이였다.

GDI 오브젝트 개수를 확인하는 코드를 구글링하니 GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS) 이러한 코드가 나왔다(참조 링크). 이걸 참조하여 아래와같이 수정하여 실행해보았다.

Continue reading GDI의 SelectObject 함수

Windows 11의 인증실패

요즘따라 자꾸 뭔가 문제가 발생한다. 트위터 계정이 탈취당하고(고객센터에서 우린 당신이 계정 주인임을 인정할 수 없다. 라는 일괄적인 통보로 고구마 엔딩), 구글 플레이 스토어에서는 공공요금 청구서에 이름 세글자가 정확하게 적혀있지 않다고 신원인증 거절하고(공공요금 청구서는 이름을 개인정보로 취급하므로 세글자를 찍어주지 않음. 즉 불가능한 방법을 구글에서 요구), 이번엔 하드 증설로 윈도우 새로 설치했다가 정품인증이 안되어 반나절 날려먹었다.

결론은 허무하게 인증되었다.

스크린샷은 남아있지 않지만 발생한 오류코드는 0x803F700F로 메시지 내용은 아래의 노란색 글자와같았다. (출처: MS포럼)

윈도우 11은 붉은화면이 아니라 그냥 제어판에서 노란색 글자가 표기되고 문제 해결을 누르면 아래처럼 처럼 “해결을 완료”하였다면서 “정품 인증할 수 없습니다”라는 역설적인 내용의 화면이 뜨게된다.

이번엔 새로운 하드에 설치를 할 겸 바이오스도 업데이트를 함께 하였는데 정품인증이 안되었다는 메시지가 떠서 이미 오래 전에 겪었던대로 “최근에 이 디바이스의 하드웨어를 변경했습니다.”를 클릭하여 기존 인등되었던 PC를 선택하여 다음을 눌렀다.

하지만 뜨는 메시지는 아래와같았다

이것때문에 거의 네시간 넘게 구글링하고 다시 시도하는것을 반복했는데… 마지막으로 거의 자포자기식으로 MS 계정 장치 페이지에서 현재 사용중인 윈도우를 제외하고 다 지워버렸다.

그 후에도 정품인증이 안되어 다시 “최근에 이 디바이스의 하드웨어를 변경했습니다.”를 클릭하니 DESKTOP-i9는 사라져있고 오래 전 QEMU에서 KVM가속환경에서 인증을 한적 있던것이 DESKTOP-i5와 함께 남아있길레 그거로 선택하여 확인하니까 정품인증이 완료되었다는 메시지가 떴다.

결론은 아래 화면에서 장치이름이 포맷 직전에 사용중이였던 장치와 전혀 다른 장치로 선택해야 인증이 되는 경우가 있다는 것이고 인증이 완료되었어도 디바이스 정보가 실제와 다를 수 있다는것이 이번에 겪으면서 느낀 결론이다. (자포자기 식으로 선택했기때문에 안타깝게도 선택하기 전 장치 이름을 남기지 못했다. 내용은 DESKTOP-렌덤문자, Windows Professional, QEMU였다.)

혹시라도 방금 전 포맷한 장치가 맞는데 선택하여 인증을 하려해도 인증이 안된다면 엉뚱한 이름으로 등록 된 장치가 있을 경우 그걸 선택하여 정품 인증을 진행 해보자.

올해는 더이상 이상한거로 스트레스좀 안받았으면 좋겠다.

그나저나 24H2로 새로 설치해도 내 MS 계정은 홈 폴더의 폴더 레이블이 저따구로 표시되는구나. 대체 왜 내 계정만 저런거냐.