이 튜토리얼에서는 리눅스에 기본 탑재된 방화벽인 IPTables를 활용해 특정 IP 주소의 접근을 차단하는 방법을 소개합니다.
서버 보안, 왜 IP 차단이 필요한가?
리눅스 서버를 관리하는 담당자라면 보안은 가장 큰 고민거리 중 하나일 것입니다. 서버를 노리는 주요 위협으로는 DDoS 공격과 자동화된 봇을 이용한 반복적인 침입 시도가 있습니다.
잠재적 침입자의 IP 주소를 파악하는 방법은 로그 분석, fail2ban 같은 도구 등 여러 가지가 있습니다. 하지만 진짜 중요한 것은 IP를 확인한 이후의 조치입니다. 정답은 간단합니다. 해당 IP를 차단하면 됩니다. 대부분의 리눅스 배포판에 기본 포함되어 있는 IPTables를 사용하면 별도의 프로그램 설치 없이 바로 차단할 수 있습니다.
단일 IP 주소 차단하기
차단할 IP가 하나뿐이라면 다음 명령어 하나로 충분합니다.
# iptables -I INPUT -s 122.174.12.228 -j DROP
이 명령은 iptables 규칙에 새 항목을 추가하여, 122.174.12.228에서 들어오는 모든 패킷을 즉시 폐기(DROP)하도록 지시합니다. 각 옵션의 의미는 다음과 같습니다.
- -I INPUT: INPUT 체인의 맨 앞에 규칙을 삽입합니다.
- -s [IP]: 출발지(source) IP 주소를 지정합니다.
- -j DROP: 해당 조건에 맞는 패킷을 응답 없이 버립니다.
여러 IP를 스크립트로 자동 차단하기
공격이 빈번하게 발생하는 환경이라면, 차단 목록의 IP들을 수작업으로 하나씩 입력하기보다 자동화된 방식을 사용하는 것이 효율적입니다. 다음과 같은 셸 스크립트를 작성해 보세요.
#!/bin/sh
for i in $(< banned_IPs.cfg) ; do
iptables -I INPUT -i eth1 -s "$i" -j DROP
done
이 스크립트는 설정 파일에 나열된 모든 IP를 읽어 iptables에 순차적으로 등록합니다. 여기서 eth1은 외부와 연결된 네트워크 인터페이스 이름이므로, 자신의 서버 환경에 맞게 수정하세요(예: eth0).
1. 스크립트 저장 및 실행 권한 부여
위 내용을 banned_IPs.sh 같은 이름으로 저장한 뒤, 실행 권한을 부여합니다.
# chmod +x banned_IPs.sh
2. 차단 IP 목록 작성
다음으로 banned_IPs.cfg 파일을 생성하고, 차단할 IP 주소를 한 줄에 하나씩 입력합니다.
122.174.12.228
129.122.10.23
111.154.84.130
3. 스크립트 실행
마지막으로 스크립트를 실행하면 목록에 등록된 모든 IP가 iptables 차단 목록에 일괄 적용됩니다.
# ./banned_IPs.sh
마무리 및 추가 팁
차단 규칙이 정상 적용되었는지 확인하려면 아래 명령어로 현재 등록된 iptables 규칙을 조회할 수 있습니다.
# iptables -L INPUT -v
또한 재부팅 시 규칙이 초기화되지 않도록 하려면, 배포판에 따라 iptables-persistent(Debian/Ubuntu) 또는 iptables-save(RHEL/CentOS 계열)를 사용해 규칙을 저장해 두는 것이 좋습니다. 이렇게 하면 서버를 안정적으로 운영하면서 불필요한 외부 트래픽과 공격 시도를 효과적으로 차단할 수 있습니다.