Jump to content

Воровство траффика из-за неправильной настройки


Recommended Posts

Стоит СТГ. Стоит себе, никого не трогает. И все бы ничего, но в последнее время левый траффик вырос до небес. После некоторого расследования выяснил, что в момент, когда начинается закачка, можно смело выключать(выгружать) InetAccess. При этом закачка не прекращается, а траффик не считается. И выяснил также, что есть ошибка в правилах FW.

 

SOS, Help, что угодно, только раскажите мне, где эта ошибка?

 

Тексты скриптов прилагаются.

 

=============OnConnect========================

#!/usr/bin/perl

$ip=$ARGV[1];

$ip_prov=xxx.xxx.xxx.xxx

system("iptables -A FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -A FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -t nat -I PREROUTING 1 -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80

-j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -I POSTROUTING 1 -s $ip -d ! 10.0.0.0/24 -j SNAT

--to-source $ip_prov");

 

 

 

===============OnDisconnect================

#!/usr/bin/perl

$ip=$ARGV[1];

$ip_prov=xxx.xxx.xxx.xxx;

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

 

 

Все сводится к двум вопросам:

1. Как эту всю писанину упростить? Я видел на сайте СТГ в доках, что там циклы используются. Но здесь скрипт написан на Perl, а как это все сделать на этом языке, я не знаю.

2. Как собственно закрыть саму дыру? Где именно ошибка?

 

Почему так написаны сами скрипты, не знаю. И не спрашивайте. Не я писал. Сам только расчехляю. Еще раз повторюсь, что все работает правильно, за исключением этой ситуации. Факт на лицо. Т.е. речь идет именно о заделывании дыры, а не о переделывании. Кто знает, как это все можно исправить, прошу помочь. Заранее спасибо.

Link to post
Share on other sites

Хорошо. Спрошу по-другому.

 

Вот схема моего подключения:

 

Есть только одна сетевая. она смотрит в локалку. В этой же локалке есть сервер провайдера. Наша сетевая имеет два интерфейса и соответственно два IP адреса: eth0 и eth0:1 (10.0.0.1 и xxx.xxx.xxx.xxx). Итак, eth0 - внутренний интерфейс, а eth0:1 - виртуальный ин-с, который смотрит на прова. В наш же сервак воткнута dvb-карта. Запрос отправляется через интерфейс eth0:1 (наземный канал), а ответ приходит через dvb-карту (спутниковый канал).

 

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

Link to post
Share on other sites
Стоит СТГ. Стоит себе, никого не трогает. И все бы ничего, но в последнее время левый траффик вырос до небес. После некоторого расследования выяснил, что в момент, когда начинается закачка, можно смело выключать(выгружать) InetAccess. При этом закачка не прекращается, а траффик не считается. И выяснил также, что есть ошибка в правилах FW.

 

SOS, Help, что угодно, только раскажите мне, где эта ошибка?

 

Тексты скриптов прилагаются.

 

=============OnConnect========================

#!/usr/bin/perl

$ip=$ARGV[1];

$ip_prov=xxx.xxx.xxx.xxx

system("iptables -A FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -A FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -t nat -I PREROUTING 1 -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80

-j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -I POSTROUTING 1 -s $ip -d ! 10.0.0.0/24 -j SNAT

--to-source $ip_prov");

 

 

 

===============OnDisconnect================

#!/usr/bin/perl

$ip=$ARGV[1];

$ip_prov=xxx.xxx.xxx.xxx;

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -t nat -D PREROUTING -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80 -j DNAT --to 10.0.0.1:3128");

system("iptables -t nat -D POSTROUTING -s $ip -d ! 10.0.0.0/24 -j SNAT --to-source $ip_prov");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -s $ip -d ! 10.0.0.0/24 -j ACCEPT");

system("iptables -D FORWARD -d $ip -s ! 10.0.0.0/24 -j ACCEPT");

 

 

Все сводится к двум вопросам:

1. Как эту всю писанину упростить? Я видел на сайте СТГ в доках, что там циклы используются. Но здесь скрипт написан на Perl, а как это все сделать на этом языке, я не знаю.

2. Как собственно закрыть саму дыру? Где именно ошибка?

 

Почему так написаны сами скрипты, не знаю. И не спрашивайте. Не я писал. Сам только расчехляю. Еще раз повторюсь, что все работает правильно, за исключением этой ситуации. Факт на лицо. Т.е. речь идет именно о заделывании дыры, а не о переделывании. Кто знает, как это все можно исправить, прошу помочь. Заранее спасибо.

Я конечно не пойму зачем так много раз повторяется одно и тоже в правилайх ОнДисконект (это чтоб наверняка удалило).

попробуй сделать так

во первых

сделай файлик обзови его как нибоудь например firewall сделай на него права 755 и пропиши туда такое

 

iptables -F

iptables -t nat -F

iptables -t mangle -F

 

iptables -P FORWARD DROP

iptables -t mangle -A PREROUTING -d 10.0.0.1 -p tcp --dport 3128 -j DROP

/sbin/iptables -F; iptables -t nat -F; iptables -t mangle -F

/sbin/iptables -t filter -P FORWARD DROP

 

добавь его в автозагрузку и в он коннект вместо

system("iptables -t nat -I PREROUTING 1 -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80

-j DNAT --to 10.0.0.1:3128");

напиши

system("iptables -t nat -I OUTPUT 1 -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80

-j DNAT --to 10.0.0.1:3128");

 

А В ОН ДИСКОННЕКТ

system("iptables -t nat -I OUTPUT 1 -s $ip -d ! 10.0.0.0/24 -p tcp --dport 80

 

-j DNAT --to 10.0.0.1:3128");

и все должно быть ок

Link to post
Share on other sites

Спасибо за помощь.

 

1. В файрволе все было за исключением этих строк:

/sbin/iptables -F; iptables -t nat -F; iptables -t mangle -F

/sbin/iptables -t filter -P FORWARD DROP

добавил.

2. Добавил также указанные строки в скрипты. Все заработало, но...

 

Возникли вопросы.

1. После выполнения укзанных инструкций такое ощущение, что полностью пересел на землю (наземка у меня 32К, а спутник 256К - разница видна невооруженным взглядом), хотя траф считается спутниковый.

2. Методом исключений вычислил, что такой эффект дают все-таки скрипты. Когда меняю их назад, как было, все становится как раньше (включая и дыру для воровства).

3. В чем все-таки разница между iptables и /sbin/iptables?

4. Как скрипт OnDisconnect собрать в циклы (как на bash сделать, знаю, а как на perl?)?

Link to post
Share on other sites
Спасибо за помощь.

 

1. В файрволе все было за исключением этих строк:

/sbin/iptables -F; iptables -t nat -F; iptables -t mangle -F

/sbin/iptables -t filter -P FORWARD DROP

добавил.

2. Добавил также указанные строки в скрипты. Все заработало, но...

 

Возникли вопросы.

1. После выполнения укзанных инструкций такое ощущение, что полностью пересел на землю (наземка у меня 32К, а спутник 256К - разница видна невооруженным взглядом), хотя траф считается спутниковый.

2. Методом исключений вычислил, что такой эффект дают все-таки скрипты. Когда меняю их назад, как было, все становится как раньше (включая и дыру для воровства).

3. В чем все-таки разница между iptables и /sbin/iptables?

4. Как скрипт OnDisconnect собрать в циклы (как на bash сделать, знаю, а как на perl?)?

Открой на любой машине две SSH или telnet консоли

Для того чтобы определить на каком интерфейсе запусти команду tcpdump -i интерфейс спутника и tcpdump -i интерфейс модема посмотри идут ли пакеты по спутнику. Например tcpdump -i ppp0

и параллельно наблюда куда шлются пакеты на запрос и куда в ответ идут пакеты. регулировать это можно с помощью сквида (хотя нужно еще знать какие порты у тебя открыты в фаерволе) в данных конфигах весь http трафик направляется на сквид а все остально напряму натом.

Link to post
Share on other sites
  • 1 year later...

У меня такая же проблема пользовать после того как вигрузить авторизатор остается в онлай продолжительное время но потом его всетаки вырубет.

Пинга в конфигураторе нету.

 

Все проблема снята. Все нормально считается даже при снятии авторизатора.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...