Linux restful请求实现IP:端口转发功能

1 iptables简介和使用

1.1 iptables简介

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

1.2 iptables语法

iptables(选项)(参数)


-t<表>:指定要操纵的表;

 -A:向规则链中添加条目;

-D:从规则链中删除条目;

-i:向规则链中插入条目;

-R:替换规则链中的条目;

-L:显示规则链中已有的条目;

-F:清楚规则链中已有的条目;

-Z:清空规则链中的数据包计算器和字节计数器;

-N:创建新的用户自定义规则链;

-P:定义规则链中的默认目标;

-h:显示帮助信息;

-p:指定要匹配的数据包协议类型;

-s:指定要匹配的数据包源IP地址;

-j<目标>:指定要跳转的目标;

-i<网络接口>:指定数据包进入本机的网络接口;

-o<网络接口>:指定数据包要离开本机所使用的网络接口
 

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

iptables表:

  • Filter(过滤器):主要和进入Linux的数据包有关,是默认的tables;包过滤,用于防火墙规则
  • NAT (地址转换):Network Address Translation的缩写,这个表格主要用来进行数据包的源地址以及目的地址的IP和Port的转换;地址转换,用于网关路由器
  • Mangle:数据包修改(QOS),用于实现服务质量。
  • raw:高级功能,如:网址过滤。

  每个表包含多个规则链名包括:

  • INPUT链:处理输入数据包。
  • OUTPUT链:处理输出数据包。
  • PORWARD链:处理转发数据包。
  • PREROUTING链:用于目标地址转换(DNAT)。
  • POSTOUTING链:用于源地址转换(SNAT)。
  • Filter过滤器的链
  • INPUT: 定义规则过滤想要进入Linux主机的数据包;
  • OUTPUT:处理Linux主机想要送出去的数据包;
  • FORWARD:与当前的Linux主机无关,需要转发到其他计算机的包;
  1. NAT地址转换的链
  • PREROUTING:进行路由判断前要遵循的规则;
  • POSTROUTING:进行路由判断后要遵循的规则;
  • OUTPUT:过滤发出去的数据包

动作包括:

  • ACCEPT:接收数据包。
  • DROP:丢弃数据包。
  • REDIRECT:重定向、映射、透明代理。
  • SNAT:源地址转换。 DNAT:目标地址转换。
  • MASQUERADE:IP伪装(NAT),用于ADSL。
  • LOG:日志记录。

1.3 常用命令

(1)查看已添加的iptables规则

iptables -L -n -v

或者:

iptables -t nat -L -n

 

(2)删除已经添加的iptables规则

将所有iptables以序号标记显示,执行:
 

iptables -L -n --line-numbers

 比如要删除INPUT里序号为8的规则,执行:
 

iptables -D INPUT 8

1.4 补充IP转发

IP地址分为公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)负责的,这些IP地址分配给了注册并向INIC提出申请的组织机构。Private Address属于非注册地址,专门为组织内部使用。Private Address是不可能直接用来跟WAN通信的,要么利用帧来通信(FRE帧中继,HDLC,PPP),要么需要路由的转发(nat)功能把私有地址转换为公有地址才行。

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功

 查是否启动 ip地址转发

cat /proc/sys/net/ipv4/ip_forward

为1则为开启,为0 则为关闭:

sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

这种设置只是暂时的,它的效果会随着计算机的重启而失效。

通过在/etc/sysctl.conf设置参数:

如果想使IP转发永久生效,就请修改/etc/sysctl.conf ,在这里可以增加一条net.ipv4.ip_forward = 1

2 跨IP转发restful请求

 转发服务器的功能如下:

数据包从网卡进入,首先会被PREROUTING这个内置的规则链处理。之后会进行路由判断。如果目的地址是本机,则会走INPUT规则链,然后提交给本机程序处理;如果目的地不是本机地址,且开启了转发功能,则会经过FORWARD规则链,然后准备将数据包发出。本机要发出的数据包和经过FORWARD的数据包,会经过路由判断,然后再经过POSTROUTING规则链,最后从网卡发出。这里的ethX和ethY 可以是同一个网卡。

 

假设转发服务器的地址192.168.1.20 。目的服务器的地址是 220.181.111.188 。在转发服务器上把8080端口转发到220.181.111.188的80端口。

 2.1 打开ipv4时的转发功能/etc/sysctl.conf

(1)这个里面增加以下

net.ipv4.ip_forward = 1
                   

(2)然后使用sysctl -p 的命令将参数生效

sysctl -p /etc/sysctl.conf

(3)然后重新启动网络即可

systemctl restart network

(4)如果只是当前系统生效的话 也可以使用 

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

2.2 在PREROUTING上修改目的地址

iptables -t nat -A PREROUTING -p tcp --dport 转发服务器端口 -j DNAT --to-destination 目的地址:目的端口

如:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 220.181.111.188:80

2.3 在POSTROUTING上修改源地址

iptables -t nat -A POSTROUTING -d 目的地址 -p tcp --dport 目的端口 -j SNAT --to 转发地址

如:

iptables -t nat -A POSTROUTING -d 220.181.111.188 -p tcp --dport 80 -j SNAT --to 192.168.1.20

或者将用伪装的方式

iptables -t nat -A POSTROUTING -d 220.181.111.188 -p tcp --dport 80 -j MASQUERADE

2.4 为了防止在FORWARD上面被丢弃,添加规则允许通过

iptables -I FORWARD -d 目的地址 -p tcp --dport 目的端口 -j ACCEPT

iptables -I FORWARD -s 目的地址 -p tcp --sport 目的端口 -j ACCEPT

如:

iptables -I FORWARD -d 220.181.111.188 -p tcp --dport 80 -j ACCEPT

 

iptables -I FORWARD -s 220.181.111.188 -p tcp --sport 80 -j ACCEPT

现在就可以在客户端上测试一下访问 192.168.1.20:8080 就会访问到 220.181.111.188:80

参考文献:

【1】用iptables将流量转发到另外一台机器 - 高艳兵 - 博客园

【2】[iptables实现IP地址重定向(转发)] - 简书

【3】https://www.csdn.net/tags/NtjaIgwsOTUwMzAtYmxvZwO0O0OO0O0O.html 

【4】iptables « LNMP命令(配置详解)大全 

【5】在linux下开启IP转发的方法 - quanzhan - 博客园 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值