Архивировать: 06.12.2009

Настройка Apache (mod_rails) для подключения форума на phpBB

При переходе моего проекта orsk-net.ru с PHP на Ruby on Rails (Rails 2.2 + mod_rails) возникла одна сложность. На сайте работал форум доступный по адресу http://orsk-net.ru/forum и мне хотелось, чтобы он был доступен по тому же адресу. Решается эта задача следующим образом: в описании виртуального хоста в Apache нужно добавить секцию Location, где указывается директория в папке public нашего проекта, которая не должна использовать mod_rails. Так выглядит мой конфиг:

<VirtualHost *:80>
ServerAdmin admin@orsk-net.ru
ServerName orsk-net.ru
DocumentRoot «/usr/home/user/public_html/rails/public»
<Location /forum>
PassengerEnabled off
AllowOverride all
</Location>
ErrorLog «/var/log/error_log_user»
CustomLog «/var/log/access_log_user» common
</VirtualHost>

В папке public нужно сделать символическую ссылку на папку форума:
ln -s /usr/home/user/public_html/forum /usr/home/user/public_html/rails/public

С этими настройками всё заработало на Ура!

Установка DHCP под FreeBSD 7.1

Устанавливаем порт DHCP-сервера:

# cd /usr/ports/net/isc-dhcp30-server
# make install clean

Конфигурацию можно оставить по умолчанию.

В файл /etc/rc.conf вносим следующие строчки:

dhcpd_enable=»YES»
# Т.к. на сервере две сетевых платы, то указываем на каком интерфейсе будет работать DHCP сервер
dhcpd_ifaces=»xl0″

Правим /usr/local/etc/dhcpd.conf под свои запросы:

option domain-name «gorod.vera.local»;
option domain-name-servers ns.gorod.vera.local;

default-lease-time 600;
max-lease-time 7200;

ddns-update-style ad-hoc;

log-facility local7;

subnet 10.11.0.0 netmask 255.255.255.0 {
range 10.11.0.100 10.11.0.120;
option routers 10.11.0.201;
}

Установка BIND 9.6 под FreeBSD 7.1

Устанавливаем BIND из портов. На момент написания статьи последняя версия была 9.6.0-P1.

# cd /usr/ports/dns/bind96
# make install clean

Отмечаем опцию «REPLACE_BASE», чтобы заменить базовый BIND

Добавляем в файл /etc/rc.conf следующие строчки:

named_enable=»YES»

В файле named.conf дополняем адреса с которых будут приниматься запросы DNS:

listen-on { 10.10.0.0/16; 127.0.0.1; };

Там же прописываем адреса провайдера:

forwarders { 213.135.97.131; }

/etc/resolv.conf должен выглядить так:

nameserver 127.0.0.1

Перезагружаемся и смотрим логи на наличие ошибок — /var/log/messages. В дальнейшем перезагружать сервер целиком не потребуется. Для рестарта сервиса named применяется одна из команд:

# /etc/rc.d/named restart

# killall -HUP named

Если перезагрузка вызывает ошибку, к примеру такую:

# /etc/rc.d/named restart
Stopping named: rndc failed, trying killall: .
Starting named.

Отключаем файрволл и запускам команду снова. Если команда сработала, то меняем правила. Для PF нужно добавить строчку:
set skip on lo0

В предшествующих версиях BIND для создания реверсной зоны нужно было запускать скрипт /var/named/etc/namedb/make-localhost В версии bind 9.6 такого скрипта уже нет. Имеются два файла localhost-forward.db и localhost-reverse.db. Для создания файла зоны нужно скопировать localhost-forward.db под новым имененем зоны отредактировать:

# cp localhost-forward.db 6mk.lan

Работа с rndc

Включаем возможность работы с утилитой rndc:

# rndc-confgen > /etc/namedb/rndc.conf

копируем строки из rndc.conf в конец файла named.conf и снимаем с них комментарии.

Примеры конфигов

6mk.lan

$TTL 3600 ; 1 hour
6mk.lan. IN SOA ns.6mk.lan. admin.6mk.lan. (
2008010301 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)

; DNS Servers
IN NS ns.6mk.lan.
IN A 10.10.38.50

; Machine Names
ns IN A 10.10.38.50

; Aliases
www IN CNAME @

38.10.10.in-addr.arpa

; $FreeBSD: src/etc/namedb/master/localhost-reverse.db,v 1.1.8.1 2008/11/25 02:59:29 kensmith Exp $

$TTL 3h
@ SOA ns.6mk.lan. admin.6mk.lan. 42 1d 12h 1w 3h
; Serial, Refresh, Retry, Expire, Neg. cache TTL

IN NS ns.6mk.lan.

50 IN PTR ns.6mk.lan.
50 IN PTR 6mk.lan.

named.conf

options {
// Relative to the chroot directory, if any
directory «/etc/namedb»;
pid-file «/var/run/named/pid»;
dump-file «/var/dump/named_dump.db»;
statistics-file «/var/stats/named.stats»;

listen-on { 127.0.0.1; 10.10.0.0/16; 10.11.0.0/24; };

disable-empty-zone «255.255.255.255.IN-ADDR.ARPA»;

forwarders {
127.0.0.1; 213.135.97.131;
};
};

zone «.» { type hint; file «named.root»; };

zone «6mk.lan» {
type master;
file «master/6mk.lan»;
};

zone «38.10.10.in-addr.arpa» {
type master;
file «master/38.10.10.in-addr.arpa»;
};

// RFC 1912
zone «localhost» { type master; file «master/localhost-forward.db»; };
zone «127.in-addr.arpa» { type master; file «master/localhost-reverse.db»; };
zone «255.in-addr.arpa» { type master; file «master/empty.db»; };

# Use with the following in named.conf, adjusting the allow list as needed:
key «rndc-key» {
algorithm hmac-md5;
secret «zYt7cPSrHnIEwBagJtcIHg==»;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { «rndc-key»; };
};
# End of named.conf

Скрипт восстановления связи при разрыве соединения PPPoE

Модемы на моих серверах соединены по типу bridge. К сожалению это повлекло за собой определенные проблемы, касающиеся разрыва связи. По идее соединение должно восстанавливаться само, но при длительных разрывах это не происходит. Поэтому пришлось создать скрипт и поставить его в крон.
Судя по логам скрипт отрабатывает свою задачу как надо. Но есть и непонятные пока вещи, к примеру, иногда связь пропадает полностью. Причем перезагрузка модема и новый запуск данного скрипта связь не восстанавливает, помогает только перезагрузка ПК целиком.

Скрипт расположен по адресу: /usr/home/user/scripts/ppp-restart

ppp-restart

#!/bin/sh -xv

pings=`/sbin/ping -c 3 213.135.97.131 | grep -c «64 bytes»`
if [ $pings -gt 0 ]
then
:
else
/usr/bin/killall ppp
kill -9 `cat /var/run/tun0.pid`
sleep 5
/usr/sbin/ppp -ddial vtc
DATE=`date ‘+%Y-%m-%d %H:%M:%S’`
PPP_RESTART_LOG=/var/log/ppp_restart.log
echo ${DATE} «[ERROR] Not request from 213.135.97.131» >> $PPP_RESTART_LOG
fi

Задание для крона:

*/1 * * * * /bin/sh /usr/home/user/scripts/ppp-restart
ppp.conf

