Показаны сообщения с ярлыком сетевая безопасность. Показать все сообщения
Показаны сообщения с ярлыком сетевая безопасность. Показать все сообщения

воскресенье, 19 февраля 2012 г.

Настройка Openssh


user@host:~$ su
Password:

root@host:/home/user#
root@host:/home/user# cd /


root@host:/# aptitude install openssh-server
root@host:/# nano etc/ssh/sshd-config


Содержимое файла:
# Package generated configuration file
# See the sshd_config(5) manpage for details

# Будем использовать стандартный порт,  но защитим его в последствии через port knocking
Port 22

# Будем использовать только протокол SSH 2
Protocol 2

# ListenAdress — адрес на котором сервер принимает запросы на соединение. По умолчанию
# sshd принимает подключения на всех интерфейсах, если не требуется заходить на сервер «из
вне», то можно ограничить его нужным нам IP адресам, (например 192.168.100.1)
#ListenAddress ::
#ListenAddress 0.0.0.0

#По умолчанию sshd слушает как на IPv4 так и на IPv6 адресах. Для того что бы его отключить необходимо изменить параметр AddressFamily (если значение AddressFamily не указано в конфигурационном файле, то оно принимается равным any
AddressFamily inet # IPv4 only
#AddressFamily inet6 # IPv6 only
#AddressFamily any # default (IPv4 и IPv6)

# Ключ сервера для протокола версии 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Данные значения определяют длину ключа сервера и его время жизни для использования ssh версии 1 (данный ключ будет заново генерироваться через заданное время)
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO

#Параметр LoginGraceTime определяет, по истечению какого времени простаивающее подключение будет разорвано (в секундах), т.е : позволенный для регистрации промежуток времени, за который надо ввести пароль, значение по умолчанию 120 явно завышено, думаю что будет 45 сек будет достаточно.
LoginGraceTime 45

# Время закрытия неработающей сессии. Устанавливаем таймаут в секундах (300 секунд = 5 минутам). После того, как указанное время истечет, бездействующий пользователь будет отключен от системы 
ClientAliveInterval 300
ClientAliveCountMax 0

# Запрещаем использовать root учетную запись при подключении к серверу
PermitRootLogin no
# Разрешаем подключаться только определенным пользователям 
AllowUsers igorek
# Проверка sshd прав доступа и владельцев домашних каталогов.
StrictModes yes

# Проверка sshd прав доступа и владельцев домашних каталогов.
RSAAuthentication yes
# Разрешаем подключаться к серверу используя публичный ключ (версия 2)
PubkeyAuthentication yes
# Определяет публичный ключ пользователя для аутентификации по ключу. Можно
# применять шаблоны: %u - имя пользователя, %h - домашний каталог пользователя.
#AuthorizedKeysFile     %h/.ssh/authorized_keys

# Не используем аутентификацию rhosts
RhostsAuthentication no
# Можно также игнорировать rhosts и shosts при hostbased autentification,
# используя только known_hosts файл.
IgnoreRhosts yes
# Используем ли аутентификацию через known_hosts совместно с .rhosts или
# .shosts. Опция действительна только для протокола версии 1.
RhostsRSAAuthentication no
# То же самое, что и предыдущее только для версии 2
HostbasedAuthentication no
# Если нет доверия к known_hosts, то их можно не использовать при hostbased
# autentification. По умолчанию no
IgnoreUserKnownHosts no

# Запрещаем использовать пустые пароли при подключении к серверу
PermitEmptyPasswords no
# Чтобы запретить посылку хешей паролей через туннель ssh задайте значение
# данной опции no. По умолчанию аутентификация по паролю разрешена
PasswordAuthentication yes

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Этим мы разрешаем серверу запускать удалённо графические приложения и отправлять их на клиентскую машину.
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
# При логине пользователя выводим /etc/motd: в некоторых системах это отменено в
# целях безопасности
PrintMotd no
# Сообщаем пользователю время и место последнего логина, ситуация, аналогичная
# предыдущей
PrintLastLog yes
# Посылать клиенту сообщения о доступности
TCPKeepAlive yes
#UseLogin no

# Количество параллельных не идентифицированных подключений к серверу контролируется 
# при помощи MaxStartups. Запись параметра имеет форму «start:rate:full». В нашем случае она 
# означает отключение с вероятностью 50% при наличии двух не идентифицированных связей, 
# с линейным ростом вероятности до 100% при достижении 10.
MaxStartups 2:50:10

# Путь к файлу, который будет отображаться при входе клиента ДО аутентификации
# Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes


После внесения изменений в файл конфигурации перезапускаем службу через команду:
root@host:/# etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.

пятница, 15 апреля 2011 г.

Сетевая фильтрация пакетов на базе iptables



Чтобы настроить сетевой фильтр iptables в Debian выполняем следующие действия:

1. Создаем скрипт netfilter в каталоге /etc/init.d/:
user@server:~$ su
Пароль:
root@server:/home/igorek# nano /etc/init.d/netfilter

Преамбула:
необходимо настроить сетевой фильтр так чтобы по умолчанию были запрещены все соединения, как входящие, так и исходящие, кроме тех, которые имеют флаг ESTABLISHED. Это относится как к udp так и tcp пакетам.

