Немного об iptables

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

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

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

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

[codesyntax lang=”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[/codesyntax]

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

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

[codesyntax lang=”bash”]sudo iptables -A INPUT -s 195.190.105.235  -j DROP[/codesyntax]

Либо так

[codesyntax lang=”bash”]sudo iptables -D INPUT -s 195.190.105.235  -j DROP[/codesyntax]

Здесь, программа запускается от имени администратора (sudo) В первом случае мы добавляем (-A) правило запретить (-j DROP) прием любых пакетов, передаваемых с 195.190.105.235 (-s 195.190.105.235). Во втором случае мы удаляем это правило (-D)
Чтобы определить IP адреса, которые принадлежат ненавистному Вконтакту, нужно просто выполнить простую команду
[codesyntax lang=”bash”]nslookup vkontakte.ru[/codesyntax]

Которая выдаст нам примерно следующую информацию
_____________________________________
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) с заданными параметрами по всему требуемому диапазону айпи

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

[codesyntax lang=”bash”]sudo iptables -L INPUT[/codesyntax]

Которая выдает (довольно медленно) список правил, которые мы добавили в цепочку 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 thoughts on “Немного об iptables

  1. mar1ner

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

    Reply

Leave a Reply to mar1ner Cancel reply

Your email address will not be published. Required fields are marked *