利用iptables做网络转发

常见的网络拓扑图结构如下:

但是内网服务器偶尔有上网需求,比如yum工具,wget文件。而我们又不能让重要业务直接暴露在公网上。

 

好用的安全策略有:三层交换机、路由器做nat映射,防火墙做安全策略。

由于种种原因接触不到上层网络设备,采用临时iptables代理方案:

一、在内网服务器设置网关为web服务器ip地址

二、在web服务器设置iptables转发

iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o ens161 -j MASQUERADE

或者

iptables -t nat -A POSTROUTING -i ens192 -o ens161 -j MASQUERADE

或者修改iptables文件,加到nat表中,不要加到filter表中

*nat
-A POSTROUTING -s 172.16.1.0/24 -o ens161 -j MASQUERADE
COMMIT

精简版iptables配置文件,其他端口自行添加

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#公司,XXXXX替换成ssh端口
-A INPUT -p tcp -m multiport --dport 22,XXXXX -j ACCEPT


-A OUTPUT -p tcp -m multiport --dports 80,443,21,XXXXX,22 -j ACCEPT
-A OUTPUT -p udp -m multiport --dports 123,53,161 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
#由于部分内网服务器没有公网ip,采用nat代理
*nat
-A POSTROUTING -s 172.16.1.0/24 -o ens192 -j MASQUERADE
COMMIT

  

 题外话,内容详解

iptables -t nat -A PREROUTING -i eth1 -d 200.200.200.10 -p tcp --dport  80  -j DNAT --to-destination 192.168.66.10
解释这条规则如下:

在防火墙的nat表当中的PRETROUTING链上添加(-A)一条规则,规则是一个请求进来时(-i INPUT),请求我eth1(即目标地址是200.200.200.10)的,而且访问请求的端口是80的,那么我做的动作(-j)是将他的目标地址修改(DNAT)为192.168.66.10
iptables -t nat -A PREROUTING -i eth1 -d 200.200.200.10 -p tcp --dport  80  -j DNAT --to-destination 192.168.66.10:8000
如果客户访问的是正常的apache服务,那么到达我内网服务器时实际访问的是一个叫8000的端口的东东。
posted @ 2019-12-20 19:28  一起走过的路  阅读(1386)  评论(0)    收藏  举报