[centos] iptables

2019. 4. 15. 21:33study/centos 7 server & network

 IPTABLES ? 

: netfilter 프로젝트에서 개발

: 광범위한 프로토콜 상태 추적, 패킷 애플리케이션 계층검사, 속도 제한, 필터링 정책을 명시하기 위한 강력한 매커니즘을 제공

: netfilter 프레임워크에 의해 시행될 특정 규칙을 설정하도록 하는 애플리케이션


[출처] webdir - iptables, linode - control network traffic with iptables


즉, 패킷 필터나 방화벽으로서의 역할을 수행하는 애플리케이션이다.  


 iptables 설치 


1.1 centos 6.x 

yum install -y iptables


1.2 centos 7 

centos 7부터는 iptables 대신 firewalld가 기본 방화벽으로 사용된다. 

따라서, iptables를 사용하려면 firwalld를 중지시키고 재부팅시에도 다시 활성화되지 않도록 설정해야한다.

# stop firewall

systemctl stop firewalld

systemctl mask firewalld


# install iptables

yum intall -y iptables-service


 iptables 개념 


1. 테이블(tables)

: iptables에는 테이블이라는 요소가 있으며, filter, nat, mangle 등으ㅇ로 구성되어있다.

( raw, security 테이블도 있다고 하는데 현재로서는 잘 모르겠다....)


1.1 filter 

: 기본 테이블 (테이블을 따로 지정하지 않을 경우, filter 테이블이 기본값이 된다.)

: 특정 룰에 따라서 패킷을 걸러내거나 통과시키는 역할(필터링)을 한다.  


1.2 nat

: 소스와 목적지의 아이피 변환을 목적으로 한다.

예를 들어, 방화벽으로 향하는 패킷을 방화벽 내부 네트워크의 다른 주소로 포워딩하는 역할을 한다.

또한, 내부 네트워크에서 외부 네트워크로 나갈 때 다른 ip 주소로 변환시켜주는 역할도 한다.


1.3 mangle

: 패킷을 특정하게 바꿀 때 (ex) tos 값을 변경할 때) 사용된다.

: 패킷이 맨 처음 들어왔을 경우에 제어가 가능하다.



2. 체인(chain)

: 각 테이블에는 체인이 모두 존재한다.

: 기본적으로 INPUT, FORWARD, OUTPUT 체인이 있으며, 

  nat, mangle 테이블에는 PREROUTING, POSTROUTING 체인이 추가되어 있다.



2.1 filter 테이블

- INPUT : 방화벽 자체로 향하는 패킷에 대한 필터링을 담당한다.

- OUTPUT : 방화벽에서 만들어지는 즉, 방화벽에서 나가는 패킷에 대한 필터링을 담당한다.

- FORWARD : 방화벽을 통과하여 방화벽이 보호하는 다른 서버 등으로 향하는 패킷에 대한 필터링을 담당한다.


2.2 nat 테이블

- PREROUTING : destination NAT(DNAT) 타겟과 매칭되어 주로 외부에서의 패킷을 방화벽이 보호하는 내부서버로 포워딩 할 때 사용된다. 

- POSTROUTING : Source NAT(SNAT) 타겟과 매칭되어 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용된다. 예를 들어, 마스커레이드 설정을 할 때 POSTROUTING 체인이 사용된다.


마스커레이드 ?

: 사설 IP주소를 공인 IP주소로 가장하여 외부 인터넷으로 나갈 수 있도록 하는 리눅스 네트워킹 기법


예를 들어, 집에 공유기가 있고, 개인 PC가 이 공유기에 연결되어있다고 하자.

이때, 개인 PC로 인터넷을 사용하려면 공인 IP가 필요하지만, 개인 PC에는 사설 IP가 할당되어있다. 

그렇다면 어떻게 인터넷을 사용할 수 있는 걸까?

이때 필요한 것이 마스커레이드이다.

