서비스를 운영하다보면, 종종 특정 국가에서만 접속을 허용하거나, 특정 국가에서 접속하지 못하도록 화이트리스트/블랙리스트를 구성해야 하는 경우가 있습니다.
이러한 ipset
을 이용하여 이런 목록들을 구성하고, iptables
을 이용하여 해당 목록으로 접속을 차단하거나 허용하도록 규칙을 추가해보았습니다.
먼저 리스트를 구성하기 위해 패키지 관리자를 통해 ipset을 설치합니다.
yum install ipset -y
apt-get install ipset -y
필요한 IP CIDR 목록 파일을 다운로드 받습니다.
아래는 한국 IP에서만 접속을 허용하기 위해 작성된 목록입니다.
curl https://ludorum.keybase.pub/ipset/kr.zone -o kr.zone
ipset을 생성하고 ip대역을 추가합니다.
ipset -N kr hash:net
for a in $(cat kr.zone); do ipset -A kr $a; done
추가된 목록을 확인합니다.
ipset list | less
아래 예시를 참고하여 iptable을 설정합니다.
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