Архив

Архив раздела ‘man’

Сброс root пароля Mysql

28 августа 2010 admin Нет комментариев

И так, для начала останавливаем демона.

sudo /etc/init.d/mysql stop

Запускаем его в безопасном режиме без проверки привилегий

sudo mysqld_safe --skip-grant-tables &

Теперь используем базу mysql, в которой хранятся данные о пользователях:

mysql -u root mysql

Дальше редактируем таблицу:

mysql> update user set Password=PASSWORD('новый_пароль') where User='root';

Сбрасываем привилегии, для того, чтобы изменения вступили в силу:

mysql> flush privileges;

Давим ctrl-d для выхода. Затем перезапускаем MySQL сервер:

sudo /etc/init.d/mysql restart

Удачи!

Categories: man, mysql Tags: ,

Ставим PHP 5.3 на Ubuntu

28 августа 2010 admin Нет комментариев

В файл

/etc/apt/sources.list:

Дописываем строки

deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all

Далее обновляем

apt-get update
apt-get upgrade
Categories: man Tags:

Ubuntu OpenVPN Server (Настройка, соединение филиалов сеть)

27 августа 2010 admin Нет комментариев

logo

Изначально эту статью я писал для Хабра, но чуть позже решил продублировать в Блог.

Не так давно передо мною встала задача соединить в единую сеть филиалы одной крупкой компании, разбросанные по Сибири. Главная проблема была в том, что OpenVPN надо было заставить работать поверх нестабильного PPPoE попутно пустив весь трафик через OpenVPN

Первоначальная цель была в экономии денег на Интернет трафике в филиалах т.к. в удалённых районах цена безлимитного ADSL с шириной в 256кб/с стоила порядка 7-10т.р. в месяц, а интернет был жизненно необходим.
Вся радость была в том, что почти все филиалы имели подключения одного провайдера, в котором существовало понятие локального и пирингово трафика, а в Главном офисе был выделенный широкий Интернет (другой провайдер, но волей случая он был лоялен к провайдеру филиалов и у него был “пиринговый трафик” с ценой около 6 копеек за мегабайт).
image

1. proxy

Самое быстрое решение это было обычный каскад proxy серверов, так и было сделано т.к. раньше все филиалы раздавали интернет у себя прямо модемом, то нужно было всем выделить по 1 системнику, который бы выполнял роль шлюза, системники были не подарки, кто даст 800й пень, кто 233, в общем у кого что было.. Хотя сегодня за 4-7 т.р. можно собрать достойный шлюз, но хозяин-барин, хочу говорит без затрат!

На эти шлюзы была установлена ubuntu 8.04 LTS настроена в виде шлюза, чтоб воткнул в локальную сеть, в модем и в розетку, и сразу всё работало т.к. во многих филиалах, админы могли только нажать “Any key” на клавиатуре пользователя, но не беда, дело шло, постепенно 7 филиалов перенастроило свои модемы, и воткнули шлюзы :)

сразу же поднимали прокси каскадом, заруливали туда http трафик, но как мы все знаем, хттп трафик это всего некий % от общего трафика, перейдя на более простые тарифы, экономия была, но условная, ведь нерадивый админ или пользователь мог например через torrent стянуть что-то весомое, что сулило попаданием на деньги филиалу…

Попутно появлялись другие задачи в центральном офисе – перенос компаративного почтаря, шлюза, портала настроенного году в 2002 и не тронутого с тех пор, но это заслуживает отдельной статьи…
А нас пока интересует просто сеть…

2. OpenVPN

Эту штуку я видел в первый раз, был некий страх перед первым знакомством, далее чтение мануалов и интернетов, закатав рукава я полез ставить :)

2.1 Сервер
имеет 2 сетевых адаптера eth1 (192.168.5.x) – Локальная сеть и eth0 (real ip 111.111.111.111) Интернет с широким каналом.

apt-get install openvpn

Далее создаём файл конфигурации сервера

touch /etc/openvpn/server.conf

при загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf

у меня он получился примерно таким.

port 1194 #Порт
proto udp #Протокол
dev tun   #Название виртуального устройства  
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh1024.pem
server 10.10.10.0 255.255.255.0 # vpn subnet
ifconfig-pool-persist ipp.txt # Тут будут храниться ip адреса клиентов
push "route 192.168.5.0 255.255.255.0" # home
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 4
mute 20
client-to-client
client-config-dir /etc/openvpn/ccd # Тут будут настройки для каждого филиала
route 192.168.0.0 255.255.255.0 # Маршрут от сервера до филиала 1
route 192.168.1.0 255.255.255.0 # Маршрут от сервера до филиала 2

Создаём каталог, в котором будут хранится индивидуальные настройки клиентов:

mkdir /etc/openvpn/ccd

Теперь необходимо создать ключи и сертификаты для шифрования и авторизации

cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
source ./vars
./clean-all
./build-ca

Теперь создадим сертификат и приватный ключ для сервера:

./build-key-server server

Создаём ключ для клиента (если клиентов несколько, процедуру придётся повторить):

./build-key client1

для каждого клиента должно быть указано своё уникальное имя (в данном случае client1).

если новый клиент создаётся спустя некоторое время, процедура будет выглядеть следующим образом:

cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
source ./vars
./build-key client2

Генерируем параметры Диффи-Хеллмана:

./build-dh

Помещаем следующие файлы в директорию /etc/openvpn/

    * ca.crt
    * server.crt
    * dh1024.pem
    * server.key

Создаём файл /etc/openvpn/ipp.txt

Конфигурационный файл клиентской машины /etc/openvpn/client.conf у меня получился примерно таким

remote 111.111.111.111 1194
client
dev tun
proto udp
resolv-retry infinite # this is necessary for DynDNS
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 4
mute 20
redirect-gateway
#show-net-up
verb 4

Теперь необходимо скопировать с сервера в папку /etc/openvpn/ сгенерированные клиентские ключи и авторитарный сертификат сервера:

    * ca.crt
    * client1.crt
    * client1.key

Если за клиентом скрывается сеть 192.168.1.х то, чтоб сервер видел её нужно добавить на сервер маршрут до неё.

На сервере создаём файл /etc/openvpn/ccd/client1 такого содержания:

iroute 192.168.1.0 255.255.255.0
# роутинг на сеть филиала2, чтоб 2 филиала знали друг друга
#push "route 192.168.100.0 255.255.255.0"
#Заворачиваем весь трафик в OpenVPN
push "redirect-gateway def1"

Вот тут собственно и случилась самая злая проблема у меня.

OpenVPN получив директиву

push "redirect-gateway def1"

(при наличии ‘pull’ в своей конфигурации), клиент не удаляет старый маршрут, а добавляет в таблицу маршрутизации записи вида:

 0.0.0.0/1 via 192.168.231.5 dev tun0  
 128.0.0.0/1 via 192.168.231.5 dev tun0

и если openvpn идёт по ethernet то всё работает и радует админа и пользователей, но великий ppp любит поднимать вот такой маршрут.

0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0

И вот OpenVPN ругается примерно вот так

Jul  2 19:28:53 ino ovpn-client[14465]: NOTE: unable to redirect default gateway -- Cannot read current default gateway from system

Решение этой проблемы искалось долго и нудно, хотя оно на поверхности. если в этом “кривом” маршруте ppp указывать шлюз вместо 0.0.0.0 реальный шлюз, то ОpenVPN видит этот маршрут и добавляет свой без проблем.

Поэтому я создал файл

/etc/ppp/ip-up.d/routing

В который прописал небольшой скрипт. (прошу ногами не пинать, я очень ленивый, и полноценный скрипт определения шлюза и правки маршрутов писать не стал, а сделал как простой костыль)
Буду очень рад, если кто-то предложит более логичный, надёжный, и универсальный метод правки маршрутов на лету.
Пока ещё нет уверенности, что всё будет на 100% работать при обрывах ppp, Но жизнь покажет, если что – поправлю топик.

