А это пример простого скрипта для организации “NAT” в локальной сети на реальном внешнем адресе, т.е. разрешаем из локалки в инет всем все, запрещаем из инета в локалку все:
------------------------- начало примера ------------------
#!/bin/sh
Start/stop/restart iptables.
IPT=/usr/sbin/iptables
INT_DEV=eth1
EXT_DEV=eth0
EXT_IP=192.168.1.1
LAN=192.168.0.0/24
Start iptables:
ipt_start() {
echo “Start Firewall…”
#clear table and add default rule
$IPT -F
$IPT -X
$IPT -Z
$IPT -F -t nat
$IPT -X -t nat
$IPT -Z -t nat
$IPT -F -t mangle
$IPT -X -t mangle
$IPT -Z -t mangle
$IPT -F -t raw
$IPT -X -t raw
$IPT -Z -t raw
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -P PREROUTING ACCEPT -t nat
$IPT -P POSTROUTING ACCEPT -t nat
$IPT -P OUTPUT ACCEPT -t nat
$IPT -P INPUT ACCEPT -t nat
$IPT -P PREROUTING ACCEPT -t mangle
$IPT -P INPUT ACCEPT -t mangle
$IPT -P FORWARD ACCEPT -t mangle
$IPT -P OUTPUT ACCEPT -t mangle
$IPT -P POSTROUTING ACCEPT -t mangle
$IPT -P PREROUTING ACCEPT -t raw
$IPT -P INPUT ACCEPT -t raw
$IPT -P FORWARD ACCEPT -t raw
$IPT -P OUTPUT ACCEPT -t raw
$IPT -P POSTROUTING ACCEPT -t raw
#######add main rule
##INPUT
$IPT -A INPUT -j ACCEPT -i lo
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT --fragment -p ICMP -j DROP
$IPT -A INPUT -j DROP -i $EXT_DEV -m addrtype --dst-type broadcast
$IPT -A INPUT -j ACCEPT -i $INT_DEV -s $LAN
$IPT -A INPUT -j ACCEPT -m state --state related,established
$IPT -t filter -j LOG --log-level DEBUG --log-prefix "filter (inp) " -A INPUT
FORWARD
$IPT -A FORWARD -j ACCEPT -i $INT_DEV
$IPT -A FORWARD -j ACCEPT -i $EXT_DEV -m state --state related,established
$IPT -t filter -j LOG --log-level DEBUG --log-prefix "filter (fwd) " -A FORWARD
PREROUTING
$IPT -t nat -A PREROUTING -j REDIRECT -p tcp -m multiport --dport 80 --to-ports 3128 ! -d 192.168.0.0/16
$IPT -t nat -j LOG --log-level DEBUG --log-prefix "nat (pre) " -A PREROUTING
POSTROUTING
$IPT -t nat -A POSTROUTING -s $EXT_IP -o $EXT_DEV -j SNAT --to-source $EXT_IP
IPT -t nat -A POSTROUTING -s $LAN -o $EXT_DEV -j SNAT --to-source $EXT_IP
$IPT -t nat -j LOG --log-level DEBUG --log-prefix "nat (post) " -A POSTROUTING
OUTPUT
$IPT -A OUTPUT -j ACCEPT -o lo
$IPT -A OUTPUT -j DROP -o $EXT_DEV -m addrtype --dst-type broadcast
$IPT -A OUTPUT --fragment -p ICMP -j DROP
$IPT -A OUTPUT -j ACCEPT -s $LAN
$IPT -A OUTPUT -j ACCEPT -o $EXT_DEV
$IPT -t filter -j LOG --log-level DEBUG --log-prefix "filter (out) " -A OUTPUT
#start forward
echo 1 > /proc/sys/net/ipv4/ip_forward
#add static route
if -f /etc/init.d/rc.route]; then /etc/init.d/rc.route; fi
ipt_stop() {
echo 0 > /proc/sys/net/ipv4/ip_forward
echo “Stopping firewall… all rule ACCEPT”
$IPT -F
$IPT -X
$IPT -Z
$IPT -F -t nat
$IPT -X -t nat
$IPT -Z -t nat
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P INPUT ACCEPT -t nat
$IPT -P OUTPUT ACCEPT -t nat
$IPT -P PREROUTING ACCEPT -t nat
$IPT -P POSTROUTING ACCEPT -t nat
$IPT -A INPUT -j ACCEPT -i lo
$IPT -A INPUT -j ACCEPT -i $INT_DEV -s $LAN
$IPT -A INPUT -j ACCEPT -i $EXT_DEV
$IPT -A OUTPUT -j ACCEPT -o lo
$IPT -A OUTPUT -j ACCEPT -o $INT_DEV -d $LAN
$IPT -A OUTPUT -j ACCEPT -o $EXT_DEV
}
Restart iptables:
ipt_restart() {
ipt_stop
sleep 1
ipt_start
}
case “$1” in
‘start’)
ipt_start
;;
‘stop’)
ipt_stop
;;
‘restart’)
ipt_restart
;;
*)
echo “usage $0 start|stop|restart”
esac
-------------------------- конец примера ------------------
PS: должно работать. если конечно чего не одзабыл сейчас) ну а далее свои привила в соответствии с конкретными запросами