Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
mgaccel-ppp [2019/12/20 13:13] |
mgaccel-ppp [2023/07/27 10:37] borisov |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ====== Встановлення та налаштування Accel-ppp на прикладі Debian 9 ====== | ||
+ | {{: | ||
+ | ===== Збірка та встановлення ===== | ||
+ | |||
+ | < | ||
+ | # apt-get update | ||
+ | # apt-get upgrade | ||
+ | # apt-get install -y build-essential git cmake gcc linux-headers-`uname -r` git libpcre3-dev libssl-dev liblua5.1-0-dev htop mc tcpdump vlan ethtool sudo | ||
+ | # git clone https:// | ||
+ | # mkdir / | ||
+ | # cd / | ||
+ | # cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DLUA=TRUE -DRADIUS=TRUE -DSHAPER=TRUE -DCMAKE_INSTALL_PREFIX=/ | ||
+ | # make | ||
+ | # cpack -G DEB | ||
+ | # dpkg -i accel-ppp.deb | ||
+ | # mv / | ||
+ | # echo " | ||
+ | # echo " | ||
+ | # chmod +x / | ||
+ | # systemctl enable accel-ppp.service | ||
+ | # echo " | ||
+ | </ | ||
+ | |||
+ | ===== Налаштування ===== | ||
+ | |||
+ | |||
+ | Lua скрипт для формування username-мів (/ | ||
+ | |||
+ | <file config / | ||
+ | #!lua | ||
+ | function macuser(pkt) | ||
+ | return pkt: | ||
+ | end | ||
+ | |||
+ | function opt82_v1(pkt) | ||
+ | v, | ||
+ | return string.format(" | ||
+ | end | ||
+ | |||
+ | function opt82_v2(pkt) | ||
+ | if pkt: | ||
+ | if string.len(pkt: | ||
+ | v, | ||
+ | return string.format(" | ||
+ | elseif (string.len(pkt: | ||
+ | m1=string.sub(pkt: | ||
+ | m2=string.sub(pkt: | ||
+ | m3=string.sub(pkt: | ||
+ | m4=string.sub(pkt: | ||
+ | m5=string.sub(pkt: | ||
+ | m6=string.sub(pkt: | ||
+ | local username=m1..':' | ||
+ | return username | ||
+ | end | ||
+ | else | ||
+ | return pkt: | ||
+ | end | ||
+ | end | ||
+ | |||
+ | function username(pkt) | ||
+ | local username = string.sub(pkt: | ||
+ | return username | ||
+ | end | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Logrotate ===== | ||
+ | |||
+ | Створимо конфігурацію для ротації логів (/ | ||
+ | |||
+ | <file config / | ||
+ | / | ||
+ | daily | ||
+ | rotate 3 | ||
+ | missingok | ||
+ | sharedscripts | ||
+ | postrotate | ||
+ | test -r / | ||
+ | endscript | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Firewall ===== | ||
+ | Перевірте, | ||
+ | Скрипт для запуску на автостарті. Наприклад у кронтаб: | ||
+ | |||
+ | <file crontab> | ||
+ | @reboot / | ||
+ | </ | ||
+ | |||
+ | <file firewall firewall_start.sh> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | # firewall | ||
+ | # | ||
+ | # chkconfig: - 97 20 | ||
+ | # | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: | ||
+ | # Required-Start: | ||
+ | # Required-Stop: | ||
+ | # Default-Start: | ||
+ | # Default-Stop: | ||
+ | # Description: | ||
+ | ### END INIT INFO | ||
+ | |||
+ | lock_path=/ | ||
+ | |||
+ | # Список IPSETів | ||
+ | ipset_list=( | ||
+ | disabled | ||
+ | ) | ||
+ | |||
+ | VC=`which vconfig` | ||
+ | IFC=`which ifconfig` | ||
+ | ETT=`which ethtool` | ||
+ | IPT=`which iptables` | ||
+ | IPS=`which ipset` | ||
+ | DIG=`which dig` | ||
+ | CTL=`which sysctl` | ||
+ | |||
+ | DNS_lookup=" | ||
+ | |||
+ | # OUT інтерфейс (інтернет) | ||
+ | out_interface1=" | ||
+ | |||
+ | # IP SRC-NAT для користувачів | ||
+ | out_ext_ip1=" | ||
+ | |||
+ | # IP для редиректу на сторінку заглушки | ||
+ | REDIRECT_IP=" | ||
+ | |||
+ | # назва IPSETа для дозволених IP | ||
+ | allowed_ipset=" | ||
+ | |||
+ | # Список дозволених сайтів та IP | ||
+ | allowed_list=( | ||
+ | ubilling.isp | ||
+ | 8.8.8.8 | ||
+ | 8.8.4.4 | ||
+ | www.liqpay.com | ||
+ | liqpay.com | ||
+ | static.liqpay.com | ||
+ | ecommerce.liqpay.com | ||
+ | api.privatbank.ua | ||
+ | login.privatbank.ua | ||
+ | privat24.privatbank.ua | ||
+ | www.privat24.ua | ||
+ | privat24.ua | ||
+ | liqpay.com | ||
+ | www.liqpay.com | ||
+ | static.liqpay.com | ||
+ | ecommerce.liqpay.com | ||
+ | fonts.googleapis.com | ||
+ | ajax.googleapis.com | ||
+ | my-payments-p24.privatbank.ua | ||
+ | themes.googleusercontent.com | ||
+ | www.google-analytics.com | ||
+ | google-analytics.com | ||
+ | ssl.google-analytics.com | ||
+ | widget.siteheart.com | ||
+ | static.siteheart.com | ||
+ | www.googleadservices.com | ||
+ | stats.g.doubleclick.net | ||
+ | googleads.g.doubleclick.net | ||
+ | qrapi.privatbank.ua | ||
+ | js.honeybadger.io | ||
+ | socauth.privatbank.ua | ||
+ | www.googletagmanager.com | ||
+ | st.privatbank.ua | ||
+ | services.privatbank.ua | ||
+ | mypayments.privatbank.ua | ||
+ | client.siteheart.com | ||
+ | fonts.gstatic.com | ||
+ | esapi.siteheart.com | ||
+ | crm.privatbank.ua | ||
+ | ) | ||
+ | |||
+ | postrouting() { | ||
+ | # Очищаем NAT | ||
+ | $IPT -t nat -F POSTROUTING | ||
+ | |||
+ | # NAT для користувачів | ||
+ | $IPT -t nat -A POSTROUTING -s 100.64.0.0/ | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | input() { | ||
+ | $IPT -F INPUT | ||
+ | | ||
+ | # Якщо використовуєте Fail2ban SSH | ||
+ | $IPT -N fail2ban-ssh | ||
+ | $IPT -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh | ||
+ | $IPT -A INPUT -i eth1 -s " | ||
+ | $IPT -A INPUT -p TCP -m state --state ESTABLISHED, | ||
+ | $IPT -A INPUT -p UDP -m state --state ESTABLISHED, | ||
+ | $IPT -A INPUT -p TCP -m multiport --dports 6881:6889 -m state --state NEW -j DROP | ||
+ | $IPT -A INPUT -p UDP -m multiport --dports 6881:6889 -j DROP | ||
+ | $IPT -A INPUT -p TCP -m multiport --dports 49001 -m state --state NEW -j DROP | ||
+ | $IPT -A INPUT -p UDP -m multiport --dports 49001 -j DROP | ||
+ | $IPT -A INPUT -p TCP -m multiport --dports 135, | ||
+ | echo "INPUT done" | ||
+ | } | ||
+ | |||
+ | raw_rules() { | ||
+ | # очищуємо RAW таблиці | ||
+ | $IPT -t raw -F PREROUTING | ||
+ | $IPT -t raw -F OUTPUT | ||
+ | |||
+ | echo "RAW rules done" | ||
+ | } | ||
+ | |||
+ | forward() { | ||
+ | # Очищаем FORWARD | ||
+ | $IPT -F FORWARD | ||
+ | |||
+ | # Пропускаємо трафік до дозволених IP | ||
+ | $IPT -A FORWARD -m set --match-set $allowed_ipset dst -j ACCEPT | ||
+ | |||
+ | # Блокуємо трафік користувачів у IPSETах | ||
+ | for ipset_name in ${ipset_list[*]} | ||
+ | do | ||
+ | $IPT -A FORWARD -m set --match-set $ipset_name src -j REJECT --reject-with icmp-proto-unreach | ||
+ | done | ||
+ | |||
+ | echo " | ||
+ | } | ||
+ | |||
+ | prerouting() { | ||
+ | # Очищаємо PREROUTING | ||
+ | $IPT -t nat -F PREROUTING | ||
+ | |||
+ | # Пропускаємо трафік до дозволених IP | ||
+ | $IPT -t nat -A PREROUTING -m set --match-set $allowed_ipset dst -j ACCEPT | ||
+ | |||
+ | # Перенаправляємо користувачів з IPSETів на сторінки заглушки | ||
+ | $IPT -t nat -A PREROUTING -m set --match-set disabled src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP: | ||
+ | |||
+ | echo " | ||
+ | } | ||
+ | |||
+ | allow() { | ||
+ | # Очищаємо IPSET дозволених IP | ||
+ | $IPS -F $allowed_ipset | ||
+ | |||
+ | for row in ${allowed_list[*]} | ||
+ | do | ||
+ | # перевіряємо запис зі списку дозволених, | ||
+ | if [[ $row =~ ^[0-9]{1, | ||
+ | then | ||
+ | # додаємо цей IP до списку дозволених | ||
+ | $IPS add $allowed_ipset $row > /dev/null 2>&1 | ||
+ | else | ||
+ | # запис виявився доменом, | ||
+ | for ip in `$DIG $row +short @$DNS_lookup` | ||
+ | do | ||
+ | # додаємо отримані через dns IP-адреси до списку дозволених | ||
+ | $IPS add $allowed_ipset $ip > /dev/null 2>&1 | ||
+ | done | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | echo " | ||
+ | } | ||
+ | |||
+ | start() { | ||
+ | if [ -f $lock_path ]; then | ||
+ | echo " | ||
+ | exit 0 | ||
+ | else | ||
+ | touch $lock_path | ||
+ | fi | ||
+ | |||
+ | echo "Start building firewall" | ||
+ | |||
+ | for ipset_name in ${ipset_list[*]} | ||
+ | do | ||
+ | $IPS -N $ipset_name iphash > /dev/null 2>&1 | ||
+ | done | ||
+ | |||
+ | $IPS -N active iphash > /dev/null 2>&1 | ||
+ | $IPS -N $allowed_ipset iphash > /dev/null 2>&1 | ||
+ | |||
+ | allow | ||
+ | input | ||
+ | forward | ||
+ | prerouting | ||
+ | postrouting | ||
+ | raw_rules | ||
+ | |||
+ | $CTL -p > /dev/null 2>&1 | ||
+ | |||
+ | echo " | ||
+ | } | ||
+ | |||
+ | stop() { | ||
+ | if [ ! -f $lock_path ]; then | ||
+ | echo " | ||
+ | exit 0 | ||
+ | else | ||
+ | rm -f $lock_path | ||
+ | fi | ||
+ | |||
+ | $IPT -F INPUT | ||
+ | $IPT -F FORWARD | ||
+ | $IPT -t nat -F | ||
+ | $IPT -t mangle -F | ||
+ | $IPT -t raw -F PREROUTING | ||
+ | $IPT -t raw -F OUTPUT | ||
+ | |||
+ | $IPT -P FORWARD ACCEPT | ||
+ | |||
+ | echo " | ||
+ | |||
+ | $CTL -p > /dev/null 2>&1 | ||
+ | } | ||
+ | |||
+ | show() { | ||
+ | $IPT -L INPUT -v -n --line-numbers | ||
+ | $IPT -L FORWARD -v -n --line-numbers | ||
+ | $IPT -t nat -L PREROUTING -v -n --line-numbers | ||
+ | $IPT -t nat -L POSTROUTING -v -n --line-numbers | ||
+ | $IPT -t raw -L -v -n --line-numbers | ||
+ | $IPS list $allowed_ipset | ||
+ | } | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | restart) | ||
+ | stop | ||
+ | start | ||
+ | ;; | ||
+ | allow) | ||
+ | allow | ||
+ | ;; | ||
+ | input) | ||
+ | input | ||
+ | ;; | ||
+ | forward) | ||
+ | forward | ||
+ | ;; | ||
+ | pre) | ||
+ | prerouting | ||
+ | ;; | ||
+ | post) | ||
+ | postrouting | ||
+ | ;; | ||
+ | raw) | ||
+ | raw_rules | ||
+ | ;; | ||
+ | show) | ||
+ | show | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | esac | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Рекомендації ===== | ||
+ | |||
+ | -> MTU \\ | ||
+ | Піднімати MTU необхідно тільки на qinq-інтерфейсі (bond і eth, що входять до нього), | ||
+ | \\ \\ | ||
+ | -> Таблиця ARP \\ | ||
+ | При кількостях сесій понад 700 і при режимі DHCP v4 необхідно правити sysctl, а саме розширювати таблицю ARP, так як нові ядра не пишуть лайку в dmesg і відбувається аномалія при параметрах за замовчуванням. \\ | ||
+ | <file config / | ||
+ | net.ipv4.neigh.default.gc_thresh1 = 4096 | ||
+ | net.ipv4.neigh.default.gc_thresh2 = 8192 | ||
+ | net.ipv4.neigh.default.gc_thresh3 = 12288 | ||
+ | </ | ||
+ | |||
+ | -> Для роботи шейпера\полісера на прикладі eth1 \\ | ||
+ | < | ||
+ | # cat / | ||
+ | auto eth1 | ||
+ | iface eth1 inet manual | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | pre-up / | ||
+ | </ | ||
+ | |||
+ | -> Розподіл мережевих переривань для QINQ трафіку \\ | ||
+ | Потрібно поставити драйвера з [[https:// | ||
+ | ====== Підготовка FreeRADIUS ====== | ||
+ | Не забуваємо про словник для нашого NAS. Правимо файл (на білінговому сервері!) / | ||
+ | Розкоментуємо рядок із подальшим перезапуском freeradius. | ||
+ | < | ||
+ | $INCLUDE | ||
+ | </ | ||
+ | |||
+ | Так само, не забуваємо, | ||
+ | < | ||
+ | # service radiusd restart | ||
+ | </ |