LinuxForum.Fans
Тема

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

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

kisil, в процессе переустановки с нуля. Эта инсталяция на этой машине у меня по счету уже где-то шестая.. Причем абсолютно не ясно что в прошлой сломалось.. Но чувствую что-то пошло не так.. иногда начинаю думать, а не сменить ли дистриб.. скажем на опенсусе, там как раз новый билд вышел.. ..при поиске манов Гугл наверное, еще неделю по-привычке будет информацию затрагивающую debian выдавать :D

#311254

Опять трабл с "интернет-шлюзом"!
кратко рефреш того что есть: 1. Железный комп с 2мя сетевыми, чистыми iptables и сквидом на http_port 3128, (sams2 c авториз. по ip)
2. eth0 - WAN, eth1 - LAN, виндовс-машина подключена к eth1, браузер настроен на исп. прокси. с прокси работает, траф считает.
Вопрос: Хотел сделать в браузере: "не использовать прокси", а в iptables сделать заворот 80 порта на 3128 для сети LAN.
Что-то не выходит..

Показать
[console]root@gw5:~# iptables -t nat -F
root@gw5:~# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
root@gw5:~# iptables -t nat -v -S
-P PREROUTING ACCEPT -c 0 0
-P POSTROUTING ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 0 0
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -c 0 0 -j REDIRECT --to-ports 3128
root@gw5:~# iptables -t nat -v -S
-P PREROUTING ACCEPT -c 10 1211
-P POSTROUTING ACCEPT -c 0 0
-P OUTPUT ACCEPT -c 0 0
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -c 0 0 -j REDIRECT --to-ports 3128[/console]
а в браузере клиента: "Невозможно найти удаленный сервер" ЧяДНТ? :'(

#311255

Прокси на 3128 прозрачный (transparent/intercept)? Иначе не взлетит.

#311256

"bormant⇓" написал:
Прокси на 3128 прозрачный (transparent/intercept)? Иначе не взлетит.
Эмм.. - нет, не прозрачный! Значит вот почему! Спаибо)) вопрос снят! - просто перекрою 80. Но на прозрачном ведь https не заведется (( Хотя вот у парней из endian.com похоже как-то завелся..
#311267

Привет. *BYE* . Опять настраиваеш GW5 ;D
А простой трафик у тя щас идёт нормально на прозрачный прокси.???

#311296

"kisil⇓" написал:
Привет.  . Опять настраиваеш GW5
Привет))) Так точно. у меня нету прозрачного прокси и не будет никогда!)
щас пилю скрипт, /root/gw5.fw пока такой:
Показать
text
#!/bin/bash
# *****************************************************************************
#
TR_HOSTS="80.247.XX.XXX,109.202.X.XXX,192.168.0.65"     # 1,2-provid-s, 3-debug
MY_NETWORK="192.168.1.0/24"                             # My NetWork (eth1)
THIS_GW_IP="192.168.0.254"                              # this GateWay IP
DEFAULT_GW="192.168.0.210"                              # default gateway
EXT_PORTS="22,80,3333,3335,3336,5555,6666"              # accessible WAN port
INT_PORTS="3128,3389,5060,5190"                         # accessible LAN ports
IPT="/sbin/iptables"                                    # iptables location
EXT_IF="eth0"                                           # external WAN interface
INT_IF="eth1"                                           # internal LAN interface
#
# *****************************************************************************
# CLOSE ALL POLICE:
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP

# FLASHING RULES IN ALL DEFAULT TABLES: $IPT -F && $IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F # # ***************************************************************************** # EXTERNAL (eth0) INTERFACE RULES: # INPUT RULES: $IPT -A INPUT --match state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $EXT_IF --source $TR_HOSTS -p tcp -m multiport --dport $EXT_PORTS -m state --state NEW -j ACCEPT

# OUTPUT RULES: $IPT -A OUTPUT -o $EXT_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# FORWARD RULES:

# # ***************************************************************************** # INTERNAL (eth1) INTERFACE RULES: # INPUT RULES: $IPT -A INPUT -i $INT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $INT_IF -p tcp -m multiport --dport $INT_PORTS -m state --state NEW -j ACCEPT

# OUTPUT RULES: $IPT -A OUTPUT -o $INT_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# FORWARD RULES:

# # ***************************************************************************** # LOOPBACK RULES # INPUT RULES: $IPT -A INPUT -i lo -j ACCEPT # OUTPUT RULES: $IPT -A OUTPUT -o lo -j ACCEPT # # ***************************************************************************** # NAT

#311297

Ну и как работает скрипт????

#311305

Да, все что смог пока проверить и осознать - работает. Пускает только доверенных, на разрешенный порты. RDP не проверял, да еще и не прописал внизу в NAT, там еще все согласовать со списками ACL в сквиде надобно. + аськи, скайпы, корпоративная VoIP, +over9K всего еще..

#312677

Отвлеченный вопрос (не требует вникать и читать вышеописанное): Есть шлюз (2 сети) eth0 external (WAN), eth1 internal (LAN)
все запретил, хочу пинги из LAN в глобал:

text
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -j ACCEPT # - так пинги ходят
$IPT -A FORWARD -i $INT_IF -o $EXT_IF  -p icmp --icmp-type any -j ACCEPT # - так почему-то пинги не ходят ((

ну ведь ИЦМП любой тип, а все равно не ходят! :'(

#312696

Пропишы вот такое

text
$IPT -A FORWARD --match state --state ESTABLISHED,RELATED -j ACCEPT
#312699

"kisil⇓" написал:
Пропишы вот такое
Это есть)
text
# --------------------------------- NAT ---------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -j SNAT --to-source $GW5
$IPT -A FORWARD -i $EXT_IF -o $INT_IF -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPT -A FORWARD -i $INT_IF -o $EXT_IF -j ACCEPT # РАБОТАЕТ # $IPT -A FORWARD -i $INT_IF -o $EXT_IF [b]-p icmp --icmp-type any[/b] -j ACCEPT # НЕ РАБОТАЕТ # -----------------------------------------------------------------------------

#312702

А ты поставь без интерфейсов, а просто, что принимать уже установленые соединения.

text
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
#312738

"kisil⇓" написал:
А ты поставь без интерфейсов, а просто, что принимать уже установленые соединения.
не ходят. Может весь показать: gw5.fw
Показать
[console]#!/bin/bash
# -----------------------------------------------------------------------------
TR_HOSTS="192.168.0.65" # 1,2-provid-s, 3-debug
MY_NETWORK="192.168.1.0/24" # My NetWork (eth1)
GW5="192.168.0.254" # gw5 ip is 192.168.1.220
P_GW="192.168.0.210" # provider GW is:
EXT_PORTS="22,80,3333,3335,3336,5555,6666" # accessible WAN port (DEL 80 later!)
INT_PORTS="20,21,25,53,110,1024,2041,3128,5060,5190,8080,11024" # accessible LAN ports
IPT="/sbin/iptables" # iptables location
EXT_IF="eth0" # external WAN interface
INT_IF="eth1" # internal LAN interface
#
#
# --------------------------- CLOSE ALL CHAINS --------------------------------
$IPT -P INPUT DROP && $IPT -P OUTPUT DROP && $IPT -P FORWARD DROP


# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
$IPT -F && $IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F


# ----------------------------- ALLOWING LOOPBACK TRAFFIC ---------------------
$IPT -A INPUT -i lo -j ACCEPT && $IPT -A OUTPUT -o lo -j ACCEPT


# ------------------- EXTERNAL (eth0) INTERFACE RULES ------------------------
# INPUT RULES:
$IPT -A INPUT --match state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $EXT_IF --source $TR_HOSTS -p tcp -m multiport --dport $EXT_PORTS -m state --state NEW -j ACCEPT
#
# OUTPUT RULES:
$IPT -A OUTPUT -o $EXT_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


# -------------------- INTERNAL (eth1) INTERFACE RULES ------------------------
# INPUT RULES:
$IPT -A INPUT -i $INT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i $INT_IF -p tcp -m multiport --dport $INT_PORTS -m state --state NEW -j ACCEPT
#
# OUTPUT RULES:
$IPT -A OUTPUT -o $INT_IF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


# --------------------------------- NAT ---------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -j SNAT --to-source $GW5
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # !!! LUST RULE !!!

# $IPT -A FORWARD -i $EXT_IF -o $INT_IF -m state --state RELATED,ESTABLISHED -j ACCEPT
# $IPT -A FORWARD -i $INT_IF -o $EXT_IF -j ACCEPT

# -----------------------------------------------------------------------------
# $IPT -A OUTPUT -o $INT_IF -p icmp --icmp-type any -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# *****************************************************************************
[/console]
#312750

Мистика какаято. А поясните пожалуйста что это правило означает

text
$IPT -t nat -A POSTROUTING -j SNAT --to-source $GW5
#312757

"kisil⇓" написал:
А поясните пожалуйста что это правило означает
эмм.. :[ не могу.. Вот это я нашел где-то..

Показать
text
# allow IP forwarding.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Then you'll need to configure iptables to forward the packets from your internal network, on /dev/eth1, to your external network on /dev/eth0. You do this will the following commands:

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # You should now be NATing.

а что у меня за правило - не пойму сам.. Исправился:

Показать
text
# --------------------------------- NAT ALL -----------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
$IPT -A FORWARD -i $EXT_IF -o $INT_IF -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $INT_IF -o $EXT_IF -j ACCEPT
# -----------------------------------------------------------------------------

из этого хотел получить только нат пинг, пока не вышло.

#312760

Хорошо а если так, тока возмём для отдельного айпи

text
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -p icmp -s 192.168.0.20 -o $EXT_IF -j ACCEPT

айпи свое ставите. И пробуйте будет ли идти пинг.
Не знаю как у вас а у меня такая система работает. При том что политики INPUT, FORWARD DROP, OUTPUT ACCEPT
И при такой конструкции вот такое правило работает.

text
iptables -A FORWARD -p icmp -i eth1 -o eth0 -j ACCEPT

Пинги идут

#312893

kisil, обе конструкции прекрасно работают, даже с политикой все в DROP, вот только без -p icmp

[console]# --------------------------------- NAT ALL -----------------------------------
MY_NET="192.168.1.0/24"
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -p icmp -s $MY_NET -o $EXT_IF -j ACCEPT # вариант 1
$IPT -A FORWARD -p icmp -i $INT_IF -o $EXT_IF -j ACCEPT # вариант 2
# -----------------------------------------------------------------------------
[/console]
указываешь этот злосчастный ИЦМП, а такое чувство что прыгаешь ни к ацепт, а к дроп! Может есть иной вариант указания icmp?

#312927

Вот что мне тут в голову пришло. ICMP это не ТСР, вот тут поподробнее, может ещё нужно и с наружы дать возможность принимать icmp. Незнаю.

#312928

"Enzo_brn⇓" написал:
указываешь этот злосчастный ИЦМП, а такое чувство что прыгаешь ни к ацепт, а к дроп! Может есть иной вариант указания icmp?
А INPUT и OUTPUT у Вас в DROP?
#312929

Да

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