default:
set device PPPoE:re0:vtc
set speed sync
set mru 1492
set mtu 1492
set ctsrts off
set timeout 0 # 3 minute idle timer (the default)
set redial 0 0

enable lqr
set lqrperiod 5

vtc:
set authname мой_логин
set authkey мой_пароль
add default HISADDR

Сборка ядра под FreeBSD 7.1

Для нормальной компиляции ядра необходимо, чтобы были установлены все исходные коды. Сборка ядра делается следующей коммандой:

# cd /usr/src
# make KERNCONF=MYKERNEL kernel

В конфиге комментируем ненужные устройства (SCSI, RAID, FireWire). Мой конфиг выглядит так:

#cpu        I486_CPU
#cpu        I586_CPU
cpu        I686_CPU
ident        KERNEL3

# To statically compile in device wiring instead of /boot/device.hints
#hints        «GENERIC.hints»        # Default places to look for devices.

#makeoptions    DEBUG=-g        # Build kernel with gdb(1) debug symbols

options     SCHED_ULE        # ULE scheduler
options     PREEMPTION        # Enable kernel thread preemption
options     INET            # InterNETworking
#Отключаем поддержку протокола IPv6. Обязательно отключаем поддержку SCTP
#иначе будет вылезать ошибка при компиляции.
#options     INET6            # IPv6 communications protocols
#options     SCTP            # Stream Control Transmission Protocol
options     FFS            # Berkeley Fast Filesystem
options     SOFTUPDATES        # Enable FFS soft updates support
options     UFS_ACL            # Support for access control lists
options     UFS_DIRHASH        # Improve performance on big directories
options     UFS_GJOURNAL        # Enable gjournal-based UFS journaling
options     MD_ROOT            # MD is a potential root device
#Отключаем поддержку сетевой файловой системы
#options     NFSCLIENT        # Network Filesystem Client
#options     NFSSERVER        # Network Filesystem Server
#options     NFSLOCKD        # Network Lock Manager
#options     NFS_ROOT        # NFS usable as /, requires NFSCLIENT
options     MSDOSFS            # MSDOS Filesystem
options     CD9660            # ISO 9660 Filesystem
options     PROCFS            # Process filesystem (requires PSEUDOFS)
options     PSEUDOFS        # Pseudo-filesystem framework
options     GEOM_PART_GPT        # GUID Partition Tables.
options     GEOM_LABEL        # Provides labelization
#options     COMPAT_43TTY        # BSD 4.3 TTY compat [KEEP THIS!]
options     COMPAT_FREEBSD4        # Compatible with FreeBSD4
options     COMPAT_FREEBSD5        # Compatible with FreeBSD5
options     COMPAT_FREEBSD6        # Compatible with FreeBSD6
#Т.к. SCSI устройств нет, то отключаем их проверку.
#options     SCSI_DELAY=5000        # Delay (in ms) before probing SCSI
options     KTRACE            # ktrace(1) support
options     STACK            # stack(9) support
options     SYSVSHM            # SYSV-style shared memory
options     SYSVMSG            # SYSV-style message queues
options     SYSVSEM            # SYSV-style semaphores
options     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options     KBD_INSTALL_CDEV    # install a CDEV entry in /dev
options     ADAPTIVE_GIANT        # Giant mutex is adaptive.
options     STOP_NMI        # Stop CPUS using NMI instead of IPI
options     AUDIT            # Security event auditing
#options     KDTRACE_HOOKS        # Kernel DTrace hooks

#Включаем возможность ограничивать скорость через PF
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

#Включаем возможность задавать квоты
options        QUOTA

#Включаем поддержку VPN IPSEC
options        IPSEC
device        crypto

#Включаем поддержку PF
device pf
device pflog
device pfsync

# To make an SMP kernel, the next two lines are needed
options     SMP            # Symmetric MultiProcessor Kernel
device        apic            # I/O APIC

# CPU frequency control
device        cpufreq

# Bus support.
device        eisa
device        pci

# Floppy drives
device        fdc

# ATA and ATAPI devices
device        ata
device        atadisk        # ATA disk drives
device        ataraid        # ATA RAID drives
device        atapicd        # ATAPI CDROM drives
device        atapifd        # ATAPI floppy drives
device        atapist        # ATAPI tape drives
options     ATA_STATIC_ID    # Static device numbering

#Т.к. SCSI устройств нет, то отключаем их поддержку.
# SCSI Controllers
#device        ahb        # EISA AHA1742 family
#device        ahc        # AHA2940 and onboard AIC7xxx devices
#options     AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
# output.  Adds ~128k to driver.
#device        ahd        # AHA39320/29320 and onboard AIC79xx devices
#options     AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
# output.  Adds ~215k to driver.
#device        amd        # AMD 53C974 (Tekram DC-390(T))
#device        hptiop        # Highpoint RocketRaid 3xxx series
#device        isp        # Qlogic family
#device     ispfw        # Firmware for QLogic HBAs- normally a module
#device        mpt        # LSI-Logic MPT-Fusion
#device        ncr        # NCR/Symbios Logic
#device        sym        # NCR/Symbios Logic (newer chipsets + those of `ncr’)
#device        trm        # Tekram DC395U/UW/F DC315U adapters

#device        adv        # Advansys SCSI adapters
#device        adw        # Advansys wide SCSI adapters
#device        aha        # Adaptec 154x SCSI adapters
#device        aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device        bt        # Buslogic/Mylex MultiMaster SCSI adapters

#device        ncv        # NCR 53C500
#device        nsp        # Workbit Ninja SCSI-3
#device        stg        # TMC 18C30/18C50

# SCSI peripherals
device        scbus        # SCSI bus (required for SCSI)
#device        ch        # SCSI media changers
device        da        # Direct Access (disks)
#device        sa        # Sequential Access (tape etc)
#device        cd        # CD
#device        pass        # Passthrough device (direct SCSI access)
#device        ses        # SCSI Environmental Services (and SAF-TE)

# RAID пока недоступная роскошь, поэтому отключаем.
# RAID controllers interfaced to the SCSI subsystem
#device        amr        # AMI MegaRAID
#device        arcmsr        # Areca SATA II RAID
#device        asr        # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device        ciss        # Compaq Smart RAID 5*
#device        dpt        # DPT Smartcache III, IV — See NOTES for options
#device        hptmv        # Highpoint RocketRAID 182x
#device        hptrr        # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
#device        iir        # Intel Integrated RAID
#device        ips        # IBM (Adaptec) ServeRAID
#device        mly        # Mylex AcceleRAID/eXtremeRAID
#device        twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
#device        aac        # Adaptec FSA RAID
#device        aacp        # SCSI passthrough for aac (requires CAM)
#device        ida        # Compaq Smart RAID
#device        mfi        # LSI MegaRAID SAS
#device        mlx        # Mylex DAC960 family
#device        pst        # Promise Supertrak SX6000
#device        twe        # 3ware ATA RAID

# atkbdc0 controls both the keyboard and the PS/2 mouse
device        atkbdc        # AT keyboard controller
device        atkbd        # AT keyboard
device        psm        # PS/2 mouse

device        kbdmux        # keyboard multiplexer

device        vga        # VGA video card driver

device        splash        # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console
device        sc

device        agp        # support several AGP chipsets

# Power management support (see NOTES for more options)
#device        apm
# Add suspend/resume support for the i8254.
device        pmtimer

