Установка и использование Ettercap

Ettercap — инструмент для анализа безопасности компьютерной сети.
Домашняя страница: http://ettercap.github.io/ettercap/

Команда установки в Linux Ubuntu/Debian:

sudo apt-get install ettercap-text-only

Просмотр справки:

ettercap --help

Пример использования Ettercap:

ettercap [ОПЦИИ] [ЦЕЛЬ1] [ЦЕЛЬ2]
sudo ettercap -T -q -i eth0

Список возможных ключей запуска:
Sniffing and Attack options:
-M, —mitm perform a mitm attack
-o, —only-mitm don’t sniff, only perform the mitm attack
-B, —bridge use bridged sniff (needs 2 ifaces)
-p, —nopromisc do not put the iface in promisc mode
-u, —unoffensive do not forward packets
-r, —read read data from pcapfile
-f, —pcapfilter set the pcap filter
-R, —reversed use reversed TARGET matching
-t, —proto sniff only this proto (default is all)
User Interface Type:
-T, —text use text only UI
-q, —quiet do not display packet contents
-s, —script issue these commands to the GUI
-C, —curses use curses UI
-D, —daemon daemonize ettercap (no UI)
Logging options:
-w, —write write sniffed data to pcapfile
-L, —log log all the traffic to this
-l, —log-info log only passive infos to this
-m, —log-msg log all the messages to this
-c, —compress use gzip compression on log files

Visualization options:
-d, —dns resolves ip addresses into hostnames
-V, —visual set the visualization format
-e, —regex visualize only packets matching this regex
-E, —ext-headers print extended header for every pck
-Q, —superquiet do not display user and password
General options:
-i, —iface use this network interface
-I, —iflist show all the network interfaces
-n, —netmask force this on iface
-A, —address

force this local

on iface
-P, —plugin launch this -F, —filter load the filter (content filter)
-z, —silent do not perform the initial ARP scan
-j, —load-hosts load the hosts list from
-k, —save-hosts save the hosts list to
-W, —wep-key use this wep key to decrypt wifi packets
-a, —config use the alterative config file
Standard options:
-v, —version prints the version and exit
-h, —help this help screen

ACK (Acknowledge) — подтверждение
OFFER — предложение

D-Link CLI

Приведу краткий пример команд для коммутаторов D-link, в частности для DES-3200 и некоторых DGS коммутаторов:
Подключаемся к коммутатору по telnet на порт 23 либо через консольный кабель.
VT100, ANSI, стандартный IP коммутаторов: 10.90.90.90 255.255.255.0
Также в режиме консоли при включении свича: Shift+6 восстановление, Shift+3 режим прошивки.
Команду «show» можно использовать в сокращенном виде как «sh», также можно сокращенно вводить другие команды, ну об этом позже.

show switch
show address_binding ip_mac all
show address_binding blocked all
show session
enable web 80
enable telnet 23
show ipif
show fdb (отображает таблицу MACов)
config arp_aging time (in minutes)
config ipif System ipaddress 10.15.1.92/8 vlan имявлан state enable hostname switch237
show terminal_line
config terminal_line 30
enable clipaging
cable_diag ports all
show arpentry
clear arptable

*JUMBO FRAME
(это сверхдлинные Ethernet-кадры, которые используются в высокопроизводительных сетях для увеличения производительности на длинных расстояниях, а также уменьшения нагрузки на центральный процессор. Jumbo-кадры имеют размер, превышающий стандартный размер MTU: от 1518 до 16000 [1] байт. Удобно при: сервер — свич — сервер, но не клиентские порты).

show jumbo_frame
disable jumbo_frame

АККАУНТЫ

show account
create account admin/user имя
config account имя
enable password encryption

*BPDU ATTACK PROTECTION

show bpdu_protection
show bpdu_protection ports
enable bpdu_protection
config bpdu_protection ports 1 state enable mode drop/block/shutdown
config bpdu_protection recovery_timer 120 (sec)
config bpdu_protection trap both
config bpdu_protection log both

*SAFEGUARD ENGINE
(При превышении загрузкой CPU верхнего предела, коммутатор отбрасывает все ARP пакеты. При значении загрузки между двумя пределами, коммутатор обрабатывает только ARP пакеты, предназначенные ему. При снижении загрузки ниже нижнего предела коммутатор обрабатывает все ARP пакеты.)

show safeguard_engine
config safeguard_engine state enable utilization rising 70 falling 30 trap_log enable mode strict/fuzzy

*TRAFFIC SEGMENTATION

show traffic_segmentation

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

config traffic_segmentation 1-8,10-24 forward_list 9
config traffic_segmentation 9 forward_list 1-8,10-24

*TRAFFIC CONTROL

show packet ports 1-28
config traffic control 1-24,26-28 broadcast enable multicast enable unicast disable action drop threshold 64 countdown 5 time_interval 5

*SNTP

show sntp
enable sntp
config time_zone operator + hour 2 min 0
config sntp primary 91.203.15.142 secondary 0.0.0.0 poll-interval 5000
show time
config time 1jun2012 12:00:00

*DHCP RELAY

enable dhcp_relay
config dhcp_relay add ipif 192.168.1.1

НАСТРОЙКА ПОРТОВ

show ports
show ports description
config ports 25-28 speed 1000_full state enable learning enable

*SNMP

show snmp
enable snmp
show snmp community
delete snmp community private
delete snmp community public
delete snmp user initial
delete snmp group initial
create snmp community имя view CommunityView read_only/read_write

<strong>*TRUSTED HOST</strong>
show trusted_host
create trusted_host network айпи/16

*SMTP

show smtp
enable smtp
config smtp server айпи server_port 25 add mail_receiver admin@domain.com
smtp send_testmsg

*PORT SECURITY
Функция коммутатора, позволяющая указать MAC-адреса хостов, которым разрешено передавать данные через порт. После этого порт не передает пакеты, если MAC-адрес отправителя не указан как разрешенный. Кроме того, можно указывать не конкретные MAC-адреса, разрешенные на порту коммутатора, а ограничить количество MAC-адресов, которым разрешено передавать трафик через порт.

config port_security ports 1-24 admin_state enable max_learning_addr 1 lock_address_mode DeleteOnReset

*VLAN

show vlan
create vlan имя tag айди
config vlan имя add/delete tagged/untagged/forbidden 1-24 advertisement enable/disable
config vlan default delete 1-24
config gvrp 1-28 state disable ingress_checking enable acceptable_frame admit_all pvid вланайди
disable gvrp
show port_vlan
config port_vlan 1:9 gvrp_state disable ingress_checking enable acceptable_frame tagged_only/admit_all pvid 1

Для правильной установки сначала необходимо создать отдельный управляемый Vlan, в котором должны находится только управляемое оборудование и в config ipif прописан этот Vlan. На входящий порт на всех Vlan ставится tag, на порты на которых висит управляемое оборудование в необходимом Vlan ставится tag, на неуправляемое untag, если порт не находится в данном Vlan - not memeber. В PVID на магистральных тагированых портах я ставлю VID управляемого влана, если же порт untagged в каком-то влане, то необходимо ставить vid этого влана.
Edgress(разрешенный) - определяет что порт является статическим членом VLAN.
Forbidden(запрещенный) - определяет что порт не является членом VLAN и динамически не может никак к нему подключится.
non-member - определяет что порт не является членом VLAN, но порт может динамически к нему подключится.

*DHCP SERVER SCREENING

show filter dhcp_server
config filter dhcp_server add permit server_ip { client_mac } ports [ | all ] |delete permit server_ip { client_mac } ports [ | all ] | ports /all state enable/disable
config filter dhcp_server ports 1-24 state enable
config filter dhcp_server trap_log enable
config filter dhcp_server illegal_server_log_suppress_duration 1min/5min/30min

*IGMP SNOOPING
(процесс отслеживания сетевого трафика IGMP, который позволяет сетевым устройствам канального уровня (свитчам) отслеживать IGMP-обмен между потребителями и поставщиками (маршрутизаторами) многоадресного (multicast) IP-трафика. Функция IGMP Snooping применяется в сетях групповой рассылки для того, чтобы рабочие станции, не запросившие
групповой трафик, не получали его.)

enable igmp_snooping
create igmp_snooping multicast_vlan имявлан айдивлан
config igmp_snooping multicast_vlan имявлан add member_port 1,5 state enable
config igmp_snooping multicast_vlan_group имявлан add 225.1.1.1
show igmp_snooping multicast_vlan_group имявлан
enable igmp_snooping multicast_vlan
show igmp_snooping multicast_vlan

DGS-3612G for IPTV:

enable igmp_snooping
config igmp_snooping vlan multicast report_suppression disable
config igmp_snooping vlan multicast state enable fast_leave enable
config igmp_snooping querier vlan multicast query_interval 125 max_response_time 10 robustness_variable 2 last_member_query_interval 1 state disable version 3
config limited_multicast_addr ports 1-12 state disable

3828:

config igmp_snooping querier multicast query_interval 125 max_response_time 10 robustness_variable 2 last_member_query_interval 1 state enable

[| all] {query_interval | max_response_time | robustness_variable | last_member_query_interval | state [enable | disable]

*DOS PREVENTION

show dos_prevention
config dos_prevention dos_type land_attack blat_attack state enable action drop
enable dos_prevention trap_log
show dos_prevention land_attack
show dos_prevention blat_attack
clear dos_prevention counters

*LOOPBACK DETECTION (Включается на клиентских портах и неуправляемых магистралях. На магистралях между управляемым оборудованием вместо LBD необходимо включать STP)

show loopdetect
show loopdetect ports 1-24
enable loopdetect
config loopdetect trap both
config loopdetect ports 1-24 state enabled
config loopdetect recover_timer 0 interval 20 mode vlan-based
config loopdetect recover_timer 60 interval 10 mode port-based

(recover_timer – время, в течение которого порты будут отключены. Interval – интервалы между отправкой пакетов обнаружения петли.)

*SPANNING TREE PROTOCOL (STP) (протокол остовного дерева)
Основной задачей STP является устранение петель в топологии произвольной сети Ethernet, в которой есть один или более сетевых мостов, связанных избыточными соединениями. STP решает эту задачу, автоматически блокируя соединения, которые в данный момент для полной связности коммутаторов являются избыточными.

config stp ports 1-24 edge true fbpdu disable restricted_role true restricted_tcn true state enable
config stp ports 25-26 restricted_tcn true restricted_role false fbpdu disable state enable
enable stp

*ACCESS CONTROL LIST (ACL)

show access_profile

Запрет на подмену DHCP:

create access_profile ip udp src_port_mask 0xFFFF profile_id 5 profile_name 67dhcp
config access_profile profile_id 5 add access_id 1 ip udp src_port 67 port 25 permit
config access_profile profile_id 5 add access_id 2 ip udp src_port 67 port 1-24,26-28 deny

На DGS-3120-24 например уже немного по другому:

create access_profile profile_id 5 profile_name 67dhcp ip udp src_port_mask 0xffff
config access_profile profile_id 5 add access_id 1 ip udp src_port 67 port 1:9 permit
config access_profile profile_id 5 add access_id 2 ip udp src_port 67 port 1:1-1:8, 1:10-1:24 deny

Запрет Netbios и Windows sharing (для udp также):

create access_profile ip tcp dst_port_mask 0xFFFF profile_id 15
config access_profile profile_id 15 add access_id 15 ip tcp dst_port 135 port 1-24 deny
config access_profile profile_id 15 add access_id 16 ip tcp dst_port 139 port 1-24 deny
config access_profile profile_id 15 add access_id 17 ip tcp dst_port 445 port 1-24 deny

Разрешение только одного айпи на порт:

create access_profile ip source_ip_mask 255.255.255.255 profile_id 10
config access_profile profile_id 10 add access_id 1 ip source_ip 192.168.1.1 port 5 permit
create access_profile ip source_ip_mask 0.0.0.0 profile_id 20
config access_profile profile_id 20 add access_id 2 ip source_ip 0.0.0.0 port 5 deny

Запрещаем broadcast трафик:

create access_profile ethernet destination_mac ff-ff-ff-ff-ff-ff profile_id 7
config access_profile profile_id 7 add access_id auto_assign ethernet destination_mac ff-ff-ff-ff-ff-ff port 1-24 deny

Запрещаем все чужие VPN:

create access_profile ip destination_ip_mask 0.0.0.0 tcp dst_port_mask 0xFFFF profile_id 11
config access_profile profile_id 11 add access_id 11 ip destination_ip 0.0.0.0 tcp dst_port 1723 port 1-24 deny

Разрешаем прохождения трафика через коммутатор только для одного IP и блокируем для всех остальных:

create access_profile ip source_ip_mask 255.255.255.255 profile_id 10
config access_profile profile_id 10 add access_id 1 ip source_ip 192.168.1.1 port 5 permit
create access_profile ip source_ip_mask 0.0.0.0 profile_id 20
config access_profile profile_id 20 add access_id 2 ip source_ip 0.0.0.0 port 5 deny

*CPU Interface Filtering
Некоторые пакеты, полученные коммутатором, должны быть направлены на обработку в CPU и эти пакеты не могут быть отфильтрованы аппаратными ACL. Например, пакет, в котором MAC-адрес назначения - это MAC-адрес коммутатора. (ping на IP-адрес коммутатора). Решение: CPU Interface Filtering. (Software ACL)
Блокируем доступ к коммутатору с определенного IP:

enable cpu_interface_filtering
create cpu access_profile ip source_ip_mask 255.255.255.128 icmp profile_id 1
config cpu access_profile profile_id 1 add access_id 1 ip source_ip 10.31.3.2 icmp deny

*ARP SPOOFING PREVENTION

show arp_spoofing_prevention
config arp_spoofing_prevention add gateway_ip 10.254.254.251 gateway_mac 00-00-00-11-11-11 ports 1-2

*TECHNICAL SUPPORT

show tech_support
upload tech_support_toTFTP айпи tech_support_20120101.txt

Обновление прошивки:

download firmware_fromTFTP 192.168.0.1 src_file DES3200R_4.36.B008.had dest_file DES3200R_4.36.B008.had

или

download firmware_fromTFTP 192.168.0.1 DES-3200R_1.81.B003.had image_id 2
config firmware image_id 1/2 boot_up/delete
show firm info
show sta

Отправка и закачка конфига:

upload cfg_toTFTP/log_toTFTP айпи путь_имяфайла
download cfg_fromTFTP айпи путь_имяфайла
upload cfg_toTFTP 192.168.0.1 dest_file back.cfg
* upload cfg_toTFTP 192.168.0.1 config_id 1 back.cfg

3200 C1

download firmware_fromTFTP 192.168.0.1 src_file DES3200R_4.34.B009.had
download cfg_fromTFTP 192.168.0.1 src_file 3200-26-c1.cfg

МАРШРУТЫ

show iproute
show iproute static
delete iproute 0.0.0.0/0 192.168.0.1
create iproute 0.0.0.0/0 192.168.0.1
create iproute default 192.168.1.1 1
ping 192.168.12.12 times 4

*SYSLOG

show syslog
enable syslog
create syslog host 1 ipaddress 10.68.88.1 severity informational/warning/all facility local0/local1/local2/local3/local4/local5/local6/local7 udp_port 514 state enable
delete syslog host 1
show log_save_timing
config log_save_timing time_interval 30 (в минутах) /on demand (когда сохранит пользователь)

QOS
QoS ACL для Multicast видео-потока:

create access_profile ip destination_ip_mask 224.0.0.0 profile_id 10
config access_profile profile_id 10 add access_id auto_assign
1 ip destination_ip 224.0.0.0 port 1-26 permit priority 5 replace_dscp_with 48

Сохранение/перезагрузка/выход:

save config/log/all
reboot
logout

Список OID для коммутаторов D-Link

Приведу и опишу ниже список некоторых популярных OID для коммутаторов D-Link.

Список интерфейсов и их index можно увидеть мибом ifDescr, мибами ifInOctets.индекс и ifOutOctets.индекс можно считывать с них входящий и исходящий трафик.

DGS-3100:
CPU Utilization 5 min: 1.3.6.1.4.1.171.10.94.89.89.1.7.0
CPU Utilization 1 min: 1.3.6.1.4.1.171.10.94.89.89.1.8.0
CPU Utilization 5 min: 1.3.6.1.4.1.171.10.94.89.89.1.9.0
Clear FDB table: 1.3.6.1.4.1.171.10.94.89.89.1.2.0 i 7

DGS-3120 temperature:
1.3.6.1.4.1.171.12.11.1.8.1.2.1
Пример через командную строку: snmpwalk -v2c -c public 10.0.0.100 1.3.6.1.4.1.171.12.11.1.8.1.2.1
CPU Utilization 5 sec: 1.3.6.1.4.1.171.12.1.1.6.1.0
CPU Utilization 1 min: 1.3.6.1.4.1.171.12.1.1.6.2.0
CPU Utilization 5 min: 1.3.6.1.4.1.171.12.1.1.6.3.0

DES-3200:
CPU Utilization 5 sec: 1.3.6.1.4.1.171.12.1.1.6.1
CPU Utilization 1 min: 1.3.6.1.4.1.171.12.1.1.6.2
CPU Utilization 5 min: 1.3.6.1.4.1.171.12.1.1.6.3
Версии загруженных прошивок (B1):
1.3.6.1.4.1.171.12.1.2.7.1.2.1
1.3.6.1.4.1.171.12.1.2.7.1.2.2
Статус петель на портах (1-normal, 2-loop, 3-error, 4-none):
1.3.6.1.4.1.171.11.113.1.3.2.21.2.1.1.4

DGS-36xx:
CPU Utilization 5 sec: 1.3.6.1.4.1.171.12.1.1.6.1.0
CPU Utilization 1 min: 1.3.6.1.4.1.171.12.1.1.6.2.0
CPU Utilization 5 min: 1.3.6.1.4.1.171.12.1.1.6.3.0
Общее количество динамических записей в FDB: 1.3.6.1.2.1.17.7.1.2.1.1.2.айдивлан
Show IP table: 1.3.6.1.2.1.4.22.1.3
Show MAC table: 1.3.6.1.2.1.4.22.1.2

cpu utilization 5 minutes:
.1.3.6.1.4.1.171.12.1.1.6.3.0 – 3028
.1.3.6.1.4.1.171.11.63.1.2.2.1.3.3.0 – 3010G
.1.3.6.1.4.1.171.11.63.3.2.1.3.3.0 – 3026
.1.3.6.1.4.1.171.11.63.2.2.1.3.3.0 -3018
.1.3.6.1.4.1.171.12.1.1.6.3.0 – 3526
.1.3.6.1.4.1.171.12.1.1.6.3.0 – 3528

Трафик и пакеты:
Входящий трафик (64bit):
.1.3.6.1.2.1.31.1.1.1.6.1-28
Исходящий трафик (64bit):
.1.3.6.1.2.1.31.1.1.1.10.1-28
Счетчик принятых Unicast пакетов:
.1.3.6.1.2.1.2.2.1.11.X
Счетчик отправленных Unicast пакетов:
.1.3.6.1.2.1.2.2.1.17.X
Счетчик принятых Broadcast пакетов:
.1.3.6.1.2.1.31.1.1.1.3.X
Счетчик отправленных Broadcast пакетов:
.1.3.6.1.2.1.31.1.1.1.5.X
Счетчик принятых Multicast пакетов:
.1.3.6.1.2.1.31.1.1.1.2.X
Счетчик отправленных Multicast пакетов:
.1.3.6.1.2.1.31.1.1.1.4.X
Счетчик принятых пакетов с ошибками:
.1.3.6.1.2.1.2.2.1.14.X
Счетчик отправленных пакетов с ошибками:
.1.3.6.1.2.1.2.2.1.20.X

Статус порта (1=up/2=down):
.1.3.6.1.2.1.2.2.1.8.X

OID для DES-3350SR, DES-3052P, DES-3028P, DES-3250TG, DGS-3120:
CPU Utilization 5 sec: 1.3.6.1.4.1.171.12.1.1.6.1.0
CPU Utilization 1 min: 1.3.6.1.4.1.171.12.1.1.6.2.0
CPU Utilization 5 min: 1.3.6.1.4.1.171.12.1.1.6.3.0

Смотрите также:
Список SNMP OID и MIB для интерфейсов

Установка и настройка ProFTPd в Ubuntu

ProFTPd — FTP-сервер для Linux и UNIX-подобных операционных систем.

Простая установка:

sudo apt-get install proftpd

Во время установки нужно будет выбрать режим запуска:
(standalone — самостоятельно, тоесть автоматически будет грузится при запуске системы или inetd — вручную)
Расположение конфига:
/etc/proftpd/proftpd.conf

Немного параметров конфига:

Include /etc/proftpd/modules.conf
# отключаем IPv6 протокол из-за ненадобности
UseIPv6 off
IdentLookups off
# имя сервера
ServerName "Debian"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
# Запрещаем заливать файлы начинающиеся с точки
DenyFilter \*.*/
# Указываем домашний каталог
DefaultRoot /home/ftp
# Запрещаем пользователям ходить выше своего домашнего каталога
DefaultRoot ~
# Порт сервера, учитывая большое количество сканеров ботов по интернету, лучше сменить на произольный
Port 21
MaxInstances 30
# пользователь и группа от имени которых работает proftpd
User proftpd
Group nogroup
# ограничение на создание файлов и папок
Umask 022 022
AllowOverwrite on
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
# Стандартный параметр который подгружает все конфиги в указанной директории
Include /etc/proftpd/conf.d/
# По желанию можно присвоить алиас для имени пользователя
# UserAlias
# Запрещаем подключаться к серверу пользователю root
RootLogin off
# Разрежаем докачивать файлы
AllowStoreRestart on

# Перезагружаем proftpd чтобы применились новые настройки конфига

sudo /etc/init.d/proftpd restart

Настройка ProFTPd с использованием MySQL базы данных пользователей:

Устанавливаем дополнительный пакет:

sudo apt-get install proftpd-mod-mysql

В начале конфига /etc/proftpd/proftpd.conf добавить:

Include /etc/proftpd/sql.conf

Ниже раскоментироовать:

DefaultRoot ~
RequireValidShell off

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

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

Выполняя sql запрос создаем любую базу данных и пользователя с привилегиями на нее, например proftpd:

create database proftpd;
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost' IDENTIFIED BY 'пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'пароль';
FLUSH PRIVILEGES;

Создаем в этой новой базе две таблицы:

CREATE TABLE ftpgroup (
 groupname varchar(16) NOT NULL default '',
 gid smallint(6) NOT NULL default '2001',
 members varchar(16) NOT NULL default '',
 KEY groupname (groupname)
 ) ENGINE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpuser (
 id int(10) unsigned NOT NULL auto_increment,
 userid varchar(32) NOT NULL default '',
 passwd varchar(32) NOT NULL default '',
 uid smallint(6) NOT NULL default '2001',
 gid smallint(6) NOT NULL default '2001',
 homedir varchar(255) NOT NULL default '',
 shell varchar(16) NOT NULL default '/sbin/nologin',
 count int(11) NOT NULL default '0',
 accessed datetime NOT NULL default '0000-00-00 00:00:00',
 modified datetime NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY (id),
 UNIQUE KEY userid (userid)
 ) ENGINE=MyISAM COMMENT='ProFTP user table';

Раскомментируем в конфиге /etc/proftpd/modules.conf две строки:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Отредактируем конфиг /etc/proftpd/sql.conf:

SQLBackend mysql
SQLAuthTypes Crypt
SQLConnectInfo ftp@localhost ftp password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

Добавляем в MySQL базу желаемого пользователя:

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('', 'имяпользователя', ENCRYPT('пароль'), 2001, 2001, '/srv/ftp/имяпользователя', '/sbin/nologin', 0, '', '');

Перезагружаем proftpd чтобы применились новые настройки конфига:

sudo /etc/init.d/proftpd restart

Если что-то не получается, можно остановить sudo /etc/init.d/proftpd stop и запустить командой proftpd -nd6, после чего вся подробная информация о работе proftpd будет выводится на экране.

Вот для примера содержимое конфигурационного файла при котором proftpd брал данные пользователей из mysql базы данных биллинга:

ServerName		"Name"
ServerType		standalone
ServerIdent		off
DefaultServer		on
ScoreboardFile		/var/run/proftpd.scoreboard
Port			21
ServerAdmin             admin@example.net
Umask			002
MaxInstances		300
CommandBufferSize	512
UseReverseDNS		off
IdentLookups		off
RequireValidShell	off

DefaultAddress		0.0.0.0
PassivePorts 		30000 50000

TimesGMT		off

TimeoutSession		1800
TimeoutStalled		300

User			ftp
Group			ftp

CharsetLocal		KOI8-U
CharsetRemote		CP1251

ExtendedLog		/var/log/proftpd.log ALL ideal
LogFormat		ideal "%t %a %U %m %D %f %b %T"
TransferLog 		NONE

AllowRetrieveRestart	on
AllowStoreRestart	on

DefaultRoot ~

AllowOverwrite	off

<Limit SITE_CHMOD>
  DenyAll
</Limit>

<Limit Write>
    AllowAll
</Limit>

<Limit READ>
    AllowAll
</Limit>

<Limit DELE RMD XRMD RNFR RNTO>
    AllowUser myadmin manager
    DenyAll
</Limit>

AuthOrder 		mod_auth_unix.c mod_sql.c

SQLAuthTypes		Plaintext
SQLAuthenticate	users
SQLConnectInfo		base@192.168.0.1:3306 mysqluser password
SQLDefaultGID		1003
SQLDefaultUID		1003
SQLDefaultHomedir	/ftp
SQLUserInfo		`abon` `login` `password` "NULL" "NULL" "NULL" "NULL"
SQLUserWhereClause	"killed!='killed'"

#SQLNamedQuery	auth	SELECT "login,password,1003,1003,'/usr/home/ftp','' from abon where killed!='killed' and login = '%u'"
#SQLUserInfo		custom:/auth
#SQLLogFile		/var/log/proftpd_sql.log

<Directory ~>

</Directory>

Смотри также мои статьи:
IPTables правила для FTP сервера
Активный и пассивный режим работы FTP
Установка и настройка Pure-FTPd в Ubuntu

Установка и запуск arpwatch

arpwatch — демон анализирует ARP-ответы на сетевом интерфейсе и запоминает соответствие IP-адресов и MAC-адресов. Как только соответствие нарушено, или появляются новые адреса — сообщает об этом на электронную почту.

Команда установки в Ubuntu/Debian:

apt-get install arpwatch

Приведу пример конфигурационного фала, который должен находится по адресу /etc/arpwatch.conf:

eth0 -m arp@domain.com
#если на сетевом интерфейсе настроены Vlan:
eth0.1 -m arp@domain.com
eth0.15 -m arp@domain.com
eth0.47 -m arp@domain.com
#и т.д.

Данные отправляются на указанную почту и сохраняются в директории /var/lib/arpwatch в отдельный файл для каждого сетевого интерфейса, которые потом можно просмотреть и увидеть какие MAC и IP адреса были в сети.

Опишу дополнительные ключи запуска:
-d (Режим отладки, отключаются почтовые сообщения, информация выводится в консоль)
-i (указание имени используемого сетевого интерфейса)
-N (отключение сообщений о подменах)
-n (указание сети для мониторинга)
-r (чтение и анализирование данных из файла, записанного через tcpdump, информация выводится в консоль)
-u (запуск от имение указанного пользователя)
-f (установка имени файла базы данных, по умолчанию arp.dat)

Пример типов основных сообщений которые шлет arpwatch:
new activity (Когда пара ip+mac которая не использовалась больше 6 месяцев, появилась в сети)
new station (Когда в сети обнаруживается ранее не обнаруженное устройство)
flip flop (Когда Ethernet-адрес изменился с одного известного на другой, когда в сети есть одинаковые адреса)
changed ethernet address (В ранее обнаруженной паре ip+mac изменился ip или mac адрес)

Проверить запущен ли arpwatch можно командой:

ps -ef | grep arpwatch

Замечал старое дополнение arpwatch + sql на sources.homelink.ru/arpwatch

Настройки MMS украинских операторов для iPhone

Открываем: Настройки > Основные > Сотовые данные > Сотовая сеть передачи данных и там где MMS прописываем настройки своего оператора.

Djuice Украинa
MMSC: httр://mms.kyivstar.net
Proxy: 10.10.10.10:8080
APN: mms.djuice.com.ua
Username: mms
Password: mms

Киевстар
MMSC: httр://mms.kyivstar.net
Proxy: 10.10.10.10:8080
APN: mms.kyivstar.net
Username: mms
Password: mms

МТС-Украина
MMSC: httр://mms/
Proxy: 192.168.010.010:8080
APN: mms
Username: пусто
Password: пусто

Билайн-Украина
MMSC: httр://mms/
Proxy: 172.29.18.192:8080
APN: mms.beeline.ua
Username: пусто
Password: пусто

Life Украина
MMSC: httр://mms.life.com.ua/cmmsc/post
Proxy: 212.58.162.230:8080
APN: mms
Username: пусто
Password: пусто

Компиляция Trinity Core на Ubuntu Server

Устанавливаем необходимые дистрибутивы:
sudo apt-get install build-essential autoconf libtool gcc g++ make cmake git-core patch wget links zip unzip unrar libncurses5-dev
sudo apt-get install openssl libssl-dev mysql-server mysql-client libmysqlclient15-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-system-dev libboost-program-options-dev

Добавляем пользователя в системе от имени которого будет запускаться сервер:
sudo adduser trinity

По сути ACE и OpenSSL устанавливаются командами выше, но в случае проблем их можно скомпилировать вручную как указано ниже. Тогда желательно удалить их перед компилированием из системы к примеру такой командой apt-get autoremove libace-dev. Командой apt-cache search ace можно посмотреть какие файлы есть в репозитории Ubuntu и также версию ACE.

Устанавливаем ACE:
wget http://download.dre.vanderbilt.edu/previous_versions/ACE-6.0.3.tar.gz
(другие версии: http://download.dre.vanderbilt.edu/previous_versions/)

Распаковываем скачанный архив и открываем директорию:
tar xvzf ACE-6.0.3.tar.gz
cd ACE_wrappers
Создаем каталог для компиляции и открываем его:
mkdir build && cd build
Конфигурируем и устанавливаем:
../configure —prefix=/home/<папка пользователя>/.sys/
make
make install
Возвращаемся обратно в директорию пользователя:
cd ~
Устанавливаем OpenSSL:
Скачиваем последнюю версию с http://openssl.org/source/:
wget http://openssl.org/source/openssl-0.9.8o.tar.gz
Распаковываем скачанный архив и открываем директорию:
tar -xvf openssl-0.9.8o.tar.gz
cd openssl-0.9.8o
Конфигурируем и устанавливаем:
./config —prefix=/home/<папка пользователя>/.sys shared
make
make install
Возвращаемся обратно в директорию пользователя:
cd ~

Загружаем исходники Trinity:
git clone git://github.com/TrinityCore/TrinityCore.git
Для применения своих патчей необходимо до компиляции поместить патч в директорию с исходниками и выполнить команду:
patch -p1 < имя_патча.patch
Открываем директорию с исходниками, создаем каталог для компиляции и открываем его:
cd TrinityCore-master && mkdir build && cd build
Конфигурируем на свое усмотрение (это всего лишь пример):
cmake ../ -DPREFIX=/home/<папка пользователя>/server -DTOOLS=1
или так
cmake ../ -DPREFIX=/home/<папка пользователя>/server -DTOOLS=1-DCMAKE_C_FLAGS=»-O3 -pipe» -DCMAKE_CXX_FLAGS=»${CMAKE_C_FLAGS}» -DDO_RA=1 -DLARGE_CELL=1 -DACE_LIBRARY=/home/<папка пользователя>/.sys/lib/libACE.so -DACE_INCLUDE_DIR=/home/<папка пользователя>/.sys/include/ -DSSLLIB=/home/<папка пользователя>/.sys/lib/libssl.so
Если нужно указываем путь к gcc: -DCMAKE_C_COMPILER=/usr/bin/gcc-4.6
Если нужно указываем путь к g++: -DCMAKE_CXX_COMPILER=/usr/bin/g++-4.6

Параметры которые можно указать при конфигурации:
-DACE_LIBRARY=<путь к библиотеке ACE > (полный путь к библиотеке libACE.so, если ACE установлено «глобально», то данный флаг не применяется )
-DACE_INCLUDE_DIR=<путь к каталогу includes/headers, вашей библиотеки ACE> (полный путь к include директории ACE, если ACE установлено «глобально», то данный флаг не применяется )
-DOPENSSL_LIBRARIES=<путь к библиотеке OpenSSL> (путь к библиотеке OpenSSL library, если OpenSSL установлено «глобально», то данный флаг не применяется )
-DOPENSSL_INCLUDE_DIR=<путь к каталогу include, вашей библиотеки OpenSSL > (путь к каталогу include, вашей библиотеки OpenSSL, если OpenSSL установлено «глобально», то данный флаг не применяется)
-DSCRIPTS Сборка сервера и скриптов.
-DTOOLS Собрать так же и экстракторы карта/коллизии/дбц.
-DUSE_SFMT Использовать SFMT как случайный генератор чисел.
-DWITH_WARNINGS Показывать предупреждения.
-DWITH_COREDEBUG «собрать в дебаге».
-DWITH_SQL Скопировать SQL-файлы в каталог с установленным сервером.
-DPREFIX Задать каталог установки.

Компилируем:
make -j (число ядер процессора + 1) //пример для четырех ядерного процессора: make -j 5
make install
Настраиваем конфиги и переименовываем их:
mv /home/<папка пользователя>/server/etc/worldserver.conf.dist /home/<папка пользователя>/server/etc/worldserver.conf
mv /home/<папка пользователя>/server/etc/authserver.conf.dist /home/<папка пользователя>/server/etc/authserver.conf
Извлечение карт:
После компиляции ядра с использованием флага -DTOOLS=1 в папку bin должны скомпилироваться такие фалы как: mapextractor, vmap3extractor, vmap3assembler. Копируем их в директорию с World of Warcraft и запускаем их по очереди:
./mapextractor
./vmap4extractor
mkdir vmaps
./vmap4assembler Buildings vmaps
После создаем в папке с сервером папку к примеру «data» перемещаем в нее созданные экстракторами карт директории. Прописываем в worldserver.conf путь к данной папке.

Запуск:
auth.sh (путь к данному простому скрипту, в случае правильного запуска, можно сразу поместить в /etc/rc.local для автоматического запуска при старте системы)
#!/bin/bash
while :; do
/home/папкапользователя/server/bin/authserver -c /home/папкапользователя/server/etc/authserver.conf
sleep 10
done

world.sh
#!/bin/sh
while :; do
servlog=’/home/папкапользователя/server/logs/server.log’;
outpatch=’/home/папкапользователя/server/logs/crash/’;
date=`date «+%Y-%m-%d_%H:%M:%S»`;
echo «Server CRASHED !!! Start Bugreport System.» >> $outpatch$date.txt;
echo «Server.log Log FILE Last 30 Lines:» >> $outpatch$date.txt;
cat $servlog | tail -n 30 >> $outpatch$date.txt;
echo «» >> $outpatch$date.txt;
echo «END bugtracker system.» >> $outpatch$date.txt;
/home/папкапользователя/server/bin/worldserver -c /home/папкапользователя/server/etc/worldserver.conf
sleep 20
done
Загрузка баз данных:
Необходимо скачать последнюю официальную компиляцию базы данных с [url=https://github.com/TrinityCore/TrinityCore/downloads]TrinityCore Github Downloads[/url]
Либо YTDB базу подогнанную под TrinityCore http://ytdb.ru/showthread.php?t=5227 (http://svn2.assembla.com/svn/ytdbase/) (http://trinity-core.ru/threads/ytdb-for-trinity-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D1%8B.1339/page-5)
Также необходимо скачать все патчи опубликованные после полной версии и залить по очереди. Для YTDB если в архиве больше одного файла, то сначала заливать апдейты от ядра, потом от базы. Для официальной базы они находятся в скачанной ранее директории с исходниками ядра /sql/updates.

Вариант резервного копирования

Напишу ниже простой пример резервного копирования mysql баз данных с помощью mysqldump.

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

mysqldump -u user -h localhost -pПАРОЛЬ имябазы | gzip -c > /home/backups/mysqldump/имябазы/имябазы_`date +%Y-%m-%d`.sql.gz

Чтобы при дампе базы исключить некоторые таблицы необходимо дописать:
—ignore-table=база.таблица —ignore-table=база.таблица
Чтобы сделать дамп самой структуры без данных:
—no-data
В случае ошибки Mysqldump error 1044: Access denied for user to database when using LOCK TABLES после mysqldump добавить:
—skip-opt.

Mysql пользователю назначим права:

GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Добавляем ссылку на новый файл в /etc/crontab. Планировщик будет выполнять его каждый день в 4 утра:

0 4 * * * user /home/backups/backups.sh > /dev/null 2>&1

Аналогичным образом можно делать резервные копии директорий, например:

tar -cvjf /home/backups/etc/`date +%Y-%m-%d`_etc.tar.bz2 /etc/
tar -cvjf /home/backups/www/`date +%Y-%m-%d`_www.tar.bz2 /var/www/

Также можно регулярно клонировать github репозитории, например репозиторий Trinity Core:

mkdir /home/backups/trinitycore/`date +%Y-%m-%d`
cd /home/backups/trinitycore/`date +%Y-%m-%d`
wget https://github.com/TrinityCore/TrinityCore/archive/4.3.4.zip
wget https://github.com/TrinityCore/TrinityCore/archive/master.zip

Как удалять старые резервные копии автоматически, чтоб не забивался диск я писал в этой статье — Скрипт удаления старых файлов

Мониторим подключения по SSH через email

Приведу несколько способов как получать оповещения на электронную почту о том что кто-то подключился к серверу по SSH.

ПЕРВЫЙ СПОСОБ:
Текстовым редактором, например nano, откроем файл /etc/ssh/sshrc (в редакторе nano CTRL+X для выхода, а y/n и Enter для сохранения или отмены изменений):

sudo nano /etc/ssh/sshrc

И добавим в него следующий код:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
(echo "Subject:login($ip) on server"; echo "User $USER just logged in from $ip";) | sendmail -f server@example.com -t your-email@example.com &

Перезапускать SSH не нужно, уведомления уже должны приходить при подключениях.

ВТОРОЙ СПОСОБ:
Добавляем указанные строки в конфиг /etc/rsyslog.conf (перед каждой строкой прокомментировал суть, данный код позволит отсылать сообщения о неудачных подключениях):

# Подключаем модуль отправки сообщений
$ModLoad ommail
# Указываем адрес почтового сервера
$ActionMailSMTPServer mail.domain.com
# Указываем email с которого будут отправляться сообщения
$ActionMailFrom rsyslog@domain.com
# Указываем email на который будут приходить сообщения
$ActionMailTo test@domain.com
# Указываем тему сообщения
$template mailSubject,"SSH Invalid User %hostname%"
# Указываем содержание сообщения
$template mailBody,"RSYSLOG\r\nmsg='%msg%'"
$ActionMailSubject mailSubject
# Указываем в секундах как часто могут отправляться сообщения
$ActionExecOnlyOnceEveryInterval 10
# Если в логах содержатся указанные в скобках символы, тогда отсылаем сообщение
if $msg contains 'Invalid user' then :ommail:;mailBody

Такой же способ отправки через rsyslog, но отсылаются уведомления об успешных подключениях (код без комментариев как выше):

$ActionMailSMTPServer mail.domain.com
$ActionMailFrom rsyslog@domain.com
$ActionMailTo test@domain.com
$template mailSubject,"SSH Accepted pass %hostname%"
$template mailBody,"RSYSLOG\r\nmsg='%msg%'"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 10
if $msg contains 'Accepted password' then :ommail:;mailBody

В итоге при успешном или не успешном подключении к серверу SSH на электронную почту будут приходить сообщения. Аналогичным способом можно анонсировать на email и другие события которые логируются через rsyslog.

Изменение стартовой локации в YTDB 3.3.5a

Приведу пример mysql запросов на изменение стартовой локации для всех рас, на примере указана локация в Даларане.
Координаты в игре вычисляются командой .gps
— меняем стартовую локацию орков:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='2';

— меняем стартовую локацию нежити:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='5';

— меняем стартовую локацию тауренов:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='6';

— меняем стартовую локацию троллей:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='8';

— меняем стартовую локацию эльфов крови:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='10';

— меняем стартовую локацию людей:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='1';

— меняем стартовую локацию дворфов:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='3';

— меняем стартовую локацию ночных эльфов:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='4';

— меняем стартовую локацию гномов:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='7';

— меняем стартовую локацию дренеев:

update playercreateinfo set position_x='5822' , position_y='499' , position_z='659' , orientation='1.137035' , map='571' , zone='4395' where race='11';

Так как ДК появится сразу не в своей локации и не будет иметь специализации «Гравирование», то сделаем чтобы ДК всех классов знали это при старте:

INSERT INTO playercreateinfo_spell (race, class, Spell, Note) VALUES
(1, 6, 53428, 'Runeforging'),
(2, 6, 53428, 'Runeforging'),
(3, 6, 53428, 'Runeforging'),
(4, 6, 53428, 'Runeforging'),
(5, 6, 53428, 'Runeforging'),
(6, 6, 53428, 'Runeforging'),
(7, 6, 53428, 'Runeforging'),
(8, 6, 53428, 'Runeforging'),
(10, 6, 53428, 'Runeforging'),
(11, 6, 53428, 'Runeforging');

P.S: Координаты Восточные королевства «Акерус: Черный оплот» (хуz map): 2408 -5633 380 0.

ID тренера для ДК: 29194.