elmitash의 모든 글

일본에서 일하고 있는 자바 웹 어플리케이션 개발자.

윈도우10 노트북 일본어 키보드에서 Sharp Keys로 한영키 설정

일본어 키보드에서는 오른쪽 ALT 키로 한영 전환을 해야되는데 일본에서 노트북을 사게 되면 이게 없을 경우가 있다. 나는 Sharp Keys 라는 유틸리티로 일본어 키보드의 변환<変換>키를 한영키로 할당해서 쓰고 있는데 키를 재할당(키맵핑)하는 프로그램을 소개한다.

dell inspiron 7472 japanese keyboard
한/영 키로 쓸 오른쪽 ALT 키가 없다…

Sharp Keys 다운로드

아래 둘 중 아무데서나 받으면 되는데, 특별한 이유가 없으면 그냥 개발자 홈페이지에서 ZIP 파일로 받는게 빠르고 편할것이다.
Sharp Keys 개발자 홈페이지 다운로드 – 페이지 하단의 ZIP 링크를 누르면 된다.
MS 스토어 – Sharp Keys 다운로드 – 최종적으로 윈도우의 마소 스토어로 연결된다. (Update:2021/2/3 접속안됨)

ZIP 버전을 다운로드하면 설치는 필요없이 압축 풀고 그냥 파일을 실행하면 된다. 이 프로그램에서 윈도우에 변경을 허락할거냐는 경고창이 뜨니 확인을 눌러주자.

사용법

ADD 버튼 눌러서 키 목록이 뜨는데 왼쪽이 입력할 키보드의 키이고, 오른쪽이 무슨 키 기능을 넣을건지를 선택하는 것이다.
왼쪽 목록 아래에 Type Key 버튼을 누르고 변환<変換>키를 누르면 Unknown: 0x0079(00_79) 가 입력 되는데, 오른쪽 목록에서 Unknown: 0x0072(00_72) 를 선택하면 한영키 기능을 넣게 된다.
한자변환키는 Unknown: 0x0071(00_71) 이다.

Sharp Keys 키 추가

Write to Registry 버튼을 눌러서 레지스트리에 저장하고, 윈도우를 재기동해야 적용된다.

여담

나는 코딩할때 Home, End 키를 많이 쓰는데 펑션키 누르면서 커서키 좌우는 손도 많이 가고 해서, Print Screen키랑 Insert키를 Home, End 키로 할당해서 쓰고 있다.
15인치 노트북이면 풀사이즈 키보드가 많아서 좀 나은데(내가 일할때 쓰는 작업용 노트북은 15인치 숫자키패드도 따로 있는데도 오른쪽 ALT키가 없다), 14인치 이하 노트북에서는 회사마다 키보드 레이아웃이 천차만별이고 펑션키 조합도 가지각색이라 각자 익숙한 키 위치에 맞게 다시 할당해서 쓰면 편리할 것이다.

노트북 구입할 때, 키보드 구성도 상당히 신경써서 살펴보게 되고 구입할때도 영향을 꽤 미치는 부분인데 이런 유틸리티로 재할당이 될거라고 생각했으면 선택의 폭이 좀 더 넓었을것 같다.

geoip 갱신 작업을 crontab 에 등록하기

우분투 18.04 에서 iptables 애드온 xtables 로 국가 별로 접속 차단 허용 글에서 KRNIC 에서 받은 파일을 db-ip.com 포맷으로 변환하는 go 실행 파일과 CSV 파일을 다운로드해서 빌드까지 하는 쉘스크립트 파일을 공개했는데, 주기적으로 실행해서 국가별 IP 목록을 갱신해줘야 좀 더 정확하게 IP 차단 허용이 가능할거다.
일단 5일 정도 간격을 두고 실행하도록 crontab 설정을 해 보자.

실행할 쉘스크립트 파일명 : geoip.sh
쉘스크립트, go 실행파일은 여기에. https://github.com/elmitash/geoip_krnic2dbip

crontab 등록과 확인

리눅스 시스템에서는 주기적으로 프로그램을 실행할 때 crontab 이라는 명령으로 등록하는데, sudo 를 사용하면 루트 권한으로 실행 되는 crontab 을 등록할 수 있다. geoip.sh 에서 실행하는 xtables 빌드 파일(/usr/local/libexec/xtables-addons/xt_geoip_build)은 루트 권한이 필요하기 때문에 sudo 로 사용해서 root 의 crontab 을 등록하겠다.

