Рубрика: *BSD

freebsd tayga IPv6 only to IPv4 hosts

Здравствуйте товарищи !

давненько я ничего не писал … по причине отсутствия времени.

Ну ничего догоним 😉

Так начнем же с того о чём хочется сказать люди не используют IPv6 бо боятся потерять доступность остальных ресурсов по IPv4 что же тут такого почему не так все просто, а суть в том что во первых нужно заставить все домены резолвится по IPv6 а это может сделать только DNS64 такая возможность есть, но тут же возникает другая проблема нужен nat64 и такое есть имя ему tayga настроить довольно просто конечно без пинка и магического пендаля не зводится но я опишу всю полностью процедуру и все станет понятно оно вполне себе работает сейчас к стати через такое соединение пишу статью и ползаю просторами интернета … )

 

Дано FreeBSD 9.3-RELEASE FreeBSD 9.3-RELEASE #0

настроенный IPv6. c  выделенным префиксом 2001:67c:27b2::/48

это глобальный адрес у вас должен быть свой !!! возможно полученый через брокеров типа he.net или netassist.

Задача заставить юзера с IPv6 only увидеть IPv4 интернет.

нам нужно установить сам tayga для этого используем данную команду :

cd /usr/ports/net/tayga/ && make && make install

после нам нужно создать конфиг файл в директории /usr/local/etc/ файл tayga.conf  такого  содержания :

tun-device nat64

ipv4-addr 192.168.255.1

ipv6-addr 2001:67c:27b2:1::2

prefix 2001:67c:27b2:2:ffff::/96

dynamic-pool 192.168.255.0/24

data-dir /var/db/tayga

Стоить отметить что tayga натит один IPv6 в один IPv4 !!! то есть в данной схеме возможно лишь 254 клиента …

Переходим к настройке bind :

cat /etc/namedb/named.conf :

options {

listen-on-v6 { any; };

dns64 2001:67c:27b2:2:ffff::/96
{
clients { 2001:67c:27b2::/48; };
};
allow-recursion { 2001:67c:27b2::/48; };
recursion yes;

}

На этом настройка IPv6 закончена для Bind

стартуем его /etc/rc.d/named restart

 

теперь что касается ipv4 nat то он у меня построен на pf соответственно  переходим редактировать /etc/pf.conf :

nat on bce0 inet from {  192.168.255.0/24 } to any -> 1.1.1.1

где 192.168.255.0/24 подсеть для ната, а 1.1.1.1 наш внешний ип адрес.

после сохранения конфигурации применим её: pfctl -f /etc/pf.conf

теперь нужно включить роутинг для IPv6 и IPv4 если этого до сих пор не сделано :

sysctl net.inet.ip.forwarding=1

sysctl net.inet6.ip6.forwarding=1

теперь переходим к запуску самого tayga :

/usr/local/sbin/tayga -c /usr/local/etc/tayga.conf -d

ifconfig nat64 up

route add 192.168.255.1/32  -interface nat64

rotue add 192.168.255.0/24  -interface nat64

route -n add -inet6 2001:67c:27b2:2:ffff::/96 -interface nat64

всё осталось заставить клиентов получать DNS с ип адресом сервера IPv6 !

и проверить пинги выглядит это так :

Те кто говорят что пинги не должны ходить глубоко ошибаются и никогда данного не настраивали !

будьте бдительны и проверьте сами корректной настройкой.

IPv4 over IPv6

Вообщем админ должен разобраться в том что написано а юзеру это не дано ))

Для особо не верующих у домена ua.fm нету IPv6 адреса вот тому доказательство :

ua.fm_without_ipv6

 

на этом все всегда ваш Taras Kramarets aka ~NiX~

ssh geoip freebsd

Здравствуйте товарищи !

Сегодня речь пойдет о том как во FreeBSD сделать блокировку по стране то есть например я хочу что бы к серверу могли подключиться только из Украины в этом случае мне нужно во первых либо добавлять каждый раз все адреса этих стран в фаервол либо интерактивно блокировать тех кому доступ запрещен что у нас и будет сделано так как я хочу видеть список адресов которые меня брутят.

Все мы знаем о возможности freebsd блокировать хосты посредством файла hosts.allow ) о нем и пойдет речь

