LinuxForum.Fans
Тема

прошу помощи со скриптом iptables для шлюза

Автор: Me_Shock 182 сообщений 27899 просмотров
#313390

И что при таком конфиге пинги не идут????

#313391

"kisil⇓" написал:
И что при таком конфиге пинги не идут????
не идут, ходят только те, которые были установлены до запуска скрипта. и ssh работает, по тому же принципу..
Однако, добавление NEW заставляет все работать 100%
Показать
[console]#!/bin/bash
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP


# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT


# 4.
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT


# 5.
$IPT -A INPUT -p icmp -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -p icmp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p icmp -m state --state NEW -j ACCEPT



# 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward[/console]
#313392

kisil написал:
И что при таком конфиге пинги не идут????
В том-то все и дело. При такой конфигурации у Enzo_brn пинги не ходят, наперекор теории. Меняем ему правила:

Показать
#!/bin/bash
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP


# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT


# 4.
$IPT -A INPUT -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A FORWARD -p icmp -j ACCEPT


# 5.
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT


# 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
1. Почистить таблицы.
2. Закрыть все цепочки.
3. Разрешить лупбэк трафик.
4. разрешить транзит ИЦМП-пакетов между внутр. и внешней сетью.
5. Разрешить на всех цепочках соединения, уже инициированные и новые

#313395

и команду

text
echo 1 > /proc/sys/net/ipv4/ip_forward

поставить в начало скрипта.

#313396

urfin, ваш крайний пример скрипта пустит в инэт всю локальную сеть, а мне нужны только пинги, инэт ч/з сквид.
было достаточно только поставить NEW для цепочки FORWARD в п. 4. Непонятно только, почему то-же самое првило, только более узкое из п. 5 не принесло результатов.. $IPT -A FORWARD -p icmp -m state --state NEW -j ACCEPT
эх, вобщем и так ходит вся..(( Как побороть?)

#313397

Enzo_brn написал:
urfin, ваш крайний пример скрипта пустит в инэт всю локальную сеть, а мне нужны только пинги, инэт ч/з сквид.
было достаточно только поставить NEW для цепочки FORWARD в п. 4. Непонятно только, почему то-же самое првило, только более узкое из п. 5 не принесло результатов.. $IPT -A FORWARD -p icmp -m state --state NEW -j ACCEPT
ПОчему весь трафик? Разрешен только ICMP, то есть пинги. Для всех остальных протоколов DROP стоит.
А насчет $IPT -A FORWARD -p icmp -m state --state NEW -j ACCEPT, подобные правила почему-то не всегда срабатывают, не знаю почему.
#313398

"urfin⇓" написал:
ПОчему весь трафик?
вот и я не пойму как такое возможно, хотя..
"urfin⇓" написал:
$IPT -A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
нам намекает что при обращении, скажем, к 80 порту соединение проинициализируется изнутри, т.к. правило "$IPT -A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT" пошлет политику: "$IPT -P FORWARD DROP" на все 4 стороны. или мне это только кажется?))
#313399

"Enzo_brn⇓" написал:
эх, вобщем и так ходит вся..(( Как побороть?)
Что вся локальная сеть ходит в инет?
Добавьте правила:
$IPT -A FORWARD -p tcp -j DROP
$IPT -A FORWARD -p udp -j DROP
#313400

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

#313401

"urfin⇓" написал:
Что вся локальная сеть ходит в инет?
именно, прям по 80 порту!
#313403

urfin, крайний вариант скрипта:

Показать
text
#!/bin/bash
IPT="/sbin/iptables"
EXT_IF="eth0"
INT_IF="eth1"
#
# 1.
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 2.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 3.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# 4. $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT

# 5. $IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT $IPT -A FORWARD -p icmp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# 6. # Masquerade. $IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

в таком варианте ни пинга, ни инэта в локалке нет. Убираем в п.[5], строка [3] -p icmp и инэт и пинги у всей ЛС

#313404

Enzo_brn написал:
[quote="urfin⇓"]Что вся локальная сеть ходит в инет?
именно, прям по 80 порту![/quote]
Сделайте так, я беру Ваш скрипт и немного меняю:
Показать
#!/bin/bash
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP


# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# 4.
$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# 5.
$IPT -A INPUT -m conntrack --ctproto icmp --ctstate NEW -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctproto icmp--ctstate NEW -j ACCEPT
$IPT -A FORWARD -m conntrack --ctproto icmp --ctstate NEW -j ACCEPT


# 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
#313405

Или так:

Показать
#!/bin/bash
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# 4.


# 5.
$IPT -A INPUT -m conntrack --ctproto icmp --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m conntrack --ctproto icmp--ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctproto icmp --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT

# 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
#313406

"urfin⇓" написал:
Сделайте так, я беру Ваш скрипт и немного меняю:
строчка в строчку. в ЛС есть интернет!((( (у меня не вкл. вайфай и браузер в режиме прямого соединения с Интернет)
#313407
"urfin⇓" написал:
заинтересовало некоторое расхождение теории с практикой

Дано:
host1
# /etc/rc.d/rc.inet1 stop
# ifconfig eth0 192.168.8.10 up
# route add default gw 192.168.8.254

host2
# /etc/rc.d/rc.inet1 stop
# ifconfig eth0 192.168.9.10 up
# route add default gw 192.168.9.254

1) Обычная маршрутизация пакетов из сети в сеть
gw
# /etc/rc.d/rc.inet1 stop
# ifconfig eth0 192.168.8.254 up
# ifconfig eth1 192.168.9.254 up
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP

Делаем на host2
# tcpdump
и наблюдаем...

На host1
# ping -c1 192.168.9.10
64 bytes from 192.168.9.10: icmp_req=1 ttl=63 time=1.55
...
на host2 наблюдаем
ICMP echo request 192.168.8.10 > 192.168.9.10
ICMP echo reply 192.168.9.10 > 192.168.8.10

2) Трансляция сетевого адреса источника (SNAT)
Делаем:
на gw
# iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth1 -j SNAT --to-source 192.168.9.254

на host1
# ping -c1 192.168.9.10
64 bytes from 192.168.9.10: icmp_req=1 ttl=63 time=1.55
...
на host2 наблюдаем
ICMP echo request 192.168.9.254 > 192.168.9.10
ICMP echo reply 192.168.9.10 > 192.168.9.254


Вопросы, замечания, комментарии?

#313408

Enzo_brn написал:
[quote="urfin⇓"]Сделайте так, я беру Ваш скрипт и немного меняю:
строчка в строчку. в ЛС есть интернет!((( (у меня не вкл. вайфай и браузер в режиме прямого соединения с Интернет)[/quote]А если закомментить FORWARD в 4 и 5?
#313409

"urfin⇓" написал:
Или так:
Нет пингов, нет интернета, отвалился ssh (перезапускал скрипт терминально)
#313411

Enzo_brn написал:
[quote="urfin⇓"]Или так:
Нет пингов, нет интернета, отвалился ssh (перезапускал скрипт терминально)[/quote]Ясно, а как с отключенным FORWARD'ом?
#313412

"urfin⇓" написал:
Ясно, а как с отключенным FORWARD'ом?
с откл. - вообще как в танке и как сейчас, нет инэтов, пингов, все недоступно. даже ip самого шлюза в ЛС
(зы: дико извиняюсь, сегодня я ушел.)
#313413

Enzo_brn написал:
[quote="urfin⇓"]Ясно, а как с отключенным FORWARD'ом?
с откл. - вообще как в танке и как сейчас, нет инэтов, пингов, все недоступно. даже ip самого шлюза в ЛС[/quote]
а что в таком случае?
#!/bin/bash
IPT="/sbin/iptables"
EXT_IF="eth0"
INT_IF="eth1"
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP


# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# 4.
#$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -o $EXT_IF -p icmp -m state --state NEW -j ACCEPT.
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# 5.
#$IPT -A INPUT -p icmp -m state --state NEW -j ACCEPT
#$IPT -A OUTPUT -p icmp -m state --state NEW -j ACCEPT

# 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
Войдите или зарегистрируйтесь, чтобы ответить.