블로그로 돌아가기

Linux에서 Iptables를 사용한 포트 포워딩: 가이드

Linux에서 Iptables를 사용한 포트 포워딩: 가이드

포트 포워딩은 포트 매핑이라고도 하며, 원격 장치가 사설 로컬 영역 네트워크(LAN) 내의 특정 서비스에 연결할 수 있도록 하는 방법입니다. 이름에서 알 수 있듯이, 이 프로세스는 특정 포트에 대한 요청을 다른 포트나 네트워크로 전달하는 작업을 포함합니다. 이는 전송 중인 패킷의 목적지를 수정하며, 네트워크 주소 변환(NAT) 작업의 일종으로 간주됩니다.

포트 포워딩을 활성화하면 내부 네트워크에 연결되지 않은 장치나 호스트가 서로 액세스할 수 있으며, 비활성화되어 있을 때는 액세스가 제한됩니다. 포트 포워딩의 장점을 활용하여 대상 웹사이트를 차단하고, 보안을 업그레이드하며, 편의에 따라 NAT 방화벽을 우회하는 경로를 추가할 수 있습니다.

이 튜토리얼에서는 Linux에서 iptables를 사용하여 포트를 포워딩하는 단계를 안내합니다.

전제 조건

이 튜토리얼을 따라 하려면 다음이 필요합니다.

호스트 세부 정보

먼저, 작업 중인 서버의 인터페이스 및 주소 세부 정보를 알아야 합니다. 시스템의 네트워크 인터페이스를 확인해 보겠습니다.

다음과 같은 출력이 표시됩니다.

여기서 강조 표시된 출력은 두 개의 인터페이스를 보여줍니다. 첫 번째 eth0 주소에 할당된 192.51.100.45, 그리고 두 번째 eth1 주소에 할당된 192.168.1.5입니다. 이 두 인터페이스 중 하나는 공인(public)이고 다른 하나는 사설(private)입니다. 두 인터페이스를 구분하고 기본 게이트웨이에 연결된 공인 인터페이스를 파악하기 위해 명령을 실행해 보겠습니다. 구분하려면 다음을 입력하십시오.

다음과 같은 출력이 표시됩니다.

튜토리얼용 더미 데이터

이 튜토리얼에서는 더미 주소와 인터페이스 할당을 사용합니다. 편의에 따라 이 데이터를 그대로 사용하거나 다른 데이터로 대체할 수 있습니다.

웹 서버 네트워크 세부 정보:

  • 공인 IP 주소: 203.0.113.2

  • 사설 IP 주소: 192.0.2.2

  • 공인 인터페이스: eth0

  • 사설 인터페이스: eth1

방화벽 네트워크 세부 정보:

  • 공인 IP 주소: 203.0.113.15

  • 사설 IP 주소: 192.0.2.15

  • 공인 인터페이스: eth0

  • 사설 인터페이스: eth1

웹 서버 설정

웹 서버 호스트부터 시작하겠습니다. 먼저, sudo 사용자로 로그인합니다.

Nginx 설치

먼저, 웹 서버 호스트에 Nginx를 설치하고 사설 인터페이스만 수신하도록 제한합니다. 이렇게 하면 포트 포워딩을 올바르게 설정한 경우에만 웹 서버를 사용할 수 있게 됩니다.

다음으로, 로컬 패키지 캐시를 업데이트하고 apt를 사용하여 Nginx를 다운로드 및 설치합니다.

제한 사항 추가

웹 서버 호스트에 Nginx를 설치한 후에는 사설 인터페이스에서만 입력을 허용하고 다른 곳에서는 허용하지 않도록 잠급니다. 또한, 포트 포워딩 설정이 올바른 경우에만 웹 서버가 활성화되도록 보장합니다.

제한 사항을 추가하려면 기본 서버 블록 구성 파일인 /etc/nginx/sites-enabled/default 원하는 텍스트 편집기(여기서는 nano 텍스트 편집기를 사용합니다)에서 다음을 입력합니다:

출력 결과에서 listen 지시어가 두 번 나타나는 것을 볼 수 있습니다:

Port Forwarding Nginx Default File

이 튜토리얼에서는 IPv4 포워딩을 보여주기 위해 첫 번째 지시어를 사용합니다. IPv6용으로 구성된 두 번째 지시어는 제거할 수 있습니다. Nginx가 사설 인터페이스에서만 입력을 받도록 80 바로 앞에 콜론과 함께 웹 서버의 사설 IP 주소를 추가합니다. 다음으로 지시어를 편집합니다:

