우분투 서버 22.04 LTS라고 무작위 SSH 접속 시도가 사라지지는 않으니…
새 버전에서도 xtables-addon에 geoip를 사용해서 우리나라 이외에 나라는 전부 막아버리자.
SSH 접속 시도 보기(최근 50건만)
1 |
sudo lastb -50 |
xtables-addons-common 설치
iptables에 geoip 모듈이 들어있는 xtables-addons-common 팩키지를 설치한다.
1 2 3 |
sudo apt install xtables-addons-common $ dkms status xtables-addons/3.19, 5.15.0-1016-oracle, aarch64: installed |
iptables geoip 모듈 설정
iptables 설정을 백업하고, 편집할 파일을 생성하자.
1 2 |
sudo iptables-save > iptables.bak cp iptables.bak iptables.geoip |
iptables.geoip 파일을 편집. 첫째줄이 한국(국가코드 KR) 이외에는 다 리젝트. 둘째줄이 SSH가 사용하는 22포트를 허용.
1 2 |
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m geoip ! --src-cc KR -j REJECT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT |
편집한 iptables.geoip 파일을 적용하면 에러가 나온다. 국가별 IP 리스트가 없으니까.
1 2 3 4 5 6 |
$ sudo iptables-apply iptables.geoip Applying new iptables rules from 'iptables.geoip'... Could not open /usr/share/xt_geoip/KR.iv4: No such file or directory iptables-restore v1.8.7 (nf_tables): Could not read geoip database failed. Error: unknown error applying new iptables rules: iptables.geoip Reverting to old iptables rules... done. |
국가별 IP 리스트 작성
https://github.com/elmitash/geoip_krnic2dbip 에서 go로 작성한 ip파일 리스트를 다운로드하고 변환하는 툴을 다운로드 받아 실행권한을 준다.
1 2 3 4 5 6 7 8 |
#ARM 이외의 CPU를 사용하는 서버의 경우 wget https://github.com/elmitash/geoip_krnic2dbip/raw/master/linux_amd64/krnic2dbip_linux_amd64 #ARM CPU를 사용하는 서버의 경우 wget https://github.com/elmitash/geoip_krnic2dbip/raw/master/linux_arm64/krnic2dbip_linux_arm64 wget https://github.com/elmitash/geoip_krnic2dbip/raw/master/geoip.sh chmod 755 krnic2dbip_linux_* geoip.sh #xt_geoip_build가 실행되면 없다고 하기 때문에 미리 인스톨(can't locate text/csv_xs.pm라는 에러가 나온다.) sudo apt install libtext-csv-perl |
ARM CPU를 사용하는 경우에는 geoip.sh 안에 EXE_FILE 변수의 파일명을 수정할 것.
준비가 되면 geoip.sh를 실행하자.
geoip.sh에 내용은 KRNIC에서 국가별IP 할당정보를 받아오고, krnic2dbip_linux_* 실행파일이 db-ip.com에서 사용하는 형식으로 변환.
db-ip.com 형식의 CSV 파일을 xt_geoip_build 에서 /usr/share/xt_geoip 디렉토리에 국가코드별로 정리해서 넣어준다.
다시 iptables.geoip 파일을 적용하면 OK.
1 2 3 4 |
$ sudo iptables-apply iptables.geoip Applying new iptables rules from 'iptables.geoip'... done. Can you establish NEW connections to the machine? (y/N) y ... then my job is done. See you next time. |
참조 글
우분투 18.04 에서 iptables 애드온 xtables 로 국가 별로 접속 차단 허용