понедельник, 5 июля 2010 г.

Форматирование диска из консоли в Debian lenny GNU/Linux

Столкнулся с интересной ситуацией когда нужно было отформатировать диск с NTFS + данные воспользовался программой fdisk. Удалил раздел создал раздел Linux, записал изменения. После монтирования ошалел когда увидел старые данные на этом диске. В следующий раз заюзал cfdisk повторил все действия, но после монтирования снова прозрел хотя и был морально к этому готов. Но после непродолжительного гугления понял что я не один такой и воспользовался советом linuxforums.org а точней командой
mke2fs -j /dev/sdc1
получив при этом ext3 абсолютно пустой.
При копировании материалов
ссылка на источник обязательна!


Читать дальше...

среда, 30 июня 2010 г.

Установка и настройка Network Access Server Abills + Freeradius + pptpd + mysql + Apache2 + Squid на Debian GNU/Linux

О самой установке Debian GNU/Linux можно прочесть на debian.org.

Предполагается что система уже стоит и Internet получаем через NAT на eth1(IP 10.0.0.3), а локальная сеть на eth0(IP 192.168.4.1).
ПО которое нам понадобится

freeradius — радиус сервер
radiusclient1 — радиус клиент
mysql-server — сервер баз данных
apache2 — веб сервер
libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl — дополнительные библиотеки для интерпритатора Perl
sudo — программа ограничения привилегий
snmp — утилита для работы с Simple Network Management Protocol
pptpd — ВПН сервер
netdiag — набор утилит для диагностики работы сети
iptraf — утилита для просмотра сетевой статистики
mc — файловый менеджер
lynx — консольный браузер

Ставим все одной строкой
aptitude install freeradius radiusclient1 mysql-server apache2 libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl sudo snmp pptpd netdiag iptraf mc lynx

Настроим параметры системы при загрузке
# nano /etc/rc.local

дописываем
# Выполнить скрипт изменения переменных ядра
exec /etc/sysctl_tune.sh
# Восстановление настроек фаервола
iptables-restore /etc/iptables.conf

создадим скрипт изменения переменных ядра
# touch /etc/sysctl_tune.sh

делаем его исполняемым
# chmod +x /etc/sysctl_tune.sh

открываем для редактирования
# nano /etc/sysctl_tune.sh

вписываем

#!/bin/sh

# Включение форвардинга vpn
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Включение форвардинга
echo "1" > /proc/sys/net/ipv4/ip_forward
# Увеличение размера очередей
echo "32000000" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
# Время ожидания до закрытия соединения
echo "14400" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# Время ожидания до посылки FIN пакета
echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
# Время ожидания до посылки FIN пакета
echo "10" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
# Для защиты от syn флуда
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Увеличиваем размер backlog очереди
echo "4096" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Число начальных SYN и SYNACK пересылок для TCP соединения
echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
echo "1" > /proc/sys/net/ipv4/tcp_syn_retries
Сколько секунд ожидать приема FIN до полного закрытия сокета
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
# Как часто посылать сообщение о поддержании keep alive соединения
echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто.
echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
# Зaпрещаем TCP window scaling
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
# Запрещаем selective acknowledgements, RFC2018
echo "0" > /proc/sys/net/ipv4/tcp_sack
# Запрещаем TCP timestamps, RFC1323
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
# Уличиваем размер буфера для приема и отправки данных через сокеты.
echo "1048576" > /proc/sys/net/core/rmem_max
echo "1048576" > /proc/sys/net/core/rmem_default
echo "1048576" > /proc/sys/net/core/wmem_max
echo "1048576" > /proc/sys/net/core/wmem_default
# Через какое время убивать соединеие закрытое на нашей стороне
echo "1" > /proc/sys/net/ipv4/tcp_orphan_retries

Указываем какие модули должны подгружаться при загрузке.
# nano /etc/modules

Дописываем в конец.
ip_conntrack
ip_gre
ip_nat_pptp
ip_conntrack_ftp
ip_nat_ftp

Настройка freeradius сервера
# echo "" > /etc/freeradius/users
# nano /etc/freeradius/users

пишем
DEFAULT Auth-Type = Accept

потом
# nano /etc/freeradius/acct_users

в конце дописываем
DEFAULT Acct-Status-Type == Start
Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Alive
Exec-Program = "/usr/abills/libexec/racct.pl"
DEFAULT Acct-Status-Type == Stop
Exec-Program = "/usr/abills/libexec/racct.pl"

Пропишем разрешенных клиентов
# nano /etc/freeradius/clients.conf

Всё ремарим и дописываем
client 127.0.0.1 {
secret = radsecret
shortname = shortname
}
client 192.168.4.1 {
secret = radsecret
shortname = shortname
}

Допишем пред и пост авторизацию для биллинга
# nano /etc/freeradius/radiusd.conf

