운영중입니다

리눅스 방화벽 최적화 - ipset 설정으로 대량 IP 차단하는 방법 (CentOS) 본문

리눅스보안

리눅스 방화벽 최적화 - ipset 설정으로 대량 IP 차단하는 방법 (CentOS)

https443 2026. 2. 27. 21:23

1. ipset?

ipset은 리눅스 커널 방화벽인 netfilter 및 iptables와 연동하여 사용하는 관리 도구입니다. 
여러 개의 IP 주소, 네트워크 대역, 포트 번호 등을 하나의 '집합(Set)' 형태로 저장하여 처리할 수 있다는 점이 특징입니다. 
특히 방대한 양의 IP 목록을 효율적으로 차단하거나 허용해야 할 때, 
기존의 iptables보다 훨씬 빠른 처리 속도를 제공하며 관리 또한 매우 간편합니다.


2. ipset을 사용하는 이유

   2.1. 많은 IP 처리 시 성능 우수함
> 기존 iptables는 등록된 규칙이 많아질수록 패킷을 검사하는 시간이 길어져 시스템 성능이 저하될 수 있습니다. 
반면 ipset은 아무리 많은 IP가 등록되어 있어도 세트 단위로 한 번에 검사하기 때문에 훨씬 빠른 속도를 유지합니다.

  2.2. 업데이트 쉬움
> iptables 규칙을 매번 추가하거나 삭제할 필요 없이, 
미리 생성해 둔 세트에 IP를 추가하거나 제거하는 것만으로 즉시 관리가 가능하여 운영 편의성이 높습니다.

  2.3. 다양한 형태 지원함

단순한 IP 주소 외에도 다음과 같은 다양한 형식을 지원하여 유연한 방화벽 정책을 세울 수 있습니다.

  • 단일 IP
  • IP 대역 (CIDR)
  • MAC 주소
  • Port
  • IP + Port 조합 등

3. 사용 방법
    3.1 ipset 설치 (없는 경우) 및 확인

먼저 시스템에 ipset을 설치해야 합니다. CentOS 계열의 운영체제를 기준으로 설치 및 모듈 확인 방법은 다음과 같습니다.

#설치 (centos 기준)
yum install ipset

#모듈 확인
lsmod | grep ip_set

#로드 안 되어 있으면 수동 로드
modprobe ip_set
modprobe ip_set_hash_net
modprobe xt_set

 


 
   3.2 IP 대역 파일 다운로드  

국가별 IP 대역 데이터를 관리하기 위해 /etc 하단에 전용 디렉토리를 생성합니다. 예시로 브라질과 중국의 IP 대역 파일을 다운로드해 보겠습니다.

# * /etc 밑에 ipset 디렉토리 생성 후 진행
mkdir -p /etc/ipset

# 국가별 IP 대역 다운로드 (브라질, 중국 IP 차단 예시)

# 브라질 IP
wget -qO /etc/ipset/br.zone https://www.ipdeny.com/ipblocks/data/countries/br.zone

# 중국 IP
wget -qO /etc/ipset/cn.zone https://www.ipdeny.com/ipblocks/data/countries/cn.zone

 

다운 받은 파일을 열어보면 많은 양의 IP 대역대가 기입 되어 있는 것을 확인 가능

 


   
  3.3 ipset 세트 생성

 

다운로드한 국가별 데이터를 담을 ipset 세트를 각각 생성합니다.

# 브라질
ipset create brazil hash:net

# 중국
ipset create china hash:net

  3.4세트에 IP 대역 추가

파일로 내려받은 IP 대역 정보를 for 반복문을 사용하여 방금 생성한 세트에 하나씩 등록해 줍니다.

# 브라질
for i in $(cat /etc/ipset/br.zone); do
    ipset add brazil $i
done

# 중국
for i in $(cat /etc/ipset/cn.zone); do
    ipset add china $i
done

 


  3.5 적용

# 3.5.1 iptables에서 ipset 적용
#등록된 세트를 실제 방화벽 규칙에 적용하여 특정 국가의 접속을 차단합니다.

# 브라질 차단
iptables -A INPUT -m set --match-set brazil src -j DROP

# 중국 차단
iptables -A INPUT -m set --match-set china src -j DROP


# 3.5.2 oops-firewall에서 user.conf 사용하는 경우
#만약 oops-firewall을 사용 중이라면 user.conf 파일을 수정하여 설정을 반영할 수 있습니다.

vim /etc/oops-firewall/user.conf

# 브라질 차단
%-A INPUT -m set --match-set brazil src -j DROP

# 중국 차단
%-A INPUT -m set --match-set china src -j DROP

service oops-firewall restart

 

oops-firewall 설치 및 사용 방법은 아래 글 확인
https://https443.tistory.com/11


  3.6 적용 확인

설정이 정상적으로 완료되었는지 아래 명령어들로 최종 확인합니다.

#3.6.1 ipset 확인
ipset list

# 3.6.2 iptables 확인

iptables -L -n

iptables -L -n | grep {차단국가}