设置是: debian代理服务器 – > linsys路由器 – >内部ubuntu服务器
问题是:我可以通过在我的debian代理浏览器中input192.168.1.128访问Ubuntu Web服务器(apache2)。 但是,我的shorewall转发规则并没有通过使用以下规则之一:
#Web/DNAT net loc:192.168.1.128 #DNAT net loc:192.168.1.128:80 tcp 80 - 70.90.XXX.XX
额外信息:
我有内部ubuntu服务器接受所有连接现在进行debugging(也有安装shorewall)
从“shorewall显示日志”(在debian机器上)输出:
Feb 1 19:37:15 fw2loc:ACCEPT:IN= OUT=eth1 SRC=192.168.1.137 DST=224.0.0.251 LEN=104 TOS=0x00 PREC=0x00 TTL=255 ID=0 DF PROTO=UDP SPT=5353 DPT=5353 LEN=84 Feb 1 19:40:31 fw2loc:ACCEPT:IN= OUT=eth1 SRC=192.168.1.137 DST=224.0.0.251 LEN=104 TOS=0x00 PREC=0x00 TTL=255 ID=0 DF PROTO=UDP SPT=5353 DPT=5353 LEN=84
输出“shorewall show nat”(在debian机器上):
Chain PREROUTING (policy ACCEPT 235 packets, 74689 bytes) pkts bytes target prot opt in out source destination 12 724 net_dnat all -- eth0 * 0.0.0.0/0 0.0.0.0/0 Chain POSTROUTING (policy ACCEPT 8 packets, 670 bytes) pkts bytes target prot opt in out source destination 3 242 eth0_masq all -- * eth0 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 7 packets, 611 bytes) pkts bytes target prot opt in out source destination Chain eth0_masq (1 references) pkts bytes target prot opt in out source destination 1 69 MASQUERADE all -- * * 192.168.1.0/24 0.0.0.0/0 Chain net_dnat (1 references) pkts bytes target prot opt in out source destination 2 128 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.1.128 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:192.168.1.128
编辑:
我也应该提到,在Ubuntu机器上检查Apache日志后,似乎没有任何请求。 当我从局域网发出请求时,我在访问日志中得到一个条目,但是当通过代理从局域网外部发出请求时,我什么也没有得到。
在代理上输出'iptables -vnL':
22 1280 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 22 1280 eth0_fwd all -- eth0 * 0.0.0.0/0 0.0.0.0/0 22 1280 dynamic all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID,NEW 22 1280 smurfs all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID,NEW 22 1280 tcpflags tcp -- * * 0.0.0.0/0 0.0.0.0/0 22 1280 net2loc all -- * eth1 0.0.0.0/0 0.0.0.0/0 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443 22 1280 ACCEPT tcp -- * * 0.0.0.0/0 192.168.1.128 tcp dpt:80
不知道该怎么做…
我开始怀疑是否有一个基本的问题,试图通过linksys路由器,如果我只是去debian – >交叉与Ubuntu的…
编辑2
看起来数据包正在被正确转发(我认为这是'shorewall show nat'的输出为我们所做的)
从'tcpdump -n -i port 80'输出
公共界面:
20:15:40.458118 IP 71.182.212.251.57261 > 70.90.XXX.XXX.80: S 2834662754:2834662754(0) win 65535 <mss 1452,nop,wscale 3,nop,nop,timestamp 25163236 0,sackOK,eol>
私人界面:
20:15:45.405347 IP 71.182.212.251.57261> 192.168.1.128.80:S 2834662754:2834662754(0)win 65535
上述几个数据包后,它变成:
20:16:17.623882 IP 71.182.212.251.57254 > 70.90.XXX.XXX.80: S 1673429824:1673429824(0) win 65535 <mss 1452,sackOK,eol>
和
20:16:17.623917 IP 71.182.212.251.57254 > 192.168.1.128.80: S 1673429824:1673429824(0) win 65535 <mss 1452,sackOK,eol>
什么主机设置为Ubuntu服务器上的默认网关? 如果不是您的代理Debian服务器,您应该添加另一个规则到/ etc / shorewal / masq:
eth1:192.168.1.128 0.0.0.0/0 192.168.1.137 tcp 80
我假设你的Debian代理LAN NIC是eth1,你的Debian服务器的IP地址是192.168.1.137。 基本上,这里的问题是DNAT规则不会改变转发数据包中的源IP地址,所以你的Ubuntu服务器试图直接回答局域网之外的请求发起者。 它使用默认网关来执行通信,所以答案永远不会到达Debian框。 这个额外的规则改变起始IP到代理盒本身的IP,所以它应该有所帮助。 无论如何,这可能不是你想要的,因为Ubuntu上的Apache会将Debian IPlogging为客户端IP,以便访问每个请求的日志。
首先,我假定每个规则之前的符号#没有出现在configuration文件中(它注释该行,使其无效)。
尝试在公共和私有两个接口上监视代理服务器上的networkingstream量。 在公众方面:
# tcpdump -n -i <public interface> port 80
在私人方面:
# tcpdump -n -i <private interface> port 80 and host 192.168.1.128
在向外界发出请求时,您不会看到私人方面的任何stream量,那么您应该仔细检查:
内核允许转发stream量(应该是一个):
cat /proc/sys/net/ipv4/ip_forward
如果它返回0:
echo 1 > /proc/sys/net/ipv4/ip_forward
filter表上的FORWARD链的默认策略
iptables -nL | grep 'Chain FORWARD'
(根据你提供的信息,而不是FORWARD你应该看到它在net2loc链)
如果默认策略是REJECT / DROP,请在FORWARD链上查找允许将stream量转发到HTTP Server的规则:
iptables -vnL FORWARD | grep 192.168.1.128
(再次,如果在FORWARD上没有任何意义,请检查net2loc)。
如果这不返回一条线(和策略是拒绝/丢弃),那么你错过了允许你转发交通的规则…重新检查shorewallconfiguration。 将loc设置为策略configuration文件上的info ,强制执行一条规则:
iptables -A net2loc -i <public iface> -o <private iface> \ --dst 192.168.1.128 -p tcp --dport 80 -j ACCEPT
看看会发生什么
另外一种情况是,当从外部地点发出请求时,如果你在私人地方看到它,那就意味着其他的东西是错误的(检查linksys路由器的转发策略,路由等等)。
我不会做@Alex所推荐的,因为它有风险。 你松散了谁访问你的服务的每一个痕迹,因此你松散统计。 如果您的网站有任何攻击,通过查看您的networking服务器日志以及其他原因,无法确定它来自哪里。 通常从公共networking到私人目的地的SNAT是非常不鼓励的。
好吧,事情似乎现在有一个稍微不同的设置:
现在我只是去Debian代理 – > Ubuntu服务器(没有更多的Linksys路由器)。 我决定不使用路由器,因为这是我们用于我们的办公室无线。 有一个应该是一个安全的服务器连接到办公室的路由器似乎是一个不太明智的举动反正我的一部分。
变更摘要:
两个机器的静态本地IP地址的私有接口与以下
iface eth0 inet static ipaddress 192.168.1.128 #the other one got 192.168.1.137 netmask 255.255.255.255 network 192.168.1.0
重新启动networking设备
重新开始shorewall
Shorewall似乎做得很好,我的apache日志信息丰富(他们不只是说所有的请求都来自debian机器)
感谢大家的帮助,我使用了张贴在这里的一切来达成我所希望的解决scheme。