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

리눅스마스터1급: IP 매스커레이딩(Masquerading))을 이용한 보안

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: IP 매스커레이딩(Masquerading))을 이용한 보안

 

 




IP Masquerading이란 NAT(Network Address Translation)의 주요기능으로서 여러대의 내부컴퓨터들이 외부망과 연결이 가능하도록 해주는 기능이다.

 

 

일반적으로 우리가 사용하는 네트워크는 대부분 단순하게 라우터를 통해 내부로 연결되는 단순한 형식을 취하고 있다.

 

 

 

 

라우터의 설정이나 망 자체의 전반적인 구성에 대해서 다루는 것이 이번 강좌의 목적은 아니므로 자세히 언급하지는 않겠다.

 

 

 

 

최근의 경향은 최소한 방화벽을 구성하여 망 자체의 안정성을 유지하는 것이 일반적인 방법이다.

 

 

 

 

망을 구성할 때 다음과 같은 간단한 원칙들에 대해 점검을 해보아야 할 것이다.

 

 

 

 

 

모든 컴퓨터가 공인된 인터넷 주소를 가질 필요가 있는가?

 

 

반드시 사용해야하는 서비스의 종류는 어떤 것이 있는가?

 

 

서비스에 사용될 패키지들은 버그나 다른 문제가 있는 버전은 아닌가?

 

 

방화벽의 기본 원칙은 어디까지 허용될 것인가.

 

 

 

 

 

 

이러한 문제점들에 대한 한 가지 해결책으로서 만약 몇몇 장비만이 공인 인터넷 주소를 필요로 하고 대부분의 사용자가 클라이언트로서 일반적인 프로그램만 사용한다면 공인 인터넷 주소를 부여하지 않고 라우팅이 불가능한 인터넷 대역의 주소(이후 사설 IP 주소라고 한다)를 사용함으로써 외부에서 접근을 할 수 없게끔 근본적으로 막아버리는 방법이 존재한다.

 

 

 

 

 

 

이러한 기법을 사용하기 위해 IP 매스커레이딩(Masquerading)이라는 기능을 사용하게 될 것이다.

 

 

 

 

 

 

 

 

이것은 단순한 클라이언트들에게 유용할 수 있으며 회사의 자원인 공인된 인터넷 주소를 절약하는 방법이 될 수 있다(대부분의 사용자들은 공인 주소를 가질 필요가 없다.

 

 

 

 

 

 

개인이 서버를 운영할 필요가 없기 때문에 외부에서 접근할 필요는 없기 때문이다.

 

 

 

 

 

 

만약 이러한 비공인 주소를 사용하면서 별도의 서버가 필요하다면 그에 대한 방법도 존재한다). 그렇다면 이러한 기능을 사용하는 방법을 생각해 보도록 하자.

 

 

 

 

실제로 이 기능이 제공하는 것은 여러분의 사설망 주소를 인터넷에서 사용할 수 있는 외부 공인 주소로 변환해 주는 것에 불과하다.

 

 

 

 

 

 

 

 

일단 이러한 구성을 사용하고자 한다면, 외부에 연결할 하나의 공인 인터넷 주소를 선택하고 그 장비를 내부망과 연동시키기 위한 다른 인터페이스를 구성해야 한다.

 

 

 

 

 

 

하나의 리눅스 박스에 두 개의 인터페이스가 존재해야 한다는 것이다.

 

 

 

 

 

 

첫 번째 네트워크 인터페이스는 외부와 직접 연결되는 공인 인터넷 주소를 가지게 되고, 두 번째 네트워크 인터페이스는 내부망과 직접 연결되는 사설 IP 주소를 가지게 된다.

 

 

 

 

 

 

이러한 하드웨어적 구성이 완료되었다면, 매스커레이딩을 구성하기 위한 방법을 살펴보도록 하자.

 

 

 

 

 

 

 

# iptables -F; iptables -t nat -F; iptables -t mangle -F

 

 

 

 

 

 

 

iptables를 초기화한다.

 

 

 

 

 

 

 

 

 

 

 

 

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43

 

 

 

 

 

 

 

 

위의 명령으로 들어오는 패킷을 eth0으로 포워딩한다.

 

 

 

 

 

 

 

 

 

 

 

 

# echo 1 > /proc/sys/net/ipv4/ip_forward

 

 

 

 

 

 

 

 