для решения данной задачи нам понадобиться фаервол это либо pf либо ipfw кому как удобнее, кусок скрипта на sh или bash

и собственно установленный geoip на нашем сервере.

и так перейдем к делу

cd /usr/ports/net/GeoIP

make && make install

дальше обновляем базу адресов

/usr/local/bin/geoipupdate.sh

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

создаем сам файл скрипта

touch  /usr/local/bin/brute_ssh.sh

даем ему право исполняться

chmod +x /usr/local/bin/brute_ssh.sh

Вносим сам код в скрипт с помощью редактора vi

vi  /usr/local/bin/brute_ssh.sh

 

#!/bin/sh

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES=»UA»

if [ $# -ne 1 ]; then
echo «Usage: `basename $0` <ip>» 1>&2
exit 0 # return true in case of config issue
fi

COUNTRY=`/usr/local/bin/geoiplookup $1 | awk -F «: » ‘{ print $2 }’ | awk -F «,» ‘{ print $1 }’ | head -n 1`

if [ $ALLOW_COUNTRIES == $COUNTRY ]; then
RESPONSE=»ALLOW»
else
RESPONSE=»DENY»
fi
if [ $RESPONSE == «ALLOW» ]; then
logger «$RESPONSE sshd connection from $1 ($COUNTRY)»
exit 0
else
logger «$RESPONSE sshd connection from $1 ($COUNTRY)»
/sbin/pfctl -t badhosts -T add $1
exit 1

fi

exit

Так теперь необходимо добавить в /etc/pf.conf

таблицу :

table <badhosts> persist

и правило :

block in quick from <badhosts> to any

сохраняем  и переходим к конфигурированию /etc/hosts.allow

добавляем разрешения на диапазон адресов которые не пройдут проверку то есть «серые сети» :

sshd: 127.0.0.0/255.0.0.0 : ALLOW
sshd: 172.16.101.0/255.255.255.0 : ALLOW

и само правило для блокировки не желательных гостей

sshd: ALL : spawn /usr/local/bin/brute_ssh.sh %a

сохраняем и применяем конфигурацию фаервола :

pfctl -f /etc/pf.conf

Готово enjoy !

NOC OSS FreeBSD 9.2 установка

Здравствуйте дорогие читатели сегодня пойдет речь об установке NOC OSS на FreeBSD 9.2
Да возможно этот пост больше похож на заметку или на «спасибо КЕП» но пусть будет вдруг кому то поможет не ломать голову как его установить тут описано полностью решение всех граблей итак поехали :

1) pkg если у кого он не сконфигурирован то установка не пойдет … как проверить ?) да очень просто
даем команду pkg -vv если не видим ни единого репозитория то нужно сделать так :

mkdir -p /usr/local/etc/pkg/repos
vi /usr/local/etc/pkg/repos/FreeBSD.conf
и в этот файл положить следующие :
FreeBSD: {
url: «pkg+http://pkg.FreeBSD.org/${ABI}/latest»,
mirror_type: «srv»,
enabled: yes
}
После стандартно выход из vi с сохранением описывать не буду 😉

Проверяем pkg -vv
нас интересует сам конец :
Repositories:
FreeBSD: {
url : «pkg+http://pkg.FreeBSD.org/FreeBSD:9:amd64/latest»,
enabled : yes,
mirror_type : «SRV»
}

если все так переходим к шагу 2 если нет то читаем все сначало и смотрим что и где пропустили…

2)Даем команду pkg update

3) после выполняем команду которая дана нам на сайте NOC OSS fetch -o- http://cdn.nocproject.org/bs/FreeBSD-9.2.txt | sh | tee /tmp/install.log

и получаем граблями по лбу 😉 точнее это не совсем грабли, а можно сказать фича или подводный камень ))
Выглядит это так :
Installing postgis-2.0.2_4
Updating FreeBSD repository catalogue…
FreeBSD repository is up-to-date.
All repositories are up-to-date.
pkg: No packages available to install matching ‘postgis-2.0.2_4’ have been found in the repositories
sh: Failed to install: postgis-2.0.2_4
Terminating