#! /bin/sh
#Определяем выданный шлюз по умолчанию у меня он всегда  разный но в сети 222.х.х.х
gw1=`ip route show | grep 222 | awk '{print $1}'`
# Удаляем 0.0.0.0 0.0.0.0
route del default
# Добавляем маршрут с верным шлюзом
route add -net default gw ${gw1} dev ppp0

Делаем его исполняемым

chmod ug+x /etc/ppp/ip-up.d/routing

После чего ребут, спустя некоторое время сервер перестал пинговаться по внешнему ипу, но стал отзываться по внутреннему – 10.10.10.26

ЗЫ Прошу принять во внимание, что файрволл шлюза и сервера и клиента надо поправить, для того, чтоб у пользователей был жизненно важный интернет.
Например я, сделал это так:

-A POSTROUTING -s 192.168.0.0/255.255.0.0 -j MASQUERADE

Тут не указана привязка ни к внешнему интерфейсу, ни ip :)
когда по разным причинам у нас не будет openvpn то у пользователей будет прямой инет, а когда он появится, то весь трафик полетит через него.

Заключение

В жизни эта система собирается поэтапно, сначала запускается впн сервер и впн клиент, пингуют друг друга по адресам 10.10.10.х дальше добавляются маршруты до сетей, что стоят за сервером и клиентом, пингуются проверяются, когда всё будет стабильно и надёжно добавляем директиву

push "redirect-gateway def1"

И снова добиваемся работы и жизни, всё было проделано не выходя из офиса, на шлюзах филиалов, были подписаны сетевые интерфейсы, чтоб админ просто воткнул сетевые кабеля и питание, позвонил мне, а дальше я уже по ssh настраивал на рабочий лад.

Ах да, чуть не забыл, о самом главном – profit

Помимо того, что теперь вся сеть обращается к серверам и сервисам филиалов и центра по внутренним ip адресам, так ещё и финансовая экономия.

Раньше каждый филиал тратил на интернет в среднем по 7 000р. в месяц, сейчас в месяц каждый из них платит по 550р. за доступ к пирингу, интернет не расходуется (кроме центрального), для начала было запущено 7 филиалов, дальше будет больше.
получается, что за год при старой схеме компания тратила бы на интернет 588 000р., а при текущей схеме в год будет потрачено 46 200р.

Что дальше?

А теперь, на этой всей хе…. мы попробуем взлететь! я попробую развернуть IP Телефонию, чтоб минимизировать расходы на Телефонные междугородние переговоры между филиалами, связать софтАТС с аппаратными в филиалах, о чём обязательно напишу. Удачи

update1 Много вопросов возникло к термину “Крупная компания” попробую прояснить.

Крупная она в Сибири, центр имеет штат 200 сотрудников, филиалы от 20 до 60, к каждому филиалу ещё крепятся 10-20 объектов. по 5-15 человек. филиалов менее 30ти.

Компания крайне не поворотлива, основной контроль идёт от государства, оборудование, компания делает некие шаги в сторону ИТ развития :)

Update2
И так, после тестирования выявилось, что если надолго опустить сервер управы, то клиенты не охотно поднимают openvpn и трафик может пойти прямо в дорогой инет.
Также если принудительно рвётся ADSL канал, то опенвпн вроде и пытается стартануть заново, но что-то у него это не получается, так и ходит по кругу.
пробовал всякие опции и keepalive и ping-restart и прочее… не помогало…

Поэтому пишем небольшой скрипт, который будет проверять состояние дел.

touch /usr/bin/vpn_keepalive.sh

C содержанием.

#! /bin/sh
# Нужна ли нам отладка, рас комментировать нужное
#debug_out=/dev/null
debug_out=/dev/stdout
#NEXTHOP Это хост внутри ВПН сети
# я взял внутренний ип OpenVPN сервера
NEXTHOP=192.168.5.1
# Комманда перезапуска Опенвпн
OPEN_VPN_CMD="sudo /etc/init.d/openvpn restart"
PING=/bin/ping

