Автор Тема: Оптимальные правила iptables  (Прочитано 13389 раз)

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Интересуют оптимальные правила настроек iptables именно под серверную машину, потому что в гугле нашол только под домашнюю машину, а все примеры настройки серверной сводились к iproute...
интересует фильтры входящих и исходящих пакетов udp,icmp,tcp,syn... а так же фильтр syn_rcv ... может кто поделиться своим вариантом этих правил, не мало важный аспект в том что интересует работа портов:22,411,21,27015,27016,80,443,20,23,49,70... . Нужен толковый пример, а не мануал, так как сам лично в синтаксисе немного разобрался, а вот с примерами того что могут кидать и как это фильтровать нет...



p.s. убедительная просьба не язвить,не офф-топить, и не кидать тупо ссылки на мануалы... я пришол на форум за конкретным советом и примеров правил, не можете помочь пройдите мимо... зарание всем кто помог спасибо!
« Последнее редактирование: 21.10.2009 00:54:54 от Schum@cheR »
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн Saruck

  • Участник
  • *
  • Сообщений: 18
    • allreferences.ru
Re: Оптимальные правила iptables
« Ответ #1 : 20.10.2009 22:27:36 »
В iptables почти всегда схема одна - закрываешь все, открываешь то что нужно и настраиваешь перебросы портов, маскарадинг и все остальное что нужно именно для твоей сети

Закрываеш все снаружи

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

Открываешь то что нужно используя ключи -p tcp, -p udp  по тем портам каким нужно примерно так

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -o eth0 -p tcp -j DROP

вот например открыл tcp по 25 порту

Настраивай маскарадинг

-A POSTROUTING -o eth0 -j SNAT --to-source Локальная_сеть

Тут общего примера нет у всех свои задачи, так что лучше посидеть и по мануалу написать правило.

Если нужно зарулить пользователей на прокси то закрывай 80 порт а весь трафик по нему заруливай на порт  прокси например 8080
« Последнее редактирование: 20.10.2009 22:36:17 от Saruck »

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #2 : 21.10.2009 12:32:46 »
Новая беда, завёл правила в /etc/rc.d/rc.firewall
Цитировать
#---------------------------------------------- variables -------------------------------------------
IPT=`which iptables`
INET_IFACE="ppp0"
CLOSEPORTS="630,640,783,3310,10000"
UNPRIPORTS="1024:65535"
SSH="22"
#------------------------------------------------------------------------------------------------------


# Удаление правил
$IPT -F
$IPT -t mangle -F

# Очищаем нестандартные правила
$IPT -X
$IPT -t mangle -X

#Подгружаем модули
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.tcp_syncookies=1

#Политики по умолчанию
$IPT -P FORWARD DROP
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

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

# Разрешаем ДНС
$IPT -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT
$IPT -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT

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

# Существует одна из разновидностей спуфинг-атак, которая называется "Предсказание номера TCP-последовательности".
# Смысл атак такого рода заключается в использовании чужого IP-адреса для нападения на какой либо узел сети.
$IPT -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

# Пакеты со статусом NEW и со сброшенным битом SYN.
#$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j ULOG
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# SYN наводнение.
# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
#$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j ULOG
#$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j ULOG
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP


# UDP наводнение
# Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя.
#$IPT -A INPUT -p UDP -s 0/0 --destination-port 138 -j ULOG
$IPT -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
$IPT -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
$IPT -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
$IPT -A INPUT -p UDP -j RETURN
$IPT -A OUTPUT -p UDP -s 0/0 -j ACCEPT

# ICMP - перенаправление
# ICMP- сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять
# пакеты по более короткому маршруту. Может быть использовано взломщиком для пере-направления вашего трафика через свою машину.
#$IPT -A INPUT --fragment -p ICMP -j ULOG
#$IPT -A OUTPUT --fragment -p ICMP -j ULOG
$IPT -A INPUT --fragment -p ICMP -j DROP
$IPT -A OUTPUT --fragment -p ICMP -j DROP

# Разрешаем себе ping наружу, ставим ограничение на ping своей машины.
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type echo-request -j DROP
$IPT -A INPUT -p icmp -j ACCEPT
$IPT -A FORWARD -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT

# Разрешаем передачу пакета - сеть недоступна
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type destination-unreachable -j ACCEPT &> /dev/null

# Разрешаем передачу пакета - превышено время соединения
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A FORWARD -p icmp --icmp-type time-exceeded -j ACCEPT &> /dev/null

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

$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT
$IPT -A FORWARD -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT &> /dev/null

# Запрещаем подключение к X серверу через сетевые интерфейсы.
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 6000:6063 -j DROP --syn

# Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах:
$IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE -j DROP --destination-ports $CLOSEPORTS


# Разрешаем AUTH-запросы на удаленные сервера, на свой же компьютер - запрещаем.
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 113 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 113 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP


# FPT клиент (21)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 21 --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $UNPRIPORTS --sport 21 -j ACCEPT ! --syn

# HTTP/HTTPS клиент (80, 443)
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --sport $UNPRIPORTS -j ACCEPT --dports 80,443
$IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport $UNPRIPORTS -j ACCEPT --sports 80,443 ! --syn


#--- SSH клиент ---
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --destination-ports $SSH --sport $UNPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport $UNPRIPORTS --source-ports $SSH -j ACCEPT ! --syn
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --destination-ports $SSH --sport 1020:1023 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport 1020:1023 --source-ports $SSH -j ACCEPT ! --syn
#syn 2 ???
$IPT -N syn-flood
$IPT -A INPUT -p tcp --syn -j syn-flood
$IPT -A syn-flood -p tcp --syn -m limit --limit 1/s --limit-burst 20 -j RETURN
$IPT -A syn-flood -j DROP

#web
# ------------------------------------------------------------ ------
# HTTP сервер (80)
# ----------------
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 80 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 80 -j ACCEPT ! --syn

# ------------------------------------------------------------ ------
# HTTPS сервер (443)
# ------------------

$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 443 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 43 -j ACCEPT ! --syn

# ------------------------------------------------------------ ------
# MySQL сервер (3306)
# -------------------
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 3306 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 3306 -j ACCEPT ! --syn

# Verlihub (411)
# ----------------
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 411 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 411 -j ACCEPT ! --syn

# C.S. 1.6 (27015,27016)
# ----------------
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 27015 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 27015 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 27016 --sport $UNPRIVPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $UNPRIVPORTS --sport 27016 -j ACCEPT ! --syn

# Разрешаем прохождение DHCP запросов через iptables. Нужно, если IP адрес динамический.
$IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 67 --sport 68 -j ACCEPT
$IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport 68 --sport 67 -j ACCEPT
дальше перезапускаю сервеh (init 6) сервак подымаеться, запускаеться всё, я захожу по ssh смотрю
 iptables --list вижу что всё работает, но потом проходит минуть 5-6 и все правила слетают и на iptables --list мне выдаеться пустота...
Цитировать
[root@rainbow1 log]# iptables -v
iptables v1.3.7: no command specified
Try `iptables -h' or 'iptables --help' for more information.
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн Saruck

  • Участник
  • *
  • Сообщений: 18
    • allreferences.ru
Re: Оптимальные правила iptables
« Ответ #3 : 21.10.2009 17:27:17 »
Cоздадай каталог iptables-restore по пути /usr/local/

В этот каталог помести файл со своими правилами

Потом измени файл /etc/rc.d/rc.local, допиши в конце:

echo "1" > /proc/sys/net/ipv4/ip_forward/sbin/iptables-restore /usr/local/iptables-restore/Имя_твоего_файла

Поспе перезагрузки применятся правила прописанные в файле.

Это описано подробнее тут http://www.iptables.ru/  делал всегда по этому мануалу и все работает.

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #4 : 22.10.2009 02:15:11 »
сделал всё как написано выше, не помогло, решил обновить фаерволл до самой свежей версии, зашол скачал самую свежую, установил без проблем, ::) задал правила, перезапустил ось, и тут писдец подкрался незаметно... все порты закрылись... :( правила почистил, перезапустил всё норм, как бы чисто интуитивно догадываюсь что ошибка гдето в правилах которые я кинул выше... кому не трудно поправьте що не так версия iptables щяс 1.4.5
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734
Re: Оптимальные правила iptables
« Ответ #5 : 22.10.2009 04:57:36 »
Может быть etcnet вмешивается(если конечно сеть им конфигурится)?

Оффлайн coretech

  • Участник
  • *
  • Сообщений: 193
Re: Оптимальные правила iptables
« Ответ #6 : 22.10.2009 08:52:12 »
Вообще, идеологически правильно настраивать файрволл именно через etcnet.
В /etc/net/ifaces/default/config ставим CONFIG_FW=yes
Все настройки хранятся в каталоге /etc/net/ifaces/default/fw/iptables
Управляем файрволлом через команду efw

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #7 : 22.10.2009 14:56:19 »
Может быть etcnet вмешивается(если конечно сеть им конфигурится)?
нет, про него впервыу слышу если честно  :(
Вообще, идеологически правильно настраивать файрволл именно через etcnet.
В /etc/net/ifaces/default/config ставим CONFIG_FW=yes
Все настройки хранятся в каталоге /etc/net/ifaces/default/fw/iptables
Управляем файрволлом через команду efw
Можно пример конфига скинуть... вообще интересует есь ли у кого-то правильно настроеный и работающий фаерволл, если да, поделитесь правилами, очень интересует безопасность моего сервера...  :'(
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн slessv

  • Участник
  • *
  • Сообщений: 61
Re: Оптимальные правила iptables
« Ответ #8 : 23.10.2009 17:59:58 »
У меня дистрибутив altlinux-4.0.1-server-i586. никаких проблем со сбросом цепочек не возникало.
Попробуйте добавить в конец скрипта команду "service iptables save", может поможет.

Вы пытались настроить файрвол альтератором?

Настройка файрвола в etcnet описана здесь:
http://www.altlinux.org/Etcnet/firewall
« Последнее редактирование: 23.10.2009 18:02:43 от slessv »

Оффлайн Saruck

  • Участник
  • *
  • Сообщений: 18
    • allreferences.ru
Re: Оптимальные правила iptables
« Ответ #9 : 24.10.2009 03:51:43 »
Schum@cheR - нет одинаковых конфигов !!!

Давай так, напиши все по порядку, что ты хочешь закрыть, что открыть и как чтобы это работало, как построена сеть и что в ней куда рулиться и я напишу тебе конфиг...

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #10 : 26.10.2009 13:21:42 »
Давай так, напиши все по порядку, что ты хочешь закрыть, что открыть и как чтобы это работало, как построена сеть и что в ней куда рулиться и я напишу тебе конфиг...
Окей, буду очень признателен, значитсо так у меня Altlinux Server 4.0 c обновленым ядром до 2.26 , iptables v1.3.7...
хочу закрыть все порты кроме:
411 - порт DC++ хаба
27015, 27016 - C.S. 1.6 servers
8080,80,443 - web
8000 - радио
21 - фтп
22 - SSH
закрыть всё остальные порты надо с наружи, а внутри надо сделать чтобы пакеты бегали...
сеть локальная не имеет dhcp, в инет сервер выходит по pppoe, так же хочеться чтобы были какието фильмы от SYN recive флуда, просто от syn и tcp флуда, ддоса!
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #11 : 30.10.2009 13:04:12 »
более менее разобрался, но появилась новая беда:
Цитировать
[root@rainbow1 ~]# iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-above 4 -j REJECT
iptables v1.3.7: Couldn't load match `iplimit':/lib/iptables/libipt_iplimit.so: cannot open shared object file: No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

Почитал пару форумов говорят надо пересобирать ядро... неужели в альте нету ядра поддерживаюшего данный лимит, или как можно менее безболезниней установить этот лимит...
http://twitter.com/schumachermkua - Мой Твиттер

Drool

  • Гость
Re: Оптимальные правила iptables
« Ответ #12 : 30.10.2009 13:27:58 »
Если верить http://rpm.pbone.net - то библиотеки libipt_iplimit.so (которая была не в ядре, а в самом пакете iptables) уже не существует лет 7 :) Где Вы такой древний мануал по iptables нашли?

Оффлайн Schum@cheR

  • Участник
  • *
  • Сообщений: 71
    • http://twitter.com/schumachermkua
Re: Оптимальные правила iptables
« Ответ #13 : 30.10.2009 15:22:30 »
Если верить http://rpm.pbone.net - то библиотеки libipt_iplimit.so (которая была не в ядре, а в самом пакете iptables) уже не существует лет 7 :) Где Вы такой древний мануал по iptables нашли?
http://hostinghelp.biz/content/ddos-%D1%87%D1%82%D0%BE-%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D0%B5%D1%81%D0%BB%D0%B8-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%BE%D0%B4%D0%B8%D0%BD-linux-%D1%81-apache

если такой библиотеки нету подскажите тогда как запретить одному айпи адресу больше 4-х конектов к серверу ?  :(
http://twitter.com/schumachermkua - Мой Твиттер

Оффлайн Мню

  • Участник
  • *
  • Сообщений: 45
Re: Оптимальные правила iptables
« Ответ #14 : 30.10.2009 15:43:55 »
Почитал пару форумов говорят надо пересобирать ядро... неужели в альте нету ядра поддерживаюшего данный лимит, или как можно менее безболезниней установить этот лимит...
connlimit не поможет?