IPtables 명령어 - iptables 의 구조

2016. 9. 18. 01:06리눅스/명령어 모음

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

우리는 모두 방화벽 이라는 존재를 알고 있습니다.

방화벽, 

현실에서는 화재로부터 위험을 차단하는 벽이고, IT 에서 본다면 

외부의 위협 (해커) 로부터 네트워크를 보호하는 차단벽 이라고 생각할수 있습니다.


그동안 간단히 윈도우 에서 방화벽을 켜고 껏다면 

이제 좀더 세분화 된 설정과, 리눅스 환경에서도 방화벽을 사용할수 있어야 합니다.


linux 커널 안에 이러한 패킷 필터 기능을 가지고 있는 netfilter가 존재합니다.

우리가 배울 iptables 는 이 netfilter를 관리하는 명령어로 생각하면 됩니다.


이 iptables 를 이용하여 패킷 차단 뿐만 아니라 NAT기능 과 상태추적 기능 등을 이용할수 있습니다.


iptables는 룰 기반의 정책설정을 특징으로 들수 있습니다.

iptables - 테이블 - 체인 - 룰 설정 - 정책 지정

위와 같은 차례대로, 정책 설정을 할수 있습니다.


그럼 iptables 의 명령어와 기능에 대해 알아보도록 하겠습니다.


1. 시작

 - 리눅스 서비스 시작 명령어는 대동소이 합니다. 

   우리는 iptables 서비스를 시작할것이기 때문에

root@root# service iptables start 로 시작합니다.

 * 만약 서비스 실패 할 경우 iptables 파일이 없을수도 있습니다.

   touch /etc/sysconfig/iptables 로 iptables 파일을 생성해 줍니다.



iptables - 테이블 - 체인 - 룰 설정 - 정책 지정


iptables 의 테이블은 여러종류 가 존재합니다.


우선, 이번시간에 다룰 테이블은 filter 와 nat 테이블입니다.


Filter 테이블 - 패킷 필터링 기능 / 들어오고, 나가고, 지나가는 것에 대한 패킷 필터링 관장

nat


물론, 테이블은 filter 와 nat 외에도, raw,mangle 등등이 존재합니다.



iptables - 테이블 - 체인 - 룰 설정 - 정책 지정


체인은 filter 테이블에 사용하는 체인으로 다음과 같은 체인이 있습니다.


1. INPUT - 외부에서 ~ 나에게 들어오는것, 즉 방화벽을 최종 목적지로 하는 패킷

2. OUTPUT - 내가 내보내는것, 즉 방화벽을 최초 출발지로 하는 패킷

3. FORWARD - 나를 통과하는것, 즉 방화벽을 통과하는 패킷에 대한 체인


nat 테이블에 사용하는 체인 


1. PREROUTING - 외부에서 내부로 보낼때 변환 체인 (DNAT 라고도 한다 : 목적지 주소를 변환)


2. POSTROUTING - 내부에서 외부로 보낼때 변환 (SNAT) 라고도 한다 : 출발지 주소를 변환)



iptables - 테이블 - 체인 - 룰 설정 - 정책 지정


룰 설정에 있어 가장 중요한것은 순서 라고 할수있다.

왜냐하면, iptables 정책에 있어, 앞쪽 체인서부터 순차적으로 내려오며 정책을 적용하기 때문이다.

즉, 1번째 순위의 정책이 모든 ip가 들어오는것을 허용으로 해놓는다면,

2번째 순위의 정책에 100.100.100.100 의 ip를 차단으로 하여도 

해당 ip를 가진 패킷인 들어왔을때, 1번째 순위 정책인 '모든 ip 허용' 이 적용되어 들어올수 있기 

때문이다.


룰 설정 명령어


-A : 해당 체인 마지막에 룰을 추가한다.

-I : 해당 체인 첫 번째 행에 룰을 추가한다 (번호 지정가능)

-D : 행 번호를 지정하여, 혹은 해당 정책 룰을 삭제한다.

-F : 해당 체인의 모든 룰을 삭제한다.

-R : 행 번호를 지정하여 룰 위치를 치환한다.

-P : 기본정책을 설정한다. 해당 체인의 모든 룰에 해당하지 않으면, 기본정책이 적용된다.


-p : 프로토콜 지정 명령어 (icmp,tcp,udp 등)

-s : 출발지, 지정하지 않으면 any 적용

-d: 목적지, 지정하지 않으면 any 적용

--dport : 목적지 포트 --dport [서비스번호] 로 입력

--sport: 출발지 포트 입력방법은 상동

-i :입력 인터페이스

-o : 출력 인터페이스


iptables - 테이블 - 체인 - 룰 설정 - 정책 지정


정책지정은 해당 정책 을 어떻게 하겠다 정도로 생각할수 있다.

정책 지정은 다음과 같이 나뉜다.


1. ACCEPT - 실행시킨다.

2. DROP - 차단한다.

3. REJECT - 차단한다 (DROP와는 조금다른데, DROP는 완전차단 / REJECT 는 차단은 하되, ICMP에러 응답을 전송해준다)

4. LOG - 해당 부분에 로그를 남긴다. 모니터링 할수 있도록 해준다.

(LOG 정책으로 지정할 경우, LOG 다음 정책으로 넘어가게 된다. 즉, 들어오는 모든 패킷에 대한 로그를 남기고 싶으면, -I 옵션으로 최상위에 LOG를 남겨도, LOG에 정책이 맞아도 다음번으로 넘어간다)



iptables 기본 명령어 


1. 서비스 시작 : service iptables start

2. iptables 정책 목록 보기 : iptables -L

3. 기본 정책 DROP 설정하기 : iptables -t filter -P INPUT DROP

iptables -t filter -P OUTPUT DROP

iptables -t filter -P FORWARD DROP


iptables 스크립트 파일 사용방법

1. 스크립트 파일로 작성할 파일을 작성한다 (EX: test)

2. vi test 로 편집기를 열고, #! /bin/bash 입력 (첫줄)

3. 정책 설정 입력 한다. 

  - 입력 전, 모든 정책을 초기화 하려면

    1) iptables -F 

    2) iptables - t nat -F  후에 정책을 입력하면, 초기화 된 상태에서 작성한 

       정책을 적용시킬수 있다.


4. 저장후, 사용은 sh test 

   스크립트 안에 작성된 명령어들이 그대로 들어가 있음.

 


iptables 의 기본설정에 대해 알아보았다면, 다음시간에는 실제 적용하는 모습을 확인해 보도록 하겠습니다~!