crontabl 편집을 처음 실행하면 편집기를 선택해야된다. 1을 넣어서 nano 에디터를 선택했다. 각자 편한대로 하자.

# 문자로 주석처리된 내용 제일 아래쯤에 써 넣으면 된다.
#분 시 월 일 요일 실행커맨드라인
나는 5일 마다 4시 12분에 실행하도록 설정했다. 오늘은 실행 안되고, 5일 후부터 실행 된다.

일 부분에 넣은 */5 가 5일마다를 뜻하고, 시간이나 분에도 /5 를 넣으면 5분마다, 5시간마다 실행하게 된다.
매달 5, 10, 15, 20, 25, 30일처럼 5의 배수일마다 지정하려면 1-31/5 로 지정하면 될거다.
요일은 0-6 범위에서 지정하고 일,월,화,수,목,금,토 순서이다. 예를들면 매주 수요일에 실행하려면 3을 넣으면 된다.

홈디렉토리에 파일을 다운로드하고 그 위치에서 쉘스크립트를 실행하기 위해서 cd 명령 후에 쉘스크립트를 실행한다.

아래 명령으로 등록한 내용을 확인 할 수 있다.

crontab으로 실행한 기록은 /var/log/syslog 파일에서 볼 수 있다.

관련글: 우분투 18.04 에서 iptables 애드온 xtables 로 국가 별로 접속 차단 허용
우분투 14.04 LTS cron crontab 설정 및 로그파일 확인

이클립스 글자 흐림 듀얼 모니터 등 여러 모니터 사용시

이클립스 뿐만 아니라 윈도우에서 모니터를 여러대 사용할 경우에 글자가 흐릿하게 번지듯이 표시 되는 문제가 있다.
이클립스 같은 경우는 윈도우 설정에 있는 고급 배율 설정은 건드려 봐도 전혀 나아지지 않는다.
그럴 경우에 아래 블로그에서 높은 DPI 설정 변경이란 걸 하면 해결 된다.

윈도우10 고해상도 배율 높였을때 선명도 유지 하는 확실한 방법
출처: https://mastmanban.tistory.com/1019 [세상과 만나는 프로그램 이야기]

내용을 간단하게 요약하면 이클립스 실행파일인 eclipse.exe 파일에서 오른쪽 마우스 버튼을 누르고 속성을 선택, 호환성 탭을 누르고 제일 아래에 있는 ‘높은 DPI 설정 변경’ 버튼을 누르고, ‘높은 DPI 조정 동작을 재정의합니다.’ 에 체크를 하면 된다.
그 아래에 응용 프로그램, 시스템, 시스템(확장) 선택에 따라서도 달라지니 설정해서 이클립스 실행해 보고 글자 번짐이 해결 안되면 여기도 바꿔보면 된다.

개발하다 보면 모니터 두대를 보통 많이 쓰게 되는데, 윈도우에서 모니터 왔다갔다하면서 쓰다보면 이클립스 외에도 글자가 흐리게 표시 되는 경우가 많아서 불편한데 이 문제는 언제나 고쳐줄건지…

윈도우10 vscode 에서 golang 프로젝트와 github 연동 리눅스용 실행 파일 빌드

윈도우10 환경에서 vscode 에서 github 저장소와 연동해 go 프로젝트를 만들고, 작성한 go 파일을 github 저장소에 커밋/푸시 하는 방법과 윈도우 환경에서 리눅스용 go 실행 파일을 만드는 방법에 대해 설명한다.

vscode 에서 github 에 파일 올리는 방법에 대해서 자세히 설명한 새로 글을 만들었다.
윈도우10 git 설치와 vscode 에서 github 리파지토리에 파일 올리기

iptables 의 애드온 xtables 에 사용할 CSV 파일을 만들기 위해 KRNIC 에서 다운로드 받은 CSV 파일을 db-ip.com 에서 제공하는 CSV 파일로 변환하는 java 코드를 작성했었다.
go 언어로 만들면 어디든 단독으로 실행 가능한 실행파일을 만들 수 있으니까 배포용으로 go 언어판을 작성 해 봤는데, 별거 없는 코드라 금방 만들 수 있네.
문제는 vscode 사용법. github 연동도 어떻게 할지 모르겠고 익숙치가 않으니 너무 어려웠다. 이클립스가 그리워…

