Настройка PPPOE-SERVER, NAT и Firewall под Linux.

В статьерассказывается, как организовать доступ в Интерент с использованием технологии "PPP over Ethernet" (PPPoE)

[Забудкин Лев Мирославович (zabudkin@yandex.ru)]

Настройка PPPOE-SERVER, NAT и Firewall под Linux

Редакция 1.0.
19.12.2003
Забудкин Лев Мирославович,
г. Нижневартовск

Примечание: Если у Вас еще не установлен pppoe-server, то взять его можно здесь: http://www.roaringpenguin.com/products/rp-pppoe/index.php В качестве Firewall'а будем использовать iptables.

1. Создаем главный скрипт ( Firewall и запуск pppoe сервера)

Создайте на Вашей Linux машине файл с именем myinet и дайте право ему запускаться. Поместите в него следующие строчки и измените те, где об этом явно указано:

#!/bin/sh 
function get_addr() 
{ 
   IFCONFIG='/sbin/ifconfig'; 
   HEAD='head -2'; 
   TAIL='tail -1'; 
   CUT='cut -d: -f2'; 
   IP=`$IFCONFIG $1 | $HEAD | $TAIL | awk '{print $2}' | $CUT`; 
   echo $IP;
} 
### Укажите ниже интерфейс, через который Вы связываетесь с провайдером
EXTDEV="ppp0" 
### Укажите ниже интерфейс, через который Linux-машина подключена к локальной сети. 
PPPOEDEV="eth0" 
### Укажите ниже сеть для PPPOE клиентов. 
INETWORKIP="192.168.100.0/255.255.255.0" 
### Если Вы не желаете использовать PPPOE сервер, то укажите выше Вашу сеть, 
### вместо 192.168.100.0/255.255.255.0 и перейдите к пункту N 4, а также укажите 
### ниже интерфейс, через который Linux-машина подключена к локальной сети и 
### расскоментируйте строчку.
#INTDEV="eth0"

### ДАЛЬШЕ, В ПРИНЦИПЕ, НИЧЕГО МЕНЯТЬ НЕ ТРЕБУЕТСЯ 
EXTERNALIP=`get_addr $EXTDEV`
ENETWORKIP=$EXTERNALIP+"/255.255.255.255" 
INTERNALIP=`get_addr $INTDEV` 
LOOPBACK="127.0.0.1" 
ANYWHERE="0.0.0.0/0" 
PORTS="1024:65535" 
INTDEV="ppp+"
/sbin/depmod -a
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter 
/sbin/modprobe iptable_mangle 
/sbin/modprobe iptable_nat 
/sbin/modprobe ipt_LOG 
/sbin/modprobe ipt_limit 
/sbin/modprobe ipt_MASQUERADE 
/sbin/modprobe ipt_owner 
/sbin/modprobe ipt_REJECT 
/sbin/modprobe ip_conntrack_ftp 
/sbin/modprobe ip_conntrack_irc 
/sbin/modprobe ip_nat_ftp 
/sbin/modprobe ip_nat_irc 
echo 1 > /proc/sys/net/ipv4/ip_forward 
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do 
  echo 1 > $file 
done 
     
for file in /proc/sys/net/ipv4/conf/*/accept_redirects; do 
  echo 0 > $file 
done 
   
for file in /proc/sys/net/ipv4/conf/*/accept_source_route; do 
  echo 0 > $file 
done 
                     
/sbin/iptables -F 
/sbin/iptables -F -t nat 
/sbin/iptables - N ALLOW_ICMP 
/sbin/iptables - N ALLOW_PORTS 
/sbin/iptables - N CHECK_FLAGS 
/sbin/iptables - N DENY_PORTS 
/sbin/iptables - N DST_EGRESS 
/sbin/iptables - N KEEP_STATE 
/sbin/iptables - N SRC_EGRESS 

# По умолчанию все входящие пакеты сбрасываем 
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP 
/sbin/iptables -A INPUT -j ACCEPT -s $EXTERNALIP -d $ANYWHERE 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -I $INTDEV 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i lo 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $EXTDEV -m state --state RELATED,ESTABLISHED 
/sbin/iptables -A INPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE 
/sbin/iptables -A INPUT -j ACCEPT -p udp -s $INETWORKIP --sport 53 -d $ANYWHERE 

# По умолчанию все исходящие пакеты сбрасываем 
/sbin/iptables -P OUTPUT DROP 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $INTDEV 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $EXTERNALIP 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o lo 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $EXTDEV -m state --state RELATED,ESTABLISHED 
/sbin/iptables -A OUTPUT -j ACCEPT -p udp -s $EXTERNALIP -d $ANYWHERE --dport 53 
/sbin/iptables -A OUTPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $EXTDEV -m state --state RELATED,ESTABLISHED 

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -A FORWARD -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $INTDEV 
/sbin/iptables -A FORWARD -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE -i $INTDEV 

### Здесь Вы можете в будущем разместить нужные Вам строки iptables, 
### например редирект HTTP запросов на прокси сервер Squid. 

## Маскарадинг клиентов 
/sbin/iptables -t nat -A POSTROUTING -j SNAT -s $INETWORKIP -d $ANYWHERE -o $EXTDEV --to $EXTERNALIP 
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE -s $INETWORKIP -d $ANYWHERE -o $EXTDEV 

## Запуск PPPOE-SERVER 
killall -w -9 pppoe-server 
/usr/sbin/pppoe-server -I $PPPOEDEV -L $INTERNALIP

Настраиваем pppoe-server

Откройте на редактирование файл /etc/ppp/pppoe-server, очистите его и вставьте следующие строки:

# PPP options for the PPPoE server 
# LIC: GPL 
lock 
local 
require-chap 
default-mru 
default-asyncmap 
proxyarp 
ktune 
login 
lcp-echo-interval 20 
lcp-echo-failure 2 
### НИЖЕ ВМЕСТО xxx.xxx.xxx.xxx 
### УКАЖИТЕ DNS СЕРВЕР ВАШЕГО ПРОВАЙДЕРА. 
### Если Вы хоть раз соединялись со своим провайдером, 
### то его DNS сервер можно узнать из файла /etc/resolv.conf 
ms-dns xxx.xxx.xxx.xxx
nobsdcomp 
noccp 
noendpoint 
noipdefault 
noipx 
novj 
receive-all 

Заводим пользователей, указываем их пароли и IP адреса

Все эти данные содержатся в файле /etc/ppp/chap-secrets. Формат файла такой:

lev      *        password     192.168.100.9 
Добавьте эту строку в указанный Выше файл.

Первое, это логин ( lev), далее звездочка (*), затем пароль ( password) и IP адрес, который будет выдан клиенту в случае успе шной авторизации через pppoe сервер, данный IP адрес (192.168.100.9) должен быть в сети, которая указанна в файле myinet в строчке INETWORKIP=...

4. Тестируем

Еще раз убедимся, что мы вошли в интернет на linux-машине и на ней можно свободно гулять по просторам глобальной сети.

Что ж, теперь запускаем файл myinet, идем на клиентскую машину, на ней ставим программное обеспечение pppoe клиента.

Входим под логином ( lev) и паролем ( password).

..и Бороздим просторы сети Интернет :)

19.12.2003 Забудкин Лев Мирославович, г. Нижневартовск

Статья взята с сайта OpenNet.

[ опубликовано 29/12/2003 ]

Забудкин Лев Мирославович (zabudkin@yandex.ru) - Настройка PPPOE-SERVER, NAT и Firewall под Linux.   Версия для печати