HTTP请求的FreeBSD端口重定向

时间:2018-06-27 17:38:01

标签: freebsd portforwarding setsockopt ipfw

我一生中从未使用过FreeBSD,但是对我来说,在FreeBSD上部署HTTP API是必要的。该API部署在端口3002上。

我需要怎么做才能将请求从端口80转发到端口3002?

我尝试将其添加到我的/etc/natd.conf文件中:

interface le0
use_sockets yes
dynamic yes

redirect_port tcp 192.168.1.8:80 192.168.1.8:3002

我的/etc/ipfw.rules文件中也有此文件:

 ipfw add 1000 fwd 127.0.0.1,80 tcp from any to any 3002

运行ipfw -q -f flush时得到:

 ipfw: setsockopt(IP_FW_XDEL): Protocol not available

我不知道这意味着什么,但它不起作用。

有人可以告诉我(用简单的新手来讲)如何在FreeBSD中将请求从80转发到3002吗?

(我假设端口80都是开放的,并且是全新FreeBSD安装上用于HTTTP请求的默认端口)

4 个答案:

答案 0 :(得分:1)

最简单的方法是使用NginxHAproxy来监听port 80,然后将请求转发/代理到API,这样做也可以从{{ 3}} port 443,然后将流量转发到您的API

例如安装nginx:

# pkg install nginx-lite

然后编辑/usr/local/etc/nginx/nginx.conf并在服务器部分使用它:

server {
    listen 80 default_server;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:3002;
        proxy_http_version 1.1; # for keep-alive
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这会将请求转发到端口3002上的API,而无需使用NATipfwpf之类的任何防火墙,如果您的应用程序在入狱。

答案 1 :(得分:0)

请记住,您需要放入/etc/rc.conf:gateway_enable =“ YES”。您可能还需要创建一个管道(检查ipfw man),并加载虚拟网络模块。

答案 2 :(得分:0)

我认为一个更简单的选择是使用PF。让我引用手册中的一个例子 https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html

  

...需要在过滤规则之前定义重定向和NAT规则。在nat规则之后立即插入rdr规则:

     

rdr将$ int_if proto tcp从任意位置传递到任何端口ftp-> 127.0.0.1端口8021

FWIW,我已经发布了Ansible角色来配置PF https://galaxy.ansible.com/vbotka/freebsd-pf/

答案 3 :(得分:0)

快完成了!!!!

应该是

[was] ipfw将1000 fwd 127.0.0.1,80 tcp从任意增加到任意3002

ipfw通过eth2将1000允许ipv4从any升级到127.0.0.1

ipfw通过eth2将1010 fwd 127.0.0.1,3002 ipv4从任意添加到任何80,443