среда, 8 апреля 2015 г.

samba, security share и подключение домашник директорий с win 7

У нас на самбе

security = share

поскольку мы хотим подключать шары без аутентификации некоторые, но есть домашние шары пользователей

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        read only = No

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

        lanman auth = Yes
        client NTLMv2 auth = No
        client lanman auth = Yes

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

smbclient -L 10.1.1.1 -U some_user

но Win 7 все равно работать не будет, поэтому на ней нужно еще


Пуск -> выполнить -> gpedit.msc

Конфигурация компьютера -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности

и там установить

Сетевой клиент Майкрософт: отправить незашифрованный пароль для подключения к SMB-серверам -> Включить
Сетевая безопасность: уровень проверки подлинности LAN Manager -> Отправлять ответы LM и NTLM - использовать сеансовую безопасность NTLMv2 при согласовании

И все стреляет.

понедельник, 5 января 2015 г.

pptp client mageia 4

Примерчик конфигурации для pptp для подключения например к виндовым vpn серверам:

cat /etc/ppp/peers/vpn1
pty "pptp server.com --nolaunchpppd --nobuffer"
#debug
remotename vpn1
user vpnuser
password "vpnpass"
linkname vpn1
lock
nodeflate
nobsdcomp
noauth
nopcomp
noaccomp
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
mppe required,stateless
logfile /var/log/ppp/vpnlog

собственно важен очень параметр mppe required,stateless без которого соединения вроде устанавливается (то есть интерфейс pptp поднимается и айпиху получает), но трафик не ходит.
debug как видите закомичен, нужен пока настраиваем, лог соответственно  logfile /var/log/ppp/vpnlog

cat /etc/ppp/ip-up.d/vpn1
#!/bin/bash
if [ ! $LINKNAME = "vpn1" ]
then
             exit 0
     fi
ip route add 192.168.10.0/24 dev ppp0

собственно создание маршрута на удаленную сеть

поднимать соединение 
pon vpn1

ls -la /usr/sbin/pon
-rwxr--r-- 1 root root 970 Сен 27 00:32 /usr/sbin/pon*

cat /usr/sbin/pon
#!/bin/sh

PPP_ON_BOOT=/etc/ppp/ppp_on_boot

case "$1" in
  -*) echo "
Usage: pon [provider] [arguments]

If pon is invoked without arguments, $PPP_ON_BOOT file will be
run, presuming it exists and is executable. Otherwise, a PPP connection
will be started using settings from /etc/ppp/peers/provider.
If you specify one argument, a PPP connection will be started using
settings from the appropriate file in the /etc/ppp/peers/ directory, and
any additional arguments supplied will be passed as extra arguments to
pppd.
"
      exit 0
      ;;
esac

if [ -z "$1" -a -x "$PPP_ON_BOOT" ]; then
  exec "$PPP_ON_BOOT"
fi

if [ -z "$1" -a ! -f /etc/ppp/peers/provider ]; then
  echo "
Please configure /etc/ppp/peers/provider or use a command line argument to
use another file in /etc/ppp/peers/ directory.
"
  exit 1
fi

if [ "$1" -a ! -f "/etc/ppp/peers/$1" ]; then
  echo "
The file /etc/ppp/peers/$1 does not exist.
"
  exit 1
fi

отключать 
poff vpn1

ls -la /usr/sbin/poff
-rwxr--r-- 1 root root 2772 Сен 27 00:33 /usr/sbin/poff*

#!/bin/sh

# $Id: poff,v 1.1 2002/11/24 23:30:44 etbe Exp $
# Written by John Hasler and based on work 
# by Phil Hands .  Distributed under the GNU GPL

if [ -x /usr/bin/kill ]; then
  KILL="/usr/bin/kill"
else
  KILL="/bin/kill"
fi
SIG=TERM
DONE="stopped"
MODE=""

usage ()
{
   cat <
usage: $0 [option] [provider]
options:
  -r        Cause pppd to drop the line and redial.
  -d        Toggle the state of pppd's debug option.
  -c        Cause pppd to renegotiate compression.
  -a        Stop all pppd's.  'provider' will be ignored.
  -h        Print this help summary and exit.
  -v        Print version and exit.
  none      Stop pppd.

Options may not be combined.

If 'provider' is omitted pppd will be stopped or signalled if and only if
there is exactly one running unless the '-a' option was given.  If
'provider' is supplied the pppd controlling the connection to that
provider will be stopped or signalled.
!EOF!
}

# Get option.  If there are none replace the "?" that getopts puts in
# FLAG on error with "null".
getopts rdcavh FLAG
if [ "$?" -ne 0 ]; then
    FLAG="null"
fi

# Check for additional options.  Should be none.
getopts :rdcavh DUMMY
if [ "$?" -eq 0 ]; then
    echo "$0: Illegal option -- ${OPTARG}."
    exit 1
fi

case $FLAG in
 "r") SIG=HUP;  DONE=signalled; shift ;;
 "d") SIG=USR1; DONE=signalled; shift ;;
 "c") SIG=USR2; DONE=signalled; shift ;;
 "a") MODE="all"; shift ;;
 "v") echo "$0$Revision: 1.1 $_TrickToPrint_RCS_Revision"; exit 0 ;;
 "h") usage; exit 0 ;;
 "?") exit 1;
esac
# Get the PIDs of all the pppds running.  Could also get these from
# /var/run, but pppd doesn't create .pid files until ppp is up.
PIDS=`pidof pppd`

# poff is pointless if pppd isn't running.
if test -z "$PIDS"; then
    echo "$0: No pppd is running.  None ${DONE}."
    exit 1
fi

# Find out how many pppd's are running.
N=`echo "$PIDS" | wc -w`

# If there are no arguments we can't do anything if there is more than one
# pppd running.
if test "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ; then
    echo "$0: More than one pppd running and no "-a" option and 
no arguments supplied. Nothing ${DONE}."
    exit 1
fi

# If either there are no arguments or '-a' was specified kill all the
# pppd's.
if test "$#" -eq 0 -o "$MODE" = "all" ; then
    $KILL -$SIG $PIDS || {
        echo "$0: $KILL failed.  None ${DONE}."
        exit 1
    }
    exit 0
fi

# There is an argument, so kill the pppd started on that provider.
PID=`ps axw | grep "[ /]pppd call $1 *\$" | awk '{print $1}'`
if test -n "$PID" ; then
    $KILL -$SIG $PID || {
        echo "$0: $KILL failed.  None ${DONE}."
        exit 1
    }
else
   echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
   exit 1
fi
exit 0

среда, 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