База знаний

www. IT-Mehanika .ru --  журнал доброго админа

Выпускаем клиентов в Интернет c использованием PPTP

Предположим что  WAN  интерфейс шлюза настроен на статический  IP адрес

Этап 1
Настраиваем сетевые интерфейсы

$ sudo nano /etc/network/interfaces

auto lo
iface lo inet loopback
# Wan
auto eth0
iface eth0 inet static
address 192.168.0.205
netmask 255.255.255.0
gateway 192.168.0.1

# Lan
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

$ sudo nano resolv.conf
nameserver 192.168.0.1

$ sudo /etc/init.d/networking restart

Этап 2
Установка DNS+DHCP сервера dnsmasq

$ sudo aptitude update
$ sudo aptitude install dnsmasq
$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.old
$ sudo nano /etc/dnsmasq.conf

dhcp-range=192.168.1.2,192.168.1.60,12h
interface=eth1

Этап 3
Установка pptpd

$ sudo apt-get install pptpd
$ sudo cp /etc/pptpd.conf /etc/pptpd.conf.old
$ sudo nano /etc/pptpd.conf

Указываем адрес ppp интерфейса - localip и диапазон адресов выдаваемый при подключение - remoteip

$ sudo cat /etc/pptpd.conf | sed '/ *#/d; /^ *$/d'
option /etc/ppp/pptpd-options
logwtmp
localip 192.168.2.1
remoteip 192.168.2.10-70

$ sudo cp /etc/ppp/pptpd-options /etc/ppp/pptpd-options.old
$ sudo nano /etc/ppp/pptpd-options
$ sudo cat /etc/ppp/pptpd-options | sed '/ *#/d; /^ *$/d'

name pptpd
chapms-strip-domain
refuse-pap
refuse-chap
refuse-mschap
ms-dns 192.168.2.1
proxyarp
lock
nobsdcomp

$ sudo nano /etc/ppp/chap-secrets
$ sudo cat /etc/ppp/chap-secrets | sed '/ *#/d; /^ *$/d'

vpnuser1 pptpd pass1 192.168.2.2
vpnuser2 pptpd pass2 192.168.2.3

$ sudo /etc/init.d/pptpd restart

$ sudo netstat -lpan | grep pptpd
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 11111/pptpd

Этап 4A
Настройка netfilter

sudo nano /etc/init.d/iptables

#!/bin/bash
#cat /etc/init.d/iptables
IPT="/sbin/iptables"
START="/bin/bash"
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="$0"
N="/etc/init.d/$NAME"

if [ ! -f /etc/rc.firewall ]; then
echo "/etc/rc.firewall does not exist"
exit 0
fi

case "$1" in
start|restart)
echo -n "Starting up iptables firewall..."
$START /etc/rc.firewall
echo "done."
;;
stop)
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
echo "done."
exit 0;
;;
*)
echo "Usage: $N {start|restart|stop}" >&2
exit 1
;;
esac

exit 0

Делаем исполняемым /etc/init.d/iptables

$ sudo chmod +x /etc/init.d/iptables

добавляем в автозагрузку

$ sudo update-rc.d iptables defaults

Этап 4B
$ sudo nano /etc/rc.firewall

#!/bin/bash
#cat /etc/rc.firewall
# Required to enable IPv4 forwarding.
# Redhat users can try setting FORWARD_IPV4 in /etc/sysconfig/network to true
# Alternatively, it can be set in /etc/sysctl.conf
if [ "$SYSCTL" = "" ]
then
echo "1" > /proc/sys/net/ipv4/ip_forward
else
$SYSCTL net.ipv4.ip_forward="1"
fi

# This enables SYN flood protection.
# The SYN cookies activation allows your system to accept an unlimited
# number of TCP connections while still trying to give reasonable
# service during a denial of service attack.
if [ "$SYSCTL" = "" ]
then
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
else
$SYSCTL net.ipv4.tcp_syncookies="1"
fi

iptables -F
iptables -t nat -F

#Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#Сетевые интерфейсы
export WAN=eth0
export LAN=eth1

#Теперь закроем наши сервисы так, чтобы они могли работать только для LAN
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

