OpenVPN

CentOS

Установим репозиторий EPEL:
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
И поставим пакет:
yum install openvpn -y

Настройка сервера OpenVPN
Для openvpn > 2.3
Для OpenVPN версии выше 2.3 набор скриптов easy-rsa не входит в инсталляцию по умолчанию, а скачивается отдельно:
mkdir /src; cd /src && wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
cd easy-rsa-master
./build/build-dist.sh
Распакуем полученный архив:
tar zxvf EasyRSA-git-development.tgz && cd EasyRSA-git-development
Сгенерируем корневой сертификат:
./easyrsa init-pki
./easyrsa build-ca
Попросит дважды ввести новый пароль для ca.crt. Получим:

./pki/ca.crt
Сгенерируем ключи для сервера:
./easyrsa build-server-full server
Попросит дважды ввести новый пароль для PEM и один раз повторить пароль, сгенерированный ранее для ca.crt
Получим:
./pki/private/server.key

Сгенерируем ключи для клиента:
./easyrsa build-client-full client1
Попросит дважды ввести новый пароль для PEM и один раз повторить пароль, сгенерированный ранее для ca.crt
Получим:
./pki/private/client1.key
./pki/issued/client1.crt

Сгенерируем файл с параметрами Диффи-Хеллмана (dh.pem):
./easyrsa gen-dh
Это может занять продолжительное время.
Получим:
./pki/dh.pem
Перенесём полученные файлы в /etc/openvpn/ для удобства:
mv ./pki/dh.pem /etc/openvpn/dh1024.pem
mv ./pki/private/client1.key /etc/openvpn/
mv ./pki/private/server.key /etc/openvpn/
mv ./pki/ca.crt /etc/openvpn/
mv ./pki/issued/client1.crt /etc/openvpn/
mv ./pki/issued/server.crt /etc/openvpn/

Создание статического ключа HMAC
Для создания ключа HMAC используйте команду openvpn с опциями —genkey и —secret:
# cd /etc/openvpn
# openvpn —genkey —secret ta.key
Файлы client1.crt, client1.key, ca.crt нужно скопировать на компьютер клиента, который будет подключаться к OpenVPN-серверу:
cd /etc/openvpn
mkdir ovpn-client
cp -rp client1.crt client1.key ca.crt ./ovpn-client/
zip ovpn-client.zip ./ovpn-client/*

Пример файла openvpn.conf конфигурации сервера OpenVPN есть на сайте проекта по адресуopenvpn.net/index.php/open-source/documentation/howto.html#server. Мы предлагаем начать с сокращенной версии этого файла из нашей статьи.

Содержимое файла server.conf

#если используется пароль для ключа сервера то требуется дописать строчку до файла с паролем где и вписать пароль открыто!
askpass /etc/openvpn/pass.txt
#Номер порта
port 1194
#тип порта
proto udp
# Устройство
dev tun
user openvpn
group openvpn
#Где конфиг и где ключи
cd /etc/openvpn
persist-key
persist-tun
tls-server
tls-timeout 120
dh dh.pem
ca ca.crt
cert vpn-server.crt
key server.key
№файл заблокированных пользователей
crl-verify crl.pem
tls-auth /etc/openvpn/ta.key 0
server 10.15.0.0 255.255.255.0
client-config-dir /etc/openvpn/ccd
client-to-client
topology subnet
max-clients 5
#Передать клиенту что всё перенаправлять на новый шлюз
push "redirect-gateway"
#передаём клиенту нужный днс
push "dhcp-option DNS 10.15.0.1"
#Передаём клиенту маршрут
route 10.15.0.0 255.255.255.0
#Использовать сжатие
comp-lzo
keepalive 10 120
#Логи
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-server.log
#Уровень говорливости лога
verb 3
mute 20

Чтобы запуск сервера OpenVPN произошел успешно, необходимо создать каталоги, сертификаты и ключи, на которые есть ссылки в файлах openssl.cnf и server.conf, а также пользователя openvpn.

Создайте каталог для журнала сервера OpenVPN:
# mkdir /var/log/openvpn/

Ревизия файлов перед запуском OpenVPN

Итак, мы получили из удостоверяющего центра подписанный сертификат сервера OpenVPN, сертификат самого удостоверяющего центра CA, список отзыва сертификатов, создали файл Диффи-Хелмана и ключ HMAC.

Перед тем как запустить демон OpenVPN, нам нужны в каталоге /etc/openvpn/ для Linux или /usr/local/etc/openvpn/ для FreeBSD следующие файлы:
openssl.cnf — файл конфигурации OpenSSL;
server.conf — файл конфигурации сервера OpenVPN;
ca.crt — cертификат удостоверяющего центра;
vpn-server.crt — cертификат сервера OpenVPN;
server.key — приватный ключ сервера OpenVPN, секретный;
crl.pem — cписок отзыва сертификатов;
dh.pem — файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки;
ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда

Проверка результата запуска демона OpenVPN

Если сервер OpenVPN стартовал без ошибок, убедитесь с помощью команды ifconfig в том, что появился интерфейс TUN:

# ifconfig
…
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.15.0.1 P-t-P:10.15.0.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Подготовка файлов конфигурации

Файлы конфигурации, ключи и сертификаты должны находится в каталоге /etc/openvpn.
Далее подготовьте файлы конфигурации openssl.cnf и server.conf.

Файл openssl.cnf, определяющий конфигурацию OpenSSL, используйте точно такой же, как и для сервера OpenVPN.

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

$ ./easyrsa revoke developer5

Здесь мы отозвали сертификат для клиента developer5.
Далее нужно сгенерить новый файл CRL на сервер OpenVPN
и перезапустить демон OpenVPN.
$ ./easyrsa gen-crl
cp crl.pem /etc/openvpn/

проверка сертификата
cat keys/index.txt
index.txt должен обновиться . Знак ‘R’ (for Revoked) в первой колонке значит что сертификат отозван.

openssl crl -in crl.pem -text

 

Содержимое файла server.conf для клиента OpenVPN (android)

dev tun
proto udp
remote 192.168.0.54 1194
client
resolv-retry infinite
ca ca.crt
cert developer1.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
persist-key
persist-tun
comp-lzo
verb 3
status-version 3

файл называем client.ovpn

и импортируем в программе под андройд.

iptables

iptables -I INPUT -p udp —dport 1194 -s eth0 -j ACCEPT

iptables -I INPUT -i tun0 -s 172.16.0.0/24 -j ACCEPT

 

 

Рубрика: Linux, Общее | Оставить комментарий

Программа для генерации словарей Crunch

Это генератор словарей для перебора паролей.
Функционал программы позволяет создавать кроме «простых» последовательностей символов, словари из нескольких слов в произвольной последовательности, словари по маске, и т.д. Что особенно полезно в том случае, если вам необходим словарик с номерами нужного сотового оператора или вы знаете часть парольной фразы.
Ниже, в статье я приведу примеры как использовать весь этот набор возможностей crunch.
Итак, начнем с установки.
В Kali Linux он есть

В остальных случаях качаем с sourceforge и собираем  отсюда.

Общий синтаксис команд crunch

crunch [min_length] [max_length] [character_set] [options]

min_length — минимальная длинна парольной фразы.
max_length — максимальная длинна парольной фразы.
character_set — используемые символы.
options — ключи.

Используемые ключи генератора:

-b ограничить размер выходного файла. Как нам говорит мануал, используется только с опцией -o START. Правильная запись размера50MB.
-o задать имя выходного файла.
-c ограничить количество строк в выходном файле. Так же должна использоваться с опцией -o START
-s стартовая последовательность символов.
-d ограничение количества одинаковых последовательно идущих символов.
-e остановка генератора по достижении заданной фразы.
-i инверсия генерации фраз словаря(aab, aac, aad —> baa, caa, daa)
-t очень полезный ключ. Позволяет создавать свои шаблоны для генерации. Использует символы:
, — заглавная буква;
@ — строчная буква;
% — число;
^ — спец. символ, включая пробел;
-l используется вместе с ключом -t и указывает, какие символы в шаблоне будут буквенными.
-p генерация фраз словаря на основании символов и слов, указанных в коммандной строке.
-q генерация фраз словаря, используя слова или символы из указанного файла*
-r восстановить предыдущую сессию.
-z тип упаковщика выходного файла (gzip, bzip, lzma).
-u отключение вывода служебной информации о словаре.
-f путь к файлу с нужным набором символов. Например, нас интересуют ualpha-numeric-all-space (ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;»‘<>,.?/ ).
Тогда мы используем следующий синтаксис команды:

crunch -f /usr/share/crunch/charset.lst ualpha-numeric-all-space -o passwd.txt

Указанный выше путь это путь по умолчанию к файлу с набором символов.

Примечание — Пробел так же можно задать с помощью символа \. Этим символом так же экранируются в обязательном порядке спецсимволы, если их нужно явно задать.

А теперь примеры работы.

1. Самое простое. Сгенерировать словарь от a до zzzzz, латиница в нижнем регистре и сохранить его в файл pass.txt

crunch 1 5 > pass.txt

Как видим, синтаксис этой команды прост. От одного до пяти символов, сохраняем в файлик с нужным названием.
Следующая команда создаст словарь от 5 до 10 символов латиницей

crunch 5 10 > pass.txt

Используем нужный нам набор символов

crunch 1 5 abcdefg0123456789 > pass.txt

2. Ограничим размер одного файла словаря пятью мегабайтами

crunch 4 6 -b 5mb -o START

Файлы будут созданы в папке с программой (/crunch/).

3. Ограничим выходной файл словаря по количеству строк

crunch 3 6 abc1234567890 -c 50000 -o START

4. Остановить генерацию на определенной последовательности

crunch 5 5 1234567890 -e 55555 -o /tmp/passwd.txt

В этом случае генерация паролей будет остановлена на парольной фразе «55555».

5. Создать словарь из списка номеров известного мобильного оператора.

crunch 10 10 -t 068%%%%%%% > beeline.txt

6. Создать словарь из всех возможных комбинаций слов hack ban test

crunch 1 1 -p hack ban test > passwd.txt

Результатом будут hackbantest, hacktestban, testhackban, bantesthack и т.д.
А если задать команду

crunch 1 1 -p abcdefg > passwd.txt

Результатом будут все возможные комбинации этих букв.
7. Создание словаря из перестановок всех слов, находящихся в файле test.dic

crunch 1 1 -q /tmp/test.dic > passwd.txt

8. Создать словарь, состоящий из фраз, содержащих строчные буквы, длинной 8 символов и начинающихся со слова hack

crunch 8 8 -t hack@@@@ > passwd.txt

Думаю, вы уже догадались что можно заданное слово ставить так же в середину и в конец шаблона. Что очень удобно для генерации словарика при известной части пароля. Например, если я смог узнать, что у человека праоль начинается на QAZWSX а далее нажимается от 3 до 5 кнопок на цифровой клавиатуре, то можно попробовать сгенерировать словарь по шаблону

crunch 9 11 -t QAZWSX%%%%% > passwd.txt

и успешно подобрать пароль.

Рубрика: wifi | 1 комментарий

NTP не синхронизирует время

Fixing NTP Refusing to Sync
I have just been confronted by NTP absolutely refusing to touch my system’s clock. The trouble with NTP is that it is absolute PITA to debug it at all since when it does not get in sync with its peers, it goes at great lengths to make its reasons as incomprehensible as possible.
For some reason, my system had absolutely massive drift – something in the order of half a second per minute, making the clock drift by several tens of minutes per day. So I installed NTP and hoped that it would magically fix up the issue, but it turns out that NTP by itself is absolutely unhelpful not only in cases of big offset, but also in cases of big drift – it will fix your clock when it is slightly inaccurate, but not when it is inaccurate a lot (…that is, when you would want to use it all the more).
First thing I did was check the hardware’s opinion. Comparing date and hwclock —show has shown that the hardware clock is doing fine, only kernel’s idea of time is drifting off. Next, it’s time to see what NTP thinks about its peers:

ntpq> peers
remote refid st t when poll reach delay offset jitter
==============================================================================
tik.cesnet.cz .GPS. 1 u 12 64 377 0.641 8494.05 2911.29
tak.cesnet.cz .GPS. 1 u 2 64 377 0.636 8594.86 2945.05

NTP polls each peer every “poll” seconds, “when” is relative time of last poll; “reach” keeps track of last successful polls, 377 is best. “Delay” is network delay, this is fine. “Offset” is the offset between local and peer clock, it’s at 8.5s now – not so good, but trouble is it gets bigger quickly. But what’s the real culprit is “jitter” – it’s huge! This means that the variance of offsets is huge – to put it simply, the offset is very different each time it is measured. Since no symbols are printed in the first column of the output, there is no peer synchronization going on.

So if we know a lot about NTP already, the high jitter should hint us that the offset measurements are unreliable. But the network connection of our server is very good, it would be nice to look at the actual measurements. Instead of peers, let’s look at their associations:

ntpq> as

ind assID status conf reach auth condition last_event cnt
===========================================================
1 55713 9014 yes yes none reject reachable 1
2 55714 9014 yes yes none reject reachable 1
NTP is not liking our peers. No surprise, with the big jitter. But what we are after are the assID numbers:

ntpq> rv 55713
assID=55713 status=9014 reach, conf, 1 event, event_reach,
srcadr=tik.cesnet.cz, srcport=123, dstadr=195.113.20.142, dstport=123,
leap=00, stratum=1, precision=-20, rootdelay=0.000,
rootdispersion=0.000, refid=GPS, reach=377, unreach=0, hmode=3, pmode=4,
hpoll=6, ppoll=6, flash=400 peer_dist, keyid=0, ttl=0, offset=13041.231,
delay=0.602, dispersion=0.944, jitter=2918.331,
reftime=cf803b51.ddd3e70e Mon, Apr 26 2010 18:18:25.866,
org=cf803b83.e9b29181 Mon, Apr 26 2010 18:19:15.912,
rec=cf803b76.df382c7c Mon, Apr 26 2010 18:19:02.871,
xmt=cf803b76.df0d40c7 Mon, Apr 26 2010 18:19:02.871,
filtdelay= 0.60 0.64 0.60 0.51 0.82 0.67 0.69 0.64,
filtoffset= 13041.2 12385.8 11720.4 11075.2 10409.6 9774.54 9129.22 8494.06,
filtdisp= 0.00 0.98 1.97 2.93 3.92 4.86 5.82 6.77
Looking at the last three lines, the reason for the huge jitter finally seems clear! Our clock drifts so fast that the offset will go up by several seconds through our few measurements.

Unfortunately, NTP does not seem to be giving us the actual estimated drift value between local clock and the peer. This would be very useful since that’s actually what makes NTP decide whether go ahead and sync or keep its hands away from the clock; it is said that 500ppm is the max. drift value for possible synchronization, but I don’t know how to connect that to any of the other numbers I see; when the clock is already in sync, it is probably the ‘frequency’ value in ‘rv’ (and it is stored in the drift file), but this value stays untouched before synchronization. Too bad.

So, now we know the issue is that kernel clock is going too slow and that NTP is not going to fix it for ourselves. So, we must resort to manual tinkering using adjtimex:

# adjtimex -p
mode: 0
offset: 0
frequency: 0
maxerror: 0
esterror: 0
status: 64
time_constant: 4
precision: 1
tolerance: 32768000
tick: 9900
raw time: 1272299204s 17444us = 1272299204.017444
return value = 5
Wow, a lot of numbers. But the one that tells how fast the clock is going is the ‘tick’ value, and you can adjust it using adjtimex -t 10000 – that will make the clock go a lot faster, and is also sort-of canonical value. Let’s just do that and restart ntpd:

remote refid st t when poll reach delay offset jitter
==============================================================================
tik.cesnet.cz .GPS. 1 u 1 64 7 0.659 16852.5 1.840
tak.cesnet.cz .GPS. 1 u 2 64 7 0.665 16852.5 1.863
This is MUCH better! In fact, after few minutes NTP will decide to step the clock to compensate the offset, and after another while it will finally get in sync with the peers. If the jitter is still too big (but different), keep tweaking the tick value.

EDIT: It seems that alternatively, you can try to change your clock source – this might help especially in case of virtualization:

# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
hpet acpi_pm jiffies tsc
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
hpet

Hope this helps if your NTP also refuses to fix your clock.

Open questions remain:

Why was my tick value so off? I guess I will never know. Maybe a reboot would fix it too, but I wasn’t keen to do that.
How to determine drift-per-peer value to see how much out of bounds it is?
How to make NTP automatically fix even huge drifts?
Why is NTP crafted to be so hard to debug without spending tens of minutes googling, staring at bunches of floats and decoding bitmasks manually?
Thanks to prema and otis for ideas and help.

Categories: linuxTags: clock, debian, ntp
Comments (8)Trackbacks (2)Leave a commentTrackback

Stefan Seyfried
April 28th, 2010 at 18:58 | #1 Reply | Quote
Hi pasky,
I have seen similar stuff when /etc/adjtime was totally off. /etc/adjtime is used to record the time drift and to initialize adjtimex values.
I think it should not be used when NTP is in use, unless the kernel time is off grossly, which is seldom the case nowadays.
Unfortunately, many distributions still do a “hwclock –systohc” on shutdown – which updates /etc/adjtime, even nowadays, where even the CMOS clocks on PCs are pretty accurate. I think this is a bug, but I gave up, at least for SUSE to argue, and I just disable it manually in the shutdown scripts.
Hope this helps,
seife

Stefan Seyfried
April 28th, 2010 at 18:59 | #2 Reply | Quote
Oh, I forgot: usually just removing /etc/adjtime and doing “hwclock –systohc –utc” once is enough to get it fixed for all time.

Larry McCarthy
May 29th, 2010 at 17:56 | #3 Reply | Quote
You asked: “Why was my tick value so off? I guess I will never know. Maybe a reboot would fix it too, but I wasn’t keen to do that.”
I was having drift problems, so installed adjtime. When adjtime installed is spent 70 seconds “initializing” itself and set ticks to 9768. As you can imagine, this made the problem waaaay worse, to the point that NTP wouldn’t sync and I’d lost ~30 minutes over night.
So, your excellent adjtime vs. NTP analysis was just the thing I needed! Thanks!

Larry McCarthy
May 29th, 2010 at 18:20 | #4 Reply | Quote
So, based on this really excellent article (I’m stoked; this helped *a lot*), here’s a little trick (sorry; don’t know how to tag “code” here):
# /etc/init.d/ntp stop ; ntpd -q ; sleep 100s ; ntpd -q; /etc/init.d/ntp start
This stops NTP, forces it to sync the clock (to “prime the pump”), sleeps for 100 seconds, forces a second clock sync, and restarts NTP. It produces output like this:
Stopping NTP server: ntpd.
ntpd: time set +12.262938s
ntpd: time set +2.623381s <— drift per 100s
Starting NTP server: ntpd.
The second «time set» – +2.623381s – is your 100s drift. Take that drift, (as a proportion of the current ticks), add (use the sign of the drift – if the sign on the drift is «-«, you’d subtract ticks) it to the adjtime adjustment, and repeat ’til satisfied, like so:
# adjtimex -p
[…]
tick: 10000
[…]
# # add (+2.62s / 100s) * 10000 = 262 ticks
# adjtimex -t 10262
# /etc/init.d/ntp stop ; ntpd -q ; sleep 100s ; ntpd -q; /etc/init.d/ntp start
Stopping NTP server: ntpd.
ntpd: time set +3.044932s
ntpd: time set -0.259021s
Starting NTP server: ntpd
Now, -0.26s drift per 100s is probably «correctable» by NTP. If not, repeat this process some more…
– Larry

Larry McCarthy
May 29th, 2010 at 18:53 | #5 Reply | Quote
Sorry to go on, but just one more thing, I promise…
So, once you get the drift below a second, you probably want to do a longer drift sample. To keep the arithmetic simple, continuing with the above example:
# /etc/init.d/ntp stop ; ntpd -q ; sleep 1026s ; ntpd -q; /etc/init.d/ntp start
Stopping NTP server: ntpd.
ntpd: time set -1.428262s <– Remember, ignore this. Take a 17m coffee break.
ntpd: time set -2.333034s
Starting NTP server: ntpd.
# # OK, remember, [tick] is currently 10262, so ((-2.33 / 1026) * 10262) ~ (-23)
# # and 10262 + (-23) = 10239, so…
# adjtimex -t 10239
To watch the results, I do:
# watch -n 8 ntpq -p
Yeah, 8s is kinda fast, but I’m the kind of guy who takes surface streets when the freeway’s slow, just to have something to do…
Thanks again for this great post!
– Larry

Larry McCarthy
May 29th, 2010 at 19:04 | #6 Reply | Quote
I know I promised, but this is important:
Once you’re happy with your jitter values – Single digits! Finally! – as Stefan said, you MUST do:
# rm /etc/adjtime
# hwclock –systohc –utc
*NOTE*: Windows dual-booters probably want to do:
# hwclock –systohc –localtime
And those are double-dashes; WordPress turns them into a single em-dash. Sorry.
OK. That’s it. I promise. 🙂

Deiva
May 10th, 2013 at 07:27 | #7 Reply | Quote
Hi,
For me manually the ntp service syncing using ntpdate -u but when we start the service its giving the below output…please advice should i need to change the adtimex here am using redhat linux
[root@deiva ~]# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
*127.127.1.0 .LOCL. 10 l 7 64 37 0.000 0.000 0.001
172.16.8.4 .GPS. 1 u 8 64 37 5.462 -3029.9 1910.44
172.16.8.5 .GPS. 1 u 3 64 37 5.198 -3091.9 1946.43
[root@deiva ~]# service ntpd restart
Shutting down ntpd: [ OK ]
ntpd: Synchronizing with time server: [ OK ]
Syncing hardware clock to system time [ OK ]
Starting ntpd: [ OK ]
[root@deiva ~]# date
Sat May 4 17:36:25 CEST 2013
[root@deiva ~]# date
Sat May 4 17:39:56 CEST 2013
[root@deiva ~]# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
*127.127.1.0 .LOCL. 10 l 33 64 17 0.000 0.000 0.001
172.16.8.4 .GPS. 1 u 32 64 17 4.721 -56.787 2147.63
172.16.8.5 .GPS. 1 u 31 64 17 4.971 -72.407 2161.70
[root@deiva ~]# exit
== manuall service ==
[root@deiva ~]# ntpdate -u 172.16.8.4
30 Apr 20:12:28 ntpdate[96890]: step time server 172.16.8.4 offset -0.975695 sec
[root@deiva ~]# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
127.127.1.0 .LOCL. 10 l 21 64 3 0.000 0.000 0.001
172.16.8.4 .GPS. 1 u 21 64 3 5.175 -55.482 0.702
172.16.8.5 .GPS. 1 u 19 64 3 5.673 -71.212 15.585
ntpq> as
ind assID status conf reach auth condition last_event cnt
===========================================================
1 56510 9614 yes yes none sys.peer reachable 1
2 56511 9014 yes yes none reject reachable 1
3 56512 9014 yes yes none reject reachable 1
ntpq> rv 56511
assID=56511 status=9014 reach, conf, 1 event, event_reach,
srcadr=172.16.8.4, srcport=123, dstadr=10.69.23.2, dstport=123, leap=00,
stratum=1, precision=-9, rootdelay=0.000, rootdispersion=5.676,
refid=GPS, reach=377, unreach=0, hmode=3, pmode=4, hpoll=10, ppoll=10,
flash=400 peer_dist, keyid=0, ttl=0, offset=-23003.227, delay=4.651,
dispersion=12.835, jitter=10710.871,
reftime=d529fedf.146a7ef9 Tue, Apr 30 2013 10:27:11.079,
org=d529fef8.9c49ba5e Tue, Apr 30 2013 10:27:36.610,
rec=d529ff17.88f783ee Tue, Apr 30 2013 10:28:07.535,
xmt=d529ff17.8242ad4e Tue, Apr 30 2013 10:28:07.508,
filtdelay= 4.95 4.65 5.95 6.56 4.99 4.82 5.27 5.94,
filtoffset= -30922. -23003. -19036. -15038. -13023

Рубрика: Linux, Новости | Оставить комментарий

Просмотр служб на удалённом сервере пользователем и права на службы

Это всё нужно чтобы дать конкретному пользователю или группе права на запуск или останов служб.

Проверялось на WIN 2008 R2
В данном случае нас интересуют 2 команды:
sc sdshow — показывает права
sc sdset — устанавливает права

Для начала узнаем, какие права у нашего сервиса уже есть:
C:\Users\administrator>sc sdshow service_name

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Как видно, есть 2 интересных префикса:
S: — System Access Control List (SACL) — это нас сейчас не интересует.
D: — Discretionary ACL (DACL) — здесь указываются права для всех и всего.

Смотрим далее.
Первая буква после скобок означает разрешаем (A, Allow) или запрещаем (D, Deny).

Мы разрешаем:
(A;;;;;)

И потом видим комбинации из двух букв:
CC - SERVICE_QUERY_CONFIG
LC - SERVICE_QUERY_STATUS
SW - SERVICE_ENUMERATE_DEPENDENTS
LO - SERVICE_INTERROGATE
CR - SERVICE_USER_DEFINED_CONTROL
RC - READ_CONTROL
RP - SERVICE_START
WP - SERVICE_STOP
DT - SERVICE_PAUSE_CONTINUE

По сути, нас будут интересовать последние три опции если нужно чтобы пользователь мог запускать или останавливать службы при интерактивном входе:
(A;;RPWPDT;;;)

а если надо по сети то права:

(A;;RPWPDTCRRC;;;)

Последние 2 буквы обозначают кому мы разрешаем или запрещаем:
AU Authenticated Users
AO Account operators
RU Alias to allow previous Windows 2000
AN Anonymous logon
AU Authenticated users
BA Built-in administrators
BG Built-in guests
BO Backup operators
BU Built-in users
CA Certificate server administrators
CG Creator group
CO Creator owner
DA Domain administrators
DC Domain computers
DD Domain controllers
DG Domain guests
DU Domain users
EA Enterprise administrators
ED Enterprise domain controllers
WD Everyone
PA Group Policy administrators
IU Interactively logged-on user
LA Local administrator
LG Local guest
LS Local service account
SY Local system
NU Network logon user
NO Network configuration operators
NS Network service account
PO Printer operators
PS Personal self
PU Power users
RS RAS servers group
RD Terminal server users
RE Replicator
RC Restricted code
SA Schema administrators
SO Server operators
SU Service logon user

+ к этому списку можно явно указать пользователя или группу по SID’у.

Чтобы узнать SID пользователя или группы скрипт на VB:

strComputer = «.»
strGroup = «Userlogin»
strDomain = «test.com»
Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\cimv2»)
Set objAccount = objWMIService.Get(«Win32_Group.Name='» & strGroup &»‘,Domain='»& strDomain &»‘»)
WScript.Echo objAccount.SID

Вставляем в ключ:
(A;;RPWPDTCRRC;;;S-1-5-21-134693881-2227611526-3787242677-1169)

Теперь подготавливаем команду целиком:
sc sdset D:(A;;RPWPDTCRRC;;;S-1-5-21-134693881-2227611526-3787242677-1169)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Наш ключ вставляем в любое место, но важно чтобы он был перед префиксом S.
Важно не ошибиться, иначе можем потерять доступ к сервису 🙂

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

sc sdshow scmanager

получаем ACL. Добавляем своё и применяем.

sc sdset scmanager D:(A;;CCLCRPRC;;;S-1-5-21-134693881-2227611526-3787242677-1169)(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)

проверка:
sc \\server stop «service_name»

Рубрика: Windows | 1 комментарий

Load Cycle Count

WD Red+Linux – доверяй, но проверяй Load_Cycle_Count?
Внимание! Некоторые партии новых жестких дисков Western Digital Red имеют старую добрую
проблему с слишком быстро растущим при работе Linux параметром Load_Cycle_Count.
Да-да, ту же что имели WD Green, замеченную 4 года тому назад.
Проблемы замечены у 1/2/3/4-х терабайтных версий WD Red. Причём, у дисков с одной датой выпуска, версией firmware (80.00A80) но из разных партий поведение может отличаться, например:

1st HDD: WDC WD30EFRX-68AX9N0 – счётчик не растёт
2nd HDD: WDC WD20EFRX-68EUZN0 – счётчик растёт!

Подробности ниже.

Ситуация довольно странная и неприятная, принимая во внимание, что Western Digital уверенно позиционирует данную модель как специально разработанную для NAS. Не учитывая почему-то при этом, что большинство домашних NAS-ов используют именно Linux в качестве OS.

Диагностика проблемы довольно проста: проверьте счётчик, запустив несколько раз команду:
(замените sdX на ваш диск).
smartctl -a /dev/sdX | grep Load_Cycle
и заодно проверьте время работы:
smartctl -a /dev/sdX | grep Power_On_Hours

В идеале, диск должен быть неактивен, лучше всего – отмонтирован. Счётчик будет увеличиваться приблизительно каждые 8 секунд.
Если отмонтировать диск невозможно, руководствуйтесь здравым смыслом – в моём случае, свежеустановленный в NAS диск после 40 часов онлайна показал 1600 парковок. Для сравнения, WD Black c 5711 часами онлайна имеет Load_Cycle_Count = 1731.

Как лечить?
Техподдержка WD предлагает воспользоваться утилитой всё той же WDIDLE3 1.05
http://support.wdc.com/product/download.asp?groupid=609&sid=113
На моё счастье, натолкнулся на утилиту ide3ctl, прекрасно решающую вопрос непосредственно из-под линукса.
Вот она, доступна в исходниках:
http://idle3-tools.sourceforge.net/
будет требоваться компилятор!

Внимание! Всё последующее вы делаете на свой страх и риск!

Успешно скомпилирована gcc (просто запустите make) и испытана на Fedora 20 x86 и CentOS 6, на 3-х дисках:

WDC WD20EFRX (Red)
WDC WD20EARX (Green)

Как работает:

# ./idle3ctl
idle3ctl v0.9.1 — Read, Set or disable the idle3 timer of Western Digital drives
Copyright © 2011 Christophe Bothamy

Usage: idle3ctl [options] device
Options:
-h: displat help
-V: show version and exit immediately
-v: verbose output
—force: force even if no Western Digital HDD are detected
-g: get raw idle3 timer value
-g100: get idle3 timer value as wdidle3 v1.00 value
-g103: get idle3 timer value as wdidle3 v1.03 value
-g105: get idle3 timer value as wdidle3 v1.05 value
-d: disable idle3 timer
-s: set idle3 timer raw value

Смотрим:
./idle3ctl -g105 /dev/sdX
Idle3 timer set to 80 (0x50)
видим пресловутые 8 секунд
Отключаем:
./idle3ctl -d /dev/sdX
И делаем poweroff (обязательно).

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

Взято отсюда. И переделано.

Рубрика: Linux | Оставить комментарий

Добавление прав на EventLog

Для того чтобы другие пользователи могли читать логи серверов 2003 (не из групп администраторов)

необходимо добавить к параметру HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\CustomSD

запись такого вида:

(A;;0x1;;;S-1-5-21-134693881-2227611526-3787242677-1169)

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

Как определить SID см.http://technet.microsoft.com/en-us/sysinternals/bb897417

Для 2008 есть спец группа Event Log Readers. Добавьте в неё пользователей.
ЕСЛИ это КД то:

1.Откройте командную строку и выгрузите параметры доступа для раздела Сиситем или Приложения.

wevtutil gl system > C:\temp\out.txt

2. Посмотрите как пишется первый параметр (SYD)

channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x1;;;AU)(A;;0x1;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;LS)(A;;0x2;;;NS)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573) )

3. Примените права добавив конце SID группы.
wevtutil sl application /ca:O:BAG:SYD:(A;;0x1;;;S-1-5-21-134693881-2227611526-3787242677-1169)

Рубрика: Windows | Оставить комментарий

Создание сертификатов для Apache

Шаг 1. Создание собственного самоподписанного доверенного сертификата.

Собственный доверенный сертификат (Certificate Authority или CA) необходим для подписи клиентских сертификатов и для их проверки при авторизации клиента веб-сервером.
С помощью приведенной ниже команды создается закрытый ключ и самоподписанный сертификат.
openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 3650 -subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=User/CN=etc/emailAddress=support@site.com -out ca.crt

Описание аргументов:

req Запрос на создание нового сертификата.
-new Создание запроса на сертификат (Certificate Signing Request – далее CSR).
-newkey rsa:1023 Автоматически будет создан новый закрытый RSA ключ длиной 1024 бита. Длину ключа можете настроить по своему усмотрению.
-nodes Не шифровать закрытый ключ.
-keyout ca.key Закрытый ключ сохранить в файл ca.key.
-x509 Вместо создания CSR (см. опцию -new) создать самоподписанный сертификат.
-days 3650 Срок действия сертификата 3650 дней. Размер периода действия можете настроить по своему усмотрению. Не рекомендуется вводить маленькие значения, так как этим сертификатом вы будете подписывать клиентские сертификаты.
-subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=User/CN=etc/emailAddress=support@site.com
Данные сертификата, пары параметр=значение, перечисляются через ‘/’. Символы в значении параметра могут быть «подсечены» с помощью обратного слэша «\», например «O=My\ Inc». Также можно взять значение аргумента в кавычки, например, -subj «/xx/xx/xx».

Шаг 2. Сертификат сервера

Создадим сертификат для Apache и запрос для него
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr

Подпишем сертификат нашей же собственной подписью
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Чтобы Apache при перезагрузке не спрашивал пароль, сделаем для него беспарольную копию сертификата

openssl rsa -in server.key -out server.nopass.key
В конфигах Apache прописываем путь до сертификатов. Можно поглядеть тут: http://blog.mgvmi-hipl.ru/?p=66

Рубрика: Apache | Оставить комментарий

Защищаем SSH от подключений и перебора пароля

Способо противодействия брут-форсу, который применяется уже несколько лет. Он имеет два преимущества:
— дает мне больше попыток для набора правильного пароля
— но при этом блокирует брутфорсеров «навечно».

Как можно достичь этих двух противоположных целей?

Используется модуль iptables под названием hashlimit, который умеет подсчитывать кол-во пакетов в определенный промежуток времени и через некоторое время сбрасывать счетчик.
Все делается тремя правилами:
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH --hashlimit-htable-expire 60000 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j DROP

iptables -A -INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Что делает второе и третье правило понятно. Все самое интересное в первом: оно разрешает 2 попытки подключения в течение часа. Как только вы превышаете 2 попытки за указанное время, правило с -j ACCEPT перестает работать, пользователь вместо этого попадает в следующее правило с -j DROP (точно также можно поставить TARPIT). После этого вы не сможете подключиться, и начинается обратный отсчет 60 000 миллисекунд(1 мин.), после которых информация о вашей попытке «протухает» (параметр —hashlimit-htable-expire). То есть реально вам придеся ждать не 1 час, а всего 1 минуту. Вся  хитрость состоит в том, что если вы не дождетесь этого времени и попробуете еще раз подключиться, то пакет будет убит, а счетчик снова сброшен в начальное состояние — 1 минуту! Таким образом, если вы нетерпеливый брутфорсер и будете тупо долбать порт после блокировки, то вы с каждой попыткой будете продлевать свой бан!
Добропорядочный же пользователь наборот имеет несколько попыток подключения без ожидания между ними прежде чем попадет в «баню».
Модуль hashlimit сохраняет свое состояние в /proc — поначалу там пусто:
# cat /proc/net/ipt_hashlimit/SSH

после первой попытки подключения туда попадает инфа:
# cat /proc/net/ipt_hashlimit/SSH
55 ХХ.ХХ.ХХ.ХХ:0->0.0.0.0:0 11533000 230400000 115000000

первое число — кол-во оставшихся секунд, можно смотреть как оно равномерно тикает:

Таким образом решены две проблемы:
— если пользователь вдруг опечатался, ему не нужно долго ждать новых попыток
— брутфорсеры сами себя загоняют в «вечный» бан.

Что делать, если вы вдруг с нескольких попыток не смогли ввести пароль? Не суетиться — подождать спокойно минуту и попробовать еще несколько раз.

Было решено поставить время побольше, т.к. любители подбора пароля тоже не дремлют и придумывают всё новые изощрённые способы подбора пароля.

Пока остановился на 5-ти минутах.

P.S.

Все эти правила необходимо указывать только для интерфейса который смотрит наружу. т.е. для внутренних заводим ещё правила типа

iptables -I INPUT 1 -s 192.168.0.0/16 -p tcp —dport 22 -j ACCEPT

а в правила в начале текста добавляем параметр -i eth(?) который будет явно указывать название внешнего интерфейса.

Рубрика: Общее | Оставить комментарий

Postfix — очистка очереди

Решил проверить очередь почтовых сообщений, воспользовавшись командой mailq или postquele -q. Результат —2 сообщения в очереди… которые так и долбятся на хост у которого нет почтового сервера.

Очищаем очередь:

# postsuper -d ALL

postsuper: Deleted: 2 messages

Проверяем, действительно ли очередь сообщений очищена:

# mailq

postqueue: warning: Mail system is down — accessing queue directly

Mail queue is empty

Всё.

Рубрика: Postfix | Оставить комментарий

Перенос писем из одного ящика в другой

Синхронизация почты с помощью ImapSync

 
При замене почтового сервера возникает задача по переносу почты со старого сервера на новый. Если оба сервера работают под Linux, то проблем нет, берем и копируем содержимое /var/spool/mail на новую железку любым доступным способом и вперед. А что делать если, например, нужно переехать с Microsoft Exchange на Exim, или наоборот?

Тут нам вполне способен помочь ImapSync. Как видно из названия эта утилита предназначена для синхронизации почтовых папок по протоколу IMAP.

Устанавливаем:
yum install imapsync
Для синхронизации одного ящика выполняем:
imapsync —host1 server1 —user1 user1 —password1 password1 —host2 server2 —user2 user2 —password2password2
 
Здесь:

  • server1 — сервер с которого забираем почту
  • user1, password1 — учетные данные пользователя на сервере источнике
  • server2 — сервер на который копируем почту
  • user2, password2 — учетные данные пользователя на сервере приемнике

И так пятьдесят раз. Не хочется? Тогда пишем скрипт!
Предполагаем, что учетные данные пользователей на обоих серверах совпадают, скрипт запускается на сервере приемнике, учетные данные лежат в базе MySQL, для написания скрипта используется Perl.

#! /usr/bin/perl
#Параметры MySql
$dbuser = ‘user’;
$dbpass = ‘password’;
$db = ‘database’;
$dbhost = ‘localhost’;
$domain = ‘domain.ru’;
#Параметры Exchange
$server = ‘192.168.0.123’;
$domain1 = ‘domain.local’;

use DBI;
#Создаем SQL запрос
#login — логин пользователя без указания домена (например vova)
#decrypt — пароль почтового ящика в открытом виде
#domain — почтовый домен пользователя (domain.ru)
#status — признак активности пользователя
$query = ‘SELECT login, decrypt FROM users WHERE domain=\».$domain.’\’ AND status=\’1\»;
#Подключаемся к базе данных
$dbh = DBI->connect(«DBI:mysql:database=$db;host=$dbhost»,$dbuser, $dbpass) || die print «Can’t connect»;
#Выполняем SQL запрос
$sth = $dbh->prepare(qq{$query});
$sth -> execute;
# Выполняем синхронизацию
# делать выборку данных
# пока ничего не останется
while (my ($m_user, $m_pass) = $sth->fetchrow_array())
        {
$user1=$m_user.’@’.$domain1;
$user2=$m_user.’@’.$domain;
       #Сообщаем, над каким ящиком трудимся в данный момент
        print «Syncronize mail for «.$user2.»\n»;
$r_sync=`imapsync —host1 $server —user1 $user1 —password1 $m_pass —host2 $dbhost —user2 $user2 —password2 $m_pass`;

}
$sth->finish();
$dbh->disconnect();
exit;

Если нужно исключить из синхронизации некоторые папки в почтовом ящике используем ключ —exclude, если не нужны письма старше N дней, добавляем —maxage. Например

$r_sync=`imapsync —host1 $server —user1 $user1 —password1 $m_pass —exclude ‘spam’ —maxage 10 —host2 $dbhost —user2 $user2 —password2 $m_pass`;

 В этом случае не будут синхронизироваться папки с именем spam и сообщения старше 10 дней.
Имеется еще несколько замечательных ключиков, подробнее смотрим

perldoc imapsync

 
Рубрика: Linux, mail, Postfix | 1 комментарий