개인 PC가 외부 인터넷으로 나갈 때, IP 주소를 공유기의 공인 IP 주소로 하여 마치 공유기가 외부 인터넷으로 나가는 것처럼 가장한다면 인터넷 사용이 가능해지는 것이다.


2.3 mangle 테이블

- PREROUTING : 라우팅 경로가 결정되기 전에 방화벽으로 들어오는 패킷에 대한 변경을 담당한다.

- OUTPUT : 방화벽에서 생성되어 나가는 패킷에 대한 변경을 담당한다.


 iptables 설정 


1. 매치(parameter)

: iptables에서 패킷을 처리할 때 만족해야 하는 조건을 가리킨다.


 매치

설명

-s, --source 

출발지 ip주소나 네트워크

-d, --destination

목적지 ip주소나 네트워크

-p, --protocol

특정 프로토콜                               ex) tcp, udp, etc.

-i, --in-interface

입력(패킷을 받는) 인터페이스           ex) ens33, eth0

-o, --out-interface

출력(패킷이 보내지는) 인터페이스

--state

연결 상태                                     ex) NEW, ESTABLISHED

-g, --goto chain

사용자 지정 체인

-f, --fragment

2번째 이후의 조각에 대한 규칙

-t, --table

처리될 테이블

-j, --jump

규칙에 맞는 패킷의 처리 방법           ex) ACCEPT, DROP

-m, --match

특정 모듈



2. 타겟

: 패킷이 설정한 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.

: 1번의 -j 파라미터로 타겟을 설정한다.


타겟

설명

ACCEPT

패킷을 받아들인다. 

DROP 

패킷을 버린다.  

REJECT  

패킷을 버리고 적절한 응답 패킷을 전송한다. 

LOG

패킷을 syslog에 기록한다. 

RETURN 

호출 체인 내에서 패킷 처리를 계속한다. 



3. 옵션(명령어)


옵션 

설명 

-A --append

지정된 체인에 새로운 규칙을 추가한다.

-C --check

지정한 규칙을 체크(테스트)한다.

-D --delete

지정된 체인의 규칙을 삭제한다.

-F --flush

모든 체인의 규칙을 삭제한다.

-I --insert

지정된 규칙 번호로 새로운 규칙을 삽입한다.

-L --list

지정된 체인의 규칙들을 보여준다.

-n --numeric

ip나 hostname, 포트 번호를 숫자 형식으로 보여준다.

-N --new-chain

새로운 사용자 정의 체인을 만든다.

-v --verbose

-L 옵션과 함께 사용되며 더 자세히 보여준다.

-X --delete-chain

사용자 정의 체인을 삭제한다.

-P --policy

기본 정책을 변경한다.


iptables 동작


1. 위에서부터 차례로 각 규칙에 대해 검사하고, 그 규칙과 일치하는 패킷에 대하여 타겟(동작)을 취한다.

ex) ACCEPT, DROP


2. 규칙이 일치하여 작업이 수행되면, 그 패킷은 해당 규칙의 결과에 따라 처리되고 추가 규칙은 무시된다.


3. 패킷이 체인의 모든 규칙과 매치되지 않으면 정해진 기본 정책이 수행된다.


iptables에서의 순서


iptables 규칙을 만들 때는 순서가 매우 중요하다.

예를 들어, 1.221.80.0/24 네트워크에서 들어오는 모든 패킷을 drop하도록 지정하게 되면

1.221.80.10 에서 들어오는 패킷을 허용하도록 규칙을 추가하더라도 drop된다.

따라서 1.221.80.10 을 허용하는 규칙을 먼저 설정한 후 서브넷을 drop하는 규칙을 설정해야한다.


'study > centos 7 server & network' 카테고리의 다른 글

[centos] firewalld --direct  (0) 2019.04.22
[centos] firewalld  (0) 2019.04.22
[centos] 방화벽  (0) 2019.04.11
[centos] ftp  (0) 2019.04.09
[centos] ssh  (0) 2019.04.09