В дальнейшем мы будем разрешать соединения, NEW через соответствующие правила. Естественно мы разрешаем прохождение сетевого трафика по интерфейсу обратной петли, а для ssh настраиваем скрытый порт, который открывается только при получении icmp пакета определенной длинны и времени жизни.

2. Копируем правила в файл:


#!/bin/bash

# Местонахождение iptables
IPT=/sbin/iptables
# Номера непривилегированных портов
UNPRIPORTS="1024:65535"
FTPPORTS="49000:49500"

# Очистка цепочек правил iptables
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -X

# Используем политику запретить все (default deny)
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP

# разрешаем прохождение входящих  tcp/udp-пакетов принадлежащих к уже установленым соединениям
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT

# разрешаем прохождение исходящих tcp/udp-пакетов принадлежащих к уже установленым cоединениям
iptables -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state ESTABLISHED -j ACCEPT

# Разрешаем прохождение любого трафика по интерфейсу обратной петли
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Разрешаем использовать следующие порты:

# 1. УПРАВЛЕНИЕ СЕРВЕРОМ
# SSH на порте 5681.
# iptables -A INPUT -p tcp --dport 5681 -j ACCEPT
# SSH с port knocking и защитой от bruteforce.Размер пакета:
# icmp 113 байт (случайные данные)+8 байт (icmp заголовок)+ 20 байт (ip заголовок)
# ttl для пакета более 88 сек.

# Если пришёл icmp пакет длиной не 141 байт, то добавляем его ip в таблицу BLOCK для блокировки
iptables -A INPUT -p icmp --icmp-type echo-request -m length ! --length 141                    -m recent --name BLOCK --set
# Если пришел icmp пакет длиной 141 байт и временем жизни более 65, то добавляем его ip в таблицу OPEN
iptables -A INPUT -p icmp --icmp-type echo-request -m length   --length 141 -m ttl --ttl-gt 65 -m recent --name OPEN  --set
# Разрешаем доступ к порту SSH (22) для ip из таблицы OPEN в течении 20 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name OPEN  --rcheck --seconds 30 -j ACCEPT
# Блокируем доступ к порту SSH (22) для ip из таблицы BLOCK в течении 60 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 22 -m recent                      --name BLOCK --rcheck --seconds 60 -j DROP

# Webmin на порте 10000
# Разрешаем доступ к порту Webmin (22) для ip из таблицы OPEN в течении 20 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 10000 -m state --state NEW -m recent --name OPEN  --rcheck --seconds 1000 -j ACCEPT
# Блокируем доступ к порту Webmin (22) для ip из таблицы BLOCK в течении 60 секунд после добавления в таблицу
iptables -A INPUT -p tcp --dport 10000 -m recent                      --name BLOCK --rcheck --seconds 60 -j DROP

# 2. СЛУЖЕБНЫЕ
# DNS
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # маленькие запросы
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # большие запросы
# Traceroute
iptables -A OUTPUT -p udp --dport 33200:33800 -m state --state NEW -j ACCEPT
# SSH
iptables -A OUTPUT -p tcp -m tcp --dport ssh --sport $UNPRIPORTS -j ACCEPT
# FTP в активном режиме
iptables -A OUTPUT -p tcp -m tcp --sport $UNPRIPORTS --dport ftp -j ACCEPT
iptables -A INPUT  -p tcp -m tcp --sport ftp-data --dport $UNPRIPORTS -j ACCEPT #! --syn

# HTTP
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
# HTTPS
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
# Почта 25, 143, 587 порт
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 113 -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --sport 143 -j ACCEPT
# iptables -A OUTPUT-p tcp -m state --state NEW -m tcp --sport 587 -j ACCEPT


# 3. ЗАДАЧИ СЕРВЕРА
# FTP сервер активный режим
iptables -A INPUT -p tcp -m state --state NEW -m tcp --sport $UNPRIPORTS --dport ftp -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport ftp-data --dport $UNPRIPORTS -j ACCEPT
# FTP сервер пассивный режим
iptables -A INPUT -p tcp -m state --state NEW,RELATED -m tcp --dport $FTPPORTS -j ACCEPT

# Почта 25, 110, 143, 465, 587, 993, 995 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# HTTP 80 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# HTTPS 443 порт
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 4949 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 2000 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT

# 4. ДРУГОЕ
# Разрешаем использовать ICMP пакеты (ping...)
iptables -A INPUT  -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# Записываем отброшенные пакеты в файл /var/log/ulog/syslogemu.log
#iptables -A OUTPUT -j ULOG
#iptables -A INPUT -j ULOG


Сохраняем!

Так как пока сервер не выполняет каких либо зада, а настраивается особенных правил для входящих соединений не применяется. Статья будет обновляться по мере необходимости.

3. Добавляем файлу права на исполнение:
root@mail:/home/igorek# chmod +x /etc/init.d/netfilter

4. Устанавливаем пакет sysv-rc-conf
root@mail:/home/igorek# aptitude install sysv-rc-conf

5. Редактируем загрузку служб в sysv-rc-conf. Устанавливаем крестик между netfilter и "S". После этого наш сетевой фильтр будет загружаться с системой.

6. Перезагружаемая на всякий случай и проверяем командой iptables -L:
root@mail:/home/igorek# iptables -L

За идею спасибо http://www.blogger.com/profile/16253756937078146873