Notice
Recent Posts
관리 메뉴

Hacking Arts

iptables 본문

정보보안기사/네트워크

iptables

Rakehell 2018. 12. 9. 21:43

- iptables란?

리눅스에 구현되어 있는 netfilter를 관리하는 툴이며, netfilter의 정책을 관리하는 툴이라고 볼 수 있습니다. netfilter는 kernel에 구현되어 있다. kernel 버전 2.4.x버전 이후로 개발되어 추가됨


- iptables 기능

1.상태추적 기능 : 

A.방화벽을 지나치는 모든 패킷을 메모리에 기억 기능

B.기존 연결을 가정하여 접근할 경우 메모리에 저장된 목록을 비교하여 차단하는 지능화된 공격 차단 기능

C.특정 패킷을 차단or허용,서버접근제어, 방화벽기능

2.향상된 매칭 기능 : 

A.IP,포트 외의 다양한 매칭 기능

B.현재 연결 상태,포트 목록,MAC주소, 패킷 발신자의 유저나 그룹 프로세스,IP헤더의 TOS등 여러가지 조건을 이용한 필터링 기능

3.포트 포워딩 기능 내장 : 

A.NAT 기능을 자체적으로 포함

B.브릿지 등의 다양한 네트워크 구조를 지원


-iptables의 table과 chain의 관계

처음엔 ip동작원리를 먼저 이해하려 했지만 아마도 이게 더 선행되어야 할 것 같았다.

iptables는 필터링을 적용하는 테이블로서 규칙에 따라 패킷을 차단하거나 허용하는 역할을 한다. 또한 filter table은 INPUT OUTPUT FORWORD  3개의 chain이 존재

1.NAT Table - 필터링 기능은 없지만 NAT용으로 사용하며, 외부에서 내부로 오는 패킷 포워딩과 내부에서 외부로 나갈때 다른 IP주소로 나가게 하는게 가능

2.MAGLE Table - TTL이나 TOS(type of service)같은 특수규칙을 적용하기 위해 사용된다. 즉, 패킷안에 데이터를 변환 또는 조작을 위한 테이블

3.RAW Table - 필터테이블 Conection Tracking(연격추적) 기능을 좀 더 자세히 다룰때 사용되며, 특정 네트워크는 연결 추적에서 제외하는 등의 추가 설정이 가능 conntrack 모듈보다 우선 순위를 가짐

iptables에는 테이블 안에 체인들이 IP 패킷을 정해진 규칙에 수행하게 되며, 들어오는 패킷(INPUT) 허용(ACCEPT) 거부(REJECT), 버림(DROP)을 결정하게 된다. 

iptables -t [raw,filter,nat,mangle] -L을 입력하면 설정한 규칙들을 볼 수 있다. raw는 prerouting,OUTPUT이 존재한다.

table



-iptables 동작원리

<출저는 아래 표기>

0.위 그림이 정확하게 이해는 가지 않는다. 내 생각으로 내부로 들어오는 모든 패킷을 prerouting이라는 곳에 태우게 되고 nat변환시 nat chain을 거쳐 패킷의 IP를 변환하게 된다는 것 같다. 


<NAT packet의 주소변환 영역>

패킷이 로컬에 통과하게 되고 패킷을 다시 쓰려고 한다면 NAT 체인을 거친다. 우선적으로 iptables의 PREROUTING을 거친다. 이때 로컬로 받을 것인지 그래도 포워딩을 할 것인지 결정하게 된다. 포워딩 시, PREROUTING->POSTROUTING 체인으로 건너감 PREROUTING에서 만약 로컷 프로레스로 보내게 된다면 바로 OUTPUT체인으로 될 것이다. 


아래 블로그 중에 59999포트를 80포트로 변형하는 예제가 있는데 /prco/sys/net/ipv4/conf/[네트워크카드]/route_localnet을 일단 1로 설정하여 로컬에서 라우팅을 허락한다고 설정한 뒤 iptables의 nat table의 prerouting 체인을 사용하여 외부 포트를 내부포트로 변형시켜준다. 그렇게 사용하면 로컬에서만 붙을 수 있는 3306같은 db접속용 포트를 사용자가 다른 port를 이용하여 접속이 가능하다.


nat시스템같은 경우는 대게 2개의 네트워크를 사용하여 한쪽은 untrunst 한쪽은 trust를 기준으로 외부에서 내부로 패킷을 허락시켜주는 듯 하다. 설정에 따라 내부 외부를 연결시켜주는 ips같이 동작하는 것으로 보인다. 3306같은 관리 콘솔도 접속이 가능한걸 보면 외부에서 내부 그리고 내부에서 외부로 가는 패킷도 만들어줄 수 있는 것으로 보인다.(이건 정확히 사용후 알 수 있을 것 같다.)


아래 블로그에 설명을 보니 들어오는 외부패킷에 대해 prerouting으로 내부로 접속을 허락시켜준다면 postrouting을 통해 내부에서 외부로 나가는 것에 대해서도 걸어줘야 하는 걸로 보인다.


- iptables 명령어 & 옵션

iptables -A INPUT -s [발신지] --sport [발신지포트] -d [목적지] --dport [목적지 포트] -j [정책]

[명령어]

-A 새로운 규칙을 추가한다.

-D 규칙을 삭제한다

-C 패킷을 테스트한다.

-I 새로운 규칙을 삽입한다.

-R 새로운 규칙으로 교체한다.

-L 새로운 규칙을 출력한다.

-F 체인의모든 규칙 초기화

-Z 모든 체인의 패킷과 바이트 카운터 값을 0으로 만든다.

-N 새로운 체인을 만든다.

-X 체인을 삭제

-P 기본 정책을 변경

[옵션]

-p 패킷의 프로토콜의 포트번호 또는 이름을 명시

-s 패킷의 발신지를 명시 (10.11.0.0/16)

-d 패킷의 도착지를 명시

-i 규칙을 적용할 인풋 인터페이스 이름 명시(eth,ens~)

-o 규칙을 적용할 아웃풋 인터페이스 이름 명시(eth,ens~)

-j 규칙에 맞는 패킷을 어떻게 처리할 것인지 명시

-y 접속 요청 패킷인 syn패킷 허용x

-f 두번째 이후의 조각에 대해 규칙을 명시


[규칙 제거]

iptables -F INPUT을 입력시 INPUT chain 명령어 모두 제거

iptables -D INPUT -s [발신지] --sport [발신지 포트] -d [목적지] --dport [목적지포트] -j [정책]

iptables -D INPUT [필터링번호]


[규칙 응용]

iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP

1초 동안 80포트에 똑같은 IP가 10번 이상의 SYN가 들어오면 드랍


<mysql 현재 유저>


<설정을 추가하면 통신이 가능할것 같다.>



<응 안됩니다.>


<telnet으로 보니 mysql에서 막는다>


<권한을 추가해준다>


<확인 가능하다>

결국 mysql port를 nat로 port forwarding 하듯 바꿀 수 있지만 ip권한이 없으면 못들어 가게 된다. 아마도 해당 ip에 대한 변조가 없다고 이해하면 될 것 같다. 이 부분을 수정 할 수 있을까 싶다.

nat 기능중 ip를 변조해주는 기능을 추가한다면 할 수 있겠지만 기능을 찾아봐야 할 것 같다.



출처 : http://server-talk.tistory.com/169

출처 : http://webterror.net/?p=1622 / iptables의 동작원리을 그림으로 설명

출처 : http://gsk121.tistory.com/252?category=804375 / iptable table 다루는 방법



'정보보안기사 > 네트워크' 카테고리의 다른 글

[CVE 2013-5211] DrDOS (NTP)  (0) 2018.11.23
DrDos  (0) 2018.11.17
nmap - 1  (0) 2017.11.12