vscode 에서 어떻게 github 연동 했는지 잊지 않도록 일단 메모를 해 둬야겠다.

vscode github 연동

1. github 에서 저장소를 생성한다.
2. vscode 에서 github 유저아이디 디렉토리를 만든다. gowork/github.com/USERID
3. vscode 커맨드 프롬프트에서 유저아이디 디렉토리로 이동 후, git clone https://github.com/USERID/저장소.git
유저아이디 디렉토리 아래 저장소 디렉토리가 생긴다.
4. vscode 커맨드 프롬프트에서 저장소 디렉토리로 이동. go mod init github.com/USERID/REPOSITORY
5. 저장소 디렉토리=go 프로젝트 디렉토리로 사용.
6. 파일을 추가/변경하거나 하면, vscode 왼쪽에 소스컨트롤 부분에 추가/변경한 파일 리스트가 나온다.
파일 오른쪽에 + (Stage Changes) 아이콘을 눌러 스테이지에 올리고, 상단에 체크 표시 아이콘을 눌러서 커밋. … 아이콘을 눌러서 Push 하면 된다.

vscode 소스 컨트롤

실제로 할때는 구글링하고 이것저것 만지면서 해서 이게 제대로 된 순서인지는 잘 모르겠다.
기억에 의존해서 한거라, 나중에 다른 go 프로젝트를 만들게 되면 이대로 해 보고 다시 수정하도록 하겠다.

golang linux / amd64 실행 파일 빌드

1. vscode 로 go 파일 있는 디렉토리에서 커맨드 프롬프트를 연다.
2. set GOOS=linux
3. set GOARCH=amd64
4. go build gofilename.go

go 파일이 있는 디렉토리에 실행파일이 생긴다.
방법은 간단한데 인터넷에서 검색해보면 온통 리눅스나 맥OS 환경을 기준으로 나와있어서 찾기가 어렵다.

우분투 18.04 에서 iptables 애드온 xtables 로 국가 별로 접속 차단 허용

2022/10/14 업데이트
아래 업데이트 내용과 같이 apt upgrade로 이 글에서 설치한 xtables 최신버전(3.9)이 지워져서 xtables-addons-3.9.tar.xz 파일로 다시 설치하려 했지만, 이것저것 업데이트 된 탓인지 make에서 에러가 발생.
아래 사이트에서 아래 deb 파일을 다운로드 받아서 설치하고, iptables를 재설정(같은 설정 파일로 iptables-apply)하면 된다.
1. xtables-addons-common_3.9-1ubuntu0.2~20.04.3_amd64.deb
2. xtables-addons-dkms_3.9-1ubuntu0.2~20.04.3_all.deb
다운로드 – https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/4610-deletedppa/+build/21765689

deb 파일 설치 커맨드

2020/6/25 업데이트
xtables-addons-common, xtables-addons-dkms이 업데이트 되면서 설치한 xtables 최신버전(이글에서 xtables-addons-3.9.tar.xz 파일로 설치한 것)이 덮어씌워지면서 iptables 에 geoip 설정 내용이 적용 안되게 된다. xtables-addons-3.9.tar.xz 파일로 다시 설치하면 복구되니 아래 인스톨 방법대로 한번 더 설치해주면 된다.

2020년1월부터 maxmind사가 제공하는 geoip 정보 파일이 회원가입제로 바뀌었다. 다른 방법으로 국가별 IP 정보를 얻어서 차단하거나 허용하는 방법에 대해서 자세히 설명. iptables 애드온 xtables 와 KRNIC 에서 제공하는 국가별 IP 정보를 사용한다.

우분투 18.04 에서 방화벽 iptables 의 애드온 xtables 를 이용해 국가 별로 접속 차단 또는 허용하는 방법을 쓰려고 했는데 여러가지 문제에 부딪혀 아주 긴 글이 될 것 같다.
일단 과정을 기록하면서 쭉 써보겠는데 너무 글이 난잡해서 어려워지면 나중에 설정 순서만 따로 정리해보도록 해야겠다.

자, iptables 에 xtables 라는 애드온을 설치해서 국가별로 접속을 차단하거나 허용하는 설정을 해 보겠다.

