Iptable

2019-05-04

Iptable과 Netfilter에 대해 설명합니다.

Android

기본적으로 구글에서 제공하는 netutils 패키지를 통해 여러가지 도구를 제공하고 있습니다. ip, iptable, ndc, tc 등 네트워크와 관련된 도구를 제공하는데, iptable에 대해 알아보겠습니다.

Netfilter, iptable

iptables에 대한 설명을 보면, firewall, Packet Mangling(필요 시 패킷 헤더 변경), NAT(사설IP와 공인 IP를 변환해주거나 포트변환), 패킷필터링에 대한 기능을 제공해주는 것으로 나와있습니다.

실질적인 네트워크에 대한 처리는 커널에 존재하는 Netfilter에서 처리를 합니다. iptables는 Netfilter와 연결된 사용자 레벨의 프로그램으로서, 실질적인 기능을 하는 것이 아닌, Netfilter에서 기능을 수행하기 위한 데이터를 전달 및 결과를 확인하는 프로그램이라고 할 수 있습니다.

Netfilter 구조(후킹)

netfilter는 커널에서 패킷을 처리하는 과정에서 룰에 따라 처리해줄 수 있도록 5군데 후킹 지점을 제공합니다.

5곳의 후킹 지점은 각각 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING입니다.

  • PREROUTING : 인터페이스를 통해 들어온 패킷을 가장 먼저 처리. 목적지 주소의 변경
  • INPUT : 인터페이스를 통해 로컬 프로세스로 들어오는 패킷의 처리
  • OUTPUT : 해당 프로세스에서 처리한 패킷을 밖으로 내보내는 패킷에 대한 처리
  • FORWARD : 다른 호스트로 통과시켜 보낼 패킷에 대한 처리(차단/허용). 방화벽이나 IPS 등과 같이 내가 수신하는 패킷이 아니고 지나가는 패킷을 처리
  • POSTROUTING : 인터페이스를 통해 나갈 패킷에 대한 처리. 출발지 주소의 변경

내부 구조는 Table - Chain - Rule 입니다. 이것은 다이어그램으로 이렇게 표현됩니다.

Netfilter 구조(테이블)

Netfilter 내에는 5가지 테이블(정책 목록)이 존재하고 있습니다. 각 테이블은 filter, nat, mangle, raw, security이며, 각각의 특징에 대해서 설명드리겠습니다.

filter

filter는 가장 널리 사용되는 테이블 중 하나입니다. 패킷을 필터링하는, 즉 패킷을 의도한 목적지로 계속 보내거나 거부할지 여부를 결정하는데 사용됩니다.

nat

nat 테이블은 네트워크 주소 변환 규칙을 구현하는데 사용됩니다. 패킷이 네트워크 스택에 들어가면이 테이블의 규칙은 패킷 및 응답 트래픽이 라우팅되는 방식에 영향을주기 위해 패킷의 소스 또는 대상 주소를 수정할지 여부와 방법을 결정합니다. 이것은 직접 액세스가 불가능할 때 패킷을 네트워크로 라우팅하는 데 종종 사용됩니다.

mangle

다양한 방법으로 패킷의 IP 헤더를 변경하는 데 사용됩니다. 예를 들어, 패킷의 TTL (Time to Live) 값을 조정하여 패킷이 유지할 수있는 유효한 네트워크 홉 수를 늘리거나 줄이십시오. 다른 IP 헤더도 비슷한 방법으로 변경할 수 있습니다.

raw

netfilter프레임 워크 위에 구축 된 연결 추적 기능을 사용 iptables하면 관련이없는 개별 패킷 스트림 대신 지속적인 연결 또는 세션의 일부로 패킷을 볼 수 있습니다. 연결 추적 논리는 일반적으로 패킷이 네트워크 인터페이스에 도달 한 직후에 적용됩니다.

raw테이블은 매우 좁게 정의 된 기능을 가지고 있습니다. 유일한 목적은 연결 추적을 거부하기 위해 패킷을 표시하는 메커니즘을 제공하는 것입니다.

security

security 테이블은 패킷에 내부 SELinux 보안 컨텍스트 표시를 설정하는 데 사용되며 SELinux 또는 SELinux 보안 컨텍스트를 해석 할 수있는 다른 시스템이 패킷을 처리하는 방법에 영향을줍니다.

사용법