我假設機器A有兩個網絡接口,說eth0和eth1。接口eth1的(外部)被conected到調制解調器,和eth0的(內部)被conected到交換機或直接到機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進行一些更改,並且您需要決定是否需要透明或不透明代理。 我現在嘗試沒有魷魚。
非常感謝!儘管如此,我確實需要澄清一些問題。腳本是放在機器B還是機器A上?如果它在機器A上,我需要怎樣做B?機器A只有1個網絡接口。這是一個問題嗎? – ProbablePattern
腳本放在機器A上,它將成爲您的網關。是的,機器A需要兩個網絡接口來完成轉發。 – wind39
我還假設您已通過靜態IP或DHCP在A和B之間進行通信。您也可以將您的機器A配置爲DHCP服務器,並且B將從A(使用dhcpclient)獲得動態IP。 – wind39