===== 경고!!! =====
클라우드 서비스나 VPS 를 사용하고 있는 서버에서 SSH 접속 포트에 이 글의 내용을 적용할 경우에는 iptables 에 대한 충분한 지식을 갖고 설정하지 않으면 서버에 접속이 불가능해 질 수가 있으니 꼭!!! 잘 확인하고 적용하도록 합시다. 최소한 리부팅하면 되돌아 올 수 있도록 iptables 에 재기동시 디폴트 파일에는 적용하지 않을 것을 추천합니다! 이 블로그에서도 iptables 에 대한 내용은 많이 다루었으니 먼저 읽어 보시는걸 추천합니다.

원격 접속 상태에서 iptables 의 안전한 적용 방법
우분투 서버 18.04 iptables 서버 재기동으로 초기화 되는 문제

xtables 설치

관련 팩키지가 많아서 170메가쯤… 크다. 설치는 이게 전부.

xtables 에서 사용할 국가별 IP 바이너리 파일 작성

xtables 를 사용하기 위해선 /usr/lib/xtables-addons 에 국가별 IP 정보가 들어있는 파일을 다운로드하는 스크립트와 빌드하는 스크립트가 있는데 실행해도 작동하지 않는다.
원래라면 이 두 스크립트로 차례대로 실행해 CSV 파일로 되어 있는 국가별 IP 정보를 다운로드 하고, CSV 파일을 다시 바이너리 파일로 빌드해야 xtables 가 작동하게 된다.

Xtables-addons Git 에서 최신 버전 스크립트를 찾아서 열어보면, 다운로드 스크립트는 maxmind 라는 회사에서 제공하는 geoip 정보를 다운로드 하도록 만들어져 있다.
그런데 이 회사는 2020/01/01부터 정책을 변경해서, 회원가입을 해서 다운로드를 받도록 하고 있기 때문에 스크립트도 동작하지 않고, 회사 사이트에서 회원가입하고 geoip 정보는 받는것도 난 쓰기가 싫어서 다른 방법을 찾아봤다.

IP 를 관리하는 각 대륙별 인터넷 레지스트리에서 자기들이 할당한 IP 리스트에 IP 정보와 함께 국가 정보도 들어있다. 아래가 각 대륙별 인터넷 레지스트리들이 제공하는 IP 할당 정보 파일.

포멧은 CSV형식으로 되어있는데 자세한 포맷에 대해선 여기 문서에 잘 나와있다. (별거 없음)

이 파일들로 국가별로 정리하고 연속된 IP는 합치고하는 출력하는 프로그램을 자바로 다 만들고 나서 여기까지 글을 쓰는 도중에 발견한…
KRNIC (한국인터넷정보센터) 에서도 같은 국가별 IP 할당 정보를 전국가분을 하나의 CSV 파일로 제공하고 있는것이다… 두둥…
다운받은 시점으로 3일전 등록한 내용까지 있으니 꽤 자주 업데이트 되는것 같다. 이건 차차 더 보기로 하고.

xtables-addons 의 빌드 스크립트(파일명:xt_geoip_build 갱신일:2020/01/07)에서 사용하는 파일 포맷은 DB IP 라는 회사에서 제공하는 geoip 정보가 담긴 csv 파일인데, 구조가 시작IP,끝IP,국가코드(두자리) 이다.

KRNIC 에서 받은 CSV 파일을 위 형식으로 변환하고, 빌드 스크립트를 돌려서 바이너리 데이터베이스 파일을 만들면 xtables 설정을 위한 준비가 끝나는 것이다.
DB IP 포맷으로 변환한 파일은 자바로 작성해서 바로 출력했다.
변환시 사용한 자바 코드 – https://github.com/elmitash/geoip_convert_krnic2dbip/
go로도 만들었다. 실행파일과 쉘스크립트도 있으니 이쪽을 사용하는게 편하다. https://github.com/elmitash/geoip_krnic2dbip
CSV 파일명을 dbip-country-lite.csv 로 바꾸고 아무데나 넣어두고 그자리에서 빌드 스크립트를 실행하면 된다.

xt_geoip_build 스크립트 실행시 에러가 나온다.

구글링 해보니 아래 라이브러리가 필요하단다. 설치하자.

다시 실행하면 잘 될거다. 안되면 구글링…

빌드 스크립트를 실행한 디렉토리에 국가별로 바이너리로 빌드 된 파일들이 생기게 된다. xtables가 인식하는 지정된 디렉토리가 있으니 거기에 넣어야한다. 디렉토리를 작성해서 .iv4 .iv6 파일을 모두 이동시키자. 인터넷에서 xtables 설치 과정을 보면 xt_geoip 디렉토리 아래 BE 와 LE 디렉토리 이야기가 많이 나와서 BE 는 도대체 뭔가 했는데 Big Endian 과 Little Endian 의 약자이다. 우분투는 Little Endian 시스템이니까 LE 에 넣으면 될 것 같다.

