Ключевые слова:pppoe, gate, linux, radius, traffic, squid, billing, dhcp, dns, iptables, htb, (найти похожие документы)
From: Морозов Иван <mi6@bk.ru.>
Newsgroups: http://lug.kmv.ru
Date: Mon, 29 Aug 2005 18:21:07 +0000 (UTC)
Subject: Поднимаем шлюзовой сервер для локальной сети (PPPoE, HTP, Radius, биллинг)
Оригинал: http://lug.kmv.ru/content.php?article.65
Поднимаем шлюзовой сервер для локальной сети
(PPPoE - Server + Radius + Nacctd +htb+squid+billing).
Пролог.
Итак разбираемся с тем что у нас имеется:
1. Сервер с Suse 9.x только что поднятый.
2. Куча клиентских машин в рабочей группе настроенных на получение адреса по DHCP.
3. /dev/hands требуется, желательно версией попрямее.
4. Пакеты rp-pppoe, freeradius, radiusclient, pppd(с поддержкой
radius(библиотека radius.so)), nacctd, iptables, htb(со скриптом
запуска), dhcp-server, named, mysql, также потребуется биллинг,
который работает с radius.(FreeNIBS, UTM(кстати в случае с UTM лучше
использовать его radius-server(тогда freeradius не нужен)Но UTM
платный и это его главный минус )).
5. Опыт в редактировании конфигов, пользования MySQL, опыт в
первоначальной настройке сервера: сетевые интерфейсы и .т.п.
Ставим пакеты, перечисленные в пункте 4 , удовлетворяем все
зависимости которые они запросят. Надеюсь с установкой пакетов все
справятся. Тем более что почти все они есть в Suse.
Условимся, что ip интерфейса eth0 сервера, который смотрит в инет, 21x.9x.1xx.23.
Условимся, что ip интерфейса eth1 сервера, который смотрит в локалку, 192.168.1.1.
Условимся, что локальный домен: byte.local
Сеть 192.168.2.10/24 будет использоваться для pppoe.
Настройка DHCP сервера.
Если кому хочется бегать от машины к машине и прописывать на них ip
адреса, то можно пропустить данных шаг. Но я человек ленивый и считаю,
что на клиентских машинах никаких настроек не должно быть Чтобы не
бегать =)
Ставим dhcp-server. Конфиг /etc/dhcpd.conf делаем примерно таким:
authoritative;
default-lease-time 259200; # 3 days
max-lease-time 604800; # 1 week
option domain-name "byte.local"; #имя локального домена
option routers 192.168.1.1; #маршрут по умолчанию
option domain-name-servers 192.168.1.1; #DNS сервер
option broadcast-address 192.168.1.255; #Адрес широковещательных пакетов
subnet 192.168.1.0 netmask 255.255.255.0 { # Подсеть
range 192.168.1.10 192.168.1.254; #С какого по какой ip выделять адреса.
# записи ниже нужны если вдруг у кого есть жгучее желание иметь постоянный ip в
# локалке
host baltazar.byte.local { #имя хоста
hardware ethernet 00:50:BF:44:27:D5; # MAC адрес клиента
fixed-address 192.168.1.10; # ip который хотим ему давать.
}
}
Вот и все.
Запускаем демон dhcpd: /etc/init.d/dhcpd start
Если что не так - смотрим логи, ищем ошибки.
Кого мучает паранойя или есть умники в сети c DHCP-серверами =),
кое-что в конфиг придется добавить. Search Google.
Настройка DNS-сервера.
Зачем DNS? Ну во-первых кеш, во-вторых удобно, если есть биллинг юзер
заходит stat.byte.local, вводит логин\пасс, попадает на статистику.
Красиво... Можно также поставить апач и сделать небольшую
информ-страничку с новостями для юзеров, типа "с 00:00 до 02:00 в
пятницу будет проходить профилактика", ну и т.п.
Итак ставим named, идем править /etc/named.conf
options {
directory "/var/lib/named";
dump-file "/var/log/named_dump.db";
statistics-file "/var/log/named.stats";
!!!!!!!!!!!!forwarders { ЗДЕСЬ IP ВАШЕГО ПРОВА; 192.168.1.1; };
forward first;
listen-on port 53 { any; };
notify no;
};
zone "." in {
type hint;
file "root.hint";
};
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
zone "byte.local" in {
type master;
file "byte.local.zone";
};
zone "1.168.192.in-addr.arpa" in {
type master;
file "192.168.1.zone";
};
zone "2.168.192.in-addr.arpa" in {
type master;
file "192.168.2.zone";
};
Теперь идем создавать файлы в директории "/var/lib/named"
byte.local.zone
192.168.1.zone
192.168.2.zone
Короче те, что описали с named.conf.
Итак содержимое этих файлов:
byte.local.zone
$TTL 1W
@ IN SOA @ root (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS @
IN A 192.168.1.1
ice A 192.168.1.1
ns1 CNAME ice
ns2 A 192.168.2.1
stat CNAME ns2
192.168.1.zone
$TTL 1W
@ IN SOA ice. root.ice. (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS ice.
1 IN PTR ice-ns1.
2 IN PTR ap2100-1
192.168.2.zone
$TTL 1W
@ IN SOA ice. root.ice. (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS ice.
1 IN PTR stat-pppoe.
Вот и все.
Запускаем демон named: /etc/init.d/named start
Если что не так - смотрим логи, ищем ошибки.
Повторюсь, что кого мучает паранойя или есть умники в сети, кое-что
для безопасности в конфиг named придется добавить. Search Google.
Настройка PPPoE-сервера и демона pppd.
Здесь начинается самое сложное А именно найти radius.so под Вашу
версию pppd. В принципе можно пересобрать pppd из сырцов c поддержкой
mschap,mppe и библиотеку тоже. Короче эту часть я оставляю на откуп
Вам.
Вот линк: http://www.opennet.dev/base/net/pptp_mppe_mppc.txt.html.
Хоть там и про pptpd, но установка pppd таким же образом.
Если у вас лежит в /usr/lib/pppd/версия pppd/ библиотека radius.so, то
можно не беспокоиться и спокойно продолжать настройку дальше.
Ставим rp-pppoe.
Конфиг /etc/ppp/pppoe-server-options:
# PPP options for the PPPoE server
# LIC: GPL
logfile /var/log/pppoe.log
debug
mtu 1472
mru 1472
auth
require-pap
#require-chap
default-asyncmap
ktune
lcp-echo-interval 20
lcp-echo-failure 2
ms-dns 192.168.1.1
ms-dns ЗДЕСЬ IP ВАШЕГО ПРОВА
plugin radius.so
plugin radattr.so
192.168.2.1:
nobsdcomp
noccp
noendpoint
noipdefault
noipx
novj
receive-all
К конфиге /etc/ppp/options: lock
Для запуска сервера pppoe создадим скриптик pppoed запуска в
/etc/init.d
Скриптик для Suse. Для других систем подгоняйте сами
pppoed
#!/bin/bash
# init file for rp-pppoe server
#
# description: PPPOE kernel mode server
#
# processname: pppoe-server
# chkconfig: - 45 45
# source function library
. /etc/rc.status
case "$1" in
start)
echo -n "Starting PPPOE server: "
/usr/sbin/pppoe-server -I eth1 -L 192.168.2.1 -R 192.168.2.10
#Здесь eth1 - ваш pppoe server интерфейс
#192.168.2.1 - IP PPPoE сервера
#192.168.2.10 - Первый IP адрес клиента
touch /var/lock/subsys/pppoed
rc_status -v
;;
stop)
echo -n "Shutting down PPPOE server: "
killproc pppoe-server
rm -f /var/lock/subsys/pppoed
rc_status -v
;;
restart)
$0 stop
$0 start
;;
status)
status pppoe-server
;;
*)
echo "Usage: pppoed {start|stop|restart|status}"
exit 1
esac
exit 0
При желании вместо pppoe-server можно использовать pptpd. Опции
практически те же
Конфиги даны только с поддержкой PAP. При желании и возможностях можно
прикрутить и CHAP(MSCHAP).
Для проверки работает ли pppoe-сервер можно в файле
/etc/ppp/pppoe-server-options закомментировать строку "plugin
radius.so" и в файле /etc/ppp/pap-secrets написать
test * test 192.168.2.10
Запускаем pppoe-server: /etc/init.d/pppoed start
На любом клиенте создаем PPPoE соединение и используя логин\пароль
test подключаемся. Смотрим дал ли нам сервер ip 192.168.2.10, и есть
ли DNS-сервера и есть ли default route на 192.168.2.1
Если что не так копаем логи. После экспиримента строчку из pap-secrets
удалить, в файле /etc/ppp/pppoe-server-options строку "plugin
radius.so" разкомментировать и перезапустить pppoed.
Настройка HTB.
Подробнее о htb можно узнать здесь:
http://www.opennet.dev/base/net/htb_saga.txt.html
Скрипт запуска htb можно скачать здесь:
http://freshmeat.net/projects/htb.init
Копируем этот скрипт в /etc/init.d
Создаем директорию /etc/sysconfig/htb
Создаем там файлы:
ppp0
ppp0-2.root
ppp0-2:10.ppp
тут и прописывается ограничение пропускной способности для клиентов.
ppp0
DEFAULT=30
R2Q=10
ppp0-2.root
RATE=96Kbit
BURST=9k
ppp0-2:10.ppp
RATE=96Kbit
BURST=9k
LEAF=sfq
RULE=*,192.168.2.0/24
Эти файлы рассчитаны на пропуск примерно 11-12 kb\sec. Я не буду
рассказывать про то, как настраивается htb. Про это отлично написано в
статье, указанной выше.
Также я написал небольшой скриптик для того, чтобы создавать такие
файлы для всех интерфейсов ppp с 0 по 254
create.ppp.shapers
#!/bin/bash
COUNTER=1
while [ $COUNTER -lt 254 ]; do
echo Shaper for interface ppp$COUNTER created!
rm -f /etc/sysconfig/htb/ppp$COUNTER
rm -f /etc/sysconfig/htb/ppp$COUNTER-2.root
rm -f /etc/sysconfig/htb/ppp$COUNTER-2:10.ppp
cp /etc/sysconfig/htb/ppp0 /etc/sysconfig/htb/ppp$COUNTER
cp /etc/sysconfig/htb/ppp0-2.root
/etc/sysconfig/htb/ppp$COUNTER-2.root
cp /etc/sysconfig/htb/ppp0-2:10.ppp
/etc/sysconfig/htb/ppp$COUNTER-2:10.ppp
let COUNTER=COUNTER+1
done
/etc/init.d/htb.init restart
Т.е. для того чтобы изменить пропускную способность для всех, изменяем
всё что относится к ppp0, а потом запускаем скрипт.
Для того чтобы правила применялись при подключении клиента, необходимо
создать в директории /etc/ppp/ip-up.d скрипт shaper.start
#!/bin/bash
/etc/init.d/htb.init restart
а в директории /etc/ppp/ip-down.d скрипт shaper.stop
#!/bin/bash
/etc/init.d/htb.init restart
Настройка Iptables.
Вот скрипт, который я использую для настройки файрволла.
main.rules.iptables
#!/bin/sh
iptables --flush
iptables -t nat --flush
clear
######################################################################
#####
#
# 1. Configuration options.
#
#
# 1.1 Internet Configuration.
#
INET_IP="21x.9x.1xx.23"
INET_IFACE="eth0"
#
# 1.2 Local Area Network configuration.
#
#
LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_IFACE="eth1"
#
# 1.3 VPN Configuration.
#
VPN_IP="192.168.2.1"
VPN_IP_RANGE="192.168.2.0/24"
VPN_IFACE="ppp+"
#
# 1.4 Localhost Configuration.
#
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
# 1.5 IPTables Configuration.
#
IPTABLES="iptables"
######################################################################
#####
#
# 2. Module loading.
#
/sbin/depmod -a
#
# 2.1 Required modules
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# 2.2 Non-Required modules
#
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
######################################################################
#####
#
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# 3.2 Non-Required proc configuration
#
#echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr
######################################################################
#####
#
# 4. rules set up.
#
######
# 4.1 Filter table
#
#
# 4.1.1 Set policies
#
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#
# 4.1.2 Create userspecified chains
#
$IPTABLES -N bad_tcp_packets
#
# Create separate chains for ICMP, TCP and UDP to traverse
#
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
#
# 4.1.3 Create content in userspecified chains
#
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m \
state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j \
LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
#
# allowed chain
#
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#
# TCP rules
#
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
#
# UDP ports
#
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
#
# ICMP rules
#
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#
# 4.1.4 INPUT chain
#
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
#
# Rules for special networks not part of the Internet
#
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
#$IPTABLES -A INPUT -p ALL -i $VPN_IFACE -s $VPN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $VPN_IP -j ACCEPT
#
# Special rule for DHCP requests from LAN, which are not caught properly
# otherwise.
#
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
#
# Rules for incoming packets from the internet.
#
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#
#SQUID
#
$IPTABLES -A INPUT -s 192.168.1.0/24 -p tcp --dport 3128 -j DROP
#$IPTABLES -A INPUT -p tcp --dport 3128 -s 192.168.2.0/24 -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "
#
# 4.1.5 FORWARD chain
#
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#
# Accept the packets we actually want to forward
#
$IPTABLES -A FORWARD -s 192.168.1.10 -d 192.168.0.1 -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "
#
# 4.1.6 OUTPUT chain
#
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
#
# Special OUTPUT rules to decide which IP's to allow.
#
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $VPN_IP -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
######
# 4.2 nat table
#
#
# 4.2.1 POSTROUTING chain
#
#
# Enable simple IP Forwarding and Network Address Translation
#
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source
$INET_IP
$IPTABLES -t nat -A PREROUTING -i $VPN_IFACE -d ! $VPN_IP_RANGE -p tcp \
--dport 80 -j REDIRECT --to-port 3128
Кроме того, чтобы пользователя пускало в сеть надо добавлять при
каждом его входе правило в FORWARD и INPUT цепочки с его ip адресом, а
также удалять их, когда пользователь отсоеденился. Для этого делаем
скрипты:
/etc/ppp/ip-up.d/iptables
#!/bin/bash
IPT=/usr/sbin/iptables
UIP=$5
$IPT -A FORWARD -s $UIP -j ACCEPT
$IPT -A INPUT -s $UIP -j ACCEPT
/etc/ppp/ip-down.d/iptables
#!/bin/bash
IPT=/usr/sbin/iptables
UIP=$5
$IPT -D FORWARD -s $UIP -j ACCEPT
$IPT -D INPUT -s $UIP -j ACCEPT
Кстати, мысль для создания собственного биллинга: громим правило из
скрипта(который кроном проходит по базе трафика и лимитов) при
привышении лимита, пишем в базу пользователей что этот юзер залочен.
Трафик перестает бежать, пользователь пытается переподключится и
получает ошибку о неправильном логине\пароле, т.к. его аккаунт
заблокирован. Я так и сделал, возможно, даже выложу скрипты и
Web-интерфейс как только приведу в божеский вид. Проект типа сделаю.
Настройка прозрачного прокси SQUID.
В принципе эту часть можно и пропустить, если вам не интересно
кеширование и блокирование баннеров, порно, а также статистика по
посещенным адресам. Вот конфиг моего сквида, здесь все просто.
squid.conf
#Порт HTTP-PROXY
http_port 3128
#Порт ICP
icp_port 0
#Не кешировать скрипты
acl QUERY urlpath_regex cgi-bin/?
no_cache deny QUERY
#Кол-во ОЗУ для SQUID
cache_mem 128 MB
#Путь к директории кеша и его размер(1000)
cache_dir ufs /var/cache/squid 10000 16 256
#Путь к лог-файлу доступа к SQUID(Статистика работы через SQUID)
cache_access_log /var/log/squid/access.log
#Путь к лог-файлу SQUID - в нем события запуска SQUID и дочерних программ
cache_log /var/log/squid/cache.log
#Путь к лог-файлу Strore
cache_store_log /var/log/squid/store.log
#Ротация логов
logfile_rotate 10
#Таблица MIME-типов для SQUID
mime_table /etc/squid/mime.conf
#PID-файл SQUID
pid_filename /var/run/squid.pid
#Пользователь для анонимного доступа к FTP
ftp_user anonymous@
#SQUID формирует страницу с папками на FTP - этот параметр - кол-во папок
ftp_list_width 32
#Пассивный режим FTP
ftp_passive on
#Проверка подлинности FTP
ftp_sanitycheck on
#redirect_program /usr/local/rejik3/redirector /usr/local/rejik3/rejik.conf #это для режика
#Списки контроля доступа
acl server src 192.168.1.1/255.255.255.255 #Наш сервер
acl clients src 192.168.2.1-192.168.2.254/255.255.255.255
#Стандартные ACL
acl all src 0.0.0.0/0.0.0.0 #Все
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 #Адрес localhost
acl SSL_ports port 443 563 #Порты SSL
acl SMTP port 25 #Для защиты от спама Оказывается SQUID может делать relay
#Служебные ACL
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#Теперь разрешаем доступ тому, кто указан в ACL
http_access allow server
http_access allow clients
http_access deny !Safe_ports
http_access deny SMTP
http_access deny all
#Разрешаем ICP-доступ всем
icp_access deny all
error_directory /etc/squid/errors
#Акселерация(для transparent прокси)
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
На этом настройка squid завершена, его можно запустить. Если нужна
статистика по посещенным URL, советую использовать SARG (он есть в
дистрибутиве)
Настройка FreeRADIUS (NetUP Radius) + RadiusClient
Решил написать различные варианты настройки с 2-мя серверами radius.
Вы можете выбрать один из них. Хочу напомнить, что NetUP Radius входит
в состав платного биллинга UTM. Поэтому советую использовать его,
только если он куплен у производителя, а не украден в ближайшем
варезнике. Тем более самописных биллинг можно очень легко заточить под
свои задачи и сеть.
Итак, настраиваем radius client. Правим /etc/radiusclient/servers и
/etc/radiusclient/radiusclient.conf
servers
127.0.0.1 oh2iFa
Последовательность символов после ip это секрет для соединения сервера
и клиента. Т.е. на сервере и на клиенте последовательность должна быть
одинаковой.
radiusclient.conf
auth_order radius,local
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
# RADIUS settings
authserver localhost:1812
acctserver localhost:1812
servers /etc/radiusclient/servers
dictionary /etc/radiusclient/dictionary
login_radius /usr/sbin/login.radius
# RADIUS server
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
Настройка сервера NetUP Radius:
В /netup/utm/utm.cfg добавляем строки:
radius_port=1812
radius_host=127.0.0.1
radius_secret_key=oh2iFa
password_store_method=plain_text
и в автозагрузку добавляем /netup/utm/bin/netup_radius/netup_radiusd
Настройка сервера FreeRADIUS(с поддержкой MySQL).
Конфиг радиус сервера следующий(взято и опробовано из статьи Алекса Б.
Юдкина):
radiusd.conf
prefix = /usr
exec_prefix = ${prefix}
sysconfdir = /etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# Месторасположение конфигурационных и лог файлов.
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
# Каталог с подгружаемыми модулями.
libdir = ${exec_prefix}/lib
# Месторасположение pid-файла. Содержащего идентификатор процесса.
pidfile = ${run_dir}/radiusd.pid
# Имя пользователя и группа от которых запускается FreeRADIUS
user = radius
group = radius
# Максимальное время (в секундах) используемое для обработки запроса.
max_request_time = 30
# Удалить запросы которые обрабатываются более чем max_request_time
delete_blocked_requests = no
# Время ожидания (в секундах) перед очисткой reply запроса отправленного NAS.
cleanup_delay = 5
# Максимальное количество запросов хранимых сервером. Это число должно быть равно
# количеству клиентов помноженному на 256.
# К примеру для четырех клиентов оно будет 1024.
max_requests = 5120
# Закрепить за ip адресом. По умолчанию RADIUS сервер при старте принимает
# запросы со всех ip адресов.
bind_address = 127.0.0.1
# Закрепить за FreeRADIUS конкретный port. Если указан ноль,
# то значение берется из /etc/services
port = 0
# Запретить/разрешить ip адреса в dns имена.
# Включение этой опции может сильно снизить производительность.
hostname_lookups = no
# Создавать/несоздавать отладочные файлы при падении сервера.
allow_core_dumps = no
# Разрешить использование регулярных выражений.
regular_#expression#sis = yes
extended_#expression#sis = yes
# Записывать полный User-Name аттрибут если найден в запросе.
log_stripped_names = no
# Записывать в лог попытки авторизации.
log_auth = yes
# Записывать в логи пароли при авторизации.
# log_auth_badpass - не корректные пароли
# log_auth_goodpass - корректные пароли
log_auth_badpass = yes
log_auth_goodpass = no
# Включить/выключить коллизию пользователей.
usercollide = no
# конвертировать логин и/или пароль до или после авторизации.
lower_user = no
lower_pass = no
# удалить пробелы в логине и/или пароле.
nospace_user = no
nospace_pass = no
# настройки безопасности от возможных DoS аттак.
security {
# Максимальное допустимое количество аттрибутов в RADIUS пакете.
max_attributes = 200
# Задержка (в секундах) перед отправкой Access-Reject пакета.
reject_delay = 1
# Не отвечать на запросы Status-Server
status_server = no
}
# Конфигрурация клиентов RADIUS сервера.
# Описывается в отдельном файле.
$INCLUDE ${confdir}/clients.conf
# Отключить snmp поддержку.
snmp=no
# Настрока пула процессов.
thread pool {
# количество первоначально запущенных процессов.
start_servers = 5
# Максимально возможное количество процессов.
max_servers = 32
# Динамическая регулировка количества процессов.
min_spare_servers = 3
max_spare_servers = 10
# Количество принимаемых запросов процессом. МОжет помочь при утечках памяти в
# RADIUS сервере. Если выставить 300, процессы будут периодически перегружаться
# для уборки мусора.
max_requests_per_server = 0
}
# Секция конфигурации динамических модулей.
modules {
# Модуль PAP авторизации.
# Необходим для обработки запросов с PAP авторизацией.
# encryption_scheme указывает в каком виде хранятся пароли.
# clear - подразумевает в открытом виде.
pap {
encryption_scheme = clear
}
# Модуль CHAP авторизации.
# Необходим для обработки запросов с CHAP авторизацией.
# authtype подразумевает обработку запросов только с аттрибутом
Auth-Type=CHAP
chap {
authtype = CHAP
}
# Модуль преобработки запросов.
# Т.е. перед авторизацией пакета.
preprocess {
# huntgroups - хинт группы см. файл huntgoups.
# hints - хинты.
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
# Обработка Cisco VSA.
with_cisco_vsa_hack = no
}
# Модуль Microsoft CHAP авторизации.
# Поддерживает так же еще и Microsoft CHAP v2
# authtype подразумевает обработку запросов только с аттрибутом
Auth-Type=MS-CHAP
# use_mppe = no указывает на отсутствие компресии VPN туннеля.
mschap {
authtype = MS-CHAP
use_mppe = no
}
# Модуль записей Livingston RADIUS типа.
# usersfile содержит авторизационные записи пользователей.
# Рекомендуется использовать только для тестов и выставления значений по умолчанию.
# acctusersfile содержит пользователей подлежащих учету (аккаунтингу).
# compat - совместимость. При использовании файлов только FreeRADIUS можно отключить.
files {
usersfile = ${confdir}/users
compat = no
}
# Запись детального лога аккаунтинговых пакетов.
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога пакетов авторизации.
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога reply пакетов.
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
# Создать уникальный ключ для аккаунтинг сессии.
# Многие NAS повторно используют Acct-Session-ID.
# key перечисление аттрибутов для генерации Acct-Session-ID
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port-Id"
}
# Конфигурация авторизации и аккаунтинга посредством СУБД
# содержится в отдельном файле cakesql.conf
$INCLUDE ${confdir}/sql.conf
}
# Авторизация
# сначала идет пакет передается в preprocess
# где может быть модифицирован.
# Далее chap mschap обрабатывают chap и mschap авторизацию.
authorize {
preprocess
chap
mschap
# Не ведем логи пакетов авторизации.
# auth_log
files
mysql
}
# Аунтификация
# Секция содержит модули доступные, для аунтификации.
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
# Преобразование аккаунтинговых пакетов.
preacct {
preprocess
}
# Секция ведения аккаунтинга.
accounting {
# Создание Acct-Session-Id если ваш NAS генрит их вполне корректно можете убрать.
acct_unique
# Не создаем detail лог.
detail
# Помещать аккаунтинговые пакеты в СУБД
mysql
}
# Секция ведения логов reply-пакетов.
post-auth {
# Не ведем детальный лог репли пакетов.
reply_log
}
Редактируем sql.conf:
sql mysql {
# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds
driver = "rlm_sql_mysql"
# Connect info
server = "localhost"
login = "root"
password = "ВАШ ПАРОЛЬ НА MySQL"
# Database table configuration
radius_db = "radius"
}
Файл naslist:
localhost local other
Файл clients:
localhost oh2iFa
В пакете с радиусом идет дамп базы для него:
/usr/share/doc/freeradius/db_mysql.sql
Создаем базу данных radius и применяем sql-файл к ней.
Теперь в базу можно забивать пользователей. Руками или через
самописный Web-интерфейс . Описание полей БД можно найти в
документации по FreeRADIUS.
Настройка NetAcct
Скачать netacct можно здесь:
http://netacct-mysql.gabrovo.com/?section=download
Рекомендую скачать последний stable. Там же есть русская дока по нему.
Для пользователей NetUP UTM рекомендую использовать именно этот
коллектор. Подробно о его конфигурировании можно прочитать в
документации по UTM.
Net-acct необходимо сконфигурировать с опцией "--with-mysql" с
указанием пути к mysql(для UTM собираем без поддержки mysql).
После компиляции и установки программы создаем базу данных для
net-acct с помощью sql-файла netacct.sql, который присутствует в
архиве. Также можно добавить пользователя netacct в MySQL и
предоставить ему права на базу netacct.
Правим конфиг /etc/naccttab
flush 60 #Через какой интервал кидать в базу инфу(сек)
fdelay 60 #Время (cек),через которое, после завершения сетевой активности,
#данные о трафике могут быть записаны в базу.
database mysql
mysql_user netacct #пользователь в MySQL
mysql_password netacct #пароль пользователя для базы
mysql_host localhost #хост
mysql_database netacct #имя базы данных
mysql_table accounting #имя таблицы
notdev eth0 #какой интерфейс не слушать, что бы не было двойного обсчета
device eth1 #интерфейс на котором будет считаться трафик
ignoremask 255.255.255.0 # исключить из подсчета трафик идущий внутри сети
ignorenet 127.0.0.0 255.0.0.0 # игнор для loopback
debug 2 # уровень отладки
debugfile /tmp/nacctd.debug # куда класть лог отладки
headers tr 40 38
headers lo 14 12
headers isdn 4 0
headers eth 14 12
headers plip 14 12
# For dynamic slip/ppp
dynamicip /var/run # где хранятся файлы динам. ip
dynamicnet 202.36.94.0 255.255.255.0
exclude-name-lookup 202.36.94.1 255.255.255.255
exclude-name-lookup 202.36.94.253 255.255.255.255
# For disabling certain fields
# This is commented out by default
# Field 7 is disabled by default so we match the old (pre 0.5) output format
# disable 2 # disable output of protocol
# disable 3 # disable output of source address
# disable 4 # disable output of source port
# disable 5 # disable output of destination address
# disable 6 # disable output of destination port
disable 7 # disable output of packets count
# disable 8 # disable output of byte count
# disable 9 # disable output of device name
# disable 10 # disable output of user name
Запускаем nacctd. В случае проблем проверяем права на базу, и копаем
логи.
Эпилог.
Ну вот и готов наш сервер. Осталось только написать скрипты для
биллинга, и почту, jabber прикрутить.
Пожелания и предложения можете отправлять на mi6@bk.ru. Можете
дополнить мою статью, и я сделаю другую ее версию. Пиво отправляйте
бочками =)
Автор: Морозов Иван(aka Morph), 2005 год.
У меня iptables никак неxочет пускат клиентов во внутренею сетку.
Пробовал добовлят в ручную iptables -I INPUT -i ppp0 -s IP -j ACCEPT
все равно нету пинга.
to KdF:
Конфиги даны только с поддержкой PAP. При желании и возможностях можно прикрутить и CHAP(MSCHAP).
Просто нет надобности если локалка офиса из 10 компов.
А так конечно же если сеть большая и есть опасность кражи пароликов - тогда однозначно CHAP.
А если вообще паранойя мучает - VPN(сжатие+шифрование)+CHAP
Люди...помогите!Ни как не удается пройти тестовый доступ...Внешне все работает...pppoe запущен, radius закоментирован, в pap-secrets учетка создана...где затык??
чтобы юзвери ходили ТОЛЬКО через НАШ squid:
iptables -... FORWARD ... -s ${localips} -p tcp -m mport --destination-ports 80,8080,3128 -j REJECT
чтобы запретить пропущенным вирусам отсылать почту:
iptables -... FORWARD ... -s ${localips} -p tcp -dport 25 -j REJECT
соответственно, добавлять перед этим разрешающие правила для юзверей, которые все-же пользуются 25 портом на внешних серверах (mail.ru, например)
соответсвтенно, если мы хотим это роделывать не только с 192.168.1.0/24, но и с 192.168.2.0/24 - повторять цепочки, но с другими ${localips}. (таргет, который SET, пока еще недоступен на кое-каких версиях линуха)
и это еще не всё...
Шо делать с MASQUERADING'ом, если у нас два-три выхода в инет?
Шо делать со всем этим хозяйством, когда захотим получать подробнейшую статистику пользования шлюзом - трафик считать? И шо делать, если часть внешних сетей - бесплатна, остальное - платно.
А еще ведь не запутаться бы с policy routing'ом...
пипец...
&INET_IP заполняешь IP интерфейса, смотрящего в инет(например если реальный ИП на момеде и момед в режиме роутера).
2Мафусаил
Насчет правил - конечно Да! Лучше позаботиться о юзеверях и немного профильтровать трафик особенно если учесть эпидемии всяких невиданных зверей. Это правда немного выходит за рамки статьи, но не лишнее. Хотя всегда есть iptables tutorial: http://gazette.linux.ru.net/rus/articles/iptables-tutorial.html
2.
iptables и маскарад тут почти не причем:
http://www.opennet.dev/docs/RUS/LARTC/ 3.
NetAcct умеет считать трафик, различать сети...зарубежный\рунет траф. Другое дело насколько надежное это решение и сколько клиентов вытянет.
Все делал как тут! Запускаю. Иду на свой комп.
Подключаюсь в XP.
Идет подключение.
Потом зависает на проверки имени и пароля.
Потом ошибка 609! (порт закрыт для подключения!)
PS Cent OC 5
Как это побороть?????
Баран! Потратил свое время и мое. Не умеешь писать - не пиши! Если у тебя кучерявый моск и в нем всё теряется - раскрашивай раскрашки. Половину нужно сообразить самому, а вторая половина написана левой жопой
Доброго времени суток. Есть необходимость сделать так, чтобы после первой авторизации PPPoE юзера на внешнем радиус сервере происходила связка логин/mac-address, чтобы в дальнейшем Сессия могла регистрироваться только с него. Хотелось бы узнать, сталкивался ли кто-то из Вас с подобной задачей и, если да, то удалось ли решить и как. Заранее благодарен за ответы.