我有三台电脑,如下所示:
box1 (ubuntu) box2 router & gateway (debian) box3 (opensuse) [10.0.1.1] ---- [10.0.1.18,10.0.2.18,10.0.3.18] ---- [10.0.3.15] | box4, www [10.0.2.1]
除此之外,我希望box2做NAT和端口转发,以便我可以做
ssh -p 2223 box2
到达box3。 为此我有以下iptables脚本:
#!/bin/bash # flush iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -t nat -F PREROUTING iptables -t nat -F POSTROUTING iptables -t nat -F OUTPUT # default default_action=DROP for chain in INPUT OUTPUT;do iptables -P $chain $default_action done iptables -P FORWARD DROP # allow ssh to local computer allowed_ssh_clients="10.0.1.1 10.0.3.15" for ip in $allowed_ssh_clients;do iptables -A OUTPUT -p tcp --sport 22 -d $ip -j ACCEPT iptables -A INPUT -p tcp --dport 22 -s $ip -j ACCEPT done # allow DNS iptables -A OUTPUT -p udp --dport 53 -m state \ --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p udp --sport 53 -m state \ --state ESTABLISHED,RELATED -j ACCEPT # allow HTTP & HTTPS iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT iptables -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT # # ROUTING # # allow routing echo 1 >/proc/sys/net/ipv4/ip_forward # nat iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # http iptables -A FORWARD -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -p tcp --sport 80 -j ACCEPT # ssh redirect iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 2223 -j DNAT \ --to-destination 10.0.3.15:22 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p tcp --sport 22 -j ACCEPT iptables -A FORWARD -p tcp --dport 22 -j ACCEPT iptables -A FORWARD -p tcp --sport 1024:65535 -j ACCEPT iptables -A FORWARD -p tcp --dport 1024:65535 -j ACCEPT iptables -I FORWARD -j LOG --log-prefix "iptables denied: "
虽然这个工作,它需要约10秒,从我的SSH命令获得密码promt。 之后,连接的响应可能如此。 如果我将我的FORWARD链的默认策略更改为“ACCEPT”,那么密码Promt就会立即生效。
我已经尝试过分析日志,但是我无法发现FORWARD链中的ACCEPT / DROP日志的差异。 另外我已经试过允许所有的非特权端口,因为box1使用ssh来做box2。
任何提示?
(如果整个设置看起来很奇怪 – 练习的要点是理解iptables;))
这很可能是由box3中的DNS失败造成的。 当您将FORWARD策略更改为ACCEPT您允许所有stream量(包括DNS)。 我看不到任何规则允许您的FORWARD链中的DNSstream量。
你有两个select来加速sshlogin:
UseDNS yes行来configurationSSH守护程序不执行DNS查找以读取/etc/ssh/sshd_config UseDNS no 。