benya 0 Posted 2005-02-21 14:39:43 Share Posted 2005-02-21 14:39:43 Стоит СТГ. Стоит себе, никого не трогает. И все бы ничего, но в последнее время левый траффик вырос до небес. После некоторого расследования выяснил, что в момент, когда начинается закачка, можно смело выключать(выгружать) 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
REND 0 Posted 2005-02-21 16:50:21 Share Posted 2005-02-21 16:50:21 http://local.com.ua/forum/index.php?showtopic=928 http://www.stargazer.dp.ua/doc/conf_example_linux.htm Link to post Share on other sites
benya 0 Posted 2005-02-25 15:34:03 Author Share Posted 2005-02-25 15:34:03 Хорошо. Спрошу по-другому. Вот схема моего подключения: Есть только одна сетевая. она смотрит в локалку. В этой же локалке есть сервер провайдера. Наша сетевая имеет два интерфейса и соответственно два 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
Slava 1 Posted 2005-02-25 16:42:11 Share Posted 2005-02-25 16:42:11 Стоит СТГ. Стоит себе, никого не трогает. И все бы ничего, но в последнее время левый траффик вырос до небес. После некоторого расследования выяснил, что в момент, когда начинается закачка, можно смело выключать(выгружать) 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
benya 0 Posted 2005-02-25 18:54:04 Author Share Posted 2005-02-25 18:54:04 Спасибо за помощь. 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
Slava 1 Posted 2005-02-26 06:45:57 Share Posted 2005-02-26 06:45:57 Спасибо за помощь. 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
benya 0 Posted 2005-03-01 14:30:34 Author Share Posted 2005-03-01 14:30:34 Кстати, спутник подключен через vpn (поднимается ppp0), это как-то поможет пролить свет на проблему? Link to post Share on other sites
alexuk 0 Posted 2006-06-20 19:57:41 Share Posted 2006-06-20 19:57:41 У меня такая же проблема пользовать после того как вигрузить авторизатор остается в онлай продолжительное время но потом его всетаки вырубет. Пинга в конфигураторе нету. Все проблема снята. Все нормально считается даже при снятии авторизатора. Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now