logger_opts="-t $0"
if [ "$debug_out" = "/dev/stdout" ]
then
        logger_opts="$logger_opts -s"
fi
pckts_rcvd=`$PING -c 8 -q -W 2 $NEXTHOP | grep transm | awk '{print $4}'`
echo "host: $NEXTHOP, pckts_rcvd: $pckts_rcvd" >$debug_out
if [ $pckts_rcvd -eq 0 ]
then
    echo "Connection with $NEXTHOP lost, resetting" | logger $logopts
    $OPEN_VPN_CMD > $debug_out
else
    echo "Connection with $NEXTHOP up, no action" | logger $logopts
fi

Делаем его исполняемым

chmod ug+x /usr/bin/vpn_keepalive.sh

Скрипт пингует хост, и если 0 пакетов вернулось, то выполнит команду рестарта.
после чего всё гарантированно поднимается, вливаются верные маршруты, и трафик идёт через ВПН трафик

Кидаем этот скрипт в крон

crontab -e

например каждые 2 минуты.

0-59/2 * * * * /usr/bin/vpn_keepalive.sh

И всё если дебаг включен, то в логах (syslog) будет отмечено вот так.

logger: Connection with 192.168.5.1 up, no action

Удачи!

Categories: man, ubuntu Tags: , , ,

postfix белый лист ( postfix whitelist )

22 апреля 2010 admin Нет комментариев

