Try   HackMD

서비스를 운영하다보면, 종종 특정 국가에서만 접속을 허용하거나, 특정 국가에서 접속하지 못하도록 화이트리스트/블랙리스트를 구성해야 하는 경우가 있습니다.
이러한 ipset을 이용하여 이런 목록들을 구성하고, iptables을 이용하여 해당 목록으로 접속을 차단하거나 허용하도록 규칙을 추가해보았습니다.

ipset 설치

먼저 리스트를 구성하기 위해 패키지 관리자를 통해 ipset을 설치합니다.

CentOS

yum install ipset -y

Ubuntu

apt-get install ipset -y

IP 목록 다운로드

필요한 IP CIDR 목록 파일을 다운로드 받습니다.
아래는 한국 IP에서만 접속을 허용하기 위해 작성된 목록입니다.

curl https://ludorum.keybase.pub/ipset/kr.zone -o kr.zone

ipset 설정

ipset을 생성하고 ip대역을 추가합니다.

ipset -N kr hash:net
for a in $(cat kr.zone); do ipset -A kr $a; done

추가된 목록을 확인합니다.

ipset list | less

iptables 설정하기

아래 예시를 참고하여 iptable을 설정합니다.

예시) 허용된 KR IP외에 모든 IP에서 80, 443포트 차단하기

iptables -A INPUT -p tcp -m set --match-set kr src --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m set --match-set kr src --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP