我是iptables的新手,几天前我一直在谷歌搜索,但没有找到解决这个问题的好方法。
我的计算机A的公共IP地址为5.6.7.8,可以不受限制地访问Internet。我有另一台计算机B,其私有IP地址1.2.3.4只能访问计算机A.如何使用iptables将网络流量从B转发到A?我需要使用http,ftp和https来使用apt-get和sudo。
两台计算机都运行Ubuntu linux。我曾尝试过使用Squid,但我认为这对我需要做的事情来说太复杂了。
(这些显然不是真正的IP地址,但我注意到在不了解问题设置的情况下,一般的互联网解释是不可读的。)
答案 0 :(得分:1)
我假设机器A有两个网络接口,比如eth0和eth1。接口eth1(外部)连接到调制解调器,eth0(内部)连接到交换机或直接连接到机器B.
首先,您需要在机器A中启用数据包转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
现在您可以将以下内容保存为/etc/init.d/fwscript.sh:
#!/bin/sh
ipt=/sbin/iptables
extip=5.6.7.8 # replace with your EXTERNAL IP
lan=192.168.0.0/24 # your LAN
# start firewall
start_firwall {
echo "Enabling iptables firewall."
# default policies
$ipt -P INPUT DROP
$ipt -P FORWARD DROP
# NAT
$ipt -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $extip
# INPUT chain
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A INPUT -i eth1 -s $lan -j ACCEPT
$ipt -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -p tcp --destination-port 22 -j ACCEPT
# FORWARD chain
$ipt -A FORWARD -i eth1 -s $lan -j ACCEPT
$ipt -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
}
# stop firewall
stop_firwall {
$ipt -P INPUT DROP
$ipt -P OUTPUT DROP
$ipt -P FORWARD DROP
# allow internal traffic
$ipt -A INPUT -i eth1 -j ACCEPT
$ipt -A OUTPUT -o eth1 -j ACCEPT
}
# flushing, removing and zeroing tables
reset_firewall {
chains=`cat /proc/net/ip_tables_names`
for i in $chains; do
$debug $ipt -t $i -F
$debug $ipt -t $i -X
$debug $ipt -t $i -Z
done
}
case "$1" in
start|restart|reload)
reset_firewall
start_firewall
;;
stop)
reset_firewall
stop_firewall
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
;;
esac
exit 0
脚本必须是可执行的(chmod + x fwscript.sh)。现在只需键入以下命令即可运行:./ fwscript.sh [start | stop]。 现在让你的防火墙在启动时运行:
update-rc.d fwscript.sh defaults 99
如果要监控流量或缓存,则只需要鱿鱼。但是squid配置需要在fwscript.sh中进行一些更改,您需要决定是否需要透明或不透明的代理。 我现在试试没有鱿鱼。