Tomsk Sysadmins Forum
Unix => Администрирование => Topic started by: Bill Tomson on November 11, 2008, 17:34:00
-
Господа!
Хочу блочить внеху юзверям. Правильно ли я мыслю:
отрывок firewall.sh:
#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
Вроде работает. Ну а если с профессиональной точки зрения? Не сильно будет нагружать? Спасибо.
-
Господа!
Хочу блочить внеху юзверям. Правильно ли я мыслю:
отрывок firewall.sh:
#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 для исходящих пакетов во внеху, хорошо если их рубит маршрутизатор провайдера.
Я делал так
Маркировал исходящие пакеты в томские сети
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 и рубил, например, так, пропускал Томск и все что нужно, остальное по умолчанию рубил.
iptables -P FORWARD DROP
iptables -A FORWARD -m mark --mark 1/1 -j ACCEPT
Маркировку входящих и исходящих пакетов в томские сети для 3-х компов легко тянет ASUS wl500gp, на сеть ~100 компов с этим справлялся не напрягаясь 2-х процессорый Pentium-3 400 MHz.
-
Указанный код не "блочит" внеху, он лишь не делает NAT для исходящих пакетов во внеху, хорошо если их рубит маршрутизатор провайдера.
Я делал так
Маркировал исходящие пакеты в томские сети
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 и рубил, например, так, пропускал Томск и все что нужно, остальное по умолчанию рубил.
iptables -P FORWARD DROP
iptables -A FORWARD -m mark --mark 1/1 -j ACCEPT
Маркировку входящих и исходящих пакетов в томские сети для 3-х компов легко тянет ASUS wl500gp, на сеть ~100 компов с этим справлялся не напрягаясь 2-х процессорый Pentium-3 400 MHz.
Спасибо за Ваше внимание!
Очень понравилась идея с маркировкой - буду пробовать.
Но все же - относительно того, что написал я. А если обрубать еще и форвардинг из внехи, такой вариант имеет право на жизнь? Или без маркировки пакетов точно не обойтись?
-
Спасибо за Ваше внимание!
Очень понравилась идея с маркировкой - буду пробовать.
Но все же - относительно того, что написал я. А если обрубать еще и форвардинг из внехи, такой вариант имеет право на жизнь? Или без маркировки пакетов точно не обойтись?
Без маркировки можно легко обойтись.
Используя что-то типа
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 ], проверяется один файл, а используется другой... копировал, решил исправить и в условии забыл...
-
Ок! Спасибо еще раз. Теперь в голове появилось еще больше идей
Решил с учетом корректировок все сделать так (все работает отлично):
Т.е. в локальной сетке есть ip с только внутренним траф. и отдельно с внешним.
firewall.sh:
...
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, чтобы было более гибко? А вообще все пока работает.