강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

patch-o-matic으로 확장된 기능 이용 방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

patch-o-matic으로 확장된 기능 이용 방법

 

 

위와 같이 사용하면 iptables의 기본적인 기능을 사용하는 데에는 전혀 문제가 없지만 좀 더 실험적이고 확장된 기능을 사용하고자 할 때에는 다소 부족함이 있다.

 

 

 

 

이를 위해서는 patch-o-matic(또는 `p-o-m')로 커널 및 iptables 패치를 하면 정식 커널에는 포함되어 있지 않은 iptables와 관련된 버그픽스(bugfix) 및 더욱 확장된 방화벽 기능을 선택하여 사용할 수 있게 된다.

 

 

 

 

만약 patch-o-matic으로 컴파일 하여 새로운 기능을 추가하였을 경우에는 커널 패치를 통해 해당 기능이 커널 메뉴에 추가되는 것이므로 커널 옵션에서 선택 후 컴파일하여 재부팅 후 새로운 커널로 적용해야 해당 기능을 이용할 수 있으므로 주의하기 바란다.

 

 

 

 

, iptables만 컴파일 할 때에는 커널을 변경하지 않지만 patch-o-matic을 이용하면 커널 패치를 하게 되는 것이다.

 

 

 

 

 

 

먼저 ftp://ftp.netfilter.org/pub/ 에서 최신 버전의 iptablespatch-o-matic-ngsnapshot을 각각 다운로드하여 압축 해제한다.

 

 

 

 

patch-o-matic은 구 버전의 커널에서 사용되며 최근의 커널에서는 patch-o-matic-ng를 다운로드 하도록 한다.

 

 

 

 

 

[root@server src]# wget ftp://ftp.netfilter.org/pub/iptables/iptables-x.x.x.tar.bz2

[root@server src]# wgetftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-200xxxxx.tar.bz2

[root@server src]# tar jxvfp iptables-x.x.x.tar.bz2

[root@server src]# ln -s iptables-x.x.x iptables

[root@server src]# mv patch-o-matic-ng-200xxxxx.tar iptables-x.x.x

[root@server src]# cd iptables-x.x.x; tar jxvfp patch-o-matic-ng-200xxxxx.tar.bz2

 

 

 

이후, patch-o-matic-ng-200xxxxx 디렉토리에서 ./runme --help를 실행하면 사용할 수 있는 옵션을 보여준다.

 

 

 

 

 

 

[root@server patch-o-matic-ng-200xxxxx]#./runme --help

Usage:

./runme [--batch] [--reverse] [--exclude suite/patch-dir ]

suite|suite/patch-dir

 

Options:

--download 일부 패치는 기본으로 제공하지 않으므로 외부링크를 통해 더 많은 패치를 다운로드받는다.

 

 

 

 

 

--batch 배치모드로 자동으로 패치를 적용한다.

 

 

--test 테스트 모드로 자동으로 패치를 테스트한다.

 

 

--check 체크모드로 이미 패치가 되었는지 여부를 자동으로 체크한다.

 

 

 

 

 

 

 

--reverse 선택한 패치를 취소한다.

 

 

 

 

 

--exclude suite/patch-dir 해당 이름의 패치는 제외한다.

--help 이 도움말 메시지를 보여준다.

 

 

 

 

 

--man manpage를 보여준다.

 

 

--kernel-path 커널의 소스 디렉토리 경로를 지정한다.

 

 

 

 

 

--iptables-path iptables의 소스 디렉토리 경로를 지정한다.

 

 

 

 

이제 p-o-m 패치를 실행해 보도록 하자. 제일 먼저 할 일은 아래와 같이 실행하여 모든 패치를 다운로드 받는 것이다.

 

 

 

 

 

 

 

# ./runme --download

Successfully downloaded external patch geoip

Successfully downloaded external patch condition

Successfully downloaded external patch IPMARK

Successfully downloaded external patch ROUTE

Successfully downloaded external patch connlimit

Successfully downloaded external patch ipp2p

 

 

 

이후 ./runme base./runme extra를 실행할 수 있는데, 일부 기능은 커널과 충돌이 될 수도 있으므로 패치 전 안정성이 확인된 기능만 사용하도록 한다.

 

 

 

 

일반적으로 base는 안정성이 입증된 기능이고 extra는 일부 시스템에서 불안할 수도 있는 기능이라고 생각하면 된다.

 

 

 

 

 

[root@server patch-o-matic-ng-200xxxxx]# ./runme extra

Hey! KERNEL_DIR is not set.

Where is your kernel source directory? [/usr/src/linux]

 

 

 

엔터를 치거나 다른 경로에 있으면 커널 소스의 경로를 지정한다.

 

 

 

Hey! IPTABLES_DIR is not set.

Where is your iptables source code directory? [/usr/src/iptables]

 

 

 

엔터를 치거나 다른 경로에 있으면 iptables 소스의 경로를 지정한다.

 

 

 

 

 

 

 

 

이후 각각의 항목에 대해 패치를 적용하여 선택할 것인지 여부를 묻는데, 아래의 경우

ipset 패치를 적용할 것인지를 묻는 예이다.

 

 

 

 

 

 

간단한 설명과 함께 예제가 제공되는데, 이 기능을 커널에 포함시키고자 할 경우에는 먼저 t를 입력하여 패치를 적용해도 문제가 없는지 확인한 후 y를 입력하여 선택하도록 한다.

 

 

 

 

Welcome to Patch-o-matic ($Revision: 6736 $)!

 

Kernel: 2.6.19, /usr/src/linux

Iptables: 1.4.0, /usr/src/iptables

Each patch is a new feature: many have minimal impact, some do not.

Almost every one has bugs, so don't apply what you don't need!

-------------------------------------------------------

Already applied:

Testing set... not applied

The set patch:

Author: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>

Status: Beta

 

This adds CONFIG_IP_NF_SET, which provides a match which lets you use

IP sets; the match depends on whether a checked source or destination address/network address/port has its bit set in/added to the given set.

It also provides a SET target, which can be used to add or remove the

addresses/ports of a packet to/from a set. The currently supported types

of the sets are: ipmap, macipmap, portmap, iphash, nethash, ipporthash

and iptree.

It is possible to chain sets together by binding.

The userspace program ipset(8) is required to define and setup IP sets.

-----------------------------------------------------------------

Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] t

Patch set applies cleanly

-----------------------------------------------------------------

Do you want to apply this patch [N/y/t/f/a/r/b/w/q/?] y

 

 

 

 

만약 t를 입력했을 때 cannot apply와 같은 에러가 나거나 사용하지 않으려면 n을 입력하고 끝내려면 q를 입력하면 된다.

 

 

 

 

 

 

위의 경우 applies cleanly와 같이 나왔으므로 패치를 적용해도 좋다.

 

 

 

 

실제로 커널 메뉴를 보면 제일 하단에 “[ ] IP set support ” 부분이 추가된 것을 확인할 수 있다.

 

 

 

 

여기에서 또 하나 주의할 것은 p-o-m 패치를 한 것은 커널메뉴에 추가만 되었을 뿐이므로 기능을 사용하려면 해당 메뉴를 선택한 후 커널을 재 컴파일 하여야 한다.

 

 

 

 

 

p-o-m에서 일정정도 테스트 후 안정한 기능이라고 확신이 될 때에는 공식 커널에 기능이 포함되고, p-o-m의 버전의 업그레이드 될수록 새로운 기능이 계속 추가되고 있으므로 새로운 기능에 대해서는 help를 참고하기 바란다.

 

 

 

 

p-o-m에서 사용할만한 다른 패치는 다음과 같다.

 

 

 

 

 

 

- psd patch:

 

 

이는 시스템의 tcp/udp 포트에 대한 스캔을 탐지하여 차단하게 된다.

 

 

 

 

실제로 이 옵션을 설정한 후 포트 스캔을 하면 열려있는 포트가 있어도 보이지 않거나 다른 위조된 정보로 보이게 된다.

 

 

 

 

 

psd 옵션을 사용할 경우 추가적으로 --psd-weight-threshold, --psd-delay-threshold등과 같은 옵션을 함께 사용할 수 있는데, 아무런 옵션 없이 아래와 같이 실행하기만 하여도 외부에서의 스캔 시 오픈된 포트에 대한 결과 등을 상당부분 속이거나 위조할 수 있다.

 

 

 

iptables -A INPUT -m psd -j DROP

 

 

 

그러나 ftp에 접속 시 여러 파일을 다운로드 또는 업로드 시에는 짧은 시간에 여러 개의 포트가 반응하여 마치 포트스캔인 것처럼 오판하여 차단할 수 있으므로 적용 시 주의하여야 한다.

 

 

 

 

 

 

- time patch:

 

이 옵션은 요일이나 시간을 기준으로 한 룰 매칭을 제공한다.

 

 

 

 

함께 제공되는 옵션은 다음과 같다.

 

 

 

 

 

 

--timestart HH:MM

 

24시간을 기준으로 한 룰 매칭의 시작 시각

 

 

--timestop HH:MM

 

24시간을 기준으로 한 룰 매칭의 종료 시각

 

 

--days Tue,Mon...

 

일주일을 기준으로 한 룰 매칭의 적용 요일로서 복수로 설정할 경우 콤마(,)를 기준으로 빈 칸 없이 나열하면 된다.

 

 

 

 

적용 요일은 Sun, Mon, Tue, Wed, Thu, Fri, Sat이며 아래 예를 살펴보면 월요일,화요일,수요일,목요일,금요일중 오전 8시부터 오후 6(18:00)까지 INPUT을 허용한다는 의미이다.

 

iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT

 

만약, 매일 밤 9시부터 다음날 새벽 2시까지 telnet 접속을 허용하려면 다음과 같이 설정하면 될 것이다.

 

 

 

 

 

 

iptables -A INPUT -p TCP --sport 1024:65535 --dport 23 -m time --timestart 21:00 --timestop 00:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -m state --state NEW -j ACCEPT

 

iptables -A INPUT -p TCP --sport 1024:65535 --dport 23 -m time --timestart 00:00 --timestop 02:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -m state --state NEW -j ACCEPT

 

 

iptables를 사용하다보면 table(테이블), chain(체인), rule()이라는 용어가 자주 사용되는데 각각의 용어에 대해 명확히 할 필요가 있다.

 

 

 

 

필자도 처음에는 이 부분을 이해하는데 시간이 많이 걸렸는데, 반복적으로 읽어보고 정확한 의미를 이해하기 바란다.

 

 

 

 

 

먼저 table은 어떠한 기능을 제공하는 것으로 기본적으로 filter, nat, mangle 이렇게 3개가 있는데, 특정한 table을 언급하려면 -t filter와 같이 -t [table]을 지정하면 된다.

 

 

 

 

만약 특별한 언급이 없을 경우에는 기본적으로 filter 테이블이 사용되는데, 그만큼 filter 테이블이 iptables의 핵심적이고 기본적인 기능이라는 의미로 볼 수 있다.

 

 

 

 

filter 테이블은 이름 그대로 패킷을 허용하거나 거부하는 등 필터링하며, nat는 공유기나 사설ip로 서비스를 제공하는 서버와 같이 패킷의 목적지나 소스주소, 포트 등을 변경하는 기능을 하며 mangle은 잘 사용되지는 않는데, ttl등 패킷의 특성을 변경하거나 지정하는 기능을 한다.

 

 

 

 

 

 

다음으로 chain은 패킷이 이동하는 경로를 나타내며 각각의 table은 각각의 다른 chain 을 가지고 있다.

 

 

 

 

예를 들면 filter 테이블의 경우 INPUT, FORWARD, OUTPUT chain등이 있다.

 

 

 

 

 

 

(RULE)은 앞에서 살펴본 iptables 명령어와 같이 각각의 chain에 설정하는 일련의 정책을 뜻한다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,033 명
  • 현재 강좌수 :  35,783 개
  • 현재 접속자 :  170 명