Port Forwarding Nginx Edited Default File

완료되면 파일을 저장하고 닫습니다. 계속 진행하기 전에 구문 오류가 없는지 확인하십시오. 파일을 테스트해 보겠습니다:

Nginx T

오류가 표시되지 않으면 Nginx를 다시 시작하고 새 구성을 활성화할 수 있습니다:

네트워크 제한 확인

웹 서버에 대한 액세스 수준을 확인해 보겠습니다. 다음을 사용하여 사설 인터페이스를 통해 웹 서버에 액세스해 보십시오. curl 명령어:

다음과 같은 출력이 표시됩니다:

Port Forwarding Nginx Output1

공용 인터페이스를 사용하려고 하면 연결할 수 없습니다:

이것이 바로 우리가 예상했던 결과입니다.

80번 포트를 포워딩하도록 방화벽 구성

방화벽 머신에서 포트 포워딩을 구현하는 작업을 진행해 보겠습니다.

커널에서 포워딩 활성화

기본적으로 대부분의 시스템은 포트 포워딩이 꺼져(OFF) 있습니다. 몇 가지 편집을 통해 포트 포워딩을 켜도록(ON) 변경하겠습니다. 또한, 다음을 사용하여 포트 포워딩을 영구적으로 켤 수 있는 옵션도 있습니다. sudo 권한은 다음 단계에 나와 있습니다.

커널 수준에서 트래픽 포워딩을 켜려면 다음과 같이 입력합니다:

포트 포워딩을 영구적으로 켜려면 다음 파일을 편집하십시오. /etc/sysctl.conf 파일. 다음 권한으로 파일을 엽니다. sudo 권한으로 열고 다음과 같이 입력합니다:

내부에서 다음과 같은 줄을 찾아 주석을 해제합니다:

완료되면 파일을 저장하고 닫습니다. 그런 다음, 설정을 적용하여 더 효과적으로 만들기 위해 다음 명령어를 사용하십시오. sysctl 명령어를 사용하여 변경 사항을 적용합니다:

기본 방화벽 설정

먼저 다음 가이드를 살펴보십시오. 기본 방화벽 설정 방법 (사용 중인 머신 기준). 완료되면 다음을 갖추게 됩니다:

  • 설치됨: iptables-persistent
  • 기본 규칙 세트가 다음에 저장됨: /etc/iptables/rules.v4
  • 다음을 사용하여 규칙을 추가하고 수정하는 방법에 대한 포괄적인 지식: iptables 명령어

또한, 다음을 확인할 수 있습니다. iptables 방화벽 규칙을 나열하고 삭제하는 방법.

포워딩 규칙 추가

공용 인터페이스( eth0 )의 특정 포트로 들어오는 트래픽이 사설 인터페이스( 80 )로 포워딩되도록 방화벽을 구성합니다. 기본적으로 기본 방화벽에는 eth1)이 있습니다. 기본적으로 기본 방화벽에는 트래픽을 FORWARD 체인이 DROP 하도록 설정되어 있습니다. 방화벽 규칙을 추가하면 웹 서버로의 포워딩 연결이 허용됩니다. 보안을 강화하기 위해 포워딩 요청만 허용하도록 방화벽 규칙을 잠글 것입니다.

다음 체인에서, FORWARD 체인에서 다음 포트로 향하는 새 연결을 수락합니다: 80 (공용 인터페이스에서 들어와 사설 인터페이스로 향함). 다음의 도움을 받아 새 연결을 식별할 것입니다: conntrack 확장 기능을 사용하고, 이를 다음 패킷으로 나타냅니다: TCP SYN 패킷:

들어오는 연결로 인해 발생하는 양방향의 모든 후속 트래픽을 허용해야 합니다. 다음을 허용하려면 아래 명령어를 입력하십시오: ESTABLISHEDRELATED 트래픽(공용 및 사설 인터페이스 간):

체인의 정책이 FORWARD (으)로 설정되어 있는지 확인해 봅시다. DROP:

지금까지 공인 인터페이스와 사설 인터페이스 간의 트래픽이 방화벽을 통과할 수 있도록 허용하는 몇 가지 규칙을 추가했습니다. 하지만 iptables 은 방화벽 규칙 구성이 아직 완료되지 않았기 때문에 트래픽을 전달하도록 아직 안내받지 못했습니다. 다음 단계에서는 NAT 규칙을 추가하고 영구 규칙 세트를 조정하여 트래픽을 전달하겠습니다.

패킷을 전달하기 위한 NAT 규칙 추가