#Нет на моём сервере PCMCIA устройств. Отключаем
# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
#device        cbb        # cardbus (yenta) bridge
#device        pccard        # PC Card (16-bit) bus
#device        cardbus        # CardBus (32-bit) bus

# Serial (COM) ports
device        sio        # 8250, 16[45]50 based serial ports
device        uart        # Generic UART driver

# Parallel port
device        ppc
device        ppbus        # Parallel port bus (required)
device        lpt        # Printer
device        plip        # TCP/IP over parallel
device        ppi        # Parallel port interface device
#device        vpo        # Requires scbus and da

# If you’ve got a «dumb» serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to sio, uart and/or ppc drivers):
#device        puc

# PCI Ethernet NICs.
device        de        # DEC/Intel DC21x4x («Tulip»)
device        em        # Intel PRO/1000 Gigabit Ethernet Family
device        igb        # Intel PRO/1000 PCIE Server Gigabit Family
device        ixgb        # Intel PRO/10GbE Ethernet Card
device        le        # AMD Am7900 LANCE and Am79C9xx PCnet
device        txp        # 3Com 3cR990 («Typhoon»)
device        vx        # 3Com 3c590, 3c595 («Vortex»)

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the ‘device miibus’ line in order to use these NICs!
device        miibus        # MII bus support
device        age        # Attansic/Atheros L1 Gigabit Ethernet
#device        ale        # Atheros AR8121/AR8113/AR8114 Ethernet
device        bce        # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device        bfe        # Broadcom BCM440x 10/100 Ethernet
device        bge        # Broadcom BCM570xx Gigabit Ethernet
device        dc        # DEC/Intel 21143 and various workalikes
device        et        # Agere ET1310 10/100/Gigabit Ethernet
device        fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device        jme        # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
device        lge        # Level 1 LXT1001 gigabit Ethernet
device        msk        # Marvell/SysKonnect Yukon II Gigabit Ethernet
device        nfe        # nVidia nForce MCP on-board Ethernet
device        nge        # NatSemi DP83820 gigabit Ethernet
#device        nve        # nVidia nForce MCP on-board Ethernet Networking
device        pcn        # AMD Am79C97x PCI 10/100 (precedence over ‘le’)
device        re        # RealTek 8139C+/8169/8169S/8110S
device        rl        # RealTek 8129/8139
device        sf        # Adaptec AIC-6915 («Starfire»)
device        sis        # Silicon Integrated Systems SiS 900/SiS 7016
device        sk        # SysKonnect SK-984x & SK-982x gigabit Ethernet
device        ste        # Sundance ST201 (D-Link DFE-550TX)
device        stge        # Sundance/Tamarack TC9021 gigabit Ethernet
device        ti        # Alteon Networks Tigon I/II gigabit Ethernet
device        tl        # Texas Instruments ThunderLAN
device        tx        # SMC EtherPower II (83c170 «EPIC»)
device        vge        # VIA VT612x gigabit Ethernet
device        vr        # VIA Rhine, Rhine II
device        wb        # Winbond W89C840F
device        xl        # 3Com 3c90x («Boomerang», «Cyclone»)

# ISA Ethernet NICs.  pccard NICs included.
device        cs        # Crystal Semiconductor CS89x0 NIC
# ‘device ed’ requires ‘device miibus’
device        ed        # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device        ex        # Intel EtherExpress Pro/10 and Pro/10+
device        ep        # Etherlink III based cards
device        fe        # Fujitsu MB8696x based cards
device        ie        # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device        sn        # SMC’s 9000 series of Ethernet chips
device        xe        # Xircom pccard Ethernet

# Wireless NIC cards
device        wlan        # 802.11 support
device        wlan_wep    # 802.11 WEP support
device        wlan_ccmp    # 802.11 CCMP support
device        wlan_tkip    # 802.11 TKIP support
device        wlan_amrr    # AMRR transmit rate control algorithm
device        wlan_scan_ap    # 802.11 AP mode scanning
device        wlan_scan_sta    # 802.11 STA mode scanning
device        an        # Aironet 4500/4800 802.11 wireless NICs.
device        ath        # Atheros pci/cardbus NIC’s
device        ath_hal        # Atheros HAL (Hardware Access Layer)
device        ath_rate_sample    # SampleRate tx rate control for ath
device        awi        # BayStack 660 and others
device        ral        # Ralink Technology RT2500 wireless NICs.
device        wi        # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
device        wl        # Older non 802.11 Wavelan wireless NIC.

# Pseudo devices.
device        loop        # Network loopback
device        random        # Entropy device
device        ether        # Ethernet support
device        sl        # Kernel SLIP
device        ppp        # Kernel PPP
device        tun        # Packet tunnel.
device        pty        # Pseudo-ttys (telnet etc)
device        md        # Memory «disks»
device        gif        # IPv6 and IPv4 tunneling
device        faith        # IPv6-to-IPv4 relaying (translation)
device        firmware    # firmware assist module

# The `bpf’ device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that ‘bpf’ is required for DHCP.
device        bpf        # Berkeley packet filter

# USB support
device        uhci        # UHCI PCI->USB interface
device        ohci        # OHCI PCI->USB interface
device        ehci        # EHCI PCI->USB interface (USB 2.0)
device        usb        # USB Bus (required)
#device        udbp        # USB Double Bulk Pipe devices
device        ugen        # Generic
device        uhid        # «Human Interface Devices»
device        ukbd        # Keyboard
device        ulpt        # Printer
device        umass        # Disks/Mass storage — Requires scbus and da
device        ums        # Mouse
device        ural        # Ralink Technology RT2500USB wireless NICs
device        rum        # Ralink Technology RT2501USB wireless NICs
device        urio        # Diamond Rio 500 MP3 player
device        uscanner    # Scanners
# USB Serial devices
device        ucom        # Generic com ttys
device        uark        # Technologies ARK3116 based serial adapters
device        ubsa        # Belkin F5U103 and compatible serial adapters
device        ubser        # BWCT console serial adapters
device        uftdi        # For FTDI usb serial adapters
device        uipaq        # Some WinCE based devices
device        uplcom        # Prolific PL-2303 serial adapters
device        uslcom        # SI Labs CP2101/CP2102 serial adapters
device        uvisor        # Visor and Palm devices
device        uvscom        # USB serial support for DDI pocket’s PHS
# USB Ethernet, requires miibus
#device        aue        # ADMtek USB Ethernet
#device        axe        # ASIX Electronics USB Ethernet
#device        cdce        # Generic USB over Ethernet
#device        cue        # CATC USB Ethernet
#device        kue        # Kawasaki LSI USB Ethernet
#device        rue        # RealTek RTL8150 USB Ethernet

#Отключаем FireWire за ненадобностью
# FireWire support
#device        firewire    # FireWire bus code
#device        sbp        # SCSI over FireWire (Requires scbus and da)
#device        fwe        # Ethernet over FireWire (non-standard!)
#device        fwip        # IP over FireWire (RFC 2734,3146)
#device        dcons        # Dumb console driver
#device        dcons_crom    # Configuration ROM for dcons

Установка Apache 22 + PHP 5 + MySQL 5.1 + phpMyAdmin

Устанавливаем из портов Apache22, при этом убираем поддержку IPV6:

cd /usr/ports/www/apache22
make install clean

Для старта apache при загрузке системы прописываем в /etc/rc.conf строчку:
apache22_enable=»YES»

Устанавливаем php5. Убираем поддержку IPV6, добавляем поддержку Apache:

cd /usr/ports/lang/php5
make install clean

В конфиге Apache /usr/local/etc/apache22/httpd.conf смотрим чтобы была строчка:

LoadModule php5_module libexec/apache22/libphp5.so

а так же блок:

<IfModule mod_php5.c>
DirectoryIndex index.php index.html
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>

находим секцию <IfModule dir_module> и добавляем index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

В /usr/local/etc/php.ini проверяем, чтобы было разрешено отображение короткой формы записи

short_open_tag = On

Включаем защищенный режим:

safe_mode = On

Необходимо так же раскомментировать строчки:

extension=php_mcrypt.dll
session.save_path = "/tmp"

После этих действий страницы на php буду нормально открываться в браузере.

Устанавливаем MySQL 5.1

cd /usr/ports/databases/mysql51-server
make install clean

cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf

/usr/local/bin/mysql_intsall_db —user=mysql

chown -R mysql:mysql /var/db/mysql/

/usr/local/bin/mysqld_safe –user=mysql &

/usr/local/bin/mysqladmin -u root password ‘123456’
в /etc/rc.conf добавляем:

mysql_enable=”YES”

Установка PhpMyAdmin

cd /usr/ports/databases/phpmyadmin
make install clean

добавляем в /usr/local/etc/apache22/httpd.conf

Alias /pma/ «/usr/local/www/phpMyAdmin/»

<Directory «/usr/local/www/phpMyAdmin/»>
Options none
AllowOverride Limit

Order Deny,Allow
Deny from all
Allow from 127.0.0.1 .example.com
</Directory>

Вместо .example.com нужно вписать IP с которого разрешено заходить.

Теперь необходимо создать файл конфигурации для подключения phpMyAdmin к MySQL. Делаем следующие действия:

cd phpMyAdmin
mkdir config                               # создаем директорию для записи
chmod o+rw config                     # даем права на запись
cp config.inc.php config/              # копируем текущий конфигурационный файл для редактирования
chmod o+w config/config.inc.php  # даем права на запись

Идем по адресу http://наш_сервер/pma/scripts/setup.php, нажимаем add, вносим нужные настройки (пароль root к БД, способ

атентификации) и записываем конфигурацию. Далее копируем конфигурационный файл обратно:

mv config/config.inc.php .
chmod o+r config.inc.php             # ставим необходимые права

Всё. Теперь можно заходить по адресу http://наш_сервер/pma/ и редактировать БД.

Ставим php5-mysql

cd /usr/ports/databases/php5-mysql
make install clean

Ставим php5-extensions, обязательно отметив галочками следующие пункты — BCMATH, FTP, GD, GETTEXT, MBSTRING, ZLIB

cd /usr/ports/lang/php5-extensions
make install clean

Веб-файлы предполагается размещать в домашнем каталоге пользователя user. Создадим там папку www. И сделаем символическую ссылку в этот каталог.
cd /usr/local/www/apache22/
rm -dr data
ln -s /usr/home/user/www /usr/local/www/apache22/data

Подсчёт трафика с помощью trafd

Хорошая статья о возможностях trafd находится здесь — http://www.hub.ru/archives/2061 В своей заметке я выбрал лишь то, что нужно действительно мне и подправил пару неточностей.

Установим trafd:

# cd /usr/ports/net-mgmt/trafd
# make install clean

Создаем файл, куда будет писаться статистика (fxp0 — название интерфейса с которого будем собирать статистику):

# touch /usr/local/var/trafd/trafd.fxp0

Запускаем сам сбор статистики:

# /usr/local/bin/trafd -i fxp0

Эту же строчку добавим в /etc/rc.conf для автоматического старта при запуске. В идеале в /etc/rc.conf нужно прописать
trafd_enable=»YES»
trafd_ifaces=»fxp0″

но с этими строчками trafd не запустился, поэтому для автоматического старта прописываем в cron  такую строчку:

@reboot /usr/local/bin/trafd -i fxp0
Проверяем работу демона:

ps ax | grep trafd

7753 ?? Ss 0:00.07 /usr/local/bin/trafd -i fxp0
7826 p0 R+ 0:00.00 grep trafd

Добавим задачу в crontab чтобы данные сохранялись каждые 3 часа:

0 */3 * * * /usr/local/bin/trafsave fxp0

Посмотреть отчет за период со времени последнего сохранения:

# traflog -n -i fxp0 (-n указывает не преобразовывать IP адреса)

Посмотреть перечень записей:

# traflog -l -i fxp0

Примерный вывод результата:

# Started Dumped Data All Recs
001 Dec 10 16:44:46 Dec 10 16:49:54 18638 25246 7
002 Dec 10 16:49:54 Dec 10 16:50:45 22 55 1
003 Dec 10 16:50:45 Dec 10 16:51:15 8607 9111 1
004 Dec 10 16:51:15 Dec 10 20:00:01 68463394 72252858 349
005 Dec 10 20:00:01 Dec 11 00:00:01 1552189274 1621174536 577

Допустим, перед нами стоит задача посчитать сколько трафика скачано с определенного IP за весь период подсчётов. Выяснить это можно так:

traflog -n -i fxp0 -s from all to 10.10.51.79 | grep Summary

Если требуется высчитать трафик за определенный период, то добавляем ключи, указывающие на начало и конец отчетного периода (параметры -b <первая запись> -e <последняя запись>):

traflog -n -i fxp0 -s -b1 -e33 from all to 10.10.51.79 | grep Summary

Команда » | grep Summary» отсекает вывод излишне подробной статистки, откуда и сколько байт пришло, это бывает полезно, если нужно смотреть статистику используя медленные каналы связи.

Один из примеров использования trafd — подсчет трафика одной из игрушек, использующей порты 2106 и 7777, прошедшего через внешний интерфейс за определенный период:

traflog -n -i tun0 -b1 -e28 -s port 7777 port 2106 | grep Summary

Ссылки:

Установка SAMS с NCSA и IP авторизацией на FreeBSD из портов

Что такое SAMS, его возможности и принцип работы хорошо описаны здесь — http://www.permlug.org/wiki/sams. К сожалению в свое время я не нашел хорошей пошаговой инструкции по установке SAMS из портов в системе FreeBSD, поэтому написал собственную шпаргалку. Надеюсь, она поможет начинающим обойти те подводные камни, которые попались мне.

Установка проводилась на FreeBSD 6.3, на момент установки в системе присутствовали следующие пакеты:

mysql-5.0.51a
php5-5.2.6
apache-2.2.9
samba-3.0.31_1

Связка Apache2 + PHP + MySQL без проблем работала (о её установке читайте в предыдущих заметках), оставалось поставить из портов последние доступные версии squid-2.7.5 и sams-1.0.3.

Ставим squid, обязательно выбираем опцию — Enable delay pools:

# cd /usr/ports/www/squid

# make install clean

В /usr/local/etc/squid/squid.conf включаем ncsa авторизацию (это важный пункт, т.к. SAMS этого сам не сделает). Раскомментируем и подправим следующие строчки:

auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/ncsa.sams
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Создаем файл ncsa.sams. По идее SAMS сделает его самостоятельно, но нам сейчас нужно, чтобы Squid запустился еще до SAMS с целью тестирования его работы.

# touch /usr/local/etc/squid/ncsa.sams

Запускаем Squid:

# rehash
# squid -z
# /usr/local/etc/rc.d/squid start

Проверяем работу Squid. Должно показаться что-то вроде:

# ps -ax | grep squid
18859 ?? Is 0:00.00 /usr/local/sbin/squid -D
18861 ?? S 0:00.18 (squid) -D (squid)
18862 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18863 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18864 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18865 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
18866 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)

Приступаем к установке SAMS из портов. При конфигурации выбираем поддержку Apache 2 (у меня он и стоит):

# cd /usr/ports/www/sams
# make config
# make
# make install
# cp /usr/local/etc/sams.conf.sample /usr/local/etc/sams.conf
# make setup

Здесь нужно будет ввести пароль  пользователя root  в MySQL, согласиться на создание баз данных и пользователя sams и назначить ему пароль.

# make clean

После завершения инсталяции следуем выданным инструкциям. В конфиг Apache добавляем:

Alias /sams/ «/usr/local/share/sams/»
<Directory «/usr/local/share/sams/»>
AllowOverride AuthConfig
Options Indexes MultiViews
Order allow,deny
Allow from all
</Directory>

В файл /etc/rc.conf добавим:

sams_enable=”YES”
squid_enable=”YES”

Прописываем правильные пути в файле /usr/local/etc/sams.conf. Мой файл выглядит так:

[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=samspasswd
MYSQLVERSION=5.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/usr/local/etc/squid
SQUIDLOGDIR=/usr/local/squid/logs
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr/local
SQUIDPATH=/usr/local/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidGuard
RECODECOMMAND=/usr/local/bin/iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=servername_or_ipadress
LDAPBASEDN=your.domain
LDAPUSER=DomainAdministrator
LDAPUSERPASSWD=passwd
LDAPUSERSGROUP=Users
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=/sbin/shutdown -h now
CACHENUM=0
MYSQLUSER=sams
MYSQLPASSWORD=123456
MYSQLHOSTNAME=localhost

Запускаем sams:

# samsdaemon

Проверяем запустилось ли всё что нужно:

# ps -ax | grep sams
25865 ?? I 0:00.00 /usr/local/bin/samsf
25868 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25869 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25870 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25871 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
25872 ?? Is 0:00.00 (ncsa_auth) /usr/local/etc/squid/ncsa.sams (ncsa_auth)
22678 p0- S 0:13.77 samsdaemon
26153 p0 R+ 0:00.00 grep sams

Заходим в веб-интерфейс SAMS — http://ip_server/sams/ по умолчанию пользователь admin, пароль qwerty.
SAMS -> SAMS administration -> SAMS settings выбираем NCSA авторизацию, ставим галочку на «Insert SQUID logs in database». Записывам настройки.

ВАЖНО!!! Обязательно изменить в «templates» тип авторизации на NCSA (по умолчанию стоит по IP). Если не сделать этого, то в консоли будет вываливаться сообщение о пуcтом файле default.sams.
Добавляем новых пользователей. Делаем переконфигурирование — SAMS -> SQUID -> SQUID reconfiguration -> Reconfigurate

Идем в браузер, прописываем настройки прокси и пробуем выйти в Интернет. Если всё настроено правильно, то должно появится окно авторизации, вводим логин и пароль ранее добавленного пользователя и выходим на бескрайние просторы Интернета.

Теперь, когда настроена авторизация по логину/паролю, можно без труда настроить авторизацию по IP адресу. Для этого нужно создать дополнительный шаблон и указать в нём тип авторизации «IP», затем добавляем новых пользователей указав в их профиле новый шаблон, а также IP адрес с которого должен работать пользователь, пароль указывать не нужно, но в браузере всё так же требуется прописать настройки прокси-сервера.

Решение разных проблем

Спустя некоторое время после использования SAMS выяснилось, что периодически падает демон samsf отвечающий за непрерывную обработку логов Squid. Оказалось, что разработчики более не поддерживают его и рекомендуется использовать опцию «Discret parser» SAMS -> SAMS administration -> SAMS settings. Периодичность я поставил 1 минуту. После этого всё нормализовалось.

Если при реконфигурировании SAMS новые пользователи не добавляются в ncsa.sams то можно попробовать убить процессы samsdaemon и samsf и запустить samsdaemon заново.

Другой частый вариант при первых запусках SAMS — не стартует squid или ругается на несуществующий процесс. В этом случае нужно в ручную создать файл /usr/local/etc/squid/ncsa.sams (даже если вы его создавали в начале установки, то при реконфигурировании SAMS он скорей всего был удален), затем в папке /usr/local/squid/logs удаляем файл squid.pid (иногда также помогает удаление |access.log) после этого лучше перезагрузиться.

Ещё один нюанс настройки SAMS — при перезапуске сервера SAMS норовит стартовать раньше MySQL, в результате чего он не может открыть нужные таблицы. Есть несколько способов это устранить, один из них дополнить в файле /usr/local/etc/rc.d/sams строчку:

# REQUIRE: LOGIN cleanvar

до

# REQUIRE: LOGIN cleanvar mysql

Другой вариант — убрать из /etc/rc.conf строчку sams_enable=”YES” и прописать в crontab строчку:

@reboot /usr/local/etc/rc.d/sams start
Перезагружаем сервер, смотрим работу SAMS, если всё нормально, то на этом настройку можно считать завершенной.

Следует иметь в виду, что в SAMS есть масса других подводных камней, которые могут проявиться при попытке настроить авторизацию по NTLM и т.д. Есть также вероятность, что в один не очень хороший день SAMS может упасть без видимой причины. В этих случаях я советую искать ответы на форуме http://www.permlug.org/forum/sams/ Многие подобные ситуации уже обсуждались и ответы были найдены, нужно лишь искать.

На всякий случай приведу примеры файлов конфигурации.

Пример файла /usr/local/etc/rc.d/sams

#!/bin/sh
# $FreeBSD: ports/www/sams/files/sams.sh.in,v 1.1 2006/12/29 20:18:35 miwi Exp $

# PROVIDE: sams
# REQUIRE: LOGIN cleanvar mysql — очень важно, без mysql не будет стартовать при загрузке ОС
# KEYWORD: shutdown

# Define these sams_* variables in one of these files:
# /etc/rc.conf
# /etc/rc.conf.local
# /etc/rc.conf.d/sams
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
#
sams_enable=${sams_enable-«NO»}
sams_flags=${sams_flags-«»}
sams_pidfile=${sams_pidfile-«/var/run/samsdaemon.pid»}

. /etc/rc.subr

name=»sams»
rcvar=`set_rcvar`
command=»/usr/local/bin/samsdaemon»

load_rc_config $name

pidfile=»${sams_pidfile}»

run_rc_command «$1»

Пример файла /usr/local/etc/squid/squid.conf:

auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/ncsa.sams

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl _sams_4934254f2ae45 src «/usr/local/etc/squid/4934254f2ae45.sams»
acl _sams_4934254f2ae45_time time MTWHFAS 00:00-23:59
acl _sams_default proxy_auth «/usr/local/etc/squid/default.sams»
acl _sams_default_time time MTWHFAS 00:00-23:00
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow _sams_4934254f2ae45 _sams_4934254f2ae45_time
http_access allow _sams_default _sams_default_time
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid/logs/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
delay_pools 2
delay_class 1 2
delay_class 2 2
delay_access 1 allow _sams_4934254f2ae45
delay_access 1 deny all
delay_parameters 1 524288/524288 524288/524288
delay_access 2 allow _sams_default
delay_access 2 deny all
delay_parameters 2 64000/64000 64000/64000
coredump_dir /usr/local/squid/cache

ipfw + natd + tun0

Исходные данные: имеем сервер FreeBSD 6.3 с двумя сетевыми картами в одну подключен модем ADSL в режиме bridge, в другую локальную сеть
Задача: разрешить выход в интернет компьютерам локальной сети и дать возможность доступа по определенным портам из интернета на компьютеры в сети.

Для начала работы ipfw пересоберем ядро с нужными опциями:

# Включаем поддержку ipfw
options IPFIREWALL
# Включаем логирование пакетов,
# которые попадут под правило log
options IPFIREWALL_VERBOSE
# Ограничение размера журнального файла,
# на случай DDoS атаки
options IPFIREWALL_VERBOSE_LIMIT=100
# Пригодится, если понадобится воспользоваться
# возможностью перенаправления пакетов
# (например, при создании transparent proxy).
options IPFIREWALL_FORWARD
# Дайверт, для того, чтобы работал NAT, если
# нужно выпустить в Интернет локальную сеть
options IPDIVERT
# Эта опция пригодится, в случае задания
# шейпов для ограничения скорости.
options DUMMYNET

Файл с настройками для дозвона модема:

/etc/ppp/ppp.conf

default:
set device PPPoE:rl0:vtc
set speed sync
set mru 1492
set mtu 1492
set ctsrts off
set timeout 0
set redial 0 0

# Link Quality Request
enable lqr
set lqrperiod 5

vtc:
set authname login # наш логин
set authkey password # наш пароль
add default HISADDR

/etc/rc.conf

defaultrouter=»192.168.1.1″
hostname=»gorod.vera.local»
ifconfig_re0=»inet 10.10.38.100 netmask 255.255.255.0″
ifconfig_rl0=»inet 192.168.1.2 netmask 255.255.255.0″

gateway_enable=»YES»
natd_enable=»YES»
#NAT будет работать на внешнем интерфейсе модема
natd_interface=»tun0″
natd_flags=»-f /etc/natd.conf»

firewall_enable=»YES»
firewall_type=»/etc/rc.firewall»
#включаем логирование пакетов
firewall_logging=»YES»

#включаем дозвон модема
ppp_nat=»NO»
ppp_enable=»YES»
ppp_mode=»ddial»
ppp_profile=»vtc»

Файл с настройками ipfw (делаем его исполняемым — 754)

/etc/rc.firewall

#!/bin/sh —

fw=»/sbin/ipfw -q»

inif=»re0″
outif=»tun0″
inip=»10.10.38.100″
outip=»85.192.x.x»
innet=»10.10.38.0/24″

${fw} -f flush
${fw} add allow all from any to any via lo0
${fw} add deny log all from any to 127.0.0.0/8
${fw} add deny log all from 127.0.0.0/8 to any

${fw} add divert natd log all from ${innet} to any out via ${outif}
${fw} add divert natd log all from any to ${outip} in via ${outif}

${fw} add allow tcp from any to any via ${outif} established
${fw} add allow tcp from ${inip},${outip} to any out xmit ${outif} setup

${fw} add allow all from ${innet} to any out via ${inif}
${fw} add allow all from any to ${innet} in via ${inif}

##### Правила для UDP протокола ####
#
# — для сервера
# Разрешаем все исходящие UDP запросы с самого сервера
# Без этого не работают такие команды как traceroute
# Хотя, как вариант, можно обойтись и без этого если
# использовать traceroute -P icmp
${fw} add allow udp from ${outip} to any out via ${outif}
# Разрешаем входящие DNS запросы к нашему DNS серверу
# если конечно таковой испольуется на этой машине.
${fw} add allow udp from any to ${outip} 53 in via ${outif}
# Разрешаем ответы от DNS серверов на запросы
# от нашего хоста.
${fw} add allow udp from any 53 to ${outip} in via ${outif}
# Разрешаем ответы от серверов времени на запросы
# от нашего хоста
${fw} add allow udp from any 123 to ${outip} in via ${outif}
#
# — для локальной сети
# Разрешаем DNS запросы/ответы для всей сети
${fw} add allow udp from ${innet} to any 53
${fw} add allow udp from any 53 to ${innet}
# Разрешаем запросы/ответы к серверам времени для всей сети
${fw} add allow udp from ${innet} to any 123
${fw} add allow udp from any 123 to ${innet}

${fw} add allow tcp from ${innet} to any in via ${inif}
${fw} add allow tcp from any to ${innet} out via ${inif}

${fw} add allow all from any to any
${fw} add deny log all from any to any

При настройке сервера я долго не мог понять почему не работает данная связка. Ответ оказался простым — natd не стартовал на интерфейсе tun0 т.к. его еще нет при старте системы, а появляется он после того как модем дозвонился. Проверить включен ли нат можно командой:

# /etc/rc.d/natd status

Если работает, то ответ получаем примерно такой:

natd is running as pid 1175.

Если не работает, то запустить можно командой:

# /etc/rc.d/natd start

Решение данной проблемы может быть таким: прописываем задачу в cron чтобы natd стартовал при каждой загрузке компьютера принудительно.

# crontab -e

@reboot /etc/rc.d/natd start

Если нужно пробросить порты с внешнего интерфейса на компьютеры внутри сети, то редактируем файл /etc/natd.conf. К примеру нужно открыть доступ по 5000 порту на компьютер с IP 10.10.38.200. Для этого добавляем в файл строчку:

redirect_port tcp 10.10.38.200:5000 5000

На этом настройку можно считать законченной.

Статья на основе которой я  настраивал связку — http://live.daemony.org/freebsd/ipfw-natd-tun0.html

Установка webmin

Данная программа может оказаться полезной для новичков изучающих Unix системы.

Устанавливаем сам webmin:

# cd /usr/ports/sysutils/webmin
# make install clean

Для запуска webmin при старте системы сконфигурируем файл /etc/rc.conf добавив в него строчку:

webmin_enable=»YES»
Для конфигурирования webmin запустим скрипт:

# /usr/local/lib/webmin/setup.sh

Отвечаем на вопросы конфигуратора. Если предлагаемую настройку менять не нужно, то нажимаем Enter:

Web server port (default 10000): [Press Enter]
Login name (default admin): [Press Enter]
Login password: [наш пароль]
Password again:
Use SSL (y/n): y

Зайти в программу можно введя следущий адрес:

https://your-server-ip:10000

Авторизация на сервере FreeBSD по SSH ключам

Исходные данные: имеется сервер на базе FreeBSD, имеются клиентские машины с которых надо периодически заходить на этот сервер. В качестве SSH-клиента используется PuTTY.
Задача: избавить себя от постоянного ввода паролей вручную и проходить авторизацию с помощью специальных ключей.

Для подключения клиента требуется сгенерировать два ключа — закрытй и публичный. В клиенте PuTTY это делается утилитой puttygen.exe. В открывшемся окне меняем значение Number of bits in a generated key с 1024 на более сложное, например 2343. Нажимаем кнопку Generate и водим мышкой чтобы создать случайный код.

По завершении генерации станут активными две кнопки — Save public key и Save private key. Нажимаем на первую кнопку и сохраняем публичный ключ с названием, к примеру, rsa-pub. Второй ключ сохраним как rsa-private. При этом программа напомнит, что нужно ввести еще секретную фразу т.к. это увеличит безопасность, но мы откажемся т.к. задача соединяться не вводя пароли.

Теперь соединяемся с нашим сервером и заходим в домашнюю папку того пользователя под которым будем соединяться с сервером. Создаем там директорию .ssh

$ mkdir .ssh

Ставим на папку права 700

Копируем туда наш публичный ключ. И в этой же директории выполняем следующую команду:

# ssh-keygen -i -f rsa-pub > authorized_keys

Открываем PuTTY выбираем нашу запись для соединения с сервером, и добавляем в раздел Connection — SSH — Auth путь к нашему приватному ключу. Всё, теперь можно коннектиться. Если всё сделано правильно то мы попадем в директорию пользователя без запроса пароля.

Есть другой вариант переноса публичного ключа на сервер. Необходимо создать в директории .ssh файл authorized_keys

$ touch authorized_keys

Открыть для редактирования этот файл и скопировать туда наш публичный ключ. Ключ должен идти в одну строчку. Перед ключом должно быть написано ssh-rsa и поставлен пробел.

Пример:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAZYQ69twq6e39+S6LxO62E37wtlGvVknomrTSdGD/QRTiNKwCI0WzFmOjvshFbzi+ARYRUcIQpxjO1nVfcO+RfJHCjX3vjgEeq1vxhag0PQs8mJLaddeCISpW37zpxYczDPTwEC7vVnzW9H1YcB1x42V9dL4JJzhbRUmHWEuNw1h+MM0eOnJLcUHZuHmxiP6M8y41UPenuVnAt2FaNWzxxMUjSKg6zCj3q07Td/ilrCvARs7/hFERG7pn6QN9At/EpTQvyn/aYDByPc4xUkeGTapzaMBYSrRIVpyYvDjJza3TAgIYejwLgV+gwlXMYKkvErsdm1hh+K4Ioe0zkbGzkaYUA+a7q3tzjY5taCDp/9LFjwhuMVcswnNAjLX+ct+sSIvZn/KnZjafcywjdmZc1Nhrl6b9AxnJ+h9PJ2BC73h90ZWvr5EASiXSgyI8A2y1ObVpLvoNIJu0DeKnIZnKarTbhXvQFAAeOzsxkTzb95ceX+llRUHqyOBpnB7D2DR8Im1tdVaQy9v9dZ329+Ogjg2BXKfL5Oh

Установка webalizer

Для того чтобы просматривать статистику на своём сайте я решил поставить на сервер webalizer — /usr/ports/www/webalizer. Поставил, заработало, но не показывало из каких стран заходили на сайт. В make я нашел упоминание о geolizer, который не установился вместе webalizer. Тогда я сделал так: обновил порты, и начал установку именно с geolizer. В конечном итоге всё заработало как надо, поэтому выкладываю последовательность действий. Идем в папку с geolizer и устанавливаем: # cd /usr/ports/www/geolizer # make install clean Установка должна потянуть за собой установку GeoIP. Если всё нормально, то приступаем к конфигурированию. Если выдается ошибка и ругается на webalizer то сначала придется удалить этот пакет (/usr/ports/www/webalizer, он был установлен мной ранее). Файл конфигурации располагается в /usr/local/etc

# cp /usr/local/etc/webalizer.conf-dist /usr/local/etc/webalizer.conf

Наиболее важные строчки конфигурации, без которых статистика не заработает: #Путь к логам апача LogFile /var/lib/httpd/logs/access_log #Путь к папке, куда будем складывать результат обработки статистики, с тем учетом, чтобы потом смотреть через браузер. #конечную папку нужно создать самому OutputDir /usr/local/www/data/webalizer #Эта строчка ставится в самом конце. Она нужна для того, чтобы видеть с IP каких стран заходили на сайт: GeoIP yes Конфигурация закончена. Для запуска статистики используем команду: # webalizer Смотреть статистику идем по адресу (учитывая внесенные в конфиг строчки) — http://yoursuite/webalizer/ Добавляем задачу в cron: */23 * * * * /usr/local/bin/webalizer Более подробно о настройках файла конфигурации webalizer.conf рассказано здесь — http://www.lissyara.su/?id=1182

Читать далее

Соединяем две сети через VPN IPSEC

Цель: подсоединить к локальной сети 6-го микрорайона свою домашнюю сеть из нескольких машин.
Исходные данные: в обоих сетях есть сервер с FreeBSD 6.2 имеющий две сетевых карты (одна смотрит в локалку, в другую подсоединен модем). Выход в Интернет осуществляется через ADSL модем, настроенный в режиме bridge.

Топология сети выглядит так:

1-ая сеть:

10.11.0.0/16
|
10.11.0.201
Сервер
85.192.х.х
|
|
Интернет
|
|
2-ая сеть
92.49.х.х
Сервер
10.10.38.50
|
10.10.0.0/16

Первоначально нужно пересобрать ядро с дополнительными опциями:
options IPSEC #IP security
options IPSEC_ESP #IP security (crypto; define w/ IPSEC)

device gif

Компилируем новое ядро, инсталлируем и перезагружаемся.

Теперь создаем туннель и добавляем маршрутизацию:

На шлюзе 1:

ifconfig gif0 create
ifconfig gif0 10.11.0.201 10.10.38.50
ifconfig gif0 tunnel 85.192.x.x 92.49.x.x
route add 10.10.0.0/16 10.10.38.50

На шлюзе 2:

ifconfig gif0 create
ifconfig gif0 10.10.38.50 10.11.0.201
ifconfig gif0 tunnel 92.49.x.x 85.192.x.x
route add 10.11.0.0/16 10.11.0.201

По сути, после этих команд между сетями уже есть связь. Т.е. можно из подсети 1 зайти на компьютеры в сети 2. Единственный нюанс на компьютерах во 2 сети должен быть прописан шлюз по умолчанию — 10.10.38.50 иначе достучаться до них будет нельзя. Как подсказали знающие люди — выходом из этой ситуации является установка SNAT на втором шлюзе, но это не входило в мои планы.

Теперь можно приступать к шифрованию трафика. Для этого установим из портов — security/ipsec-tools. По идее после установки должна была создаться папка /usr/local/etc/racoon/ с конфигурационными файлами, но этого не произошло. Не беда, создадим их вручную:

/usr/local/etc/racoon/racoon.conf

path include «/usr/local/etc/racoon» ;
path pre_shared_key «/usr/local/etc/racoon/psk.txt» ;
path certificate «/usr/local/etc/racoon/cert» ;

padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}

