Нашел хорошую статью по этому вопросу
http://www.freebsd.org.ru/how-to/w2w.html
среда, 11 марта 2009 г.
вторник, 10 марта 2009 г.
Kernel nat на FreeBSD 7,1
Port mapping и открытие портов наружу во FreeBSD 7.1 (ipfw + kernel nat)
Для начала надо пересобрать ядро со следующими опциями
Далее пересобираем ядро:
Далее кусок файла конфигурации с примером.
192.168.1.132 - ip адрес сетевой карты смотрящей наружу
остальное внутренние адреса
Для начала надо пересобрать ядро со следующими опциями
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 - Внешний порт на циске
Скрипт rmrl1760del
Предназначен для удаления проброски с циски
Синтаксис - rmrl1760 arg1 arg2 arg3 arg4
arg1 - Внутренний ip для проброски
arg2 - Внутренний порт для проброски
arg3 - Внешний ip на циске
arg4 - Внешний порт на циске
Вот скрипты для этого.
Создание проброски скрипт принимает в коммандной строке 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.1mysql 5.0php 5.0 with CLIApache 2.2Squid 2.7access.log 78mb
Приступаем
make -C /usr/ports/www/mysar install
В процессе установки встанет еще и bash как неизбежное зло
После этого добавляем алиас в конф апача
Alias /mysar "/usr/local/mysar/www/"AllowOverride AllOrder allow,denyAllow from all
Копируем темплейты и папки /usr/local/mysar/www-templates.ru_RU в www-templates
Рестартим апач (apachectl restart)
создаём в папке /usr/local/mysar/etc/ файл config.ini со следующим содержимым
dbUser = mysardbPass = mysardbHost = localhostdbName = 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>&10 0 * * * /usr/local/bin/php /usr/local/mysar/bin/mysar-maintenance.php > /usr/local/mysar/log/maintenance.log 2>&1
Усе.
Подписаться на:
Сообщения (Atom)