LinuxForum.Fans
Тема

iptables для реализации домашнего роутера на Дебиан

Автор: thugws 14 сообщений 3475 просмотров
26.09.2014 12:46 · отредактировано #393895

[console]
#читсим
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# разрешаем локальный траффик для loopback и внутренней сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i wlan0 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A OUTPUT -o wlan0-j ACCEPT


iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i wlan0-s 192.168.1.0/24 -j ACCEPT

iptables -t mangle -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

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

# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth0 -o ppoe -j ACCEPT
iptables -A FORWARD -i wlan0 -o ppoe -j ACCEPT

#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i ppoe -o eth0 -j REJECT
iptables -A FORWARD -i ppoe -o wlan0 -j REJECT
iptables -t nat -A POSTROUTING -s 192.168.1.0 -d ! 192.168.1.7 -j SNAT --to-source inetIP
iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета
iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты
# Открываем порт для ssh
iptables -A INPUT -i ppoe -p tcp --dport 22 -j ACCEPT
# Открытие портов для торрентов (такие же указать в torrent-клиенте)
iptables -A INPUT -i ppoe tcp -m multiport --ports 50100:51100 -j ACCEPT
[/console]

Проверьте пожалуйста iptables для реализации домашнего роутера на Дебиан, статей в инете очень много говорят и пишут по-разному, поэтому сомневаюсь что правильно все прописал
eth1
eth0 - локал 192.168.1.0/24
wlan0 - локал 192.168.1.0/24
pppoe подключен через eth1
задача - как правильно настроить маршрутизацию чтобы интернет пошел в локалку через eth0 и по wlan0
и как правильно настроить так чтобы локалка была открыта для локалки но закрыта из интернета

-m state --state заменено на -m conntrack --ctstate так как технология новая



буду искренне почеловечески благодарен за помощь

26.09.2014 14:55 · отредактировано #393900

[console]eth0 - локал 192.168.1.0/24
wlan0 - локал 192.168.1.0/24[/console]
Это как?
Может у тебя есть br0?

Если у тебя нету моста, то лучше сначала разобраться с сетью

Сколько же тут копипаста из разных источников? Тут больше половина правил не работает.

26.09.2014 15:12 #393901

я перечитал очень много инструкции и в каждой что то не устраивало.
я не хочу использовать мост, потому br0 нет. Возможно ли реализовать маршрутизацию сразу на два интерфейса в рамках одной локальной сети например 192.168.1.0/24 без br0.
или поделитесь кто пожалуйста нормальным конфигом не древнеем

27.09.2014 13:17 #393957

2 разных интерфейса не могут смотреть в одну локальную сеть. Для этого и придумали мост.
Почему ты не хочешь использовать мост?

27.09.2014 18:02 · отредактировано #394006

уже понял ошибку с интерфейсами, уже исправил проверете пожалуйста, может можно как то дополнить

[console]
#читсим
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# разрешаем локальный траффик для loopback и внутренней сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o br0 -j ACCEPT


iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i br0 -s 192.168.1.0/24 -j ACCEPT

iptables -t mangle -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
тбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -I INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP

# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i br0 -o ppoe -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i ppoe -o br0 -j REJECT
iptables -t nat -A POSTROUTING -s 192.168.1.0 -d ! 192.168.1.7 -j SNAT --to-source inetIP
iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета
iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты
# Открываем порт для ssh
iptables -A INPUT -i ppoe -p tcp --dport 22 -j ACCEPT
# Открытие портов для торрентов (такие же указать в torrent-клиенте)
iptables -A INPUT -i ppoe tcp -m multiport --ports 50100:51100 -j ACCEPT
# Открытие 443 порта
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Открываем 80 порт для веб сайтов
iptables -A INPUT -i ppoe -p all --dport 80 -j ACCEPT
[/console]

например как мне дописать сюда разние защиты от спуфинга ддоса я видел все ето в конгифах у опенврт но как сюда ето перенести все?

27.09.2014 20:34 #394020

По поводу запуска правил в дебиан, лучше прочитай статью pivpav.ru/post/134

По правилам у тебя написано на двойку с минусом. Я бы конечно помог, но хочется чтобы все знали что такое днфолтные политики, цепочки, фильтры. А ддосом уже заниматься потом. Важно понимать что делает скрипт, перед тем как его использовать

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

К примеру у тебя политики применяются и в начале и в конце скрипта. Зачем?
Зачем ты испульзуешь параметр -A и -I ?

29.09.2014 12:04 · отредактировано #394172

про persistant я знаю, но жаль что файл конфига дефолтный пустой. Мне дебиан и нравиться тем что в дефолтном конфиге есть все, нужно просто почитать внимательно.
[console]
-F
-F -t nat
-F -t mangle
-X
-t nat -X
-t mangle -X

-P INPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i br0 -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-t mangle -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m conntrack --ctstate NEW -i br0-s 192.168.1.0/24 -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -i br0 -o ppoe -j ACCEPT
-A FORWARD -i ppoe -o br0 -j REJECT
-t nat -A POSTROUTING -o br0-j SNAT --to-source mywhiteip
-P FORWARD DROP

-P OUTPUT DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o br0 -j ACCEPT
-P OUTPUT ACCEPT # Разрешаем все исходящие пакеты
[/console]

немного не понял нужно чистить или нет
-F
-F -t nat
-F -t mangle
-X
-t nat -X
-t mangle -X

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

29.09.2014 12:51 #394176
"thugws" написал:
и еще не могу никак понять где нат  прописать, хочу использовать Snat так ка у меня белая стат ип

Эм мой совет реально почитайте теорию, чтоб избежать подобных вопросов.
Псы открою страшную тайну нат надо прописывать в таблице nat
[console]iptables -t nat .....................[/console]

29.09.2014 13:59 · отредактировано #394184

Вот настройка простого шлюза на Debian/Ubuntu - http://linuxru.org/linux/24
Автор Zenon, почитайте, там все нормально расписано.

29.09.2014 14:13 · отредактировано #394185

она старая уже и там m state --state и еще что конкретно делают эти две команды

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

AlfaStriker написал:
Вот настройка простого шлюза на Debian/Ubuntu - http://linuxru.org/linux/24
Автор Zenon, почитайте, там все нормально расписано.
29.09.2014 17:27 #394223

Пакеты со статусом NEW и со сброшенным битом SYN

Это свойство iptables недостаточно хорошо задокументировано, а поэтому многие могут уделить ему недостаточное внимание. Если вы используете правила, определяющие статус пакета NEW, но не проверяете состояние бита SYN, то пакеты со сброшенным битом SYN смогут “просочиться” через вашу защиту. Хотя, в случае, когда мы используем несколько брандмауэров, такой пакет может оказаться частью ESTABLISHED соединения, установленного через другой брандмауэр. Пропуская подобные пакеты, мы делаем возможным совместную работу двух или более брандмауэров, при этом мы можем любой из них остановить не боясь разорвать установленные соединения, Поскольку функции по передаче данных тут же возьмет на себя другой брандмауэр. Однако это позволит устанавливать практически любое TCP соединение. Во избежание этого следует добавить следующие правила в цепочки INPUT, OUTPUT и FORWARD:
text
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Обратите внимание, что имеются некоторые неприятности с вышеприведенными правилами и плохой реализацией TCP/IP от Microsoft. Дело в том, что при некоторых условиях, пакеты, сгенерированные программами от Microsoft маркируются как NEW и согласно этим правилам будут сброшены. Это, однако, не приводит к разрушению соединений, насколько я знаю. Происходит это потому, что, когда соединение закрывается, и посылается завершающий пакет FIN/ACK, то netfilter закрывает это соединение и удаляет его из таблицы conntrack. В этот момент, дефектный код Microsoft посылает другой пакет, которому присваивается статус NEW, но в этом пакете не установлен бит SYN и, следовательно соответствует вышеупомянутым правилам. Короче говоря - особо не переживайте по поводу этих правил. В случае чего - вы сможете просмотреть системный журнал, куда логируются отбрасываемые пакеты (см. правила выше) и разобраться с ними. Имеется еще одна известная проблема с этими правилами. Если кто-то в настоящее время связан с брандмауэром, например из LAN, и активирует PPP, то в этом случае соединение будет уничтожено. Это происходит в момент, когда загружаются или выгружаются conntrack и nat модули. Другой способ получить эту проблему состоит в том, чтобы выполнить сценарий rc.firewall.txt из сеанса telnet с другого компьютера. Для этого вы соединяетесь по telnet с брандмауэром. Запускаете rc.firewall.txt, в процессе исполнения которого, запускаются модули трассировки подключений, грузятся правила “NEW not SYN”. Когда клиент telnet или daemon пробуют послать что нибудь, то это подключение будет распознано трассировочным кодом как NEW, но пакеты не имеют установленного бита SYN, так как они, фактически, являются частью уже установленного соединения. Следовательно, пакет будет соответствовать правилам в результате чего будет зажурналирован и сброше.

Источник:
https://sites.google.com/site/snvakula/iptables

29.09.2014 17:50 #394228

хорошо теперь немного разобрался, но остается вопрос, могу я заменить везде у своих правилах -m state --state на conntrack --ctstate

Кроме критерия conntrack, стоит упомянуть и его идеологического предшественника — критерий state. Изначально для определения состояния соединения использовался именно он, то есть вместо -m conntrack --ctstate ESTABLISHED,RELATED использовалось -m state --state ESTABLISHED,RELATED. Подобные формулировки до сих пор сохраняются во многих руководствах по iptables. Однако в настоящее время критерий state считается устаревшим, и разработчики iptables рекомендуют использовать вместо него критерий conntrack. Также заметим, что критерий conntrack обладает более широкими возможностями, нежели state, и позволяет использовать дополнительную информацию о соединении, в частности, состояние самого соединения (ctstatus), факт применения к нему трансляции адресов, тайм-аут для «повисших» соединений (ctexpire) и т. п.

sourse http://ru.wikibooks.org/wiki/Iptables

29.09.2014 18:54 · отредактировано #394238

Вот конфиг для persistent тебе, можешь дальше отталкиваться от него
[console]#Таблица nat
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0 -d ! 192.168.1.7 -j SNAT --to-source xxx.yyy.zzz.aaa
COMMIT
#Таблица фильтр
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i br0 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i br0 -o ppp0 -j ACCEPT
-A FORWARD -i ppp0 -o br0 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT
[/console]

08.10.2014 11:32 #395545

сделал проще установил shorewall почитал маны несколько часов у них на сайте - все работает - доволен на 100%

Войдите или зарегистрируйтесь, чтобы ответить.