리눅스 운영체제 iptables에 기반한 방화벽 설정 방법

리눅스 운영체제 iptables에 기반한 방화벽 설정 방법

  1. 기본 동작

패킷에 대한 동작은 위에서부터 차례로 각 규칙에 대해 검사하고, 그 규칙과 일치하는 패킷에 대하여 타겟에 지정한 ACCEPT, DROP등을 수행합니다. 규칙이 일치하고 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따리 처리하고 체인에서 추가 규칙을 무시합니다. 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy)이 수행됩니다. 기본 정책은 policy ACCEPT, policy DROP 으로 설정할 수 있습니다. 일반적으로 기본정책은 모든 패킷에 대해 DROP을 설정하고 특별히 지정된 포트와 IP주소등에 대해 ACCEPT를 수행하게 만듭니다.

  1. iptables 설치

1) 설치

# rpm -qa | grep iptables

  iptables-1.4.7-9.el6.x86_64

  iptables-ipv6-1.4.7-9.el6.x86_64  (ipv6용)

# yum -y install iptables (설치)

 

2) 설치 상태 확인

# chkconfig –list

  netconsole      0:해제  1:해제  2:해제  3:해제  4:해제  5:해제  6:해제

  network         0:해제  1:해제  2:해제  3:해제  4:해제  5:해제  6:해제

 

3) 서비스 시작프로그램 등록 및 시작

# chkconfig iptables on (시작프로그램 등록)

# service iptables start (서비스 시작)

 

  1. iptables 설정 (CentOS 6.4 기준)

1) 기본 설정

기본 정책 변경

규칙에 명시되지 않은 패킷에 대한 처리를 어떻게 할 것 인지에 대한 기본정책을 수립합니다.

# iptables -P INPUT REJECT  // INPUT 체인에 대한 기본 정책을 REJECT로 변경

# iptables -P INPUT ACCEPT  // OUTPUT 체인에 대한 기본정책을 ACCEPT로 변경

# iptables -P FORWAD DROP  // FORWAD 체인에 대한 기본정책을 DROP으로 변경

 

체인에 정의된 모든 규칙 삭제

# iptables -F

# iptables -F INPUT // INPUT 체인의 모든 규칙 삭제

# iptables -F OUTPUT // OUTPUT 체인의 모든 규칙 삭제

# iptables -F FORWAD // FORWAD 체인의 모든 규칙 삭제

 

iptables 설정 변경 값 저장 및 서비스 재시작

[저장]

# service iptables save

[재시작]

# service iptables stop

# service iptables start

 

  1. INPUT 체인

localhost 인터페이스에 들어오는 모든 패킷을 허용하는 규칙 생성합니다. 서버의 서비스를 위해 서버의 S/W와 localhost 어댑터와의 통신은 모두 허용하는 것이 일반적인 설정입니다.

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A INPUT -i lo -j ACCEPT

# iptables -L    ( INPUT 체인에 규칙이 생성된 것이 확인됨 )

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all  —  anywhere             anywhere

 

INPUT 체인

state 모듈과 매치되는 연결상태가 ESTABLISHED, RELATED인 패킷에 대해 허용 규칙 생성합니다. INPUT 체인 접속에 속하는 패킷 (응답 패킷을 가진 것)과 기존의 접속은 아니지만 연관성을 가진 패킷 ( ICMP 에러나 ftp데이터 접속을 형성하는 패킷)을 허용하는 규칙입니다.

# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all  —  anywhere             anywhere

ACCEPT     all  —  anywhere             anywhere             state RELATED,ESTABLISHED

 

2) 포트별 규칙 생성 및 삭제

기본명령 기능 체인 출발지 IP 목적지 IP 프토토콜 포트 매칭 동작
iptables -A (추가) INPUT -s -d -p –dport -j ACCEPT
-D (삭제) OUTPUT tcp 0~65535 DROP
-I (삽입) FORWAD udp REJECT
icmp

 

  1. 규칙의 생성의 예시
iptables -A INPUT -p tcp –dport 80 -j ACCEPT

외부에서 모든 목적지의 tcp/80 포트로의 접근을 허용합니다.

 

iptables -A INPUT -d 192.168.10.10 -p tcp –dport 22 -j DROP

외부 모든 출발지에서 내부 192.168.10.10 목적지 서버의 tcp/80 포트로의 접근을 차단합니다.

 

iptables -A INPUT -s 222.111.222.111 -d 192.168.10.10 -p tcp –dport 53 -j ACCEPT

222.111.222.111 출발지 에서 내부 192.168.10.10 목적지 서버의 tcp/53번 포트로의 접근을 허용합니다.

 

iptables -A OUTPUT -s 192.168.10.10 -d 222.222.222.222 -p tcp –dport 80 -j ACCEPT

내부IP 192.168.10.10에서 222.222.222.222 목적지 IP로 tcp/80번 포트로의 접근을 허용합니다.

 

  1. 규칙의 삽입

일반적으로 방화벽의 규칙은 위에서 아래의 순서로 적용되기 때문에 순서가 매우 중요하며, 실제로 정책 추가 만큼 삽입도 자주 이용되는 생성 방식입니다.

iptables -I INPUT 1 -s 111.111.111.111 -p tcp –dport 2000 -j ACCEPT

INPUT 체인의 1번째 위치에 출발지 111.111.111.111에서 내부 모든 목적지의 tcp/2000를 오픈하는 규칙입니다.

 

  1. 규칙의 삭제
# iptables -D INPUT 4

4번째 라인의 규칙을 삭제합니다.

 

# iptables -D INPUT -p –dport 443 -j ACCEPT

INPUT 체인에 내부 모든 서버의 tcp/443을 허용한 정책을 삭제합니다.

 

  1. iptables 출력
# iptables -L                  // 기본 출력

# iptables -nL                 // 상세한 네트워크 정보까지 모두 출력

# iptables -nL –line-numbers   // 룰셋의 적용 순서 까지 확인

# iptables -L -v                // 적용된 룰셋을 통한 인입 패킷 및 bytes 출력