Посоветуйте в доработке iptables

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

zloymih
Сообщения: 8

Посоветуйте в доработке iptables

Сообщение zloymih »

Вот мой рабочий скрипт правил для iptables

Посоветуйте, как его довести до ума. и если есть в нем какие-нибудь ошибки/неточности, то как их лучше исправить.

eth2 - внешний интерфей (в городскую сеть 172.16.x.x)
eth1 - во внутреннюю сеть (в квартиру 192.168.11.x)
ppp0 - соединение по vpn

172.16.100.1 - адрес vpn сервера
172.16.100.14 - адрес dc++ сервера

Код: Выделить всё

#!/bin/bash
# очищаем
iptables -F
iptables -X

# действия по умолчанию
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# убираем неправильные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# разрешим 127.0.0.1
iptables -A OUTPUT -o lo -j ACCEPT

# разрешим прохождение icmp пакетов
iptables -A OUTPUT -p icmp -j ACCEPT

# разрешим DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# разрешим порт 67
iptables -A OUTPUT -o eth2 -p udp --dport 67 -j ACCEPT

# разрешим VPN
iptables -A OUTPUT -d 172.16.100.1/32 -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -d 172.16.100.1/32 -p 47 -j ACCEPT

# шлюз (можно все)
iptables -A POSTROUTING -t nat -j MASQUERADE
iptables -A FORWARD -i eth2 -o eth1 -s 192.168.11.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

# разрешим netbios на интерфейсе eth1
iptables -A OUTPUT -o eth1 -p tcp -m multiport --ports 137:139 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp -m multiport --ports 137:139 -j ACCEPT

# порт 445 и удаленный рабочий стол на интерфейсе eth1
iptables -A OUTPUT -o eth1 -p tcp -m multiport --dports 445,3389 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp -m multiport --dports 445,3389 -j ACCEPT

# разрешим HTTP
iptables -A OUTPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

# разрешим FTP
iptables -A OUTPUT -p tcp -m multiport --dport 21 -j ACCEPT

# dc++
iptables -A OUTPUT -d 172.16.100.14/32 -p tcp --dport 411 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 4994 -j ACCEPT

# разрешим jabber, icq
iptables -A OUTPUT -p tcp -m multiport --dports 5222,5190 -j ACCEPT

# mail
iptables -A OUTPUT -p tcp -m multiport --dports 110,25 -j ACCEPT

# torrent
iptables -A OUTPUT -p tcp -m multiport --dports 2710,7997,4939 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 7997 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 20000:65500 -j ACCEPT

# остальное в логи
# iptables -A INPUT -j   LOG --log-prefix "INPUT: "
iptables -A OUTPUT -j  LOG --log-prefix "OUTPUT: "
iptables -A FORWARD -j LOG --log-prefix "FORWARD: "
exit 0
Спасибо сказали:
Аватара пользователя
Jampire
Сообщения: 163
ОС: Gentoo Linux amd64 || x86

Re: Посоветуйте в доработке iptables

Сообщение Jampire »

zloymih писал(а):
19.01.2010 19:58
iptables -P INPUT ACCEPT

ИМХО, лучше все политки делать запрещающими по-умолчанию, а потом уже открывать что нужно.
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

Jampire писал(а):
19.01.2010 20:49
ИМХО, лучше все политки делать запрещающими по-умолчанию, а потом уже открывать что нужно.

а что плохого в том, что я все принимаю. логично получать все, а отдавать только-то что можно )) хотя рассуждаю как жадина ... а если серьёзно - какой вред?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Посоветуйте в доработке iptables

Сообщение serzh-z »

zloymih писал(а):
19.01.2010 21:10
а что плохого в том, что я все принимаю
Вы хотитет совета "как его довести до ума" или просто поспорить? Кажется с политиками всё везде пережёвано - лучше уж забыть что-то открыть, чем забыть, что-то закрыть.
Спасибо сказали:
Аватара пользователя
watcher
Сообщения: 396
Статус: интересующийся
ОС: openSUSE,Mandriva

Re: Посоветуйте в доработке iptables

Сообщение watcher »

