IPTables / VPN转发

目标:1)允许VPN用户访问互联网没有任何限制2)允许服务器本身访问互联网,但只使用指定的端口(邮件,networking,远程访问)

服务器configuration:1)VPN(poptop / postgresql / Cake VPN计费)2)iptables 3)邮件(dovecot / postfix / spamasassin / postgrey),apache,tomcat,vsftpd,ssh 4)Arch Linux

5)Internet接口 – eth0本地接口 – eth1 VPN虚拟接口 – ppp0

问题:我制作了脚本,并创build了使用IPTables执行转发的脚本。 它只适用于ppp0接口的一个客户端。 第一个客户有完整的networking连接。 但是其他客户端不能连接任何东西。

问题:如何在任意数量的客户端上展开这个脚本?

真的,我不是pipe理员,所以我很抱歉这个蹩脚的问题(和英文不好,因为我是俄罗斯)。 但这是非常重要的,因为现在我们没有使用VPN;)

TIA

这是我在/etc/rc.d/router下的脚本:

#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions case "$1" in start) stat_busy "Starting Iptables Rules" VPN_INTERFACES=( ppp0 ) lan_interface=eth1 internet_interface=eth0 echo "1" > /proc/sys/net/ipv4/ip_forward iptables -F iptables -F -t nat iptables -F -t mangle iptables -X iptables -t nat -X iptables -X -t mangle iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables --append INPUT --protocol 47 --jump ACCEPT iptables --append INPUT --protocol tcp --match tcp --destination-port 1723 # MASKARAD ppc iptables -A POSTROUTING -t nat -o $internet_interface -j MASQUERADE # traf local lo iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # ICMP ping_lan iptables -A INPUT -i $lan_interface -p icmp -j ACCEPT iptables -A OUTPUT -o $lan_interface -p icmp -j ACCEPT ########################## SERVER --- > INTERNET # DNS iptables -A INPUT -i $internet_interface -p tcp --dport 0:65535 --sport 53 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 0:65535 --dport 53 -j ACCEPT iptables -A INPUT -i $internet_interface -p udp --dport 0:65535 --sport 53 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p udp --sport 0:65535 --dport 53 -j ACCEPT # http https iptables -A INPUT -i $internet_interface -p tcp --sport 80 --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --dport 80 --sport 0:65535 -j ACCEPT # mail pop3 iptables -A INPUT -i $internet_interface -p tcp --sport 110 --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 0:65535 --dport 110 -j ACCEPT # mail smtp iptables -A INPUT -i $internet_interface -p tcp --sport 25 --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 0:65535 --dport 25 -j ACCEPT # ftp iptables -A INPUT -i $internet_interface -p tcp --sport 21 --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o -$internet_interface -p tcp --sport 0:65535 --dport 21 -j ACCEPT ############# VPN ------> INTERNET for vpn_interface in ${VPN_INTERFACES[@]} do # ICMP ping_vpn iptables -A INPUT -i $vpn_interface -p icmp -j ACCEPT iptables -A OUTPUT -o $vpn_interface -p icmp -j ACCEPT # DNS for vpn iptables -A INPUT -i $vpn_interface -p tcp --dport 0:65535 --sport 53 -j ACCEPT iptables -A OUTPUT -o $vpn_interface -p tcp --sport 0:65535 --dport 53 -j ACCEPT iptables -A INPUT -i $vpn_interface -p udp --dport 0:65535 --sport 53 -j ACCEPT iptables -A OUTPUT -o $vpn_interface -p udp --sport 0:65535 --dport 53 -j ACCEPT # forward vpn--->internet iptables -A FORWARD -i $vpn_interface -o $internet_interface -p ALL -j ACCEPT iptables -A FORWARD -i $internet_interface -o $vpn_interface -p ALL -j ACCEPT # VPN -------- > SERVER # allow all for translocal connections iptables -A INPUT -i $vpn_interface -p tcp --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $vpn_interface -p tcp --sport 0:65535 -j ACCEPT iptables -A INPUT -i $vpn_interface -p udp --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $vpn_interface -p udp --sport 0:65535 -j ACCEPT done # LAN -------- > SERVER # allow all for local connections iptables -A INPUT -i $lan_interface -p tcp --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $lan_interface -p tcp --sport 0:65535 -j ACCEPT iptables -A INPUT -i $lan_interface -p udp --dport 0:65535 -j ACCEPT iptables -A OUTPUT -o $lan_interface -p udp --sport 0:65535 -j ACCEPT # LAN -------- > SERVER # VPN connection GRE-47 protocol accept iptables -A INPUT -i $lan_interface -p 47 -j ACCEPT iptables -A OUTPUT -o $lan_interface -p 47 -j ACCEPT # INTERNET ------------ > SERVER # incoming web iptables -A INPUT -i $internet_interface -p tcp -m multiport --destination-port 80,443 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp -m multiport --source-port 80,443 -j ACCEPT # incoming mail pop3 iptables -A INPUT -i $internet_interface -p tcp --dport 110 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 110 -j ACCEPT # incoming mail smtp iptables -A INPUT -i $internet_interface -p tcp --dport 25 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 25 -j ACCEPT # incoming imap iptables -A INPUT -i $internet_interface -p tcp --dport 143 -j ACCEPT iptables -A OUTPUT -o $internet_interface -p tcp --sport 143 -j ACCEPT stat_done ;; stop) stat_busy "Stopping Iptables Rules" iptables -F iptables -F -t nat iptables -F -t mangle iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT stat_done ;; restart) $0 stop sleep 1 $0 start ;; *) echo "usage: $0 {start|stop|restart}" esac exit 0 

只需从接口名称匹配切换到使用源IP地址,使用您的PPP池块作为来源,应该是它。

使用通配符,即。 ppp +而不是ppp0,这将允许所有ppp接口的stream量通过