среда, 17 декабря 2014 г.

iptables виртуализация ipset centos 6 и ddos

сервер ддосили (CentOS release 6.6, ядро 3.10.23-xxxx-std-ipv6-64) и на помощь пришла статья http://habrahabr.ru/post/204508/, но к большому сожалению сервер OVH как часто бывает на виртуализированных серверах (например VMware vSphere и других) правила вида 
iptables -I INPUT -s x.x.x.x -j DROP
ничего не блокируют и типа заблокированная айпиха конектится и дальше, почему я нигде не нашел (имеется ввиду что за фигня с iptables на виртуальных машинах) и никто мне до сих пор не рассказал (в свое время чуть голову не слома думая как такое может быть), если кто-то из читающих будет знать отпишитесь в коментах
зато на этом сервере заработал ipset (которые кстати и благодаря своему бинарному дереву работает побыстрее iptables) и наработка автора статьи на хабре была модифицирована под ipset, которые в отличии от iptables работал. Собственно создаем таблицу ipset

cat /etc/ipset.conf
#!/bin/bash
/usr/sbin/ipset -N access iphash

не забываем 

chmod +x /etc/ipset.conf
/etc/ipset.conf

а также прописывает в автозапуск

tail -3 /etc/rc.local
/etc/ipset.conf
/sbin/service iptables start
/sbin/service fail2ban restart
 
2 последние строки нужно поскольку rc.local выполнится уже после запуска iptables, а сервис iptables не стартанет поскольку таблица ipset не создана, а fail2ban после запуска iptables конечно лучше рестартануть. Также первым правилом в /etc/sysconfig/iptables добавляем
-A INPUT -p tcp -m set --match-set access src -m tcp -m multiport --dports 80,443 -j DROP

сам скрипт который будет блокировать айпихи, у которых больше 50 подключений (можете поставить 20 например), также не забываем chmod +x /usr/local/ddos/ddos.sh

cat /usr/local/ddos/ddos.sh
#!/bin/sh

# find all connection and save them to file ddos.iplist in tmp dir
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | grep -v x.x.x.x | uniq -c | sort -n > /tmp/ddos.iplist

# empty script which ban ips
cat /dev/null > /tmp/iptables_ban.sh

# create DROP rule for 50 more aggresive bots
awk '{if ($1 > 50) {print "/usr/sbin/ipset -A access " $2 "" }}' /tmp/ddos.iplist >> /tmp/iptables_ban.sh

# this rule need for for creating file with analysing all iptables rules
echo "/usr/sbin/ipset -L access > /tmp/iptables.log" >> /tmp/iptables_ban.sh

# start script for ip banning
bash /tmp/iptables_ban.sh

где x.x.x.x - на всякий случай айпиха самого хоста (осталось от iptables теста), так на всякий случай. Задача в крон

*/10    *       *       *       *       /bin/sh /usr/local/ddos/ddos.sh >/dev/null 2>&1

вот собственно и все - спасибо автору на хабре за скрипт.

Также не забываем вырубить в апаче ipv6, поскольку скрипт будет некоректно получать айпихи
vim /etc/httpd/conf.d/httpd.conf
Listet 0.0.0.0:80
service httpd restart
вырубать нужно если в выводе
netstat -ant | grep :80

вы видите ffff
tcp        0      0 ::ffff:3.18.16.2:80     ::ffff:5.135.39.9:3571      TIME_WAIT
tcp        0      0 ::ffff:3.18.16.2:80     ::ffff:200.93.191.251:1534  TIME_WAIT

воскресенье, 13 апреля 2014 г.

win7 win2008 l2tp forwarding