위의 명령은 패킷 포워딩을 정책적으로 허용하는 기능이다.

 

 

 

 

 

 

 

 

 

 

 

 

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# iptables -A INPUT -M state --state NEW -i ! eth0 -j ACCEPT

 

 

 

 

 

 

 

 

위의 명령을 사용하여 내부 네트워크에서 접근하는 연결을 허용하고 이미 세션을 맺어 상태추적테이블 목록에 있는 패킷을 허용한다.

 

 

 

 

 

 

 

 

 

 

 

 

# iptalbes -F INPUT DROP

 

 

 

 

 

 

 

 

위의 명령은 모든 연결을 차단하는 것이다.

 

 

 

 

 

 

 

 

이제 내부에서 외부의 네트워크로 접속이 가능해질 것이다.

 

 

 

 

 

 

다음의 몇 가지 주의 사항을 살펴보도록 하자.

 

 

 

내부 네트워크에 존재하는 모든 클라이언트의 게이트웨이 값은 내부 인터넷 주소를 설정한다.

 

 

 

 

만약 사용하고 있는 ISP에서 Proxy를 제공할 경우에는 설정하여 주거나 혹은 투명 Proxy를 구성하여 설정할 수 있다.

 

 

 

 

만약 구성되어 있지 않다면 Gatewaysquid를 설정하여 사용할 수도 있다.

 

 

 

 

 

 

보안을 위해 기본적인 포워딩을 제거한다.

 

 

 

 

 

다음과 같은 명령으로 수행할 수 있다.

 

 

 

 

 

 

 

 

 

 

# iptalbes -P FORWARD DROP

 

 

 

 

 

 

 

 

기본적으로 내부에서 외부로 접근하는 모든 포워딩을 허락하는 것은 정책적으로 문제가 발생할 소지가 있다.

 

 

 

 

 

 

최소한의 접근 권한을 부여하는 것이 원칙이다.

 

 

 

 

 

 

허용할 서비스 포트에 대해 허용을 지시한다.

 

 

 

다음과 같은 명령으로 실행한다.

 

 

 

 

 

 

 

 

 

#웹 서버의 접속 허용

iptalbes -A INPUT --protocol tcp --dport 80 -j ACCEPT

 

 

#보안 웹 서버의 접속 허용

iptalbes -A INPUT --protocol tcp --dport 443 -j ACCEPT

 

#irc 서비스에 대한 접속 허용

iptalbes -A INPUT --protocol tcp --dport 113 -j ACCEPT

 

 

 

 

 

 

 

 

 

이외에도 허용하고 싶은 개별 서비스에 대한 허용을 위해 포트 번호를 확인하고 허용해 주면 된다.

 

 

 

 

 

 

각 포트 번호와 서비스의 관계를 /etc/services 파일에서 확인할 수 있다.

 

 

 

 

 

 

정상적으로 이상 세팅이 운영되고 있는지를 확인하려면 다음과 같은 방법으로 확인할 수 있다.

 

 

 

 

 

 

웹 서비스를 사용할 수 있는 클라이언트라면 외부 웹 페이지를 IP 주소를 기반으로 접속을 시도해 본다.

 

 

 

 

예를 들어, 대상 호스트가 126.239.33.100이라면 다음과 같이 확인해 볼 수 있겠다.

 

 

 

 

 

 

 

 

 

$ ping 216.239.33.100

$ lynx 216.239.33.100

 

 

 

 

 

 

 

 

이번에는 동일한 클라이언트에서 도메인 네임으로 접속이 가능한 지 확인해 보도록 한다.

 

 

 

 

 

 

 

 

 

$ ping google.com

$ lynx google.com

 

 

 

 

 

 

 

 

이러한 방법을 통해 공격자는 외부에서 내부망으로 접근이 불가능해지게 된다.

 

 

 

내부 IP는 일반적으로 사용하는 공인된 인터넷 주소와는 달리 라우팅이 불가능한 특정한 영역의 주소이기 때문에 내부에서만 사용이 가능하다.

 

따라서 연결을 하는 데 어려움이 있게 된다.

 

 

 

 

만약 내부에서 서버를 운영하고 싶다면 위의 정책에서 마찬가지로 특정 포트로 들어오는 패킷에 대해 특정 호스트로의 전달을 허용해 두면 된다.

 

 

 

하지만 이러한 방법은 외부망에서 내부망으로 접근하게 하는 것이므로 사용에 주의하기 바란다

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,038 명
  • 현재 강좌수 :  35,813 개
  • 현재 접속자 :  123 명