Search Results for "iptables"

июля 20 2010

Ограничение количества сессий с одного ip адреса

Если у вас вдруг возникнет необходимость ограничить количество сессий для айпи адресов в вашей локальной сети, то после прочтения данной заметки у вас будет готовое решение. Воспользуемся штатными возможностями пакетного фильтра iptables, а именно его модулями connlimit и recent. Модуль connlimit сильно расходует ресурсы машины, и использовать его рекомендуется только в маленьких сетях, да и работает он только с протоколом TCP.

Читать далее »

Popularity: 12%

2 Комментариев »

марта 28 2010

Настройка NAT по принципу сеть в сеть при помощи iptables NETMAP

netmap

В этом руководстве я опишу как настроить полный NAT из одной сети в другую, на примере двух офисных сетей. Для настройки данного решения вам понадобится iptables с поддержкой NETMAP и пакет iproute2 для настройки маршрутизации. Я настраивал эту схему на базе Linux ubuntu 8.04 server, iptables v 1.4.7 и iproute2 v ss071016. Кратко опишу, что же такое патч NETMAP для iptables, он позволяет нам делать двухстороннюю трансляцию сетей в другие сети один в один, например транслировать сеть 1.1.1.1/24 в сеть 2.2.2.2/24, и обратно, транслируя айпи адрес 1.1.1.89/32 в айпи 2.2.2.89/32 и тд.

Читать далее »

Popularity: 10%

Комментариев нет »

ноября 12 2009

Ubuntu Server Pack

ubuntu-904-pack.jpg

Не так давно в сети появился сайт с которого можно скачать диски с дополнениями к Ubuntu Linux, некоторое время спустя список дополнений пополнился, на сайте появились сборки Ubuntu ServerPack, Ubuntu DocsPack, и Ubuntu GamePack. В этом небольшом обзоре я расскажу про Ubuntu ServerPack.

Ubuntu ServerPack является набором программного обеспечения для настройки серверных приложений, таких как Mail server, DNS, и тд. Пригодится это набор людям у которых ограничен доступ в интернет, или лимитирован трафик. Так же в набор интегрировано сторонние программное обеспечения для разных нужд. Список приложений и прочего контента вошедшего в сборку в продолжении поста.

Читать далее »

Popularity: 3%

Комментариев нет »

августа 5 2009

Установка и настройка Open VPN сервера на Debian и Ubuntu

openvpn_logo.png

Сегодня мы поговорим о OpenVPN. Для начала немного информации о OpenVPN:
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами находящимися за NAT-firewall без необходимости изменения его настроек. OpenVPN была создана Джеймсом Йонан (James Yonan) и распространяется под лицензией GNU GPL.

Читать далее »

Popularity: 55%

3 Комментариев »

августа 6 2008

Блокировка нежелательных URL с помощью iptables

stop.jpg

Иногда может возникнуть необходимость заблокировать доступ к некоторым сайтам, и внесение их адресов или даже подсетей в фаервол не приносит желаемых результатов, так как продуманные пользователи продолжают посещать их используя веб прокси количество которых так велико что о блокировке их не может быть и речи…. Есть конечно и явные минусы этого способа, но в моем случае минусы приниматься во внимание не стали. Из плюсов стоит отметить полную блокировку сайтов, они не будут работать даже через веб и обычные прокси сервера, с них не будет доставлятся почта и тд.

Читать далее »

Popularity: 1%

Комментариев нет »

мая 20 2008

Настройка маршрутизации в Ubuntu Linux для начинающих

routing

Правила маршрутизации определяют, куда отправлять IP-пакеты. Данные маршрутизации хранятся в одной из таблиц ядра. Вести таблицы маршрутизации можно статически или динамически. Статический маршрут — это маршрут, который задается явно с помощью команды route. Динамическая маршрутизация выполняется процессом-демоном (routed или gated), который ведет и модифицирует таблицу маршрутизации на основе сообщений от других компьютеров сети. Для выполнения динамической маршрутизации разработаны специальные протоколы: RIP, OSPF, IGRP, EGP, BGP и т. д.

Динамическая маршрутизация необходима в том случае, если у вас сложная, постоянно меняющаяся структура сети и одна и та же машина может быть доступна по различным интерфейсам (например, через разные Ethernet или SLIP интерфейсы). Маршруты, заданные статически, обычно не меняются, даже если используется динамическая маршрутизация.

Читать далее »

Popularity: 47%

3 Комментариев »

апреля 9 2008

Linux в роли WI-FI точки доступа

В этой небольшой статье кратко описано как превратить вашу машину с Linux в точку доступа WI-FI для пользования интернетом например с кпк, смартфона или ноутбука. Так же подразумевается что ваш сетевой беспроводной адаптер уже работает на машине с Linux.
Читать далее »

Popularity: 22%

9 Комментариев »

марта 30 2008

Настройка ограничения и распределения канала (HTB Shaper)

Если у Вас есть Ваша собственная домашняя сеть с двумя или более компьютерами и она подключена к интернету, вы точно знаете о тех проблемах с одновременным доступом к сети, которые практически неизбежны при таком подключении. Самой большой и раздражающей проблемой является разделение ширины канала между всеми участниками сети: когда вы пытаетесь работать через ssh с удалённым сервером, а в этот момент ваша wife/брат/друг решает поглядеть новый и очень классный видео клип с Google Video или YouTube, Ваше соединение замирает и вы можете забыть о комфортабельной работе . В этой маленькой статье я дам вам простое решение этой проблемы, которое позволит вам делать все, что угодно не думая о проблемах разделения трафика!

Для начала замечу, что Ваша сеть должна быть подключена к Internet при помощи Linux сервера. Если Вы подключены через какой-то тупой аппаратный маршрутизатор, то Вам сильно не повезло и вы не сможете воспользоваться приведенным примером.
Читать далее »

Popularity: 36%

55 Комментариев »

января 16 2008

Скрытые возможности IPTables

С помощью этого мощного набора расширений для iptables вы сможете
строить свои правила, основываясь на анализе содержимого пакетов,
диапазона портов и даже создавать ловушки для злоумышленников.

Iptables в Linux позволяет строить весьма мощные брандмауэры, ничуть
не уступающие по своим характеристикам многим коммерческим системам
защиты. По сути своей, iptables основывается на фильтрации пакетов,
проходящих через соединение, и в соответствии с набором правил
определяет ту или иную реакцию брандмауэра на эти пакеты. В самых
простых случаях iptables может использоваться для того, чтобы сбросить
одни пакеты и пропустить другие. При этом обычно анализируются
IP-адрес пакета, номер порта и направление движения пакета. Кроме того
iptables может анализировать статус пакета (NEW, ESTABLISHED, RELATED
и пр. прим. перев.)

Читать далее »

Popularity: 4%

Комментариев нет »

декабря 23 2007

Настройка шлюза в локальной сети, лимитирование скорости (shaper), фаервол (iptables).

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

Для настройки всех необходимых сервисов я использовал одну программу стороннего разработчика (Master Shaper), все остальные необходимые программы присутствуют в штатных репозитариях Ubuntu Linux.




2. Настройка iptables (firewall & nat)

Начнем пожалуй с настройки NAT и фаервола, так же включим форвардинг и исправим некоторые параметры SYSCTL, для выделения нужного количества ресурсов, если у вас к примеру более 5000 компьютеров в локальной сети.

Реализовать все это можно с помощью одного скрипта, который приведен ниже, все парамтры с комментариями.

Код:

#!/bin/bash

OUT="eth0" # Имя исходящего интерфейса, смотрящего в интернет.
OUTADDR="1.1.1.1" # Адрес исходящего интерфейса
IN="eth1" # Имя входящего интерфейса, смотрящего в локальную сеть
INADDR="2.2.2.2" # Адрес входящего интерфейса
NETWORK="10.0.0.0/8" # Адресация вашей локальной сети
ANYWHERE="0.0.0.0/0" # Назначение, любое.
PORTS="1024:65535" # Порты, которые считаются локальными
MULTICAST="224.0.0.0/4" # Мультикаст пакеты, если у вас не используется оставьте как есть,
# если используется IP TV тогда надо удалить этот пункт

ADMINS="2.2.2.3 2.2.2.4" # IP адреса администраторов, имеют полный доступ на сервер, без каких либо ограничений.

##############################################################################################
# Здесь прописаны параметры запуска\остановки\статуса скрипта. лучше не трогайте =)
# Остановка скрипта
case "$1" in
stop)
echo "Shutting down firewall..."

iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain

iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT

echo "...done"
;;
status)
echo $"Table: filter"
iptables --list
echo $"Table: nat"
iptables -t nat --list
;;
restart|reload)
$0 stop
$0 start
;;

##############################################################################################
# Запуск скрипта
start)
echo "Starting Firewall..."
echo ""

# Очистка таблиц и цепочек
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table filter --flush
iptables --table nat --delete-chain
iptables --table filter --delete-chain

# Назначение глобальных политик фаервола
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# Загружаем модули, для корректной работы VPN, Active ftp, DCC in IRC которые будут идти через нат.
modprobe ip_nat_ftp
modprobe ip_nat_pptp
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

# Изменение параметров SYSCTL
# Включение форвардинга
echo 1 > /proc/sys/net/ipv4/ip_forward
# Включение форвардинга для VPN
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
# Увеличение размера очередей
echo 32000000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
# Время ожидания до закрытия соединения
echo 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# Время ожидания до посылки FIN пакета
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
# Время ожидания до посылки FIN пакета
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
# Для защиты от syn флуда
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Увеличиваем размер backlog очереди
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Число начальных SYN и SYNACK пересылок для TCP соединения
echo 4 > /proc/sys/net/ipv4/tcp_synack_retries
echo 4 > /proc/sys/net/ipv4/tcp_syn_retries
#Какие порты использовать в качестве локальных TCP и UDP портов
echo "16384 61000" > /proc/sys/net/ipv4/ip_local_port_range
Сколько секунд ожидать приема FIN до полного закрытия сокета
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# Как часто посылать сообщение о поддержании keep alive соединения
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
# Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто.
echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes
# Зaпрещаем TCP window scaling
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
# Запрещаем selective acknowledgements, RFC2018
echo 0 > /proc/sys/net/ipv4/tcp_sack
# Запрещаем TCP timestamps, RFC1323
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
# Уличиваем размер буфера для приема и отправки данных через сокеты.
echo 1048576 > /proc/sys/net/core/rmem_max
echo 1048576 > /proc/sys/net/core/rmem_default
echo 1048576 > /proc/sys/net/core/wmem_max
echo 1048576 > /proc/sys/net/core/wmem_default
# Через какое время убивать соединеие закрытое на нашей стороне
echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries

# Temporary eth0 completely disabled
#iptables -A INPUT -i $OUT -j DROP

# Admins - full control (even dagerous)
for admin_ips in $ADMINS; do

iptables -A INPUT -s $admin_ips -m state --state NEW -j ACCEPT
done

##############################################################################################

# Silently Drop Stealth Scans
# All of the bits are cleared
iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

##############################################################################################

# Multicast - ignore
iptables -A INPUT -s $MULTICAST -j DROP
iptables -A INPUT -d $MULTICAST -j DROP

# any established or related conns are welcome
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Statistics and auths for customers, ping tests
for net_ips in $NETWORK; do

iptables -A INPUT -p icmp -i $IN --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -i $OUT --icmp-type echo-request -j ACCEPT

done

############ Открываем нужные нам порты.
# FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
# PASSIVE FTP
iptables -t filter -A INPUT -p tcp -m tcp --dport 50000:50500 -m state --state NEW -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp --dport 50000:50500 -m state --state NEW -j ACCEPT
# APACHE
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

########### OUTPUT

iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP

########### NAT Вписываем сюда IP своих компьютеров в локальной сети.

iptables -t nat -A POSTROUTING -s 2.2.2.10 -o $OUT -j MASQUERADE
iptables -t nat -A POSTROUTING -s 2.2.2.11 -o $OUT -j MASQUERADE
iptables -t nat -A POSTROUTING -s 2.2.2.12 -o $OUT -j MASQUERADE
iptables -t nat -A POSTROUTING -s 2.2.2.13 -o $OUT -j MASQUERADE
iptables -t nat -A POSTROUTING -s 2.2.2.14 -o $OUT -j MASQUERADE

############ PORT FORWARD Сюда вписываем проброс портов локальную сеть.

iptables -t nat -A PREROUTING -p tcp -d $OUTADDR --dport 8230 -j DNAT --to-destination 2.2.2.10:8230
iptables -t filter -A FORWARD -i $OUT -d 2.2.2.10 -p tcp --dport 8230 -j ACCEPT

echo "...done"

echo "--> IPTABLES firewall loaded/activated <--"

##--------------------------------End Firewall---------------------------------##

;;
*)
echo "Usage: firewall (start|stop|restart|status) EXTIF INTIF"
exit 1
esac

exit 0

После настройки этого скрипта под себя у вас выйдет фаервол с политикой DROP, и NAT.

3. Установка и настройка Shaper.

Скачайте с сайта разработчика дистрибутив программы Master Shaper .
В архиве вы найдете подробное описание продукта, а так инструкции по использованию и установки.
Программа имеет WEB интерфейс для работы и настройки, а так же серверную часть.
Master Shaper позволяет создавать тарифы, возможна настройка приоритезации трафика, очень гибкая и функциональная система.
Настройка и установка займет у вас совсем не много времени.

Popularity: 43%

10 Комментариев »

декабря 18 2007

netfilter и iptables в Linux: принципы работы, настройка netfilter

netfilter (встроенные в ядро linux в отличие от ipchains умеет отслеживать соединения (stateful packet filtering), при этом пакеты обязательно дефрагментриуются; цепочки правил объединяются в таблицы различного назначения (filter, nat, mangle), используются специальные модули для различных протоколов (в т.ч. прикладного уровня). Также позволяет менять заголовки пакетов и помечать пакеты для дальнейшего использования при маршрутизации и управлении трафиком. В основном, работает на межсетевом уровне TCP/IP, но захватывает транспортный уровень (TCP, UDP)и уровень доступа к сети (MAC адреса).Одновременное использование данных из 2 пакетов по-прежнему невозможно, для настоящей фильтрации на прикладном уровне пользуйтесь прокси серверами.




В статье описываются:

  • предварительные условия использования netfilter
  • основные понятия (таблицы, цепочки, правила) и путь пакета
  • отслеживание соединений
  • утилита управления цепочками iptables
  • действия (target)
  • шаблоны (match)
  • утилиты iptables-save и iptables-restore
  • сервис в Red Hat Linux
  • примеры и советы


Предварительные условия

Для работы netfilter необходимо иметь ядро 2.3.15 или более новое,
при генерации которого включены CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (таблица filter), CONFIG_IP_NF_NAT (таблица nat), CONFIG_BRIDGE_NETFILTER, а также многочисленные дополнительные модули: CONFIG_IP_NF_CONNTRACK (отслеживание соединений), CONFIG_IP_NF_FTP (вспомогательный модуль для отслеживания FTP соединений), CONFIG_IP_NF_MATCH_* (дополнительные типы шаблонов соответствия пакетов: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (дополнительные действия в правилах:REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), CONFIG_IP_NF_COMPAT_IPCHAINS для совместимости с прочие CONFIG_IP_NF_* и CONFIG_IP6_NF_*.Полезно также указать CONFIG_PACKET.

Наличие netfilter в ядре определяется по файлам /proc/net/ip_tables_names (список используемых таблиц), /proc/net/ip_tables_targets (2.6) и /proc/net/ip_tables_matches (2.6).

Управление осуществляется с помощью утилиты iptables.

Функциональность netfilter может расширяться с помощью модулей ядра. Головной модуль ядра называется iptable_filter, модуль поддержки утилиты iptables называется ip_tables, вспомогательные модули обычно имеют префикс “ipt_” (ipt_state, ipt_REJECT, ipt_LOG; хотя — ip_conntrack). Большинство модулей загружается автомагически, но некоторые всё же приходиться загружать вручную (ip_conntrack_ftp — иначе может не работать в режиме Active; ip_conntrack_irc — иначе может не работать отсылка файлов по DCC; ip_nat_ftp; ip_nat_irc).

Управление дополнительными модулями ядра осуществляется с помощью разделяемых библиотек(см. /lib/iptables/) для утилиты iptables. netfilter позволяет эмулировать ipfwadm и ipchains с помощью модулей ядра (с некоторых пор перестали включаться в стандартное ядро), при этом модуль ip_tables необходимо
выгрузить.

Таблицы, цепочки, путь пакета

Каждый проверяемый IP-пакет проходит по цепочке (”сквозь строй”) правил, определяющих, что с ним делать. Правило состоит из шаблона, которому должен соответствовать пакет, и действия. Каждая цепочка имеет действие по умолчанию (политику).В отличие от ipchains правила входной цепочки (INPUT) применяются после принятия решения о том, что это “наш” пакет и маршрутизировать его не надо; правила выходной цепочки (OUTPUT) применяются не только к исходящим наружу пакетам, но и к передаваемым на локальный интерфейс. Правила цепочки FORWARD применяются только к транзитным пакетам. Имеется возможность добавлять к набору свои цепочки. netfiler обрабатывает несколько наборов (таблиц) цепочек: таблица filter приблизительно соответствует набору цепочек в ipchains, таблица nat обеспечивает функциональность подстановки адресов (только первый пакет соединения обрабатывается полностью, в последующих пакетах соединения адреса подменяются по аналогии с первым пакетом, остальные действия не производятся), таблица mangle — преобразование пакетов (манипулирование TOS, TTL, маркеры).

Приблизительная схема обработки пакетов (взята из NAG2, по-моему, ради красоты
картинки художник пожертвовал истиной: пропал маршрут из второй точки маршрутизации на localhost,он не проходит через FORWARD):
iptables_route.png

В таблицах nat и mangle имеются цепочки PREROUTING и POSTROUTING.Правила цепочки PREROUTING применяется к пакетам сразу после получения пакета на входе интерфейса перед выбором маршрута, а правила цепочки POSTROUTING непосредственно перед выводом пакета через интерфейс. В таблице nat нет цепочек INPUT и FORWARD.

Реальная последовательность обработки входящего пакета, предназначенного для локального процесса такова:

  1. просматривается цепочка PREROUTING таблицы mangle (используется для преобразования пакетов),здесь же происходит отслеживание соединений
  2. просматривается цепочка PREROUTING таблицы nat (используется для DNAT,
    фильтровать здесь не стоит)
  3. маршрутизация: если пакет надо маршрутизовать вовне, то переходим к обработке проходящего пакета
  4. просматривается цепочка INPUT таблицы mangle
  5. просматривается цепочка INPUT таблицы filter

Реальная последовательность обработки пакета, уходящего с нашего хоста такова:

  1. маршрутизация: определение исходящего адреса, адреса назначения, используемого интерфейса; если пакет маршрутизируется внутрь, то переходим к предыдущей процедуре (п. 1 или 4?)
  2. просматривается цепочка OUTPUT таблицы mangle, фильтровать здесь не стоит,
    здесь же происходит отслеживание локально создаваемых соединений
  3. просматривается цепочка OUTPUT таблицы nat (NAT для локально сгенерированных пакетов)
  4. повторная маршрутизация, т.к. в таблицах mangle и nat пакет мог быть изменён; если пакет маршрутизируется внутрь, то переходим к предыдущей процедуре (п. 1 или 4?)
  5. просматривается цепочка OUTPUT таблицы filter
  6. просматривается цепочка POSTROUTING таблицы mangle
  7. просматривается цепочка POSTROUTING таблицы nat (используется для SNAT, фильтровать здесь не стоит)

Реальная последовательность обработки проходящего пакета (от п.3 первой процедуры):

  1. просматривается цепочка FORWARD таблицы mangle
  2. просматривается цепочка FORWARD таблицы filter
  3. повторная маршрутизация, т.к. в таблице mangle пакет мог быть изменён;
    если пакет маршрутизируется внутрь, то переходим к первой процедуре (п. 1 или 4?)
  4. просматривается цепочка POSTROUTING таблицы mangle
  5. просматривается цепочка POSTROUTING таблицы nat (используется для SNAT и Masquerading, фильтровать здесь не стоит)

Текст и иллюстрации документации netfilter имеют множество разночтений, оставляя свободу воли (то ли пакетов, то ли разработчиков ;) . Автор iptables-tutorial рекомендует использовать тестовый набор правил, записывающий в журнал имя каждой пройденной пакетом цепочки и таблицы.

Отслеживание соединений

netfilter отслеживает соединения с помощью модуля ip_conntrack (имеет параметр hashsize, задающий размер хеша) и протоколозависимых модулей (icmp, tcp, ftp, tftp, irc, amanda, sctp) при обработке цепочки PREROUTING таблицы nat (для локально сгенерированных пакетов при обработке цепочки OUTPUT) и хранит их в специальной таблице. При этом все пакеты обязательно дефрагментируется. Соединения удаляются из таблицы по истечению интервала ожидания при отсутствии очередного пакета. При выгрузке модуля (см. IPTABLES_MODULES_UNLOAD в /etc/sysconfig/iptables-config) таблица соединений очищается. Рассматриваемый пакет может находиться с точки зрения настройки (у ядра своя таблица состояний) в одном из 4 состояний относительно ранее отслеженных соединений:

  • NEW (замечен первый пакет в соединении; обычно это пакет с флагом SYN, но может быть и без него: в результате удаления из таблицы по истечению периода ожидания ранее установленного соединения или балансировки нагрузки по нескольким сетевым экранам; однако, см. ниже /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_loose)
  • ESTABLISHED (после получения ответного пакета соединение переходит в это состояние из состояния NEW или RELATED; в частности, второй пакет при установлении TCP-соединения (SYN/ACK) уже находится в состоянии ESTABLISHED; для ICMP: Echo, Timestamp, Information, Address mask; [ответы ICMP также могут иметь это состояние, если они являются результатом посланного нами пакета?])
  • RELATED (соединение, порождённое соединением в состоянии ESTABLISHED, например, передача ftp данных, порождённая управляющим ftp соединением, или DCC для IRC или ICMP сообщение об ошибке; требуется протоколозависимый модуль)
  • INVALID (классифицировать пакет не удалось; например, ICMP ответ на несуществующий пакет; такие пакеты рекомендуется выбрасывать)

Пакет в состоянии NEW с точки зрения conntrackможет быть продолжением реального соединения (т.е. не иметь бита SYN), например, в результате изменения цепочек, загрузки модуля и т.д.. В любом случае, при “отлове” подозрительных соединений необходимо предусмотреть сброс попыток соединений, в которых мошенниками подставлен наш адрес:

-A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Максимально возможное число отслеживаемых соединений задаётся в файле /proc/sys/net/ipv4/ip_conntrack_max (каждое соединение занимает 350 байт невытесняемой памяти). Набор заплаток tcp-window-tracking для ядра 2.4 (входит в ядро 2.6) обеспечивает возможность задать значения по умолчанию для интервалов ожидания при удалении записи о соединении из таблицы для различных ситуаций в /proc/sys/net/ipv4/netfilter/ip_conntrack_*_timeout* (в секундах). Мне пришлось записать 600 в ip_conntrack_tcp_timeout_close[_wait] по всей цепочке, иначе завершение соединения блокировалось (FIN/ACK от клиента или RST от сервера), часть завершающих пакетов всё равно “режется” (клиент закрывает полузакрытый сокет только когда ему требуется следующее соединения, а запись о соединении из таблицы conntrack уже удалена, а увеличивать ip_conntrack_tcp_timeout_close до суток не хочется). Также позволяет “порулить” поведением машины состояний через переменные (/proc/sys/net/ipv4/netfilter/):

  • ip_conntrack_tcp_be_liberal
    1. все пакеты, не попадающие в окно, считаются INVALID
    2. только RST пакеты, не попадающие в окно, считаются INVALID (пришлось поставить)
  • ip_conntrack_log_invalid (выводить в журнал INVALID пакеты)
  • ip_conntrack_tcp_loose (при “подхватывании” уже установленного
    соединения сколько пакетов требуется в обоих направлениях для подтверждения;если 0, то установленное соединение не подхватывается вовсе; по умолчанию — 3)
  • ip_conntrack_max_retrans (число повторных пакетов без подтверждения ACK, которое требуется для удаления соединения из таблицы после дополнительного
    ожидания ip_conntrack_timeout_max_retrans секунд; по умолчанию — 3)

Таблицу текущих соединений можно посмотреть в файле /proc/net/ip_conntrack

  • тип протокола
  • номер протокола
  • осталось секунд до удаления этого соединения из таблицы
  • [состояние-соединения-в-терминах-ядра]
  • исходящий адрес
  • адрес назначения
  • исходящий порт или ICMP-тип
  • порт назначения или ICMP-код
  • [ICMP-идентификатор]
  • [UNREPLIED] (соединение в состоянии ESTABLISHED, но ждёт подтверждения от протоколозависимого модуля, например, это был второй пакет при установлении TCP-соединения)
  • ожидаемые адреса и порты (ICMP-тип и код) ответного пакета
  • [ASSURED] (соединение перешло в состояние ESTABLISHED и протоколозависимый модуль подтвердил наличие соединения, например, завершён третий этап установления TCP-соединения)
  • use=1 (?)

Управление цепочками

Управление цепочками производится с помощью программы iptables.

После загрузки определены цепочки (все с политикой ACCEPT) INPUT, FORWARD и OUTPUT в таблице filter; PREROUTING, POSTROUTING и OUTPUT в таблице nat;
PREROUTING, INPUT, FORWARD, OUTPUT и POSTROUTING в таблице mangle. Удалить их нельзя. Формат команды:

iptables [-t имя-таблицы] команда [шаблон] [-j действие]

Команды:

  • -A имя-цепочки правило (добавить правило в конец цепочки; ключ –set-counters позволяет установить счётчики пакетов и байтов)
  • -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ –set-counters позволяет установить счётчики пакетов и байтов)
  • -R имя-цепочки номер правило (заменить;
    ключ –set-counters позволяет установить счётчики пакетов и байтов)
  • -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
  • -D имя-цепочки правило (удалить правило по текстуальному совпадению)
  • -C имя-цепочки пакет (тестировать прохождение пакета;
    исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами)
  • -L [имя-цепочки] (показать список правил; дополнительные ключи:
    • -v (вывести дополнительную информацию, в частности, счётчики)
    • –exact (показывать счётчики без округления до KB, MB и т.д.)
    • –numeric (показывать адреса и номера портов в виде чисел)
    • –line-numbers (выводить номера правил)
  • -F имя-цепочки (удалить все правила из цепочки)
  • -Z имя-цепочки (обнулить счетчики)
  • -N имя-цепочки (создать цепочку)
  • -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
  • -P имя-цепочки действие (изменить действие по умолчанию: ACCEPT,
    DROP, QUEUE, RETURN)
  • -E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)

Действия (target)

Действия (действие в недопустимом месте эквивалентно DROP), при завершении
просмотра текущей цепочки, производится просмотр следующих по порядку таблиц:

  • ACCEPT — пропустить пакет; просмотр таблицы завершается
  • DROP — выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
  • REJECT — выбросить, известив отправителя (–reject-with тип-извещения); типы извещения: tcp-reset (только для TCP!), icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable (по умолчанию), icmp-proto-unreachable, icmp-net-prohibited или icmp-host-prohibited; для цепочек INPUT, FORWARD и OUTPUT; просмотр завершается не только для текущей цепочки, но и для других таблиц
  • LOG — записать в журнал syslog; приоритет по умолчанию — warning (–log-level приоритет); источник всегда — kern; каждая запись содержит имена входного (IN=) и выходного (OUT=) интерфейсов, MAC адреса (MAC=), исходный IP-адрес (SRC=), IP-адрес назначения (DST=), длину пакета,
    флаги и указатели TCP (SYN, URGP=, WINDOW=), ToS (TOS=), ? (PREC=), TTL (TTL=), флаги IP (DF), идентификатор (ID=), протокол (PROTO=), порты источника (SPT=) и назначения (DPT=), ? (RES=); в начале записи можно вставить свою строку длиной до 29 символов (–log-prefix “строка);
    можно добавить в журнал номера TCP-последовательностей (–log-tcp-sequence), TCP опции (–log-tcp-options) и IP опции (–log-ip-options)
  • ULOG — записать в собственный журнал (используется интерфейс netlink и групповая рассылка; позволяет делать такие вещи, как запись журнала в MySQL, обработка в реальном времени и т.д. (см. проект ULOGD);
    параметры: –ulog-nlgroup netlink-группа, –ulog-prefix “строка”, –ulog-cprange длина, –ulog-qthreshold пакетов-в-группе
  • имя пользовательской цепочки — происходит переход на выполнение подпрограммы (пользовательской цепочки), по завершении её выполняется следующее правило, если в подпрограмме не было выполнено какое завершающее просмотр действие (ACCEPT, DROP, REJECT)
  • RETURN — завершение просмотра текущей цепочки; если это была пользовательская цепочка, то происходит возврат к месту вызова; для базовой цепочки производится действие по умолчанию
  • QUEUE — поставить пакет в очередь на обработку пользовательской программой
    (см. Netfilter Hacking HOW-TO)
  • действия только для таблицы nat:
    • DNAT — подмена в пакете адреса назначения; проверка производится только для первого пакета соединения (цепочка PREROUTING или OUTPUT), остальные пакеты преобразуются “по аналогии”; ответные пакеты преобразуются соответственно; новый адрес назначения (или адреса для балансировки нагрузки) задаётся параметром
      –to-destination IP-адрес[:порт][-IP-адрес]; используется для “проброса” соединения из интернет на сервер, находящийся внутри; чтобы к такому серверу можно было обратиться изнутри сети по внешнему адресу, необходимо в дополнение к DNAT преобразовать исходный адрес (SNAT), иначе ответы сервера пойдут клиенту напрямую минуя обратное преобразование DNAT, а клиент их не примет; к сожалению, при этом в журнал сервера не попадут реальные IP адреса клиентов; также при этом легко получить open relay из своего SMTP сервера; поэтому SNAT необходимо ограничить локальными исходящими адресами; проблему можно решить, сделав отдельный DNS сервер для локальной сети; и не забудьте добавить аналогичное (DNAT) правило в цепочку OUTPUT для доступа к серверу с самого сетевого экрана (если это необходимо) и правила в таблицу filter
    • SNAT — подменить в пакете исходящий адрес на указанный или из указанного интервала, при необходимости исходящий номер порта на случайный номер своего порта из заданного интервала, занести эту информацию в таблицу, чтобы при получении ответа было можно проделать обратную операцию; новый исходящий адрес (или адреса для балансировки нагрузки) задаётся параметром
      –to-source IP-адрес[-IP-адрес][:порт-порт];
      проверка производится только для первого пакета соединения (цепочка POSTROUTING), остальные пакеты преобразуются “по аналогии”; ответные пакеты преобразуются соответственно; используется для скрытия структуры внутренней сети при выходе пользователей в интернет или при нехватке общемаршрутизируемых IP-адресов;
      если свой IP-адрес получается динамически, то лучше воспользоваться MASQUERADE;
    • MASQUERADE — подменить в пакете исходящий адрес на адрес своего исходящего интерфейса (этот адрес может выделяться динамически по DHCP или PPP), при необходимости исходящий номер порта на случайный номер своего порта из заданного интервала, занести эту информацию в таблицу, чтобы при получении ответа было можно проделать обратную операцию; интервал портов задаётся параметром –to-ports порт-порт; проверка производится только для первого пакета соединения (цепочка POSTROUTING), остальные пакеты преобразуются “по аналогии”; ответные пакеты преобразуются соответственно; таблица очищается при отключении интерфейса; используется для скрытия структуры внутренней сети при выходе пользователей в интернет
      или при нехватке общемаршрутизируемых IP-адресов при динамическом получении внешнего IP-адреса; более общее средство — см. SNAT
    • REDIRECT — подмена в пакете номера порта назначения на указанный порт, адрес назначения на свой адрес (?); локальные пакеты перенаправляются на адрес 127.0.0.1; проверка производится только для первого пакета соединения (цепочка PREROUTING или OUTPUT),
      остальные пакеты преобразуются “по аналогии”; ответные пакеты преобразуются соответственно; новый порт (интервал портов?) назначения задаётся параметром –to-ports порт-порт;
      используется для организации прозрачного прокси
    • MIRROR — удалён в ядре 2.6 (меняет местами исходящий IP адрес и IP адрес назначения; предполагалось удивить хакеров)
  • действия только для таблицы mangle:
    • CLASSIFY — установка маркера классификации при управлении трафиком (tc, qdiscs), цепочка POSTROUTING (–set-class MAJOR:MINOR)
    • TOS — установка или изменение полей TOS (–set-tos тип-сервиса);
      типы сервиса: Normal-Service, Minimize-Cost, Maximize-Reliability, Maximize-Throughput, Minimize-Delay; только в цепочках FORWARD и OUTPUT; используется при маршрутизации
    • DSCP — установка или изменение полей Differentiated Services, развитие ToS(–set-dscp число или –set-dscp-class класс)
    • ECN — сброс полей ECN (–ecn-tcp-remove)
    • TTL — изменение TTL (–ttl-set число; –ttl-dec число; –ttl-inc число); можно использовать увеличение на 1 в дополнение к NAT,
      чтобы скрыть наличие сетевого экрана, или установку в одно и то же значение, чтобы скрыть внутреннюю структуру сети
    • TCPMSS — изменение размера TCP сегмента (Maximum Segment Size) явно
      (–set-mss байт) или с привязкой к размеру MTU (–clamp-mss-to-pmtu устанавливает MSS равным Path MTU — 40);
      только в момент установления соединения (т.е. у пакета д.б. установлен флаг SYN); особенно полезен, если ISP блокирует сообщения ICMP о необходимости фрагментации, а в результате при пересылке маленьких блоков (ssh) всё работает, а когда доходит до больших блоков (scp), то соединение “подвисает”
    • MARK — устанавливается маркер данного пакета (–set-mark число);
      сохраняется только в пределах хоста; используется при маршрутизации
    • NETMAP — адреса из указанной исходящей сети преобразуются в новые указанные адреса (–to); номера хостов внутри сети не изменяются; используется вместо перенумерации сети; использовать в цепочке PREROUTING; аналогичный результат (но более эффективно) можно получить с помощью iproute2
    • SAME — адреса из указанной исходящей сети преобразуются в новые указанные адреса (–to); номер хоста изменяется (интервал новых IP-адресов меньше исходного), но только при необходимости; использовать в цепочке PREROUTING
  • имя цепочки, определяемой модулем расширения
  • пустое действие — только увеличить счетчики байтов и пакетов и перейти к следующему правилу в цепочке, счетчики — 64-битные

Шаблоны

Шаблон правила может включать (если в качестве адреса хоста указывается
имя, соответствующее нескольким адресам, то добавляется соответствующее
количество правил; восклицательный знак инвертирует шаблон; несколько подшаблонов действуют как “И”):

  • –proto[col] | -p [!] протокол
    (можно указывать имя протокола (см. /etc/protocols) или номер протокола; имя протокола ALL означает tcp или udp или icmp)
  • –source | -s | –src [!] address[/mask]
    (маска может быть записана как в виде 4-х десятичных чисел через точку, так и указанием длины маски сети)
  • –destination | -d | –dst [!] address[/mask]
  • –in-interface | -i [!] имя[+] (имя входного интерфейса;
    например, ppp0, lo, eth0; шаблон “+” — соответствует любой подстроке; можно использовать только в цепочках INPUT, FORWARD и PREROUTING)
  • –out-interface | -o [!] имя[+] (имя выходного интерфейса;
    например, ppp0, lo, eth0; шаблон “+” — соответствует любой подстроке; можно использовать только в цепочках OUTPUT, FORWARD и POSTROUTING)
  • [!] –fragment | -f (только для последующих кусков фрагментированных пакетов; при использовании отслеживания соединений все пакеты
    дефрагментируются при обработке цепочки PREROUTING таблицы nat)
  • –match | -m имя-модуля-расширения (модули tcp, udp и icmp
    приводятся в действие неявно, при использовании шаблона –protocol)

Параметры модуля расширения tcp

  • –source-port [!] [port[:port]]
    (можно использовать номера портов или имена сервисов из /etc/services; если опустить первый порт интервала, то подразумевается 0; если опустить последний порт интервала, то подразумевается 65535)
  • –destination-port [!] [port[:port]]
  • –tcp-flags [!] маска-флагов обязательные-флаги
    (маска-флагов — список через запятую проверяемых флагов (SYN, ACK, FIN, RST, URG, PSH, ALL, NONE); обязательные-флаги — список через запятую флагов, которые д.б. установлены в пакете; остальные флаги из числа проверяемых должны быть сброшены)
  • [!] –syn | -y (пакеты с установленным флагом SYN, эквивалент записи “–tcp-flags SYN,RST,ACK SYN”; отрицание обеспечивает соответствие пакетов, не имеющих флагов SYN и ACK одновременно)
  • [!] –tcp-option номер-опции

Параметры модуля расширения udp

  • –source-port [!] [port[:port]]
  • –destination-port [!] [port[:port]]

Параметры модуля расширения icmp

  • –icmp-type [!] тип-сообщения[/код]
    (можно использовать номера или имена типов и кодов: 8, 8/0, network-redirect;
    чтобы получить список допустимых имён, выполните команду: iptables -p icmp –help)

Параметры модуля расширения mac

  • –mac-source [!] MAC-адрес (только в цепочках PREROUTING, FORWARD
    и INPUT)

Параметры модуля расширения mark

  • –mark [!] число (маркер пакета (число без знака) устанавливается действием MARK, только в пределах данного хоста)

Параметры модуля расширения limit (защита от DoS атак или ограничение записей в журнал; используется модель дырявого ведра: задаётся объём ведра и скорость его самоопустошения, шаблону соответствуют пакеты, помещающиеся в ведро):

  • [!] –limit штук/единица-времени (задаёт скорость самоопустошения ведра; допустимы следующие единицы времени: second, minute, hour, day)
  • –limit-burst штук (задаёт ёмкость ведра)

Параметры модуля расширения iprange (задание интервалов IP-адресов)

  • [!] –src-range начальныйIPадрес-конечныйIPадрес
  • [!] –dst-range начальныйIPадрес-конечныйIPадрес

Параметры модуля расширения multiport (список портов, до 15 портов)

  • –source-port список,портов,через,запятую
  • –destination-port список,портов,через,запятую
  • –port список,портов,через,запятую (из порта в порт с тем же номером)

Параметры модуля расширения length (длина пакета)

  • [!] –length от:до

Параметры модуля расширения owner (только в цепочке OUTPUT, не всегда срабатывает)

  • –uid-owner uid
  • –gid-owner gid
  • –pid-owner pid
  • –sid-owner session-id

Параметры модуля расширения pkttype

  • –pkt-type [!] {unicast | broadcast | multicast}

Параметры модуля расширения recent (динамическая генерация правил по событию;
ведётся несколько именованных списков событий, для каждого события записывается время, исходящий адрес, исходящий порт, число пакетов, TTL)

  • –name имя (какой список использовать)
  • [!] –set (добавить событие в список)
  • [!] –rcheck (проверить, что исходящий адрес данного пакета имеется в списке
    событий)
  • [!] –update (проверить, что исходящий адрес данного пакета имеется в списке
    событий и обновить время)
  • [!] –remove (проверить, что исходящий адрес данного пакета имеется в списке
    событий и удалить)
  • –seconds секунд (только в сочетании с –rcheck или –update; какой интервал
    времени допустим)
  • [!] –hitcount штук (только в сочетании с –rcheck или –update;
    можно в сочетании с –seconds; соответствие после указанного числа пакетов)
  • [!] –rttl (дополнительно проверить, что TTL такой же)
  • –rdest (сохранить в списке адрес и порт назначения)

Параметры модуля расширения state (состояние соединения согласно conntrack):

  • –state перечень,состояний,через,запятую (состояния:
    INVALID, ESTABLISHED, NEW, RELATED)

Параметры модуля расширения conntrack (расширение возможностей модуля state):

  • [!] –ctstate список,состояний,соединения (допустимо использовать
    имена состояний: INVALID, ESTABLISED, NEW, RELATED, SNAT, DNAT)
  • [!] –ctstatus список,внутренних,состояний,соединения (допустимо использовать
    имена внутренних состояний: NONE, EXPECTED, SEEN_REPLY, ASSURED
  • [!] –ctproto протокол
    (можно указывать имя протокола (см. /etc/protocols) или номер протокола)
  • –ctorigsrc [!] address[/mask]
    (проверка исходящего адреса до преобразования)
  • –ctorigdst [!] address[/mask]
    (проверка адреса назначения до преобразования)
  • –ctreplsrc [!] address[/mask]
    (проверка исходящего адреса предполагаемого ответа)
  • –ctrepldst [!] address[/mask]
    (проверка адреса назначения предполагаемого ответа)

Параметры модуля расширения helper (протоколозависимый модуль отслеживания
соединений):

  • –helper имя_модуля_расширения_conntrack[-номер-порта]

Параметры модуля расширения tos (также имеются модуля dscp, ecn)

  • –tos [!] тип-сервиса (Normal-Service, Minimize-Cost,
    Maximize-Reliability, Maximize-Throughput, Minimize-Delay; это только названия!)

Параметры модуля расширения tcpmss (Maximum Segment Size in TCP, только для
пакетов с SYN или SYN/ACK)

  • –mss [!] от:до

Параметры модуля расширения ttl

  • –ttl число

Модуль расширения unclean не имеет параметров. Позволяет отлавливать “неправильные” пакеты.

Параметры модуля расширения ah (IPSec, необходимо также указать номер протокола 51)

  • –ahspi Security-Parameter-Index

Параметры модуля расширения esp (IPSec, необходимо также указать номер протокола 50)

  • –espspi Security-Parameter-Index

<Утилиты iptables-save и iptables-restore

Тщательно составленные и отлаженные цепочки необходимо сохранять с помощью утилиты iptables-save, выводит на stdout, параметры:

  • -c (выводить счётчики)
  • -t имя-таблицы (выводить только указанную таблицу)

Вывод утилиты имеет простой текстовый формат, допускающий редактирование.
Комментарии начинаются с символа ‘#’. Таблицы выводятся по очереди, перед каждой таблицей в отдельной строке выводится имя таблицы после символа ‘*’, затем перечисляются имеющиеся в таблице цепочки, каждое имя цепочки выводится в отдельной строке после символа ‘:’, после имени выводится политика цепочки и счётчики, затем выводятся все правила таблицы, каждое правило выводится отдельной строкой, в конце таблицы выводится ключевое слово “COMMIT”.
Правила выводятся в формате утилиты iptables, только не указывается имя таблицы.



Сохранённые ранее цепочки можно загрузить в ядро с помощью утилиты
iptables-restore (читает с stdin, по умолчанию восстанавливаемые таблицы сбрасываются, параметры):

  • -c (восстанавливать счётчики)
  • -n (не сбрасывать восстанавливаемые таблицы)

Сервис в Red Hat Linux

В дистрибутивах Red Hat Linux имеется сервис iptables (управляемый обычными chkconfig и service) в /etc/rc.d/init.d с функциями:

  • start (настройки берутся из /etc/sysconfig/iptables — делаются
    либо с помощью функции save, либо iptables-save)
  • stop
  • restart
  • status
  • save (сохранить текущие настройки в /etc/sysconfig/iptables)
  • panic (полная блокировка, использовать в случае атаки)

Примеры и советы

При настройке правил на удалённом хосте рекомендуется оставлять себе пути
отступления, например, перед внесением изменений добавить в crontab строку, возвращающую настройки обратно, если что-то пойдёт не так (/sbin/service iptables stop).

Часто используемые правила должны быть в начале цепочки. Для дальнейшей оптимизации цепочка разбивается на подцепочки (например, по типу протокола).

Пример настройки рабочей станции или небольшого внутреннего сервера:

*filter:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0] :icmp_packets — [0:0]
# ICMP (other types covered by RELATED)
-A icmp_packets -p icmp –icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp –icmp-type 11 -j ACCEPT
# replies
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#
-A INPUT -p icmp -j icmp_packets
-A INPUT -i lo -j ACCEPT
# CUPS server
#-A INPUT -i eth0 -p udp -m udp –dport 631 -j ACCEPT
# SSH server
-A INPUT -i eth0 -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
# to prevent mass logging
A INPUT -i eth0 -p udp -d широковещательный-адрес –sport 137:139 –dport 137:139 -j DROP
-A INPUT -i eth0 -p udp -d 255.255.255.255 –dport 445 -j DROP
-A INPUT -j LOG
#
-A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
-A OUTPUT -p ALL -s свой-адрес -j ACCEPT
-A OUTPUT -j LOG
COMMIT
Ссылки

Взято с http://system-administrators.info/

Popularity: 10%

2 Комментариев »

ноября 4 2007

Установка и настройка VPN+ipX сервера Ubuntu & Debian

В этом how-to описана установка и настройка vpn сервера для windows клиентов.

1 Введение.

Использовался дистрибутив Ubuntu 7.10.

Все пакеты взяты из штатных репозиториев.

2 Установка.

Установим VPN сервер:

Код:
sudo aptitude install pptpd ipx ipxripd

3 Настройка VPN сервера.

Отредактируйте файл /etc/ppp/pptpd-options

Код:
name pptpd
refuse-pap
refuse-chap
require-mschap
require-mschap-v2
require-mppe-128
ms-dns 10.0.0.1
ms-dns 10.0.0.2
proxyarp
nodefaultroute
lock
nobsdcomp
#IPX (todo)
ipx
ipx-network 4
ipx-node 1:0
ipx-routing 2
ipx-router-name Linux_router
ipxcp-accept-remote

Отредактируйте файл /etc/pptpd.conf

Код:

option /etc/ppp/pptpd-options
logwtmp
localip 172.20.0.1
remoteip 172.20.0.2-254

Теперь можно добавить пользователей, для этого отредактируйте файл /etc/ppp/chap-secrets

Код:
# Secrets for authentication using CHAP
# client server secret IP addresses
vasya pptpd secret "*"

Мы добавили пользователя vasya с паролем secret и с возможностью доступа с любого ip адреса.

Перезапускаем VPN сервер

Код:
/etc/init.d/pptpd restart

На этом настройка VPN сервера закончена, осталось настроить фаервол и форвардинг пакетов.

4 Настройка фаервола

Создадим простой скрипт фаервола в домашней директории /home:

Код:
touch /home/vpn-firewall.sh
chmod +X /home/vpn-firewall.sh
gedit /home/vpn-firewall.sh

В открывшемся окне впишите:


#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
iptables --flush
iptables --delete-chain
iptables --table nat --flush
iptables --table nat --delete-chain
iptables -P FORWARD ACCEPT
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables --table nat --append POSTROUTING --out-interface ИМЯ ВАШЕГО ИСХОДЯЩЕГО ИНТЕРФЕЙСА например eth0 -j MASQUERADE
echo vpn firewall loaded OK.

Пропишите этот скрипт в автозагрузку отредактировав файл /etc/rc.local
Должно получится следующее:

Код:

#!/bin/sh -e
/home/vpn-firewall.sh
exit 0

Запустите скрипт фаервола, он должен написать «vpn firewall loaded OK.»

Код:
/home/vpn-firewall.sh

На этом настройка закончена, можете настраивать windows клиенты, никаких особенных параметров не требуется, просто создаете подключение vpn с адресом вашего сервера, на вкладке «Безопасность» нужно снять галочку с пункта «Требуется шифрование данных (иначе отключаться)», а так же логином и паролем которые вы вписали в конфигурационный файл.


Popularity: 10%

6 Комментариев »

Рейтинг блогов Rambler's Top100
службы мониторинга серверов