Порты, которые нужно пробросить на роутере (источник http://aerovisionit.co.uk/pptp-and-l2tp-port-forwarding/)

L2TP traffic – UDP 1701
Internet Key Exchange (IKE) – UDP 500
IPSec Network Address Translation (NAT-T) – UDP 4500

И самая главная фигня, которую уже 2 раз забываю и из-за этого тратю кучу времени
Windows Vista, Windows 7 and the Windows Server 2008 operating system do not support NAT-T security associations to servers that are located behind a NAT Device by default (it’s not recommended) - то есть нужно еще править реестр на всех участниках соединения, которые стоят за нат (используем согласно выше приведенного источника ссылку http://support.microsoft.com/kb/926179)

для winxp sp2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
для win7 win2008r2 (в моем случае)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent

On the Edit menu, point to New, and then click DWORD (32-bit) Value.
Type AssumeUDPEncapsulationContextOnSendRule, and then press ENTER.
Right-click AssumeUDPEncapsulationContextOnSendRule, and then click Modify.
In the Value Data box, type one of the following values:
0 - A value of 0 (zero) configures Windows so that it cannot establish security associations with servers that are located behind NAT devices. This is the default value.
1 - A value of 1 configures Windows so that it can establish security associations with servers that are located behind NAT devices.
2 - A value of 2 configures Windows so that it can establish security associations when both the server and the Windows Vista-based or Windows Server 2008-based VPN client computer are behind NAT devices.

Я использовал 2 поскольку у меня и сервер и мой пк за nat (и там и там отличный роутер мikrotik)

На всякий случай приведу конфигурацию mikrotik для форвардинга l2tp трафика

add chain=customer dst-port=500,1701,4500 in-interface=internet protocol=udp
(у меня chain=customer поскольку add action=jump chain=forward in-interface=internet jump-target=customer, то есть у меня идет джам с форварда на эту таблицу, у вас скорее этого не будет и нада делать chain=forward; также in-interface=internet укажите свой интерфейс у меня PPPoE и назван internet)
add action=netmap chain=dstnat dst-port=500 protocol=udp to-addresses=192.168.10.2 to-ports=500
add action=netmap chain=dstnat dst-port=1701 protocol=udp to-addresses=192.168.10.2 to-ports=1701
add action=netmap chain=dstnat dst-port=4500 protocol=udp to-addresses=192.168.10.2 to-ports=4500

(где 192.168.10.2 - адрес win2008r2 сервера)

Самое главное как я написал не забывайте за ключи реестра.


пятница, 7 марта 2014 г.

postfix - повышаем безопасность

# Клиент, подключившийся к серверу, может командой vrfy определить, существует ли заданный адрес в системе. Т.е. vrfy user@example.com. Поэтому отключаем такую возможность
disable_vrfy_command=yes
# При попытке клиента отправить письмо несуществующему юзеру Постфикс выдаст 550 (reject) с сообщением "user unknown in local recipient table" (или другой таблице). Отключаем, пусть Постфикс просто сообщает "user unknown"
show_user_unknown_table_name=no
# Требуем от клиента приветствия (HELO/EHLO). Все, кто подключается, должны представляться
smtpd_helo_required=yes
# Создаём класс, в котором будет разрешена отправка от имени своего домена (т.е. адрес отправителя user@mydomain.ru). Нужно для того, чтобы никто другой (спамеры, например) не отправляли почту с наших адресов
smtpd_restriction_classes=from_mydomain
# Описание этого класса. Разрешаем отправлять с доверенных сетей (прописанных в mynetworks) или прошедшим аутентификацию. Остальных отбрасываем
from_mydomain=permit_mynetworks, permit_sasl_authenticated, reject
# Теперь идут smtpd_..._restrictions в порядке, в котором они обрабатываются
# Ограничения для этапа HELO/EHLO. Применяются к имени хоста, его айпи-адресу и приветствию HELO/EHLO.
smtpd_helo_restrictions=
# Разрешаем доверенные сети
[пробел]permit_mynetworks,
# Разрешаем тем, кто прошёл аутентификацию
[пробел]permit_sasl_authenticated,
# Отбрасываем неправильное (несуществующее) имя хоста (например hjfhg.r)
[пробел]reject_invalid_hostname,
# Отбрасываем не полностью определённое доменное имя хоста
[пробел]reject_non_fqdn_hostname,
# Отбрасываем, если хост по HELO/EHLO не имеет А или МХ записи в ДНС
[пробел]reject_invalid_helo_hostname
# Ограничения для этапа MAIL FROM. Применяется ко всему предыдущему + имя отправителя
smtpd_sender_restrictions=
# Отбрасываем не полностью определённое имя отправителя
[пробел]reject_non_fqdn_sender,
# Отбрасываем отправителя с несуществующего домена
[пробел]reject_unknown_sender_domain,
# Отбрасываем несуществующих отправителей
[пробел]reject_unlisted_sender,
# Проверяем отправителя. Если с нашего домена, то проверим, находится ли он в доверенной сети или прошёл аутентификацию
[пробел]check_sender_access hash:/etc/postfix/mysenders
# Разрешаем отправлять с доверенных сетей
[пробел]permit_mynetworks,
# Разрешаем отправлять прошедшим аутентификацию
[пробел]permit_sasl_authenticated,
# Ограничения для этапа RCPT TO. Применяется к предыдущему + имя получателя
smtpd_recipient_restrictions=
[пробел]reject_non_fqdn_recipient,
[пробел]reject_unknown_recipient_domain,
[пробел]reject_unlisted_recipient,
[пробел]permit_mynetworks,
[пробел]permit_sasl_authenticated,
# Режект, если получатель отсутствует в списке нашего домена или списке пересылки. Чтобы сервер на стал открытым релеем
[пробел]reject_unauth_destination
# Ограничения для этапа DATA
smtpd_data_restrictions=
# Отвергаем запрос, когда клиент посылает команды SMTP раньше времени, ещё не зная, поддерживает ли Постфикс
[пробел]reject_unauth_pipelining,
# Режект клиента с пустым именем отправителя, который отправляет сразу нескольким получателям
[пробел]reject_multi_recipient_bounce
# Ограничиваем клиенты, которые могут запрашивать у Постфикс очистку очереди сообщений
smtpd_etrn_restrictions=
[пробел]permit_mynetworks,
[пробел]permit_sasl_authenticated,
[пробел]reject

Файл /etc/postfix/mysenders:
# Те, кто отправляет письма от нашего домена, проверяются классом from_mydomain
mydomain from_mydomain

(источник http://www.postfix.ru/viewtopic.php?t=23823)

четверг, 6 марта 2014 г.

centos 6 - вырубаем ipv6, включая отключение его на сервисах

vim /etc/sysctl.conf
# disable ipv6 - error from services in maillog (postfix) secure (dovecot)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sysctl -p

теперь его нет на интерфейсах (ifconfig не покахет теперь строк например inet6 addr: ::1/128 Scope:Host - как для l0 интерфейса), но есть сервисы которые его используют

sudo lsof -i -n -P | grep IPv6

начнем

1). sshd
vim /etc/ssh/sshd_config
ListenAddress 0.0.0.0
service sshd restart
2). dovecot
vim /etc/dovecot.conf
listen = *
service dovecot restart
3). apache
service httpd restart
4). openfire
service openfire restart
5). PBEAgent
/etc/init.d/PBEAgent stop
/etc/init.d/PBEAgent start
6). postfix
vim /etc/postfix/main.cf
inet_protocols = ipv4
service postfix restart
7). bind
vim /etc/named.conf
#       listen-on-v6 port 53 {
#               any;
#               };
service named restart