в чём же дело ?) тут все банально фрюха не может найти пакет с таким именем … и что же делать ?)
а делать примерно следующие :
fetch http://cdn.nocproject.org/bs/FreeBSD-9.2.txt
дальше редактируем файл FreeBSD-9.2.txt любым редактором мне нравиться vi :
##
## Install base packages
##
info «Installing system packages»
install_pkg postgresql90-server
install_pkg postgis-2.0.2_4
install_pkg mongodb
install_pkg py27-virtualenv
install_pkg mercurial
install_pkg gmp
install_pkg libsmi
install_pkg libffi
install_pkg cairo
install_pkg nginx
находим такие строки и приводим их к следующему виду :

##
## Install base packages
##
info «Installing system packages»
install_pkg postgresql93-server
install_pkg postgis20
install_pkg mongodb
install_pkg py27-virtualenv
install_pkg mercurial
install_pkg gmp
install_pkg libsmi
install_pkg libffi
install_pkg cairo
install_pkg nginx

после сохраняем и запускам теперь уже такой командой :

sh FreeBSD-9.2.txt

ждем и получаем очередные грабли куда ж без них то 😉

4556 files updated, 0 files merged, 0 files removed, 0 files unresolved
Running bootstrap.sh
cannot open /usr/local/noc/share/vagrant/x86_64/FreeBSD/9.2/bootstrap.sh: No such file or directory

этого файла у меня почему то не оказалось потому стал искать и нашел :
/usr/local/noc/share/vagrant/x86_64/FreeBSD/9.1/bootstrap.sh
его нам нужно исправить заменить пользователя postgres на pgsql иначе установка не пойдет :
вот эту строку :
su — postgres -c «psql noc»
изменить на эту :
su — pgsql -c «psql noc»
после сохранения : sh /usr/local/noc/share/vagrant/x86_64/FreeBSD/9.1/bootstrap.sh
все проходит успешно )) теперь заходим http://xx.yy.yy.yy/
получаем окно с приглашением в нок ) логин и пароль одинаковые admin admin

enjoy ))
Ваш боевой товарищ Taras Kramarets aka ~NiX~

Товарищи при копировании статьи пожалуйста указывайте источник ! уважайте чужой труд !

mysql galera cluster FreeBSD часть(1)

Здравствуйте дорогие читатели !

Руки дошли и до кластера своих баз данных ) благо его допилили полностью и оно работает, а это главное так как все мы хотим отдыхать время от времени, а не бежать тут же когда что то случилось с одной нодой в серверную и решать вопрос уже и немедля … проще сделать что бы был кластер из скажем 3х серверов.

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

 

Итак имеем :

ОС FreeBSD 9.2 amd64

 

Нужно скачать для начало сами пакеты которые пропатчены для использования wsrep взять их можно тут :

Последний сервер на данный момент

Последний клиент на данный момент

Последняя версия галеры на данный момент

Для того что бы их скачать в консоли пишем следующие:

fetch https://launchpad.net/codership-mysql/5.6/5.6.16-25.5/+download/mysql-server-5.6.16_wsrep_25.5-amd64.tbz
fetch https://launchpad.net/codership-mysql/5.6/5.6.16-25.5/+download/mysql-client-5.6.16_wsrep_25.5-amd64.tbz
fetch https://launchpad.net/galera/3.x/25.3.5/+download/galera-25.3.5-amd64.tbz

Теперь ещё установим их на этом 1я часть будет закончена :

pkg_add mysql-client-5.6.16_wsrep_25.5-amd64.tbz
pkg_add mysql-server-5.6.16_wsrep_25.5-amd64.tbz
pkg_add galera-25.3.5-amd64.tbz

Если вам ругнулось при установке любого пакета что чего то не хватает до установите их командой pkg_add -r название пакета.

Удачи продолжение следует.

Несколько версий php на одном сервере freebsd

Здравствуйте

Вот столкнулся с кучей грабель которые так любят делать разработчики привязывающиеся к определенной версии php в итоге у знакомого не работало то что ему хотелось так как на сервере установлена на теперешний момент версия php5.4 которая ну никак не хотела работать с его движком подумав что в принципе что такое php интерпритатор  что он фактически не отличается от другого софта с которым можно сделать так ))) потому конечно и можно установить несколько версий просто в разные папки ) конечно придется повозиться с некоторыми вещами для того что бы все заработало но тем не менее оно работает ) но так как apache я уже давно перестал брать во внимание лично для себя и для знакомых ) буду описывать установку и настройку для nginx то есть php-fpm

версий 5.2, 5.3, 5.4

поехали :

для начало установим обычную версию php которая актуальна для данного момента :

cd /usr/ports/lang/php5

make config выбираем поддержку FPM + CGI + CLI

пишем make && make install

ждем пока установиться дальше установим расширения для php

cd /usr/pors/lang/php5-extensions

make config выбираем нужное

дальше как обычно make && make install

предположим что все установилось

теперь нам нужно это все настроить но думаю это вы и сами сможете 😉

потому начну сразу с установки младших версий :

берем php53

cd /usr/ports/lang/php53

make config выбираем CLI+CGI + FPM остальное по вкусу )

и пишем такую вот строку :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 install

ждем пока соберется )  и ловим ошибку ))

для того что бы её победить переходим в директорию

cd work

и пишем :

pkg_add -f php53-5.3.28.tbz

после повторяем наши конвульсии :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 install

на сей раз все собралось теперь давайте посмотрим работает ли )

/usr/local/php53/bin/php -v
PHP 5.3.28 with Suhosin-Patch (cli) (built: Apr 11 2014 03:39:19)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

ну версию во всяком случае показало

попробуем узнать какие пакеты установило :

/usr/local/php53/bin/php -m

на выхлопе у меня получилось такое :

/usr/local/php53/bin/php -m
[PHP Modules]
Core
date
ereg
libxml
mysqlnd
pcre
Reflection
SPL
standard

[Zend Modules]

 

если у вас  все так же то  переходим к следующему пункту установке

более старого и древнего php52

для php-fpm он требует установленную libevent

cd /usr/ports/devel/libevent

пишем make && make install

переходим к установке

cd /usr/ports/lang/php52

make config Выбираем CLI+CGI+ FPM остальное по вкусу

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 install

запускаем установку и ловим ошибку ))

у меня ошибка вылезла такого вот вида :

Creating bzip’d tar ball in ‘/usr/ports/lang/php52/work/php52-5.2.17_14.tbz’
tar: bin/php: Cannot stat: No such file or directory
tar: bin/php-cgi: Cannot stat: No such file or directory

получаем  балалайки но в папке /usr/local/php52 есть файлы и бинарники ) те которые нам нужны

теперь самое интересное переходим к настройке php-fpm что бы nginx мог использовать разные версии php

и так путей у нас есть 2 каждый знает что php-fpm может использовать либо listen 127.0.0.1 порт тратата  либо listen /var/run/php-fpm.sock я для себя предпочел 1й вариант то есть listen 127.0.0.1:9001

теперь определимся с портами для разных версий :

listen 127.0.0.1:9001 это у нас будет php54 правим наш конфиг php-fpm для него то есть либо тут /usr/local/etc/php-fpm.conf либо /usr/local/etc/php54/php-fpm.conf в зависимости от того куда его устанавливали …

listen 127.0.0.1:9002 это у нас будет php53 правим наш конфиг php-fpm для него файл /usr/local/php53/etc/php-fpm.conf

кроме этого нам нужно ещё в этой же папке перейти в директорию rc.d и поправить там стартовый файл  php-fpm:

заходим в него и ищем строку :

по умолчанию она имеет такой вид :

 

pidfile=»/var/run/php-fpm.pid»

но если на сервере уже есть установленный php-fpm то данный файл для них будет одинаков что не есть гуд и работать ничего не будет … что нужно сделать конечно же изменить его название для себя решил сделать вот так :

pidfile=»/var/run/php-fpm53.pid» и сохраняем наш файл

 

теперь переходим к настройке php-fpm для php52 :

фактически все так же за исключением того что у меня не оказалось стартового файла для php52-fpm  и + конфиг выглядит несколько иначе но это не мешает нам исправить те же строки которые правили раньше )

строку :

<value name=»pid_file»>/var/run/php-fpm/php-fpm.pid</value>

приводим к виду :

<value name=»pid_file»>/var/run/php-fpm52.pid</value>

ищем секцию pool

строку :

<value name=»listen_address»>127.0.0.1:9000</value>

приводим к виду :

<value name=»listen_address»>127.0.0.1:9003</value>

сохраняем наш файл

и переходим к созданию стартового скрипта:
touch /usr/local/php52/etc/rc.d/php-fpm

chmod +x /usr/local/php52/etc/rc.d/php-fpm

и редактируем данный файл :

#!/bin/sh

# PROVIDE: phpfpm
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable php-fpm:
#
#phpfpm_enable=»YES»
#
#

. /etc/rc.subr

name=phpfpm
rcvar=`set_rcvar`

command=»/usr/local/php52/bin/php-cgi»
command_args=»»
pidfile=/var/run/php-fpm52.pid
required_files=/usr/local/php52/etc/php-fpm.conf

# set defaults

phpfpm_enable=${phpfpm_enable:-«NO»}

start_cmd=»phpfpm_start»
stop_cmd=»phpfpm_stop»
restart_cmd=»phpfpm_restart»

phpfpm_start()
{
if [ -f ${pidfile} ]
then
echo «php-fpm already running!»
exit 1;
fi
echo «Starting php-fpm server…»
/usr/local/php52/bin/php-cgi —fpm
}
phpfpm_stop()
{
if [ ! -f ${pidfile} ]
then
echo «${name} is not running or pidfile not found!»;
exit 1;
fi
echo «stopping ${name}…»
kill -SIGQUIT `cat ${pidfile}`
}
phpfpm_restart()
{
if [ ! -f ${pidfile} ]
then
echo «${name} is not running or pidfile not found!»;
exit 1;
fi
echo «sending SIGUSR2 to php-fpm master»
kill -SIGUSR2 `cat ${pidfile}`
}

load_rc_config ${name}
run_rc_command «$1″

сохраняем и прописываем в /etc/rc.conf

phpfpm_enable=»YES»

теперь пробуем что у нас получилось 😉

/usr/local/etc/rc.d/php-fpm start

/usr/local/php53/etc/rc.d/php-fpm start

/usr/local/php52/etc/rc.d/php-fpm start

у нас должны запуститься 3 версии php-fpm слушающих на нужных нам портах

теперь нужно в nginx описать конфигурацию под разные версии пхп )

в конфиге nginx в секции http {

прописываем :

upstream php54 {

server 127.0.0.1:9001;

}

upstream php53 {

server 127.0.0.1:9002;

}

 

upstream php52 {

server 127.0.0.1:9003;

}

 

для того что бы использовать определенную версию нам нужно будет в секции server {

в location ~ \.php$ {

указать

fastcgi_pass php54; вместо php54 может быть и php53 или php52

}

так с этим разобрались теперь

нам нужны extensions для php53 и php52

ставим их для php53

cd /usr/ports/lang/php53-extensions

make config и выбираем нужные нам

затем пишем :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53

и ждем пока установиться

когда установилось смотрим есть ли все они )

/usr/local/php53/bin/php -m

[PHP Modules]
bcmath
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
imap
json
libxml
mbstring
mcrypt
mhash
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
snmp
soap
sockets
SPL
SQLite
sqlite3
standard
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip
zlib

[Zend Modules]

у меня вот такой вот список получился )

то есть ура php53 готов к работе )

теперь php52 производим те же действия

cd /usr/ports/lang/php52-extensions

make config выбираем нужные нам

и пишем

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52

и тут нас ждут балалайки такого вида :

«/usr/ports/Mk/bsd.php.mk», line 368: Malformed conditional (${_USE_PHP_VER${PHP_VER}:Mctype} != «»)

и эти балалайки я обходил так :

мне нужны только вот эти расширения :
curl iconv json mbstring mysql  openssl pcre pdo pdo-mysql sessions snmp sockets spl sqlite xml xmlreader xmlwriter zip zlib

установим их вручную ) раз простым путем не хочет, а там видать косяк ))

cd /usr/ports/ftp/php52-curl

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 && make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 install

остальное по аналогии )

в итоге у нас на сервере стоят 3 разных версии пхп каждая со своими расширениями )

на этом буду прощаться 😉 удачных вам установок )

 

 Внимание при копировании данной статьи авторство должно сохраняться

 ссылка должна быть активной и открытой для следования роботов ! 

Спасибо за внимание ! 

P.s. Уважайте чужой труд !