서버 운영 관리

차동훈 에반젤리스트

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 체인 기준으로 설명한다)

  

 

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

-p [프로토콜 번호]

-s [출발지 아이피]

-d [목적지 아이피]

--sport [출발지 포트번호]

--dport [목적지 포트번호]

-j ACCEPT : 허용

-j DROP : 차단

-m [모듈이름] : iptables에서 확장모듈을 사용할 때 사용

 ∗ 위 옵션들만 알고 있으면 서버에 대한 간단한 접근 정책 설정은 무난히 진행 할 수 있다.

 

 

방화벽 실행 및 중지 스크립트

#실행

$ /etc/init.d/iptables start

 

#중지

$ /etc/init.d/iptables stop

 

#재시작

$ /etc/init.d/iptables restart

∗ 시작, 재시작은 아래 파일 경로 (/etc/sysconfig/iptables 파일 설정을 가지고 와서 정책으로 로드한다) 

  

 

iptables 정책 파일 위치

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

∗ iptables 명령으로 하나하나 정책을 추가하거나 삭제하는 방법과 위 파일을 수정한 다음 iptables 재시작하는 방법 2가지가 있다.

 

 

만약 리눅스 서버에 네임서버가 운영 중이라면 아래와 같이 설정하면 된다.

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT (라인 추가)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

∗ 파일 수정후 iptables 재시작 스크립트 (/etc/init.d/iptables restart) 를 실행하면 적용된다.

 

 

iptables 는 정책이 순차적으로 필터링 되는데 일반적으로 위에서 아래 방향으로 패킷이 지나간다고 생각하면 된다.

위 예제에서는 제일 마지막 정책은 모든 패킷을 차단하는 정책이다.

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

∗ 일반적으로는 위쪽에는 방화벽 허용 정책을 아래쪽에는 차단하는 정책을 배치시킨다.

 

 

방화벽 재시작

$ /etc/init.d/iptables restart
iptables: 방화벽 규칙 적용 중: [ OK ]

 

 

방화벽 정책 파일을 잘못수정하거나 문법이 틀린경우 열번호와 함께 에러를 출력한다.

$ /etc/init.d/iptables start
iptables: 방화벽 규칙 적용 중: Bad argument `123123123123123'
Error occurred at line: 26
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
                                                                                    [실패]

∗ 위와 같이 26번째 라인 에러 발생시에는 그 앞뒤 전후 라인 정책들도 같이 확인하는것이 좋다.

 

: 문법적으로 틀린 부분과 라인번호를 출력해주므로 사용하자는 에러 메세지를 참고하여 재수정하고 iptables 다시 시작한다.

 

 

방화벽 설정을 위해서는 서비스 포트 번호를 알아야 하는데 리눅스 서버에서는 아래 파일에서 확인 가능하다.

......

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

 

 

 

관련링크


 

• IWINV 방화벽 생성하기 (http://help.iwinv.kr/manual/read.html?idx=62)

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

 


 

질문 및 제안하기

댓글 0

댓글 내역이 없습니다.

댓글 더 보기 첫 댓글 맨 위