Настройка 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.