CHAPTER10. 서버의 방화벽 설정/동작

10.1 리눅스 서버의 방화벽 확인 및 관리

리눅스에서는 호스트 방화벽 기능을 위해 보통 iptables를 많이 사용한다. CentOS7 이상은 기본적으로 iptables 아닌 firewalld를 사용하고 Ubuntu 에서는 UFW(Ubuntu FireWall)를 사용해 방화벽 서비스를 제공한다.

하지만 firewalld 대신 iptables 많이 사용하고, UFW도 iptables의 프런트엔드 역할을 수행하는 것이라 iptables에 대한 이애가 필요하다.

실제 iptables는 방화벽의 역할처럼 패킷 차단, 허용 등의 역할을 직접수행하는 것이 아니다. 리눅스 커널에 내장된 netfilter 라는 리눅스 커널 모듈을 통해 실제로 필터링이 이루어진다. iptables는 netfilter를 사용할 수 있도록 해주는 사용자 공간 응용프로그램이다.

10.1.1 iptables 이해하기

시스템 관리자는 iptables를 통해 서버에 허용하거나 차단할 IP나 서비스 포트에 대한 정첵을 수립한다.
정책은 방향성에 따라 방향성과 관련된 정책 그룹으로 분류하고, 분류된 그룹들을 역할과 관련된 정책그룹으로 다시 묶이게된다.
정책 그룹은 서버 기준 트래픽 구간별로 만든다. 트래픽 구간은 아래와 같이 나눈다.

  • 서버로 유입되는 구간
  • 서버에서 나가는 구간
  • 서버를 통과하는 구간 등
    역할1 { 방향성1 [정책1, 정책2], 방향성2 [정책1, 정책2] }  
    역할2 { 방향성1 [정책1, 정책2], 방향성2 [정책1, 정책2] }  
    역할3 { 방향성1 [정책1, 정책2], 방향성2 [정책1, 정책2] }  
    

iptables에서는 역할을 “테이블”, 방향성을 “체인”이라고 부른다.

iptables의 5가지 테이블

  • 필터 테이블 : 패킷 허용/차단
  • NAT 테이블
  • 맹글 테이블
  • 로 테이블
  • 시큐리티 테이블

iptables의 체인

  • INPUT 체인
  • OUTPUT 체인
  • FORWARD 체인

각 정책에는 정책을 적용하려는 (패킷과 패킷의 상태 또는 정보 값과의 일치 여부 조건)인 매치(조건과 일치하는 패킷의 허용이나 폐기에 대한 패킷 처리 방식을 결정하는) 타깃으로 구성된다.

10.1.2 리눅스 방화벽 활성화/비활성화

예제, CentOS7 기준

# firewalld 비활성화 및 서비스 중단  
systemctl disable firewalld  
systemctl stop firewalld  

# iptables 설치  
yum install iptables-services  

# iptables 서비스 활성화 및 시작하기  
service iptables start                 # centOS 6  
systemctl start iptables.service       # centOS 7  

service iptables start  

10.1.3 리눅스 방화벽 정책 확인

# iptables의 정책 설정 값 확인  
iptables -L  
# 실제 정책이 특정 인터페이스에 대해 적용되어있는지 정의를 확인  
iptables -S  

10.1.4 리눅스 방화벽 정책 관리

iptables 정책 추가

iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
  • -A : 정책 추가
  • INPUT : INPUT 체인에
  • -p : protocol
  • –dport : 도착지 port
  • –sport : 출발지 port
  • -j : 타깃, 패킷이 iptables 에 정의한 정책과 같을 때 취하는 행동
    • ACCEPT : 패킷 허용
    • REJECT : 패킷을 폐기하면서 패킷 차단되었다는 응답 메시지 전송
    • DROP : 패킷 폐기
    • LOG : 패킷을 syslog에 기록
  • -d : 도착지 ip 주소 제어 (설정 안하면 anywhere)
  • -s : 출발지 ip 주소 제어 (설정 안하면 anywhere)
  • -i : 특정 서비스 포트에 허용(eth0… )
  • -m iprange –src-range 시작ip-끝ip : ip 주소 범위로 지정
  • -m iprange –dst-range 시작ip-끝ip : ip 주소 범위로 지정
  • -m multiport –dports 3001:3010 : 3001~3010 포트에 적용
    # -A 대신 -I 사용해서 5번째 줄에 추가명령  
    iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT  
    

정책 삭제

iptables -D INPUT -p tcp --dport 80 -j ACCEPT  

특정 정책 확인

iptables -C INPUT -p tcp --dport 80 -j ACCEPT  

정책의 줄 번호 확인

iptables -L --line-number  

전체 삭제

iptables -F  
iptables --flush  

iptables 정책 파일 위치

/etc/sysconfig/iptables  

10.1.5 리눅스 방화벽 로그 확인

iptables 정책에 의해 차단되거나 허용된 내용확인 가능. 로그 위치는 /var/log/mesages 이다.

tail -f /var/log/mesages  

-> 이 메시지 파일에는 iptables 로그 외에 다른 로그들도 있어서 iptables 로그만 보려면 다음과 같은 설정 필요하다. rsyslog.conf 파일에 아래 명령어 추가.

kern.* /var/log/iptaebls.log  
#  서비스 재시작  
systemctl restart rsyslog.service  

# iptables에 로그를 만길 수 있도록 설정  
iptables -I INPUT -j LOG --loglevel 4 --log-prefix '## ZIGI-Log'  

더 다양한 실행옵션은 p413에서 확인