문제 발생

뭔가 버그가 있는건지 뭘 잘못한건지 모르겠는데, iptables 에 REJECT 를 한줄 추가하면 국가를 뭘로 지정하든 모든 국가가 다 블럭되는것 같다.
아주 수상한 상황이니 사용할 때는 꼭 리붓하면 되돌아 올 수 있도록 설정하고 사용해 보자. 클라우드 서버에서 SSH 막히면 망한다.

해결방법을 찾았다. xtables 를 최신 버전으로 빌드해서 설치하면 잘 작동된다.

xtables 최신버전 설치

소스포지에 xtables-addons 의 다운로드 페이지에 가서 최신버전의 xtables 압축파일을 다운로드 받자.
이 글에서는 xtables-addons-3.9.tar.xz 파일을 받아서 설치하는 방법으로 진행한다.

다운받은 파일을 서버에 올리고, xz 압축 파일을 써 본적이 없을 경우에 설치부터 해서 아래 명령으로 압축 해제.

압축해제된 디렉토리로 이동해서 configure 실행.

내경우에는 에러가 나서 에러 내용으로 검색해보니 pkg-config, iptables-dev 가 부족해서 설치했다.

다시 실행하니 문제 없음.

설치가 무사히 끝나면 다운로드 스크립트와 빌드 스크립트가 /usr/local/libexec/xtables-addons/ 디렉토리에 설치된다. 다운로드는 작동 안할 것이고, 빌드는 이글 위에서 사용했던 것과 같은 버전(최신버전)이 설치 된다.

이미 국가별 IP 파일은 모두 빌드해서 /usr/share/xt_geoip/LE 디렉토리에 넣어놓았으면 다시 빌드할 필요는 없다.
iptables 에 geoip 설정을 넣으니 에러가 발생해, 내용을 보니 이번 최신버전 xtables 는 LE 디렉토리를 사용하지 않는다.
/usr/share/xt_geoip 디렉토리에 빌드된 국가별 IP 파일을 넣어야한다.

파일들을 옮기고, LE 디렉토리는 필요없으니 지우자.

이렇게 xtables 최신버전을 설치하고, 국가별 IP 파일도 옮기고 나니 아래에서 설정한 내용들이 잘 적용 된다. 만세 ㅠㅠ

iptables 에 국가별 차단 허용 등록

참고글:원격 접속 상태에서 iptables 의 안전한 적용 방법

안전하게 하려면 현재 iptables 내용을 파일로 백업하고 백업한 파일을 복사해서 geoip 설정을 추가한 파일을 만든 후에 iptables-apply 로 적용해 본다.

iptables.geoip 파일을 열어 필요에 따라서 아래 예시를 참고해서 적당히 추가

예시: 포트 22 (SSH)로 들어오는 한국, 일본, 미국 IP 이외를 모두 블럭한다.

예시: 포트 22 (SSH), 80 (http), 443 (https)로 들어오는 중국, 인도 IP 를 모두 블럭한다.

예시: 포트 22 (SSH)로 들어오는 한국 IP 만 허용한다. ACCEPT 의 디폴트 폴리시가 ACCEPT 가 아닐 경우에는 아래 두번째 줄도 필요.

iptables.geoip 내용을 iptables에 적용 후, 10초 동안 적용할지 말지 선택하지 않으면 원래대로 되돌린다.

시험삼아 JP, US 를 블럭하니 SSH 접속이 끊겨버렸다. ㅋㅋㅋ
잘 적용 되었으니 이제부터는 SSH 포트로 접속하는 수많은 나라들 안녕!

===== 경고!!! =====
아래 내용은 클라우드 서비스나 VPS 를 사용하는 서버에서는 SSH 접속 포트에는 적용하지 않는 것이 안전합니다! 서버 재기동시 접속이 불가능해질 수 있습니다!

마지막으로 서버 재기동시 읽혀지는 iptables 디폴트 파일에도 같은 내용을 넣어주면, 서버가 재기동 되더라도 적용될 것이다.
참고글:우분투 서버 18.04 iptables 서버 재기동으로 초기화 되는 문제

국가코드는 아래에서 보자.
국가코드 조회