listen
{
isakmp 222.222.222.222 [500]; #IP компьютера где расположен данный файл
}

timer
{
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend.
persend 1; # the number of packets per a send.
phase1 30 sec;
phase2 15 sec;
}

remote anonymous
{
exchange_mode aggressive,main,base;
doi ipsec_doi;
situation identity_only;
nonce_size 16;
lifetime time 24 hour; # sec,min,hour
initial_contact on;
proposal_check obey; # obey, strict or claim
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}

sainfo anonymous
{
pfs_group 1;
lifetime time 24 hour;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1;
compression_algorithm deflate ;
}
#End of racoon.conf

/usr/local/etc/racoon/psk.txt

#На шлюзе 1 (secret — пароль):

92.49.х.х secret

#На шлюзе 2 (secret — пароль):

85.192.х.х secret

Ставим права на эти файлы:

# chmod 600 *

Создаем файл /etc/ipsec.conf:

#На шлюзе 1 (85.192.х.х):

spdadd 85.192.х.х/32 92.49.х.х/32 ipencap -P out ipsec esp/tunnel/85.192.х.х-92.49.х.х/require;
spdadd 92.49.х.х/32 85.192.х.х/32 ipencap -P in ipsec esp/tunnel/92.49.х.х-85.192.х.х/require;