iptables -P INPUT ACCEPT
заходите все на чай? Присоединяюсь к вышесказавшим.

Кусок моего может пригодится

Код: Выделить всё

#Установим политики по умолчанию для цепочек в DROP, запретив все соединения кроме тех, #которые будут
#разрешены:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#Включаем интернет для сети
iptables -t nat -A POSTROUTING -s 10.10.7.0/255.255.255.224 -o eth0 -j SNAT --to-source 192.168.1.7
echo 1 > /proc/sys/net/ipv4/ip_forward

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

#Разрешим входящие соединения на маршрутизатор с внутренней сети (для управления)
iptables -A INPUT -i eth1 --source 10.10.7.0/225.255.255.224 --match state --state NEW,ESTABLISHED -j ACCEPT

#Разрешим маршрутизатору отвечать компьютерам во внутренней сети:
iptables -A OUTPUT -o eth1 --destination 10.10.7.0/225.255.255.224 --match state --state NEW,ESTABLISHED -j ACCEPT


#Разрешим перенаправление пакетов из внутренней сети во внешнюю для установки соединений и установленных соединений:
iptables -A FORWARD -i eth1 --source 10.10.7.0/225.255.255.224 --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED -j ACCEPT

#Разрешим перенаправление пакетов из интернета во внутреннюю сеть только для установленных соединений и соединений принадлежащих установленному:
iptables -A FORWARD -i eth0 --destination 10.10.7.0/225.255.255.224 --match state --state RELATED,ESTABLISHED -j ACCEPT
"Я просто пытаюсь растить свой сад и не портить прекрасный вид.
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.

http://zooom.com.ua/
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

watcher писал(а):
19.01.2010 21:51
заходите все на чай? Присоединяюсь к вышесказавшим.


ну а все-таки что плохого во всех входящих пакетах? мусор? засоряют? или это угроза безопасности?
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Посоветуйте в доработке iptables

Сообщение ALexhha »

ну а все-таки что плохого во всех входящих пакетах? мусор? засоряют? или это угроза безопасности?

а какой глубокий смысл в политике ACCEPT для INPUT и при этом DROP для OUTPUT? Логичнее было бы наоборот, так как своему серверу можно доверять с большей вероятностью, чем внешнему миру, имхо :)
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Посоветуйте в доработке iptables

Сообщение pelmen »

А мне вот, кстати, не очевидна разница. Спасибо автору темы, за то, что зародил во мне зерно сомнения :)
Ведь, для удаленного компьютера (который, например, нас собирается хакать) пофигу, accept у нас на input + drop на output, или drop на input + accept на output. Он все равно не получит желаемого.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Посоветуйте в доработке iptables

Сообщение Alex2ndr »

pelmen писал(а):
21.01.2010 12:14
А мне вот, кстати, не очевидна разница. Спасибо автору темы, за то, что зародил во мне зерно сомнения :)
Ведь, для удаленного компьютера (который, например, нас собирается хакать) пофигу, accept у нас на input + drop на output, или drop на input + accept на output. Он все равно не получит желаемого.

Это верно только когда мы говорим о конкретном номере порта - например о 80. А если мы говорим о всем диапазоне портов (т е от 0 до 65536) то когда у нас accept на input + drop на output, то для закрытия доступа снаружи ко всем взломоопасным портам нам придется написать в разы больше правил чем для drop на input + accept на output.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Посоветуйте в доработке iptables

Сообщение pelmen »

Вы не поняли.
Например, для того чтобы открыть только порт 80 можно сделать так:

Код: Выделить всё

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
Можно так:

Код: Выделить всё

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Сильно защищенность не изменится.
А автор топика говорит, что можно так:

Код: Выделить всё

iptables -P INPUT ACCEPT
iptables -P OUTPUT DROP
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
и это будет равносильно предыдущему.
Да, пакеты хакера дойдут до нашего сервера, например ping. Наш сервер его получит. Но ответ-то он на него не отправит! И тогда хакер не получит этот пакет и для него это будет точно так же, как если бы наш сервер отбросил этот пакет не приняв его. Разница только в том, что в ЭТОМ случае мы можем логгировать приходящие пакеты и анализировать их, а в первых двух - нет.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Посоветуйте в доработке iptables

Сообщение Alex2ndr »

pelmen писал(а):
21.01.2010 12:49
Можно так:

Код: Выделить всё

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Сильно защищенность не изменится.
А автор топика говорит, что можно так:

Код: Выделить всё

iptables -P INPUT ACCEPT
iptables -P OUTPUT DROP
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

и это будет равносильно предыдущему.
Да, пакеты хакера дойдут до нашего сервера, например ping. Наш сервер его получит. Но ответ-то он на него не отправит! И тогда хакер не получит этот пакет и для него это будет точно так же, как если бы наш сервер отбросил этот пакет не приняв его.

Во первых - эти 2 варианта не равнозначны - в 1-м для доступа снаружи(т е для получения пакетов) открыт только 80, а во втором - все. И насчет хакера не согласен. Ping of Death помните? Ответа там и не нужно было - достаточно пакет получить - а дальше все просто падало. Так вот - если в 1-м варианте мы должны быть уверены, что нет пакета, получив который упадет веб-сервер, то во 2-м мы должны быть уверены за все запущенные на сервере сервисы. Так что вариант, когда пакет не доходит до сервера мне больше нравиться.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Посоветуйте в доработке iptables

Сообщение pelmen »

Теперь понял. Спасибо.
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

pelmen писал(а):
21.01.2010 13:04
Теперь понял. Спасибо.

я тоже все понял. спасибо.
А можно так же доходчиво на примере объяснить например правила

я их использую

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

и вот мой скрип исправленый. Теперь есть какие недочеты и упущения?

Код: Выделить всё

#!/bin/bash

# очищаем
iptables -F
iptables -X

# действия по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# убираем неправильные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

# разрешим Loopback
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT  -i lo -j ACCEPT

# Широковещательные пакеты блокируем
iptables -A INPUT  -i eth2 -d 172.16.103.255 -j DROP
iptables -A OUTPUT -o eth2 -d 172.16.103.255 -j DROP

iptables -A INPUT  -i eth1 -d 192.168.11.255 -j DROP
iptables -A OUTPUT -o eth1 -d 192.168.11.255 -j DROP

iptables -A INPUT  -i eth2 -d 255.255.255.255 -j DROP
iptables -A OUTPUT -o eth2 -d 255.255.255.255 -j DROP

# мультикаст блокируем
iptables -A INPUT  -i eth2 -d 224.0.0.0/16 -j DROP
iptables -A OUTPUT -o eth2 -d 224.0.0.0/16 -j DROP

# icmp
iptables -A INPUT  -p icmp --icmp-type 0  -j ACCEPT
iptables -A INPUT  -p icmp --icmp-type 3  -j ACCEPT
iptables -A INPUT  -p icmp --icmp-type 8  -j ACCEPT
iptables -A INPUT  -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0  -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3  -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8  -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT

# DNS
iptables -A OUTPUT -o eth2 -d 172.16.100.11 -p udp --dport 53 -j ACCEPT
iptables -A INPUT  -i eth2 -s 172.16.100.11 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth2 -d 172.16.100.11 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT  -i eth2 -s 172.16.100.11 -p tcp --sport 53 -j ACCEPT

# разрешим VPN
iptables -A OUTPUT -o eth2 -d 172.16.100.1 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT  -i eth2 -s 172.16.100.1 -p tcp --sport 1723 -j ACCEPT
iptables -A OUTPUT -o eth2 -d 172.16.100.1 -p 47 -j ACCEPT
iptables -A INPUT  -i eth2 -s 172.16.100.1 -p 47 -j ACCEPT

# откроем 80,443 порт
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT  -p tcp -m multiport --sports 80,443 -j ACCEPT

# откроем порты 5222, 5190
iptables -A OUTPUT -p tcp -m multiport --dports 5222,5190 -j ACCEPT
iptables -A INPUT  -p tcp -m multiport --sports 5222,5190 -j ACCEPT

# mail
iptables -A OUTPUT -p tcp -m multiport --dports 110,25 -j ACCEPT

# откроем ftp
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT

# torrent
iptables -A OUTPUT -o ppp0 -p udp --sport 7997 -j ACCEPT
iptables -A INPUT  -i ppp0 -p udp --dport 7997 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 7997 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 2710 -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --sport 2710 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp -m multiport --dports 10000:65000 -j ACCEPT

iptables -A INPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#virtualbox
iptables -A INPUT  -s 192.168.11.7 -d 192.168.11.1  -j ACCEPT
iptables -A OUTPUT -s 192.168.11.1 -d 192.168.11.7  -j ACCEPT


# шлюз
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth2 -s 192.168.11.0/24 -d 172.16.100.11 -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -s 172.16.100.11 -d 192.168.11.0/24 -j ACCEPT

iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT

# dc++
iptables -A OUTPUT -p tcp --dport 411 -j ACCEPT
iptables -A INPUT  -p tcp --dport 4994 -j ACCEPT
iptables -A OUTPUT -p udp --dport 411 -j ACCEPT
iptables -A INPUT  -p udp --dport 4994 -j ACCEPT


iptables -A INPUT -j   LOG --log-level DEBUG --log-prefix "INPUT: "
iptables -A OUTPUT -j  LOG --log-level DEBUG --log-prefix "OUTPUT: "
iptables -A FORWARD -j LOG --log-level DEBUG --log-prefix "FORWARD: "

exit 0
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Посоветуйте в доработке iptables

Сообщение ALexhha »

iptables -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT

зачем это правило?

Например, для того чтобы открыть только порт 80 можно сделать так:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Этого должно хватить для доступа из мира на локальный веб сервер
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

ALexhha писал(а):
21.01.2010 21:09
iptables -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT

зачем это правило?

Например, для того чтобы открыть только порт 80 можно сделать так:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Этого должно хватить для доступа из мира на локальный веб сервер


так, получается я чета не допонимаю....
У меня нет локального веб сервера

это по умолчанию и с этим все ясно.
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

# тепрь откроем 80,443 порт
# Этим правилом я разрешаю отправлять запросы на внешние веб серверы
1. iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# а этим я разрешаю получать ответ от внешнего веб сервера
2. iptables -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT

или второе правило достаточно заменить ??
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Посоветуйте в доработке iptables

Сообщение pelmen »

Убери из правил все те, которые дропают. У тебя и так по-умолчанию дропы.
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Посоветуйте в доработке iptables

Сообщение ALexhha »

или второе правило достаточно заменить ??
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

достаточно

# Этим правилом я разрешаю отправлять запросы на внешние веб серверы

но только с локальной машины

Я вообще не заморачиваюсь с OUTPUT, всегда ставлю в ACCEPT и только если что то надо, то DROP. А вот INPUT и FORWARD всегда DROP и открываю необходимое
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

Я вообще не заморачиваюсь с OUTPUT, всегда ставлю в ACCEPT и только если что то надо, то DROP. А вот INPUT и FORWARD всегда DROP и открываю необходимое


а я мне почему-то логичнее всегда казалось все получить нежели отдавать.

Например троян как будет инфу сливать кул-хацкеру... если OUTPUT всегда разрешен?? мне кажется беспрепятсвенно...
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Посоветуйте в доработке iptables

Сообщение ALexhha »

Троян на сервере?
Спасибо сказали:
zloymih
Сообщения: 8

Re: Посоветуйте в доработке iptables

Сообщение zloymih »

ALexhha писал(а):
25.01.2010 13:14
Троян на сервере?

Ну да ) разве не может быть такого ? теоретически.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Посоветуйте в доработке iptables

Сообщение pelmen »

Для того, чтобы не было трояна на сервере даже чисто теоретически и ставят политику по-умолчанию drop именно на input :)
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Посоветуйте в доработке iptables

Сообщение ALexhha »

Вероятность трояна на винде, за сервером раз так в 100 больше :)

Ну да ) разве не может быть такого ? теоретически.

в нашем мире все может быть ;)
Спасибо сказали: