The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Поднимаем шлюзовой сервер для локальной сети (PPPoE, HTP, Radius, биллинг) (pppoe gate linux radius traffic squid billing dhcp dns iptables htb)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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.me/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.me/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 прикрутить. Пожелания и предложения можете отправлять на [email protected]. Можете дополнить мою статью, и я сделаю другую ее версию. Пиво отправляйте бочками =) Автор: Морозов Иван(aka Morph), 2005 год.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Sergej (?), 17:03, 22/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня iptables никак неxочет пускат клиентов во внутренею сетку.
    Пробовал добовлят в ручную iptables -I INPUT -i ppp0 -s IP -j ACCEPT
    все равно нету пинга.
     
  • 1.2, KdF (??), 19:28, 24/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто ж по сети пароли-то в PAP передаёт, уважаемый?
    Они ж в открытом виде по сети будут передаваться, в таком-то варианте!

    Всяко безопаснее хранить их в открытом виде на сервере, а передавать в зашифрованном виде, а для этого, естественно, нужен CHAP!

     
  • 1.3, Avrigus (?), 13:05, 10/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хм, ну а какие проблемы, заруливай pppd на chap и юзай
     
  • 1.4, Morph (?), 18:57, 15/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    to KdF:
    Конфиги даны только с поддержкой PAP. При желании и возможностях можно прикрутить и CHAP(MSCHAP).

    Просто нет надобности если локалка офиса из 10 компов.
    А так конечно же если сеть большая и есть опасность кражи пароликов - тогда однозначно CHAP.
    А если вообще паранойя мучает - VPN(сжатие+шифрование)+CHAP

     
  • 1.5, Thor (??), 12:32, 04/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Люди...помогите!Ни как не удается пройти тестовый доступ...Внешне все работает...pppoe запущен, radius закоментирован, в pap-secrets учетка создана...где затык??
     
  • 1.6, keshaLG (??), 12:43, 01/05/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    интересная фраза:
    >Кого мучает паранойя или есть умники в сети c DHCP-серверами =),
    >кое-что в конфиг придется добавить. Search Google.

    хотелось хоть одно ключевое слово узнать...., а то сплошная загадка

     
     
  • 2.9, midas (??), 21:08, 06/06/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >хотелось хоть одно ключевое слово узнать...., а то сплошная загадка

    http://www.hub.ru/forum/index.php?showtopic=13979

     

  • 1.7, Мафусаил (?), 13:08, 06/06/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чтобы юзвери ходили ТОЛЬКО через НАШ 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'ом...
    пипец...

     
     
  • 2.8, Мафусаил (?), 13:10, 06/06/2006 [^] [^^] [^^^] [ответить]  
  • +/
    там где REJECT'ы поставил - -d !${server_ip} надо добавить, конечно же
     

  • 1.10, kron (??), 18:01, 31/10/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему-то мне кажется? что сдесь не хватает строки $iptables -N bad_tcp_packets. А второй вопрос если у меня нет белого ип чем мне заминить $INET_IP
     
  • 1.11, Morph (?), 13:13, 28/02/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    # 4.1.2 Create userspecified chains
    #
    $IPTABLES -N bad_tcp_packets
    #
    все есть.

    &INET_IP заполняешь IP интерфейса, смотрящего в инет(например если реальный ИП на момеде и момед в режиме роутера).

    2Мафусаил
    Насчет правил - конечно Да! Лучше позаботиться о юзеверях и немного профильтровать трафик особенно если учесть эпидемии всяких невиданных зверей. Это правда немного выходит за рамки статьи, но не лишнее. Хотя всегда есть iptables tutorial: http://gazette.linux.ru.net/rus/articles/iptables-tutorial.html

    2.
    iptables и маскарад тут почти не причем:
    http://www.opennet.me/docs/RUS/LARTC/
    3.
    NetAcct умеет считать трафик, различать сети...зарубежный\рунет траф. Другое дело насколько надежное это решение и сколько клиентов вытянет.


     
  • 1.12, Паша (??), 22:00, 03/12/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все делал как тут! Запускаю. Иду на свой комп.
    Подключаюсь в XP.
    Идет подключение.
    Потом зависает на проверки имени и пароля.
    Потом ошибка 609! (порт закрыт для подключения!)
    PS Cent OC 5
    Как это побороть?????
     
     
  • 2.13, imam (ok), 11:46, 14/07/2009 [^] [^^] [^^^] [ответить]  
  • +/
    та же проблема :(
     

  • 1.14, kbegimov (ok), 11:52, 23/10/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    помогите! есть MPD5 на FreeBSD8.2 pppoe-server. юзеры конект конектяться все норм но нет атребута ДАТЫ при запросе
     
  • 1.15, Михей (?), 12:21, 09/02/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Баран! Потратил свое время и мое. Не умеешь писать - не пиши! Если у тебя кучерявый моск и в нем всё теряется - раскрашивай раскрашки. Половину нужно сообразить самому, а вторая половина написана левой жопой
     
  • 1.16, soulslash (ok), 09:54, 23/06/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Доброго времени суток. Есть необходимость сделать так, чтобы после первой авторизации PPPoE юзера на внешнем радиус сервере происходила связка логин/mac-address, чтобы в дальнейшем Сессия могла регистрироваться только с него. Хотелось бы узнать, сталкивался ли кто-то из Вас с подобной задачей и, если да, то удалось ли решить и как. Заранее благодарен за ответы.
     
  • 1.17, cherry (?), 01:25, 29/08/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как радиус сервер можно юзать https://splynx.com , решение на базе Freeradius, но не нужно заморачиваться с настройкой.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру