elin Posted February 21, 2005 Posted February 21, 2005 Стоит СТГ. Стоит себе, никого не трогает. И все бы ничего, но в последнее время левый (читай: ворованый) траффик вырос до небес. После некоторого расследования выяснил, что в момент, когда начинается закачка, можно смело выключать(выгружать) 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. Как собственно закрыть саму дыру? Где именно ошибка? Почему так написаны сами скрипты, не знаю. И не спрашивайте. Не я писал. Сам только расчехляю. Еще раз повторюсь, что все работает правильно, за исключением этой ситуации. Факт на лицо. Т.е. речь идет именно о заделывании дыры, а не о переделывании. Кто знает, как это все можно исправить, прошу помочь. Заранее спасибо. Вставить ник Quote
Guest Posted March 23, 2005 Posted March 23, 2005 1. По вопросу "упростить": ===============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 -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"); ибо правила просто бесполезно повторялись. 2. Чтоб закачивание обрывалось при отключении ИнетАксес, нужно в файле "дефолтных" настроек iptables /etc/sysconfig/iptables указать, например в цепочке FORWARD, чтоб все пакеты в инет дропились, а в OnConnect обратно разрешать для $ip и, соответственно, в OnDisconnect добавить обратное действие Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.