회원가입

로그인

아이디
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기

Pfsense에서 포트포워딩(NAT) 하기.

profile
title: 리버풀 아이콘달소

작성한지 좀 오래된 글이긴 하나 

설정법은 현재도 동일할것으로 보이니 참고하시면 되겠습니다.

하늘위의하늘

방화벽을 쓰던. 쓰지않던 홈 네트워크 환경에서는 공유기를 통해 포트포워딩이 기본적으로 가능하다.
물론, 공유기에서 바로 직접적으로 연결되기 때문에 보안적으로 취약하다.

그래서 보안 향상을 위해서 내 홈서버에 pfsense를 설치했고 가장 기본적인 포트포워딩을 첫번째로 가이드 해보고자 한다.

설치하고나서 시간이 꽤 지나서. .IP가 조금씩 바꼈다.

WAN : 192.168.1.x
LAN : 192.168.10.1

이렇게 설정된 상태에서 일반 WAN망
즉, 위 사진에서 봤을때 VM에서 WAN IP인 192.168.1.X로 통신을 한다면 아래와같이 실패가 될것이다.
왜냐하면, pfsense 에서 기본적으로 개인네트워크 용으로 사용된 IP주소들을 차단하기 때문..(ex. 192.168.x.x,172.16.x.x)

안되니까 WAN설정부터 가보자

모든 설정은 PfSense Lan주소(192.168.10.1)로 들어가서 진행한다.

WAN설정

맨아래 Reserved Networks 까지 내려가서
Block private networks 와 loopback addresses 옵션을 끄자.
*Block bogon networks는 bot 차단을 하는것인데 웹을 운영하기 때문에 이것도 끄겠다.

체크해제

