Ubuntu 24.04 apache 해외 아이피차단

관리자

등록 2026년 9월 10일 · 조회 78 · 댓글 0
다운로드
첨부된 파일이 없습니다.

Ubuntu 24.04 apache 해외 아이피차단Ubuntu 24.04 Apache에서 해외 IP를 차단하는 방법은 크게 웹 서버 레벨(Apache 모듈)과 방화벽 레벨(UFW + ipset) 두 가지가 있습니다.

웹 서버 부하를 줄이고 리소스를 아끼려면 방화벽(UFW + ipset) 방식이 가장 효율적이며, 특정 사이트/디렉터리 단위로만 제어하려면 Apache mod_maxminddb 방식을 사용합니다.

가장 성능이 좋고 확실한 방화벽(UFW + ipset)을 이용한 한국(KR) 외 해외 IP 차단 방법을 안내합니다.

1.필수 패키지 설치:1분 소요.

IP 목록을 빠르게 처리하기 위한 ipset 및 국가별 IP 목록 변환 도구(iprange)를 설치합니다.

Bash
sudo apt update
sudo apt install ipset iprange curl -y

확인: ipset --version 명령어를 실행해 버전 정보가 출력되는지 확인합니다.

2.IP 차단 자동화 스크립트 작성:국가별 IP 대역 동기화.

IPdeny에서 한국(KR) IP 대역 목록을 다운로드하여 ipset 집합에 추가하고 방화벽 규칙을 적용하는 스크립트를 생성합니다.

Bash
sudo nano /usr/local/bin/block-foreign-ips.sh

아래 내용을 파일에 붙여넣습니다 (한국 IP만 80, 443 포트 접속 허용):

Bash
#!/bin/bash
IPSET_NAME="korea_ips"
TEMP_DIR="/tmp/korea_ip_list"
URL="http://www.ipdeny.com/ipblocks/data/countries/kr.zone"
mkdir -p $TEMP_DIR
curl -s -o $TEMP_DIR/kr.zone $URL
# 최적화 및 CIDR 결합
iprange --optimize $TEMP_DIR/kr.zone > $TEMP_DIR/kr_optimized.zone
# ipset 새 집합 생성 (기존 연결 유지용 임시 집합 생성 후 스왑)
ipset create ${IPSET_NAME}_temp hash:net -exist
ipset flush ${IPSET_NAME}_temp
while read -r line; do
    if [[ ! -z "$line" ]]; then
        ipset add ${IPSET_NAME}_temp "$line"
    fi
done < $TEMP_DIR/kr_optimized.zone
# 원자적 스왑 적용
ipset create ${IPSET_NAME} hash:net -exist
ipset swap ${IPSET_NAME}_temp ${IPSET_NAME}
ipset destroy ${IPSET_NAME}_temp
rm -rf $TEMP_DIR

실행 권한을 부여하고 1회 실행합니다.

Bash
sudo chmod +x /usr/local/bin/block-foreign-ips.sh
sudo /usr/local/bin/block-foreign-ips.sh

확인: sudo ipset list korea_ips | head -n 15 실행 시 한국 IP 대역이 채워져 있는지 확인합니다.

3.iptables / UFW 규칙 설정:해외 트래픽 차단.

웹 포트(80, 443)로 들어오는 트래픽 중 korea_ips 목록에 없는 트래픽을 차단(DROP)하거나 거부(REJECT)합니다.

UFW의 before.rules 파일 상단에 규칙을 삽입합니다.

Bash
sudo nano /etc/ufw/before.rules

파일 안의 *filter 섹션 바로 아래, 기본 체인 정의(:ufw-before-input ...) 뒤에 다음 규칙을 추가합니다:

Plaintext
# 한국 IP 목록에 없는 웹 접속 차단 (80, 443)
-A ufw-before-input -p tcp -m multiport --dports 80,443 -m set ! --match-set korea_ips src -j DROP

방화벽을 다시 로드합니다.

Bash
sudo ufw reload

확인: sudo iptables -L ufw-before-input -v -n 명령어 결과에 match-set korea_ips src DROP 룰이 상단에 위치하는지 확인합니다.

4.IP 목록 주기적 갱신(Cron):주 1회 자동 갱신.

국가별 IP 할당 대역은 주기적으로 변경되므로 crontab에 등록해 매주 갱신하도록 설정합니다.

Bash
sudo crontab -e

하단에 다음 줄을 추가합니다 (매주 일요일 새벽 3시 갱신):

Plaintext
0 3 * * 0 /usr/local/bin/block-foreign-ips.sh > /dev/null 2>&1

확인: sudo crontab -l을 실행해 등록된 스케줄이 출력되는지 확인합니다.

SSH 포트 접속 차단 주의

위 규칙은 80, 443 포트(웹 서비스)만 한국 IP로 제한합니다. 만약 22번(SSH) 포트까지 일괄 차단하거나 잘못 설정할 경우 원격 접속이 영구적으로 차단될 수 있으므로, SSH 포트는 별도로 관리해야 합니다.