среда, 11 марта 2009 г.

Перенос FreeBSD на другой диск

Нашел хорошую статью по этому вопросу
http://www.freebsd.org.ru/how-to/w2w.html

вторник, 10 марта 2009 г.

Kernel nat на FreeBSD 7,1

Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)

Для начала надо пересобрать ядро со следующими опциями

options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
options IPFIREWALL_FORWARD
options DUMMYNET
options IPFIREWALL_NAT #ipfw kernel nat support
options LIBALIAS

Далее пересобираем ядро:

cd /usr/src/
make buildkernel KERNCONF=Yourkernel && make installkernel KERNCONF=Yourkernel

shutdown -p now

Далее кусок файла конфигурации с примером.
192.168.1.132 - ip адрес сетевой карты смотрящей наружу
остальное внутренние адреса

#!/bin/sh
# здесь просто удаляю старые правила
ipfw -f flush
ipfw nat 122 delete

# разрещаю все через loopback
ipfw add allow all from any to any via lo0

# делаю нат на ip смотрящем наружу, same_ports - для попытки сохранить номера портов при нате
# пробрасываю все что приходит на порт 9999 на тот же порт внутренней машины

ipfw nat 123 config ip 192.168.1.132 log same_ports \
redirect_port tcp 192.168.4.86:9999 9999 \
redirect_port tcp 192.168.4.46:123 9199
# этот кусок нужен что бы у машины был не полный нат а только порт который я разрешил,
# потому что вообще в интернет буду пускать через проксю.
ipfw add 100 nat 123 tcp from 192.168.4.86 9999 to any
ipfw add 100 nat 123 tcp from any to 192.168.4.86 9999

# здесь я разрешаю клиенту с ip 192.168.4.86 коннектится к любым серверам по 25 порту,
# но только по нему.
ipfw add 100 nat 123 tcp from 192.168.4.86 to any 25
# а здесь делаю полный нат клиенту
ipfw add 100 nat 123 tcp from 192.168.4.46 to any
# это что бы был нат, иначе ничего не будет работать, правило для выпуска клиентов наружу
ipfw add 100 nat 123 ip from any to 192.168.1.132

Скрипты на языке expect для работы с натом на Cisco 1760 через telnet

Итак необходимо было автоматизировать создание/удаление пробросок на Cisco 1760
Вот скрипты для этого.

Создание проброски скрипт принимает в коммандной строке 4 переменных.

Скрипт rmrl1760add
Предназначен для добавления проброски на циску
Синтаксис - rmrl1760 arg1 arg2 arg3 arg4
arg1 - Внутренний ip для проброски
arg2 - Внутренний порт для проброски
arg3 - Внешний ip на циске
arg4 - Внешний порт на циске


#!/usr/local/bin/expect
#first arg ip where we mapped
set destservip [lindex $argv 0]
#second arg lport on what we mapped
set lport [lindex $argv 1]
#third arg ext ip on cisco1760
set extip [lindex $argv 2]
#fourth arg ext port on cisco1760
set eport [lindex $argv 3]

spawn telnet 192.168.8.21
expect "Username:"
send "username\r"
expect "Password:"
send "password\r"
send "en\r"
send "secondpassword\r"
#send $command
send "\r"
send "configure terminal\r"
send "no ip nat inside source static tcp $destservip $lport $extip $eport extendable\r"
send "exit\r"
#send "copy running-config startup-config\r"
send "\r"
send "exit\r"


Скрипт rmrl1760del
Предназначен для удаления проброски с циски
Синтаксис - rmrl1760 arg1 arg2 arg3 arg4
arg1 - Внутренний ip для проброски
arg2 - Внутренний порт для проброски
arg3 - Внешний ip на циске
arg4 - Внешний порт на циске


#!/usr/local/bin/expect
#first arg ip where we mapped
set destservip [lindex $argv 0]
#second arg lport on what we mapped
set lport [lindex $argv 1]
#third arg ext ip on cisco1760
set extip [lindex $argv 2]
#fourth arg ext port on cisco1760
set eport [lindex $argv 3]

spawn telnet 192.168.8.21
expect "Username:"
send "username\r"
expect "Password:"
send "password\r"
send "en\r"
send "secondpassword\r"
send "\r"
send "configure terminal\r"
send "no ip nat inside source static tcp $destservip $lport $extip $eport extendable\r"
send "exit\r"
#send "copy running-config startup-config\r"
send "\r"
send "exit\r"

MySAR

MySAR - анализатор лога squid с поддержкой mysql

Необходимость заставила поискать анализатор лога для сквида который всё своё барахло хранит в мускуле....
После нескольких проб (squid2mysql, sams)
Остановился на MySAR http://giannis.stoilis.gr/software/mysar/
Вид имеет практически идентичный sarg`у фугкционал тоже.

Итак...
Имеем freebsd 7.1
mysql 5.0
php 5.0 with CLI
Apache 2.2
Squid 2.7
access.log 78mb
Приступаем
make -C /usr/ports/www/mysar install
В процессе установки встанет еще и bash как неизбежное зло
После этого добавляем алиас в конф апача
Alias /mysar "/usr/local/mysar/www/"
AllowOverride All
Order allow,deny
Allow from all
Копируем темплейты и папки /usr/local/mysar/www-templates.ru_RU в www-templates
Рестартим апач (apachectl restart)
создаём в папке /usr/local/mysar/etc/ файл config.ini со следующим содержимым
dbUser = mysar
dbPass = mysar
dbHost = localhost
dbName = mysar
Далее идем веб морду
http://Ваш_ip/mysar
Следуем инструкциям по установке.
Настраиваем пути к логу и количество дней на сохранение

После этого мне как владельцу большого по мнению авторов программы лога надо ухитриться перенести его в базу....
Если просто запускать скрипт переноса в базу
/usr/local/mysar/bin/mysar-importer.php
То я получаю сообщение - Exceeded run time
что меня дико не устраивает

Итак редактируем /usr/local/mysar/bin/mysar-importer.php
На строки с 109 по 114 комментим
debug('Now timestamp is: '.$timestampNow.'. Script start was at: '.$startTime,40,__FILE__,__LINE__);
// debug('Checking if run time exceeded '.$maxRunTime.' seconds...',40,__FILE__,__LINE__);
// if(($timestampNow-$startTime ) > $maxRunTime) {
// debug('YES',40);
// debug('Exceeded run time',30,__FILE__,__LINE__);
// my_exit(0);
// }
debug('NO',40);

потом запускаем скрипт -
php /usr/local/mysar/bin/mysar-importer.php
Ждем....
после окончания проверяем наличие информации в веб морде...
если все ОК то
crontab -e

И добавляем задания
* * * * * /usr/local/bin/php /usr/local/mysar/bin/mysar-importer.php > /usr/local/mysar/log/mysar-importer.log 2>&1
0 0 * * * /usr/local/bin/php /usr/local/mysar/bin/mysar-maintenance.php > /usr/local/mysar/log/maintenance.log 2>&1

Усе.