после строк
unix {
radwtmp = ${logdir}/radwtmp
}

дописываем
abills_preauth
exec abills_preauth {
program = "/usr/abills/libexec/rauth.pl pre_auth"
wait = yes
input_pairs = request
shell_escape = yes
output_pairs = config
}

abills_postauth
exec abills_postauth {
program = "/usr/abills/libexec/rauth.pl post_auth"
wait = yes
input_pairs = request
shell_escape = yes
output_pairs = config
}

abills_auth
exec abills_auth {
program = "/usr/abills/libexec/rauth.pl"
wait = yes
input_pairs = request
shell_escape = yes
output = no
output_pairs = reply
}

abills_acc
exec abills_acc {
program = "/usr/abills/libexec/racct.pl"
wait = yes
input_pairs = request
shell_escape = yes
output = no
output_pairs = reply
}

правим /etc/freeradius/sites-available/default
# nano /etc/freeradius/sites-available/default

комментируем лишнее и добавляем недостающее
тут
authorize {
preprocess
abills_preauth
#chap
#mschap
suffix
#eap {
# ok = return
#}
#unix
files
abills_auth
#expiration
#logintime
#pap
}

здесь
preacct {
preprocess
#acct_unique
#suffix
abills_acc
}

и еще здесь
post-auth {
exec
Post-Auth-Type REJECT {
# attr_filter.access_reject
abills_postauth
}

и это тоже заремарить
#pre-proxy {
#}

#post-proxy {
# eap
#}

теперь нужно поправить файл со словарями
# nano /etc/freeradius/dictionary

в конце добавить
# Limit session traffic
ATTRIBUTE Session-Octets-Limit 227 integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE Octets-Direction 228 integer
# Connection Speed Limit
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
ATTRIBUTE Acct-Interim-Interval 85 integer

Настройка radiusclient1
Пропишем сервера авторизации и аккаунтинга
# nano /etc/radiusclient/radiusclient.conf

вписываем
authserver 127.0.0.1
acctserver 127.0.0.1

добавим секретное слово для сервера
# nano /etc/radiusclient/servers

дописываем
127.0.0.1 radsecret

клиенту тоже нужно поправить файл словарей
# nano /etc/radiusclient/dictionary

в конце дописываем
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Session-Octets-Limit 227 integer
ATTRIBUTE Octets-Direction 228 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer

Настройка Apache2
Добавляем поддержку mod_rewrite.
# ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

Редактируем /etc/apache2/sites-enabled/000-default
# nano /etc/apache2/sites-enabled/000-default

удаляем все и пишем

DocumentRoot /usr/abills/cgi-bin/
Alias /abills "/usr/abills/cgi-bin/"


RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]
Options Indexes ExecCGI SymLinksIfOwnerMatch

AddHandler cgi-script .cgi
Options Indexes ExecCGI FollowSymLinks
AllowOverride none
DirectoryIndex index.cgi
#Options ExecCGI

Order allow,deny
Deny from all


#Admin interface

AddHandler cgi-script .cgi
Options Indexes ExecCGI FollowSymLinks
AllowOverride none
DirectoryIndex index.cgi
order deny,allow
allow from all



Настройка pptpd
В файле options
# nano /etc/ppp/options

убрать ремарку
+chap

В файле pptpd-options
# nano /etc/ppp/pptpd-options

ремарим лишнее и дописываем недостающее
#require-mppe-128
#require-mschap-v2
plugin radius.so
plugin radattr.so
debug
ms-dns 192.168.4.1

В файле /etc/pptpd.conf
# nano /etc/pptpd.conf

всё удаляем и пишем
ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
debug
logwtmp
localip 172.16.255.254
listen 192.168.4.1

для работы шейпера в файле /etc/ppp/ip-up
# nano /etc/ppp/ip-up

дописываем в конце

if [ -f /var/run/radattr.$1 ]

then

DOWNSPEED=`/usr/bin/awk '/PPPD-Downstream-Speed-Limit/ {print $2}' /var/run/radattr.$1`

UPSPEED=`/usr/bin/awk '/PPPD-Upstream-Speed-Limit/ {print $2}' /var/run/radattr.$1`

FILTERS=`/usr/bin/awk '/Filter-Id/ {print $2}' /var/run/radattr.$1`



/sbin/tc qdisc del dev $1 root > /dev/null

/sbin/tc qdisc del dev $1 ingress > /dev/null

##### speed server->client

if [ "$UPSPEED" != "0" ] ;

then

/sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1

/sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit burst 4k

/sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 4k prio 1

/sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 4k prio 2

/sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500

/sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500

/sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10

/sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10

/sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10

fi

##### speed client->server

if [ "$DOWNSPEED" != "0" ] ;

then

/sbin/tc qdisc add dev $1 handle ffff: ingress

/sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNSPEED}kbit burst 12k drop flowid :1

fi

fi
# это для разрешения клиентам ходить в интернет
/sbin/iptables -t nat -A POSTROUTING -s $5 -j MASQUERADE
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 3128 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 110 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 25 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -d $5 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -s $5 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -d $5 -j ACCEPT

Настройка Abills

Сначала нужно скачать архив с биллингом
# cd /root
# wget http://kent.dl.sourceforge.net/project/abills/abills/0.50/abills-0.50.tgz

Теперь распакуем его
# tar -xf abills-0.50.tgz

Переместим распакованный биллинг в директорию /usr/
# mv abills /usr/

Заходим в консоль mysql
# mysql -u root -p
mysql> CREATE DATABASE abills;
mysql> quit

Теперь нужно скинуть дамп в базу
# cd /usr/abills
# mysql -u root -p abills < abills.sql

Когда дамп залит нужно поправить конфиг Abills, для этого
# cd /usr/abills/libexec
# cp config.pl.default config.pl
# nano config.pl

поменять реквизиты доступа к базе данных. Для того чтобы использовать большие буквы в логине строку
$conf{USERNAMEREGEXP}="^[a-z0-9_][a-z0-9_-]*\$";

поменять на
$conf{USERNAMEREGEXP}="^[A-Za-z0-9_][A-za-z0-9_-]*\$";

Правим
# nano /etc/sudoers

дописываем
www-data ALL = NOPASSWD: /usr/abills/misc/pppd_kill

теперь настроим переодическое исполнение скриптов
# nano /etc/crontab

дописываем
*/5 * * * * root /usr/abills/libexec/billd -all
1 0 * * * root /usr/abills/libexec/periodic daily
1 0 1 * * root /usr/abills/libexec/periodic monthly
1 3 * * * root /usr/abills/libexec/periodic backup

устанавливаем права на файлы веб интерфейса
# chown -Rf www-data /usr/abills/cgi-bin

Теперь нужно создать недостающие каталоги и установить на них корректные права
# mkdir /usr/abills/backup
# chown www-data /usr/abills/backup
# mkdir /usr/abills/var
# mkdir /usr/abills/var/log

В файле
# nano /usr/abills/Abills/defs.conf

исправить пути к исполняемым файлам
$SNMPWALK = '/usr/bin/snmpwalk';
$SNMPSET = '/usr/bin/snmpset';
$GZIP = '/bin/gzip';
$TAR='/bin/tar';
$MYSQLDUMP = '/usr/bin/mysqldump';
$IFCONFIG='/sbin/ifconfig';

Открываем web-интерфейс админки по адресу http://вашхост/admin
Логин/пароль abills/abills их можно будет потом сменить.

Идем System configuration->NAS
Ip пишем 127.0.0.1
Выбираем тип pppd:pppd + Radius
Alive (sec.): 120
RADIUS Parameters (,): Acct-Interim-Interval=60

Теперь добавляем IP POOLs
Название: Любое
FIRST IP: 172.16.0.1
Количество: 256
Приоритет: по умолчанию "0"
STATIC: отмечаем если нужно

Проверить чтобы в файле hosts
# nano /etc/hosts

на всех IP имена хостов совпадали
127.0.0.1 localhost billing
192.168.4.1 billing
10.0.0.3 billing

теперь можно
# reboot

или
# shutdown -r now

Настройка мониторинга Squid в Abills

Подразумевается что Squid уже стоит и работает. В файл /etc/squid/squid.conf

# nano /etc/squid/squid.conf

добавить
acl abillsserver src 127.0.0.1/255.255.255.255
http_access allow manager abillsserver

а для transparent
http_port 127.0.0.1:3128 transparent

теперь нужно включить модуль squid
# nano /usr/abills/libexec/config.pl

в секции @MODULES добавить
'Squid'

а ниже дописать конфиг модуля
$conf{SQUID_HOST}='localhost'; #Squid host
$conf{SQUID_PORT}='3128'; #Squid port
$conf{SQUID_CACHEMGR_PASSWD}='your_squid_pass'; #Squid password
$conf{SQUID_RESOLVIP}=0; #Resolve Clients IP addreses

После успешной установки появляется меню - /Мониторинг/Squid/

Версии использованного ПО
# freeradius -v
freeradius: FreeRADIUS Version 2.0.4, for host i486-pc-linux-gnu

# mysql -u root -p

...Server version: 5.0.51a-24+lenny4 (Debian)...

# apache2 -v
Server version: Apache/2.2.9 (Debian)
Server built: Mar 28 2010 18:03:05

# pptpd -v
pptpd v1.3.4

# perl -v

This is perl, v5.10.0 built for i486-linux-gnu-thread-multi

При копировании материалов
ссылка на источник обязательна!


Читать дальше...