우리는 iptables 이(가) 패킷을 올바르게 변경하고 클라이언트 및 웹 서버와의 통신을 간소화할 수 있도록 두 가지 별도의 작업을 수행할 것입니다.

DNATPREROUTING 체인을 시작하는 첫 번째 작업입니다. nat 테이블. 이 작업은 패킷의 목적지 주소를 변경하여 네트워크 간에 전달될 때 올바르게 라우팅될 수 있도록 합니다. 그러나 공인 네트워크의 클라이언트는 방화벽 서버에 연결되며 사설 네트워크 토폴로지에 대한 정보가 없습니다. 사설 네트워크와 정보를 주고받으려면 각 패킷의 목적지 주소를 변경하여 목적지 웹 서버에 올바르게 도달할 수 있도록 하십시오.

포트 포워딩 구성에 집중하고 있다는 점에 유의하는 것이 중요합니다. 방화벽에 도달하는 모든 패킷에 대해 NAT를 수행하는 것은 이 튜토리얼의 범위가 아닙니다. 포트 80 의 패킷을 웹 서버의 사설 IP 주소와 일치시킵니다:

패킷은 클라이언트의 원래 주소를 소스 주소로 포함하여 웹 서버로 올바르게 라우팅됩니다. 서버가 해당 주소로 직접 응답을 보내려고 시도하더라도 합법적인 TCP 연결을 설정할 수 없습니다.

올바른 라우팅을 구성하기 위해 패킷의 소스 주소를 수정합니다. 소스 주소를 방화벽 서버의 사설 IP 주소로 수정해 보겠습니다. 수정 후 응답은 방화벽으로 다시 전송되고, 방화벽은 이를 클라이언트에 다시 전달합니다.

이 기능을 활성화하려면 POSTROUTING 체인에 규칙을 추가합니다. 이 체인은 nat 테이블의 규칙으로, 패킷이 네트워크로 전송되기 직전에 평가됩니다. 그런 다음 IP 주소와 포트별로 웹 서버로 향하는 패킷을 일치시킵니다:

이 규칙이 적용되면 웹 브라우저에서 방화벽 머신의 공인 주소를 가리켜 웹 서버에 액세스할 수 있어야 합니다:

다음과 같은 출력이 표시됩니다:

Nginx Output2

포트 포워딩 설정이 완료되었습니다.

영구 규칙 세트 조정

포트 포워딩 설정을 완료한 후 이를 영구 규칙 세트에 저장합니다. 현재 규칙 세트에 주석을 유지하려면 iptables-persistent 서비스를 사용하여 규칙을 저장하십시오:

파일에 주석을 유지하기 위해 수동으로 열어서 편집할 수도 있습니다:

다음으로, filter 테이블과 nat 테이블을 구성하여 각각 FORWARD 체인 규칙 및 ROUTING 규칙을 추가합니다. nat 테이블을 조정하면 아래 예와 같이 PREROUTINGPOSTROUTING 규칙을 추가할 수 있습니다:

위의 값을 추가한 후 파일을 저장하고 닫습니다. 다음으로, 아래 명령어를 입력하여 규칙의 구문을 테스트합니다:

오류가 표시되지 않으면 규칙 세트를 로드합니다:

웹 서버가 방화벽의 공인 IP 주소를 통해 여전히 액세스 가능한지 확인해 보겠습니다:

결론

이 튜토리얼을 마칠 때쯤이면 iptables를 사용하여 리눅스 서버에서 포트를 포워딩하는 데 익숙해질 것입니다. 포트 포워딩 기능을 활용하여 사설 네트워크’의 토폴로지를 숨기는 동시에 서비스 트래픽이 게이트웨이 방화벽 머신을 통해 자유롭게 흐르도록 간소화할 수 있습니다.

이 프로세스는 네트워크 보안 및 사용되는 포트에 전적으로 의존하므로 안전합니다. 네트워크에 보안 방화벽이나 VPN 보안이 없는 경우 위험이 발생할 가능성이 있습니다. 따라서 이 튜토리얼에서 설명한 대로 방화벽을 구성하는 것이 좋습니다. 이 가이드가 사설 네트워크를 사용할 때 인터넷에서 안전을 유지하는 데 도움이 되기를 바랍니다.

시스템에 구현할 수 있는 더 많은 방화벽 솔루션을 자세히 알아보려면 다음 리소스를 확인해 보세요: 우리 블로그:

즐거운 컴퓨팅 되세요!

author

Pranay Kapgate

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.