서버운영관리

이승호 에반젤리스트

iptables 방화벽 설정

리눅스에서는 'iptables' 라고 하는 방화벽을 제공하고 있으며 서버로 들어오는 패킷이나 서버에서 외부로 나가는 패킷들을 

필터링 하기 위해서 사용한다.

간단하말하면 IP 또는 PORT 를 설정하여 접근을 허용하거나 거부하는 등의 작업을 수행한다고 보면 된다.

서버를 운영할때 가장 기본이 되는 보안정책이기 때문에 사용자는 반드시 iptables 보안 설정을 하여 시스템 접근 보호를 해야 한다.

 

∗ 리눅스 시스템에서 커널에 적재된 netfilter 라고 하는 곳에서 실제로 필터링을 담당하고 있으며 iptables 는 netfilter 를 제어 및 관리하기 위한 도구이다.

 

아래는 netfilter 공식 홈페이지이다.

 http://www.netfilter.org

 

 

본 문서에서 iptables 에 대한 모든 설명은 다 하긴 어렵지만 자주 사용하는 기능과 예제를 통해 간단히 알아보도록 하겠다.

 

 

테스트 환경

 HW : 리얼서버, 가상서버 환경

OS : CentOS6 - 64bit 

Kernel : 2.6.32 기반

참고사항 : centos 7 이상과 redhat (centos, fedora) 계열 이외 OS는 아래 환경과 경로나 스크립트 위치가 달라진다.

 

 

 

iptables 방화벽 개요


 

  

테이블 (table)

: 각 테이블 마다 기능이 다르고 사용자의 용도에 따라 알맞은 테이블을 선택하면 된다.

 

filter

패킷을 필터링 할때 사용됨

 

nat

패킷의 방향이나 주소를 변경

 

mangle

패킷의 상태를 변경

 

raw

패킷이 커널에 의해 처리되기 전에 필터링

∗ 기본적으로 서버에 대한 접근제한은 filter 테이블에서 이뤄진다. ( 본 문서는 filter 테이블을 기준으로 설명한다)

 

 

 체인 (chain)

 INPUT : 외부에서 서버로 들어오는 연결에 대한 필터링

OUTPUT : 서버에서 외부로 나가는 연결에 대한 필터링

FORWARD : 외부에서 들어온 연결이 다시 외부로 향하는 연결에 대한 필터링

∗ 위 체인은 filter 테이블에 포함되어 있으며 필요에 따라 별도의 체인을 생성 할 수 있다. (본 문서는 INPUT 체인 기준으로 설명한다)

  

 

그리고 몇가지 문법들로 구성되는데 자주 사용되는것들은 아래와 같다

 ......

http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
http 80/sctp # HyperText Transfer Protocol
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5

......

 

 

ex) 서버의 ssh 접근을 특정 아이피 (192.168.0.1) 에서만 접근 가능하도록 한다면 아래와 같은 정책을 만들수 있다.

 -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.0.1 --dport 22 -j ACCEPT

 

 

iptables 는 방화벽 정책을 적용하고 실제로 패킷이 차단하는지 다른서버나 외부에서 테스팅을 해야 한다.

실제로 문법은 틀린게 없지만 옵션 등의 문제로 인해 차단 정책을 하고 나서 외부에서 접근이 되는 경우도 종종 발생하기 때문이다.

 

 

NOTE

 방화벽 설정을 잘못 하는 경우 서버와의 연결이 끊어져서 접속이 안되는 경우가 발생한다.

IWINV 에서 제공하는 콘솔모드 기능을 이용하여 콘솔로 서버를 미리 띄워놓고 작업하면 장애시에 빠른 대처가 가능하다.

 

관련링크


 • iptables 로 국가 아이피 차단하기 (http://help.iwinv.kr/manual/read.html?idx=97)