Ну достали меня соседи и все тут….
В общаге в блоке один компьютер на 5 человек и тот мой Вот и приходится отбиваться каждый день от желающих посидеть…..
Вконтакте!(((
Но, благодаря некоторым фишкам linux эта проблема меня вряд-ли будет волновать теперь ]:->
И так, немного поковырявшись в просторах интернета, полистав умных книжек и посоветовавшись с парой несомненно продвинутых в этом деле товарищей, принялся ваять….
И вот, собственно, что у меня получилось!
Небольшой такой bash скриптик….
-
- #!/bin/sh
- echo "Проверка.."
- ping -c3 vkontakte.ru
- echo
- echo "Запретить/разрешить вконтакт"
- echo "Используйте 1 -разблокировать, 0 – блокировать"
- read wtd
- case "$wtd" in
- 1)
- act="-D"
- mesage="Разблокировано!"
- ;;
- 0)
- act="-A"
- mesage="Заблокировано!"
- ;;
- *)
- echo "Usage: {start|stop}"
- sleep 5
- exit 1
- esac
- ip=235
- while [ $ip -le 242 ] ; do
- sudo iptables $act INPUT -s 195.190.105.$ip -j DROP
- echo "iptables $act INPUT -s 195.190.105.$ip -j DROP / $mesage"
- ip=$(($ip+1))
- done;
- echo "Ready!"
- sleep 5
Теперь о том, что все это значит…..
Для начала, немного о функциях iptables, которые здесь используются…
Эта утилита вызывается так
- sudo iptables -A INPUT -s 195.190.105.235 -j DROP
Либо так
- sudo iptables -D INPUT -s 195.190.105.235 -j DROP
Здесь, программа запускается от имени администратора (sudo) В первом случае мы добавляем (-A) правило запретить (-j DROP) прием любых пакетов, передаваемых с 195.190.105.235 (-s 195.190.105.235). Во втором случае мы удаляем это правило (-D)
Чтобы определить IP адреса, которые принадлежат ненавистному Вконтакту, нужно просто выполнить простую команду
- nslookup vkontakte.ru
Которая выдаст нам примерно следующую информацию
_____________________________________
seriy@seriy-desktop:~$ nslookup vkontakte.ru
Server: 172.##.##.##
Address: 172.##.##.####
Non-authoritative answer:
Name: vkontakte.ru
Address: 195.190.105.239
Name: vkontakte.ru
Address: 195.190.105.240
Name: vkontakte.ru
Address: 195.190.105.241
Name: vkontakte.ru
Address: 195.190.105.242
Name: vkontakte.ru
Address: 195.190.105.235
Name: vkontakte.ru
Address: 195.190.105.236
Name: vkontakte.ru
Address: 195.190.105.237
Name: vkontakte.ru
Address: 195.190.105.238
--------------------------------------------
Как видим, эти адреса получены из DNS сервера моего провайдера (Адреса этих DNS
Server: 172.##.##.##
Address: 172.##.##.####
не стал показывать, зачем они вам
Собственно, есть команда, с помощью которой можно заблокировать доступ определенному IP и есть диапазон IP
По большому счету, этого бы нам уже хватило, но хочется чтобы все делалось автоматически да еще и красиво-аккуратно….
Так-что попробуем поизвращаться!
Запускаем мы наш скрипт, он пингует Вконтакт 3 раза (ping -c3) (думаю вполне достаточно) и выводит информацию о доступности сервера (на случай, если он был заблокирован ранее а вы об этом того… забыли в общем), затем просит ввести команду : заблокировать (0) или разблокировать (1) сайт. Если введен "0", то в качестве аргумента $act будет подставлен -A , если "1", то подставится -D а если напечатать какую-нить хрень, то вылезет предупреждающее сообщение и скрипт закроется.
А цикл While позволяет прогнать команду iptables (и заодно контрольного вывода echo) с заданными параметрами по всему требуемому диапазону айпи
Кстати, для проверки "успешности" наших действий можно запустить команду
- sudo iptables -L INPUT
Которая выдает (довольно медленно) список правил, которые мы добавили в цепочку INPUT. Если после блокирования сайта выдала что-то вроде этого:
____________________________________
~$ sudo iptables -L INPUT
[sudo] password for seriy:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP 0 -- 195.190.105.235 anywhere
DROP 0 -- 195.190.105.236 anywhere
DROP 0 -- 195.190.105.237 anywhere
DROP 0 -- 195.190.105.238 anywhere
DROP 0 -- 195.190.105.239 anywhere
DROP 0 -- 195.190.105.240 anywhere
DROP 0 -- 195.190.105.241 anywhere
DROP 0 -- 195.190.105.242 anywhere
----------------------------------------------------------------
Значит все прошло успешно.
Ну, собственно все! Соседи – берегитесь)))
P.S.: В принципе, все строчки, начинающиеся со слова ping, echo и sleep можно удалить без ущерба работоспособности скрипта, т.к. они добавлены только для удобства работы с ним.
P.P.S.: Вот так выглядит вывод командной строки после запуска скрипта на блокирование сайта:
-------------------------------------
Проверка….
PING vkontakte.ru (195.190.105.235) 56(84) bytes of data.
64 bytes from 195.190.105.235: icmp_seq=1 ttl=55 time=27.1 ms
64 bytes from 195.190.105.235: icmp_seq=2 ttl=55 time=18.5 ms
64 bytes from 195.190.105.235: icmp_seq=3 ttl=55 time=22.9 ms
--- vkontakte.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10049ms
rtt min/avg/max/mdev = 18.533/22.855/27.113/3.507 ms
Запретить/разрешить вконтакт
Используйте 1 -разблокировать, 0 – блокировать
0
iptables -A INPUT -s 195.190.105.235 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.236 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.237 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.238 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.239 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.240 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.241 -j DROP / Заблокировано!
iptables -A INPUT -s 195.190.105.242 -j DROP / Заблокировано!
Ready!
в топу контакт , аха +1000
> sudo iptables -L INPUT
> Которая выдает (довольно медленно) список правил
Это он пытается чего то там ресолвить. Если всякие человекочитабельности не критичны, то можно использовать опцию -n. Тогда выдаётся весьма быстро.
sudo iptables -L -n INPUT