Basta alternar da correspondência nos nomes das interfaces para o uso de endereços IP de origem, usar seu bloco de conjuntos PPP como origem e pronto.
Objetivos: 1) permitir que usuários VPN acessem a Internet sem restrições 2) permitir que o próprio servidor acesse a internet, mas usando somente portas especificadas (correio, web, acesso remoto)
Configuração do servidor: 1) VPN (poptop / postgresql / faturamento VPN de bolo) 2) iptables 3) mail (dovecot / postfix / spamasassin / postgrey), apache, tomcat, vsftpd, ssh 4) Arch Linux
5) Interface de Internet - eth0 Interface local - eth1 Interface virtual VPN - ppp0
Problema: Eu stfwed, rtfmed e criei um script que realiza o encaminhamento com o IPTables. funciona mas apenas para um cliente da interface ppp0. Primeiro cliente tem conexão de internet completa. Mas qualquer outro cliente não pode se conectar a nada.
Pergunta: Como posso expandir esse script em qualquer número de clientes?
Realmente, eu não sou admin, então eu sinto muito por esta pergunta idiota (e inglês pobre, porque eu sou russo). Mas é muito importante porque agora estamos trabalhando sem VPN;)TIA
Este é o meu script em /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
Basta alternar da correspondência nos nomes das interfaces para o uso de endereços IP de origem, usar seu bloco de conjuntos PPP como origem e pronto.
use um curinga, ou seja. ppp + em vez de ppp0, que permitirá que todo o tráfego das interfaces ppp passe por
Tags vpn iptables pptpd linux forwarding