# Disabling SMB connections from eth0
iptables -A INPUT -i eth0 -p tcp --dport microsoft-ds -j DROP
iptables -A INPUT -i eth0 -p udp --dport microsoft-ds -j DROP

#(Необязательно) Разрешаем доступ к нашему ssh-серверу из интернета
#iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

#Отбросим все TCP/UDP-пакеты, обращающиеся к привилегированным портам
iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#В конце добавляем правила для NAT
#eth1
iptables -I FORWARD -i ${LAN} -d 192.168.1.0/24 -j DROP
iptables -A FORWARD -i ${LAN} -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.0/24 -j DROP

#eth0
iptables -I FORWARD -i ppp+ -d 192.168.2.0/24 -j DROP
iptables -A FORWARD -i ppp+ -s 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.2.0/24 -j ACCEPT

#SNAT eth0
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.1

Делаем исполняемым
$ sudo chmod +x /etc/rc.firewall

$ sudo /etc/init.d/iptables restart


DIXI

Предположим что  WAN  интерфейс шлюза настроен как DHCP клиент

Цитата
Этап 1
Настраиваем сетевые интерфейсы

$ sudo nano /etc/network/interfaces

auto lo
iface lo inet loopback
# Wan
auto eth0
iface eth0 inet dhcp
# Lan
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

повторяем шаги с 2 по 4A

Этап 4B
$ sudo nano /etc/rc.firewall
#!/bin/bash
#cat /etc/rc.firewall
# Required to enable IPv4 forwarding.
# Redhat users can try setting FORWARD_IPV4 in /etc/sysconfig/network to true
# Alternatively, it can be set in /etc/sysctl.conf
if [ "$SYSCTL" = "" ]
then
echo "1" > /proc/sys/net/ipv4/ip_forward
else
$SYSCTL net.ipv4.ip_forward="1"
fi

# This enables dynamic address hacking.
# This may help if you have a dynamic IP address \(e.g. slip, ppp, dhcp\).
if [ "$SYSCTL" = "" ]
then
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
else
$SYSCTL net.ipv4.ip_dynaddr="1"
fi

# This enables SYN flood protection.
# The SYN cookies activation allows your system to accept an unlimited
# number of TCP connections while still trying to give reasonable
# service during a denial of service attack.
if [ "$SYSCTL" = "" ]
then
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
else
$SYSCTL net.ipv4.tcp_syncookies="1"
fi

iptables -F
iptables -t nat -F

#Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#Сетевые интерфейсы
export WAN=eth0
export LAN=eth1

#Теперь закроем наши сервисы так, чтобы они могли работать только для LAN
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! ${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! ${LAN} -j REJECT

# Disabling SMB connections from eth0
iptables -A INPUT -i eth0 -p tcp --dport microsoft-ds -j DROP
iptables -A INPUT -i eth0 -p udp --dport microsoft-ds -j DROP

#(Необязательно) Разрешаем доступ к нашему ssh-серверу из интернета
#iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

#Отбросим все TCP/UDP-пакеты, обращающиеся к привилегированным портам
iptables -A INPUT -p TCP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ! ${LAN} -d 0/0 --dport 0:1023 -j DROP

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#В конце добавляем правила для NAT
#eth1
iptables -I FORWARD -i ${LAN} -d 192.168.1.0/24 -j DROP
iptables -A FORWARD -i ${LAN} -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.0/24 -j DROP

#eth0
iptables -I FORWARD -i ppp+ -d 192.168.2.0/24 -j DROP
iptables -A FORWARD -i ppp+ -s 192.168.2.0/24 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.2.0/24 -j ACCEPT

#MASQUERADE eth0
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE


Делаем исполняемым
$ sudo chmod +x /etc/rc.firewall

=======================================================

Куда интересней когда выход шлюза в интернет осужествляется с использованием VPN (pptp или pppoe)
/etc/ppp/pptpd-options для pptp и pptpd можно разделить
Но не факт что pptp будет создавать ppp0 интерфейс, а не какой нибудь шустрый клиент

Еще интересней, если придумать второй WAN на шлюзе, подключенный к второму провайдеру, для резервного канала

 

Источник forum.ubuntu.ru