Сложно найти баланс между ложными срабатывания на спамм и спамом :(

Создаём файл

touch /etc/postfix/whitelist

Добавляем в него записи, можно конкретный ящик, можно все ящики домена, можно домен с под доменами.

user@examlpe.com OK
@examlpe.com OK
.example.ru OK

Теперь преобразим наш файл whitelist в индексированную базу данных, выполнив команду:

postmap /etc/postfix/whitelist

Теперь смотрим каком типом БД пользуется наш postfix

postconf | grep database_type

Возможные варианты ответа hash, btree или dbm
В зависимости от этого в секцию

smtpd_sender_restrictions

Добавляем строку

check_sender_access  hash:/etc/postfix/whitelist

Вот как это выглядит у меня (не забываем про запятые после переменных) (вместо hash пишем свой тип БД)

smtpd_sender_restrictions =
    check_sender_access  hash:/etc/postfix/whitelist,
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    permit
Categories: man Tags: ,

Блокируем плохие сайты squid ( bad sites squid )

13 апреля 2010 admin 2 comments

Настраиваем squid на блокировку нежелательных сайтов, избавляемся со всякими popunder, и прочей нечести на уровне squid

Со временем у меня получилась не маленькая база…
Данный файл постоянно пополняется всякими перепродавалами траффика и т.п.
дальше привожу его содержимое. При желании сами пополняем всякими Вконтактами и однокласниками (в моём файле они присуствуют), также тут есть adult накрутчики, режем их.
Я приведу ссылку на файл, который буду постепенно обновлять.
файл от 16.04.10
Сливаем его на сервер

cd /etc/squid3
wget http://www.odmin4eg.ru/download-manager.php?id=1

В раздел acl нашего squid.conf добавляем.
будте внимательны, сквид довольно привередлев к конфигам.
эти строки добавить между разрешающими и запрещающими у меня например так

acl our_networks src 192.168.0.0/255.255.0.0
acl bad url_regex "/etc/squid3/badsite.acl"
http_access deny bad
http_access allow our_networks

Собственно что добавить

acl bad url_regex "/etc/squid3/badsite.acl"
http_access deny bad

Перезапускаем squid и тестируем, принимаю пожелания по пополнению списка.

Categories: man Tags: ,

Конфиг squid Без комментариев

13 апреля 2010 admin Нет комментариев

Нам надо посмотреть суть конфига сквида, без комментариев и пояснений.

cat /etc/squid/squid.conf | egrep -v "^\s*(#|$)"
Categories: man Tags:

Смена часового пояса в Ubuntu

Всё невероятно просто.

dpkg-reconfigure tzdata
Categories: man, net, ubuntu Tags:

Сменить MAC в Ubuntu

6 февраля 2010 admin Нет комментариев

в файле

/etc/network/interfaces

Добавить строчку перед инициализацией нужного интерфейса.

Например так:

auto eth0
iface eth0 inet static
pre-up ifconfig eth0 hw ether 00:0c:76:5d:af:ff
address 192.168.1.189
netmask 255.255.0.0
gateway 192.168.1.7
Categories: man, net, ubuntu Tags:

Установка новой сетевой карты в ubuntu

2 февраля 2010 admin Нет комментариев

Втыкаем сетевуху, грузимся, дальше смотрим

lspci

Вывод будет примерно такой

00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (
rev 03)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (re
v 03)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
00:0a.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139 C+ (rev 10)
00:0b.0 Ethernet controller: MYSON Technology Inc SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
01:00.0 VGA compatible controller: S3 Inc. 86c368 [Trio 3D/2X] (rev 02)

Тут мы видим, нужное или не нужное число сетевых, показаны устройства, которые видит ядро.

Дальше смотрим

ipconfig -a

Вывод будет примерно таким

eth0      Link encap:Ethernet  HWaddr 00:c0:26:2c:e6:ae
inet addr:192.168.5.36  Bcast:192.168.5.255  Mask:255.255.255.0
inet6 addr: fe80::2c0:26ff:fe2c:e6ae/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:440 errors:0 dropped:0 overruns:0 frame:0
TX packets:145 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:39563 (38.6 KB)  TX bytes:14378 (14.0 KB)
Interrupt:10 Base address:0xe400

eth2      Link encap:Ethernet  HWaddr 00:02:44:4e:67:c0
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
Interrupt:5 Base address:0xe800

Вот тут то и видим, что сетевуха то нашлась но завётся не так как мы ожидали.

Как переименовать сетевые интерфейсы

Теперь идём в

/etc/udev/rules.d/ХХ_persistent-net.rules

где ХХ любые произвольные числа.

переименовываем и ребут либо перезапуск сетевых интерфейсов

Categories: man, net, ubuntu Tags:

nginx на ubuntu – это просто ( Компиляция )

20 сентября 2009 admin Нет комментариев

1. ставим зависимости nginx

sudo aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

2. Создаём каталог. заходим в него, качаем свежий nginx

wget http://sysoev.ru/nginx/nginx-0.7.62.tar.gz

3. Извлекаем

tar -zxvf nginx-0.7.62.tar.gz

4. Заходим в каталог.

cd nginx-0.7.62

5. Компиляция. вполне стандартные опции, что первые выдал гугл.

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module

в результате выполнения команды скрипт configure нам подсказывает, что и как будет

Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1 library is not used
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"

Где будут находится конфиги, где логи т. п.

далее

make && make install

Вот и всё nginx готов к работе.
Можно его запустить командой

sudo /usr/local/sbin/nginx

Если мы хотим чтобы он запустился с вашими уже рабочими конфигурационными файлами. то создаём символическую ссылку предварительно удалив /usr/local/nginx/conf

ln -s /etc/nginx /usr/local/nginx/conf

6. Правка скрипта запуска.
т.к. до этого у меня стоял пакет из репозитория, остались и рабочие файлы конфигурации и скрипт управления nginx (/etc/init.d/nginx)
скорректируем его с учётом нового места установки nginx

DAEMON=/usr/local/sbin/nginx

7. если до этого был установлен Nginx из пакета. то можно его удалить.

apt-get remove nginx

8. запускаем

/etc/init.d/nginx start

9. Проверяем работу сайта.

Оказалось вот на столько просто :)

PS Данный топик был отправлен мною в песочницу Хабра.

Categories: linux, man, ubuntu Tags: