Author Topic: Томские сетки и NAT  (Read 4235 times)

0 Members and 1 Guest are viewing this topic.

Offline Bill Tomson

  • Jr. Member
  • **
  • Posts: 75
  • Karma: +0/-0
Томские сетки и NAT
« on: November 11, 2008, 17:34:00 »
Господа!
Хочу блочить внеху юзверям. Правильно ли я мыслю:

отрывок firewall.sh:
Code: [Select]
#NAT:
TOMSK=/root/tomnets
for name in $(awk '{print $1}' < "$TOMSK")
do
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d $name -j SNAT --to-source $EXT_IP
let "n+=1"
done

Вроде работает. Ну а если с профессиональной точки зрения? Не сильно будет нагружать? Спасибо.

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
Томские сетки и NAT
« Reply #1 on: November 11, 2008, 18:24:08 »
Quote from: Bill Tomson
Господа!
Хочу блочить внеху юзверям. Правильно ли я мыслю:

отрывок firewall.sh:
Code: [Select]
#NAT:
TOMSK=/root/tomnets
for name in $(awk '{print $1}' < "$TOMSK")
do
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d $name -j SNAT --to-source $EXT_IP
let "n+=1"
done

Вроде работает. Ну а если с профессиональной точки зрения? Не сильно будет нагружать? Спасибо.
Указанный код не "блочит" внеху, он лишь не делает NAT для исходящих пакетов во внеху, хорошо если их рубит маршрутизатор провайдера.
Я делал так
Маркировал исходящие пакеты в томские сети
Code: [Select]
iptables -t mangle -A PREROUTING -s $LAN_IP_RANGE -d ! $LAN_IP_RANGE -j tsk_out_mark
if [ -f /usr/local/etc/tsknet ]; then
  for i in `cat /etc/tsknet`; do
    iptables -t mangle -A tsk_out_mark -d $i -j MARK --set-mark 1
done
затем проверял метку в FORWARD и рубил, например, так, пропускал Томск и все что нужно, остальное по умолчанию рубил.
Code: [Select]
iptables -P FORWARD DROP
iptables -A FORWARD  -m mark --mark 1/1 -j ACCEPT
Маркировку входящих и исходящих пакетов в томские сети для 3-х компов легко тянет ASUS wl500gp, на сеть ~100 компов с этим справлялся не напрягаясь 2-х процессорый Pentium-3 400 MHz.

Offline Bill Tomson

  • Jr. Member
  • **
  • Posts: 75
  • Karma: +0/-0
Томские сетки и NAT
« Reply #2 on: November 11, 2008, 21:52:10 »
Quote from: demiurg
Указанный код не "блочит" внеху, он лишь не делает NAT для исходящих пакетов во внеху, хорошо если их рубит маршрутизатор провайдера.
Я делал так
Маркировал исходящие пакеты в томские сети
Code: [Select]
iptables -t mangle -A PREROUTING -s $LAN_IP_RANGE -d ! $LAN_IP_RANGE -j tsk_out_mark
if [ -f /usr/local/etc/tsknet ]; then
  for i in `cat /etc/tsknet`; do
    iptables -t mangle -A tsk_out_mark -d $i -j MARK --set-mark 1
done
затем проверял метку в FORWARD и рубил, например, так, пропускал Томск и все что нужно, остальное по умолчанию рубил.
Code: [Select]
iptables -P FORWARD DROP
iptables -A FORWARD  -m mark --mark 1/1 -j ACCEPT
Маркировку входящих и исходящих пакетов в томские сети для 3-х компов легко тянет ASUS wl500gp, на сеть ~100 компов с этим справлялся не напрягаясь 2-х процессорый Pentium-3 400 MHz.
Спасибо за Ваше внимание!
Очень понравилась идея с маркировкой - буду пробовать.
Но все же - относительно того, что написал я. А если обрубать еще и форвардинг из внехи, такой вариант имеет право на жизнь? Или без маркировки пакетов точно не обойтись?

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
Томские сетки и NAT
« Reply #3 on: November 12, 2008, 02:11:31 »
Quote from: Bill Tomson
Спасибо за Ваше внимание!
Очень понравилась идея с маркировкой - буду пробовать.
Но все же - относительно того, что написал я. А если обрубать еще и форвардинг из внехи, такой вариант имеет право на жизнь? Или без маркировки пакетов точно не обойтись?
Без маркировки можно легко обойтись.
Используя что-то типа
Code: [Select]
iptables -P FORWARD DROP
if [ -f /etc/tsknet ]; then
  for i in `cat /etc/tsknet`; do
    iptables -A FORWARD -d $i -j ACCEPT
done
Я использовал маркировку, потому что было несколько правил которым нужно было по некоторым признакам (например, Томск/не-Томск) принимать решение пропускать пакеты или нет, чтобы не усложнять и не отягощять конфигурацию брандмауэра, я использовал маркировку, ее так же можно использовать в iproute2 для принятия решения о маршрутизации.
Еще раз повторю, что отсутствие правила SNAT не означает, что пакеты будут "обрубаться", установка соединения конечно будет не возможна, но потенциальная возможность засрать по ноздри исходящий канал у пользователя будет.

P.S. Кстати у меня там опечатка в [ -f /usr/local/etc/tsknet ], проверяется один файл, а используется другой... копировал, решил исправить и в условии забыл...

Offline Bill Tomson

  • Jr. Member
  • **
  • Posts: 75
  • Karma: +0/-0
Томские сетки и NAT
« Reply #4 on: November 12, 2008, 16:49:32 »
Ок! Спасибо еще раз. Теперь в голове появилось еще больше идей
Решил с учетом корректировок все сделать так (все работает отлично):

Т.е. в локальной сетке есть ip с только внутренним траф. и отдельно с внешним.

firewall.sh:
Code: [Select]
...
iptables -A FORWARD -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -N gt
... (тут порты форварда всякие нужные и проч.) ...
iptables -A FORWARD -m iprange --src-range 192.168.0.9-192.168.0.15 -j gt
iptables -A FORWARD -m iprange --src-range 192.168.0.20-192.168.0.21 -j gt

for name in $(awk '{print $1}' < "$TOMSK")
do
    iptables -A FORWARD -d $name -m iprange --src-range $TOM_IP_RANGE -j gt
    let "n+=1"
done

#NAT:
iptables -t nat -A POSTROUTING -s $LAN_IP_RANGE -j SNAT --to-source $EXT_IP

iptables -P FORWARD DROP
...

Вот только непонятно, если нужно перескочить некоторые адреса, например нужны 192.168.0.9-192.168.0.15 и 192.168.0.20-192.168.0.21 как лучше написать iprange, чтобы было более гибко? А вообще все пока работает.