среда, 19 февраля 2014 г.

mageia 4 убираем pulsaudio (проблема со skype)

На mageia 4 столкнулся с проблемой в skype (пакет get-skype-4.2.0.11-5.mga4.nonfree) - при обмене сообщениями рандомно при отправке или приеме сообщения появляется и исчезает шум на подобие сетевого фона). Решил с данной проблемой боротся удаление звукового сервера pulseaudio, который меня еще достал в mandriva, где я его тоже прибил и заменил на alsa.
Проблема решается очень просто:
1). удаляем пакеты pulseaudio
urpme pulseaudio
urpme --auto-orphans
2). грохаем демон pulseaudio
ps aux | grep pulseaudio
kill -9 х (где х - айди процесса и берем его с предыдущей команды)
3). смотрим наш профиль (источник информации в конце статье в скобках)
update-alternatives --display soundprofile
soundprofile - status is auto.
 link currently points to /etc/sound/profiles/pulse
/etc/sound/profiles/alsa - priority 10
/etc/sound/profiles/pulse - priority 20
Current `best' version is /etc/sound/profiles/pulse.
4). линкуем его с alsa
update-alternatives --set soundprofile /etc/sound/profiles/alsa
5). перезапускаем скайп и программы, которые использовали звук, вуаля

P.S. Теперь проблем со звуком в скайпе нет, как и pulseaudio на моем рабочем пк.

(источник https://forums.mageia.org/en/viewtopic.php?f=26&t=2067 - и благодарности автору)

четверг, 6 февраля 2014 г.

установка lilo на другой диск

монтируем правильно раздел второго винчестера
mount /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
чрутимся в примонтированный раздел
chroot /mnt /bin/bash
инсталим lilo
/sbin/lilo
размонтируемся
umount /mnt/proc
umount /mnt/sys
umount /mnt/dev
umount /mnt/
reboot

вторник, 28 января 2014 г.

mageia 3 iptables загрузка модулей

Поскольку в mageia 3 на катит конфиг /etc/sysconfig/iptables-config то загружать модули аля ip_conntrack_ftp нужно по другому, а именно
cat /etc/modules-load.d/modules.conf
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
ip_conntrack_ftp

то есть как видно из примера и коментов конфига по одному модулю в строке.