我是新来的iptables,并尝试将我的Linux服务器设置为我的其他计算机的网关。所以自然我玩iptables,需要一些帮助
我的服务器有2个NIC卡, eth0(WAN)和eth1(LAN)
我的目标是:
我到目前为止的规则是:
#To clear all IPTables Rules iptables --flush iptables --table nat --flush iptables --delete-chain iptables --table nat --delete-chain #allow me to ssh into the server + access the web server on it #ssh iptables --table FILTER -A INPUT -p tcp --dport 22 -j ACCEPT #webserver iptables --table FILTER -A INPUT -p tcp --dport 80 -j ACCEPT #drop everything else iptables --table FILTER -A INPUT -j DROP #enable IP Masquerading on eth0 iptables --table NAT -A POSTROUTING --out-interface eth0 -j MASQUERADE #accept incoming traffic from eth1 #http iptables --table FILTER -A INPUT -p tcp -dport 80 --in-interface eth1 -j ACCEPT #https iptables --table FILTER -A INPUT -p tcp -dport 443 --in-interface eth1 -j ACCEPT #drop everything else iptables --table FILTER -A INPUT --in-interface eth1 -j DROP
所以在这一点上,我有来自eth1(这是允许进来的iptables)和我的eth0行准备伪装的HTTP / HTTPSstream量。
我的问题是我如何转发这个stream量从eth1到eth0 ?
任何帮助将非常感激,
ANKIT
首先,几个更正:表名是区分大小写的,就像命令行开关一样:你需要--table filter -A INPUT
。 此外,HTTPS为443(可能是一个错字,但值得指出)
接下来你需要做的是在脚本底部放置INPUT规则。 INPUT
链只用于在服务器本身绑定本地进程的数据包。 所以这些规则将允许局域网上的客户端直接连接到监听服务器端口80 + 443上的服务。 这对于您的初始SSH和HTTP规则是正确的,但不适用于数据包转发。 改用FORWARD
链:
#http iptables --table filter -A FORWARD -p tcp -dport 80 --in-interface eth1 -j ACCEPT #https iptables --table filter -A FORWARD -p tcp -dport 443 --in-interface eth1 -j ACCEPT
除此之外,您还需要在内核中启用IP转发。 将其添加到脚本的顶部:
echo 1 > /proc/sys/net/ipv4/ip_forward
另外一个build议:不要在链的末端丢弃数据包的规则,请考虑使用策略设置:
iptables -t filter -P INPUT DROP iptables -t filter -P OUTPUT DROP iptables -t filter -P FORWARD DROP
为了进一步的参考,有一个很好的netfilter数据包stream图,在这里: http : //www.shorewall.net/NetfilterOverview.html