WAN설정을 마치고 SAVE -> APPLY를 하고 다시 ping을 Pfsense IP로 때려보면 통신이 잘되는걸 확인할 수 있다.(Ping은 막혀있으니 다른거 체크.

포트포워드 설정

메뉴 탭에 NAT 진입

새로운 Rule Add

수정해야 할 부분은 Destination,Redirect target IP 쪽이다.
포트포워딩 자체가 WAN으로 들어오는걸 내부망에있는 IP와 매칭시켜주기 때문에 source부분은 놔두면 된다.

Before

After

이렇게 하면 WAN IP의 3389로 접근하게되면 내부망의 TEST_VM(192.168.10.10)의 3389 포트로 자동 연동된다.

테스트 완료.

# 연관 게시글 목록
  1. [2021/06/12] IT 뉴스 24 코어 Intel의 13 세대 코어 Raptor Lake by 달소 (3, 1)
  2. [2021/06/11] IT 뉴스 인텔, RISC-V 칩 디자이너 SiFive를 20 억 달러에 인수제안 by 달소 (4)
  3. [2021/05/25] IT 뉴스 7nm Intel Meteor Lake-S CPU; Granite Rapids, 2022 년 4 분기 출시 예정 by 달소 (3)
  4. [2021/05/20] IT 뉴스 Intel, MediaTek 및 기타 회사가 협력 : PC 컴퓨터도 5G 지원 by 달소 (2)
  5. [2021/04/05] IT 뉴스 인텔 11세대 그래픽 드라이버 다운로드 by 달소 (7)
댓글
39
  • 하늘위의하늘
    달소
    작성자
    2021.04.17
    @하늘위의하늘 님에게 보내는 답글

    Nginx의 리슨443은 정상적으로 작성되어있나요??

    열줄은 넘어야 정상인데 conf파일내용올려주시면 확인해볼게요

  • 달소
    하늘위의하늘
    2021.04.18
    @달소 님에게 보내는 답글

    이상하게 작성 된듯합니다. ㅠ

    올리겠습니다.

     

    현재 거의 모든 포트를 활짝 열어둔 상태라 443 80포트 접속은 잘됩니다. PING도 잘 들어갑니다.

    80으로 인증 없이 NGINX 세팅하면 잘됩니다. ㅠ

     

    443 conf 문제인것 같습니다.

     

  • 하늘위의하늘
    하늘위의하늘
    2021.04.18
    @하늘위의하늘 님에게 보내는 답글

    server {

    server_name suk1387.duckdns.org;

     

    #access_log /var/log/nginx/reverse-access.log;

    #error_log /var/log/nginx/reverse-error.log;

     

    location / {

    proxy_pass http://192.168.20.15:8012;

    }

     

    location /images {

    proxy_pass http://192.168.1.16:9998/images;

    }

     

    location /app2 {

    proxy_pass http://192.168.1.32:8012;

    }

    location /app3 {

    proxy_pass http://192.168.1.32:8012/image;

    }

    location /app {

    proxy_pass http://192.168.1.16:9998/images;

    }

     

    listen 443 ssl; # managed by Certbot

    ssl_certificate /etc/letsencrypt/live/suk1387.duckdns.org/fullchain.pem; # managed by Certbot

    ssl_certificate_key /etc/letsencrypt/live/suk1387.duckdns.org/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

     

    }

     

    server {

    server_name suk1387.mynetgear.com;

     

    #access_log /var/log/nginx/reverse-access.log;

    #error_log /var/log/nginx/reverse-error.log;

     

    location / {

    proxy_pass http://192.168.20.10:8012;

    }

    location /app {

    proxy_pass http://192.168.1.32:9998/images/;

    }

    location /app2 {

    proxy_pass http://192.168.1.35:8012/;

    }

    location /app3 {

    proxy_pass http://192.168.1.35:9998/images;

    }

    }

     

    server {

    if ($host = suk1387.duckdns.org) {

    return 301 https://$host$request_uri;

    } # managed by Certbot

     

    listen 80;

    listen [::]:80;

    server_name suk1387.duckdns.org;

    return 404; # managed by Certbot

    }

     

  • 하늘위의하늘
    하늘위의하늘
    2021.04.18
    @하늘위의하늘 님에게 보내는 답글

    테스트하느라 proxy_pass가 많습니다.

    테스트하느라 2개 서버 세팅 같이해서 하나는 인증서 넣고 하나는 인증서 없이 진행했는데요.

    현상태로는 인증서 없는 것만 나옵니다.

    포트 오픈은 공인 IP 80/443 NGINX 포트도 80/443 열어습니다. (내부 포트는 활작 열어둔상태라...

    공유기통해 443/80만 NGINX로 들어 올 수 있어서요... (나중에 세팅되면 허용하는 포트만 열어둘까하구요.)

    NGINX에서 가상 스위치vSwich로 Proxy_PASS ( 192.168.20.10:8012)

    내부 WAN vmnet 인터넷 포트 (192.168.1.32:9998) 서비스 가능한 상태입니다.

    HTTPS 세팅은 자동 인증 세팅하니 자동으로 추가 되었습니다.

    먼가 해줘야 할까요? ㅠㅠ

  • 하늘위의하늘
    달소
    작성자
    2021.04.18
    @하늘위의하늘 님에게 보내는 답글

    자동인증상태라면 정상적으로 넘어갈듯 하긴하네요. 내일오전에 제 셋팅 공유해드리겠습니다

  • 달소
    하늘위의하늘
    2021.04.18
    @달소 님에게 보내는 답글

    넷기어 공유기 443 PORT 오픈이 안되네요.. 공유기 교체 해야겠습니다. ㅠ

    설마 443포트가 오픈이 안될거라고 생각도 못했는데요...

    이제 삽질 의문이 풀렸습니다. 공유기나 LG U+ 둘중 하나 문제일꺼라 생각했는데요...

    #1. 동일 네트워크에서는 443 OPEN 되는거 확인 했습니다. - NGINX 동작 확인 (스마트폰 데터링 외부에서는 접속 x)

    #2. (공유기 사용 x ) 모뎀 직결 -> 노트북(방화벽 443 , 80) -> 외부 PING 체크 443 / 80 각각 열린거 확인했습니다.

    결론 넷기어 80은 열어주고 443은 보안 어쩌구하면서 열리지 않는 상황인것 같습니다.

     

    해결 방안.

    #1 공유기 교체 ASUS/IPTIME/기타

    #2 LG U+ 공인 IP 2개 할당(PC/IPTV) 공인 IP에 ESXI HOST PC를 물려서 (세팅 새로한다)

    포트포워딩이 없어져서 공인 아이피 호출시 HOST PC로 접속됨... ㅠㅠ

    #3 USB 랜카드 추가해서 유지 보수 USB랜카드로 한다.  ESXI7.0 으로 세팅되어 있는데  7.0 부터는 랜카드 많이 없어져서 확인이 필요하다고...

    #4 80 포트로만 서비스한다.

     

    공유기 선택이 완전 잘못되었네요... ㅠ

    무슨 방법이 있을까요? ㅠ

  • 하늘위의하늘
    달소
    작성자
    2021.04.19
    @하늘위의하늘 님에게 보내는 답글

    음,,, ISP에서 80,443을 막는건 들은기억이있는데 공유기단에서 막는건 처음보네요...

    해결방법중에는,, 1번이 가장 좋은방법같기는하네요 ㅠㅠ 하필이면 공유기라니..

  • 달소
    하늘위의하늘
    2021.04.19
    @달소 님에게 보내는 답글

    기억에 22 ssh도 막혔던것 같습니다.

    디버그 모드 페이지로 들어가면 임시적으로 ssh포트를 열수 있는데요.

    현재 펌웨어는 옵션 막었네요. ㅎㅎ

    그걸로 포트 여는건 할수 있기는 했는데요.

    펌웨어 버전 낮추고 22번 열어서 443 포트 열어 봐야 하나요? ㅎㅎ

    이것도 일인데요...

  • 하늘위의하늘
    달소
    작성자
    2021.04.19
    @하늘위의하늘 님에게 보내는 답글

    크.. 그렇죠... 공유기도 좋은 공유기를 사용하고계신다고하셔서..ㅠㅠ 바꾸는것도 쉽지않겠네요

  • 달소
    하늘위의하늘
    2021.04.19
    @달소 님에게 보내는 답글

    좋은건 아닙니다. 집에서 쓰기 충분하지요

    ㅎㅎ

    교체하라는 하늘에 뜻인가요? ㅎㅎ

  • 하늘위의하늘
    달소
    작성자
    2021.04.19
    @하늘위의하늘 님에게 보내는 답글

    하늘의 뜻이죠 ㅎ

    저는 iptime -> Asus -> Asus -> Ubiquiti(배송중 ㅠ) 로 했는데 Asus도 꽤 괜찮습니다

  • 달소
    하늘위의하늘
    2021.04.19
    @달소 님에게 보내는 답글

    엇 공유기 두개 운영 하시나요?

    혹시 하나만 운영 하시나요? +,+

  • 하늘위의하늘
    달소
    작성자
    2021.04.19
    @하늘위의하늘 님에게 보내는 답글

    하나로운영하고 기존건 예비용으로 항상 가지고있습니다!

  • 달소
    하늘위의하늘
    2021.04.19
    @달소 님에게 보내는 답글

    오! 초기화 하고 443 열었더니 오픈이 되는겁니다.

    BACKUP 받아둔 CONFIG 다시 넣었더니.... 다시 443이 사라졌습니다...

    혹시나 하고 외부에서 원격으로 공유기 관리포트 활성화 (8443포트)를 막았더니... 잘되네요 -0-;;;

    대신 외부에서 접속하는 포트를 잃었습니다. 443을 찾고요... 접속 잘되네요.

    사용하시는 nginx config 정보 부탁드려도 될까요? 다들 노하우가 있으시더라고요...

    저도 인터넷 보면서 막 좋아보이는것 이것저것 넣기는 하는데요 ㅎㅎ;; (노하우인지라 일부분 오픈하시더라구요 ㅎㅎ;;)

  • 달소
    작성자
    2021.04.20

    공유기를 외부에서 접근하는건 보안에 좋지않으니 공유기의 vpn을 사용해서 접근하시는걸 추천드립니다.

    설정파일은 제가 서버에 실사용하는 설정값 입니다.
    예전부터 사용하던걸 계속 수정하느라.. 다소 지저분한편이니 참고하시면 되겠습니다!

     

    upstream backendforumweb {
            server 192.168.10.11:80;
            keepalive 1024;
    }

    server {
            listen 80 ;
            listen [::]:80 ;


            root /var/www/svrnote;
            index index.html index.htm index.nginx-debian.html;
            server_name svrforum.com www.svrforum.com;
            location / {
            return 301 https://svrforum.com$request_uri; ###### HTTPS www로 리다이렉팅
            }
            location ^~ /.well-known/acme-challenge/ {
                    root /var/www/webroot;
            }
    }
    server {

            # 공백 UserAgent 차단
            if ($http_user_agent = "") {
              return 403;
            }

            # 기타 불필요한 스팸,악성 봇 차단
            if ($http_user_agent ~* (AhrefsBot|BLEXBot|DotBot|SemrushBot|Eyeotabot|PetalBot|MJ12bot|brands-bot|bbot|AhrefsBo|MegaIndex|UCBrowser|Mb2345Browser|MicroMessenger|LieBaoFast|Headless|netEstate|newspaper|Adsbot/3.1|WordPress/|ltx71) ) {
              return 403;
            }

     

            client_max_body_size 64M;
            listen 443 ssl http2;
            listen [::]:443 ssl http2;

            root /var/www/svrnote;

            index index.html index.htm index.nginx-debian.html;
            server_name svrforum.com;

            #ssl on;
            ssl_certificate /etc/letsencrypt/live/svrforum.com/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/svrforum.com/privkey.pem;
            ssl_trusted_certificate /etc/letsencrypt/live/svrforum.com/fullchain.pem;
            ssl_dhparam /etc/ssl/certs/dhparam.pem;
            #ssl_session_cache shared:SSL:1m;
            ssl_session_timeout 1440m;
            ssl_buffer_size 8k;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CB
    C3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
            ssl_prefer_server_ciphers on;
            #ssl_trusted_certificate /etc/letsencrypt/live/svrforum.com/chain.pem;
            ssl_stapling on;
            ssl_stapling_verify on;

            access_log  /var/log/nginx/svr.web.access.log;
            error_log /var/log/nginx/svr.web.error.log;

            location / {
                    proxy_connect_timeout 159s;
                    proxy_send_timeout   600;
                    proxy_pass http://backendforumweb/;
                    proxy_http_version 1.1;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_read_timeout 1d;
                    proxy_set_header        Host                $http_host;
                    proxy_set_header        X-Real-IP           $remote_addr;
                    proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
                    proxy_set_header        X-Forwarded-Proto   $scheme;
    }


            location ^~ /.well-known/acme-challenge/ {
                    root /var/www/webroot;
            }
    }
     

  • 달소
    하늘위의하늘
    2021.04.20
    @달소 님에게 보내는 답글

    감사합니다. 저장 완료

  • 하늘위의하늘
    달소
    작성자
    2021.04.20
    @하늘위의하늘 님에게 보내는 답글

    upstream 쪽이랑 proxy pass쪽, ssl 인증서쪽만 수정하시면 문제없을거같네요

  • 달소
    하늘위의하늘
    2021.04.20
    @달소 님에게 보내는 답글

    감사합니다. 적용 해보겠습니다.

    ssl연결 테스트까지는 했습니다.

    내부쪽 ip로도 proxy pass하보고

    Wan 연결된쪽도 연결해요 ㅎㅎ

    사실 기존에도 내부 접속에서는 되기는했지요.

    외부접속이 안되었니깐요.

  • 하늘위의하늘
    달소
    작성자
    2021.04.20
    @하늘위의하늘 님에게 보내는 답글

    오 연결이 됐으면 거의 끝났다고 보시면되겠네요!

댓글 쓰기
권한이 없습니다.