Linux, программирование, Я!

Немного об iptables

Ну достали меня соседи и все тут….
В общаге в блоке один компьютер на 5 человек и тот мой Вот и приходится отбиваться каждый день от желающих посидеть…..
Вконтакте!(((

Но, благодаря некоторым фишкам linux эта проблема меня вряд-ли будет волновать теперь ]:->

И так, немного поковырявшись в просторах интернета, полистав умных книжек и посоветовавшись с парой несомненно продвинутых в этом деле товарищей, принялся ваять….

И вот, собственно, что у меня получилось!
Небольшой такой bash скриптик….

bash
  1.  
  2. #!/bin/sh
  3. echo "Проверка.."
  4. ping -c3 vkontakte.ru
  5. echo
  6. echo "Запретить/разрешить вконтакт"
  7. echo "Используйте 1 -разблокировать, 0 – блокировать"
  8. read wtd
  9. case "$wtd" in
  10. 1)
  11. act="-D"
  12. mesage="Разблокировано!"
  13. ;;
  14. 0)
  15. act="-A"
  16. mesage="Заблокировано!"
  17. ;;
  18. *)
  19. echo "Usage: {start|stop}"
  20. sleep 5
  21. exit 1
  22. esac
  23. ip=235
  24. while [ $ip -le 242 ] ; do
  25. sudo iptables $act INPUT -s 195.190.105.$ip -j DROP
  26. echo "iptables $act INPUT -s 195.190.105.$ip -j DROP  / $mesage"
  27. ip=$(($ip+1))
  28. done;
  29. echo "Ready!"
  30. sleep 5

Теперь о том, что все это значит…..

Для начала, немного о функциях iptables, которые здесь используются…
Эта утилита вызывается так

bash
  1. sudo iptables -A INPUT -s 195.190.105.235  -j DROP

Либо так
bash
  1. 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 адреса, которые принадлежат ненавистному Вконтакту, нужно просто выполнить простую команду
bash
  1. 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) с заданными параметрами по всему требуемому диапазону айпи

Кстати, для проверки "успешности" наших действий можно запустить команду

bash
  1. 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!

2 комментариев to Немного об iptables

  1. 9i's Gravatar 9i
    05.04.2009 at 21:36 | #

    в топу контакт , аха +1000

  2. 29.05.2009 at 16:45 | #

    > sudo iptables -L INPUT
    > Которая выдает (довольно медленно) список правил
    Это он пытается чего то там ресолвить. Если всякие человекочитабельности не критичны, то можно использовать опцию -n. Тогда выдаётся весьма быстро.
    sudo iptables -L -n INPUT

Оставить комментарий

Вы можете использовать следующие HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>