На шлюзе 2 (92.49.х.х):

spdadd 92.49.х.х/32 85.192.х.х/32 ipencap -P out ipsec esp/tunnel/92.49.х.х-85.192.х.х/require;
spdadd 85.192.х.х/32 92.49.х.х/32 ipencap -P in ipsec esp/tunnel/85.192.х.х-92.49.х.х/require;

Выполняем на обоих шлюзах команды:

# racoon

# setkey -f /etc/ipsec.conf

Проверка работы racoon на шлюзе 1:

# sockstat | grep raco

root racoon 4527 3 dgram -> /var/run/logpriv
root racoon 4527 6 udp4 85.192.х.х:500 *:*

Проверяем работу командой setkey -D на шлюзе 1. Если ничего не вывелось, значит, шифрование не настроено.

# setkey -D

85.192.х.х 92.49.х.х
esp mode=tunnel spi=165916838(0x09e3b0a6) reqid=0(0x00000000)
E: 3des-cbc aecfd117 0739d66d 3400f094 e9411901 aa33570b ce7c2130
A: hmac-sha1 d1bc9b8f aa0c0bdc 795c800a 8ff4bc1d b3bd87a5
seq=0x00000375 replay=4 flags=0x00000000 state=mature
created: Nov 13 15:41:53 2008 current: Nov 13 15:55:10 2008
diff: 797(s) hard: 86400(s) soft: 69120(s)
last: Nov 13 15:55:09 2008 hard: 0(s) soft: 0(s)
current: 141600(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 885 hard: 0 soft: 0
sadb_seq=1 pid=4585 refcnt=2
92.49.х.х 85.192.х.х
esp mode=tunnel spi=42651354(0x028aceda) reqid=0(0x00000000)
E: 3des-cbc 85fe3e51 1c251e7d 22c51fbd 52a9a31c 769758ac c3c69b03
A: hmac-sha1 d90dc2db 8f56a6f0 cdd9fc17 5acae5a4 8c043102
seq=0x0000036e replay=4 flags=0x00000000 state=mature
created: Nov 13 15:41:53 2008 current: Nov 13 15:55:10 2008
diff: 797(s) hard: 86400(s) soft: 69120(s)
last: Nov 13 15:55:09 2008 hard: 0(s) soft: 0(s)
current: 91312(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 878 hard: 0 soft: 0
sadb_seq=0 pid=4585 refcnt=1

Для пущей достоверности запускаем со шлюза 1 команду:

# ping 10.10.38.50

На втором шлюзе запускаем:

# tcpdump -i tun0 host 85.192.х.х

Если трафик шифруется, то увидим примерно такой вывод:

17:51:34.927576 IP 85-192-x-x.dsl.esoo.ru > 92.49.x.x: ESP(spi=0x0f6188d3,seq=0x12e), length 140
17:51:35.056984 IP 92.49.x.x > 85-192-x-x.dsl.esoo.ru: ESP(spi=0x0b7e205d,seq=0x126), length 140

Для того чтобы VPN поднимался автоматически при загрузке сервера нужно прописать в /etc/rc.conf следующие строчки:

Для шлюза 1:

gif_interfaces=»gif0″
gifconfig_gif0=»85.192.x.x 92.49.x.x»
ifconfig_gif0=»inet 10.11.0.201 10.10.38.50 netmask 0xffffffff»
static_routes=»vpn»
route_vpn=»-net 10.10.0.0/16 10.10.38.50″

ipsec_enable=»YES»
ipsec_file=»/etc/ipsec.conf»
racoon_enable=»YES»

Для шлюза 2:

gif_interfaces=»gif0″
gifconfig_gif0=»92.49.x.x 85.192.x.x»
ifconfig_gif0=»inet 10.10.38.50 10.11.0.201 netmask 0xffffffff»
static_routes=»vpn»
route_vpn=»-net 10.11.0.0/16 10.11.0.201″

ipsec_enable=»YES»
ipsec_file=»/etc/ipsec.conf»
racoon_enable=»YES»

К сожалению, как показала практика, racoon не захотел стартовать автоматически, поэтому в crontab на обоих шлюзах была добавлена новая сточка:

@reboot /usr/local/etc/rc.d/racoon start

После повторной перезагрузки всё завелось. Как видим настройка VPN не так уж сложна.

Ссылки на наиболее интересные материалы по данной теме:

Использование ресурса DynDNS.org, установка клиента ddclient

Для начала нужно рассказать для чего может понадобиться использование сервиса https://www.dyndns.com. Как правило провайдеры выдают своим клиентам динамические IP адреса, которые могут меняться при каждой новой сессии. Т.о. если мы размещаем на своем сервере какой-либо ресурс (к примеру веб-сервер), то чтобы попасть на него из интернета нам понадобится каждый раз вводить правильный IP адрес сервера действительный на тот момент. Это конечно же очень неудобно. Чтобы обойти эту трудность можно воспользоваться сервисом на сайте https://www.dyndns.com. Смысл данного ресурса в том, что после регистрации на нем своего аккаунта мы бесплатно получаем доменное имя третьего уровня, к примеру shestoi.dyndns.org. Далее на своем сервере мы устанавливаем клиент ddclient в котором прописываем настройки для shestoi.dyndns.org. Теперь клиент ddclient будет с определенной периодичностью посылать на https://www.dyndns.com нынешний IP нашего сервера. Т.о. по адресу http://shestoi.dyndns.org будет доступен наш сервер.

Следует также заметить, что современные модемы как правило обладают функцией поддержки DynDNS и можно прописать настройки непосредственно на нём, без установки клиента на сервер.

Теперь о самой установке и настройки клиента ddclient.

# cd /usr/ports/dns/ddclient
# make install clean

Затем копируем и правим конфиг

# cp /usr/local/etc/ddclient.conf.sample /usr/local/etc/ddclient.conf
# chmod 600 /usr/local/etc/ddclient.conf (для безопасности, т.к. там пароли)

Отредактируем настройки

# vi /usr/local/etc/ddclient.conf

# Эти строчки сразу закоментируем, чтобы не сыпался лишний спам
#mail=root # mail all msgs to root
#mail-failure=root # mail failed update msgs to root

# включим метод определения реального (белого) ip-адреса
use=web

login=login # логин к dyndns
password=password # пароль к dyndns

server=members.dyndns.org, \
protocol=dyndns2 \
shestoi.dyndns.org # Обращу внимание на эту строчку. Здесь мы прописываем тот адрес который соответствует нашему серверу. Дело в том, что зарегистрировав аккаунт на https://www.dyndns.com мы можем создавать на нем несколько адресов и раздавать их нужным серверам.

Добавляем строчку для автозапуска при старте сервера

# echo ‘ddclient_enable=”YES”‘ >> /etc/rc.conf

Запускаем клиент без перезагрузки сервера: Код:
# /usr/local/sbin/ddclient start

Ссылки по теме:

  1. http://ihtiandr.info/unix/1-unix/70-dynamic-dns-install-freebsd-how-to.html
  2. http://linuxopen.ru/2007/11/14/dyndns-ili-staticheskijj-sajjt-na.html