Видео смотреть бесплатно

Смотреть уз видео

Официальный сайт aquaexpert 24/7/365

Смотреть видео бесплатно

18.03.10 13:21 cppmm

Скрипты — Дискриминация по национальному признаку или баним страны.

Так получилось, что понадобилось прикрыть доступ к серверу из некоторых стран. Понимаю, что кровавая гебня и всё такое, но задача есть, надо сделать.
Вот здесь находим архивчик с базой IP-адресов и их национальной принадлежностью. Далее за нас работает небольшой скрипт. Для работы скрипта понадобится дополнительно установить замечательную утилиту ipcalc.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
#
TMPDIR=/tmp/geoiptban
IP_BBASE=$TMPDIR/bbase.csv
IP_EBASE=$TMPDIR/ebase.csv
DB_ZIP=$TMPDIR/db.zip
PERL=/usr/bin/perl
FILE_BCOUNTRY=$1
COUNTRY_DB_URL=http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
mkdir -p $TMPDIR
# Стягиваем и распаковываем базу айпишников.
wget -q -O $DB_ZIP $COUNTRY_DB_URL
unzip -p $DB_ZIP > $IP_BBASE
# Убираем лишние символы из базы, для простоты обработки.
if [ -e "$IP_BBASE" ]
then
        cp $IP_BBASE $IP_EBASE
        $PERL -pi -e 's/"//g' $IP_EBASE
else
        echo "Source ip-base-file not found."
        exit 0;
fi
# Обработка базы. Форматируем базу сперва в вид диапазонов ip-адресов, а потом в список подсетей.
# Получившиеся подсети скармливаем iptables'у.
if [ -e "$FILE_BCOUNTRY" ]
then
        for country in $(cat ${FILE_BCOUNTRY})
        do
                grep $country $IP_EBASE | awk -F "," '{print $1," - ",$2}' > $TMPDIR/$country.il
                for ((i=1;i<=$(wc -l ${TMPDIR}/${country}.il | awk '{print $1}');i++))
                do
                        ipcalc $(head -n ${i} ${TMPDIR}/${country}.il | tail -n 1) | grep -v deaggregate >> $TMPDIR/$country.nl
                done
        done
        for country_network_list in $(ls ${TMPDIR} | grep nl)
        do
                for ((i=1;i<=$(wc -l ${TMPDIR}/$country_network_list | awk '{print $1}');i++))
                do
                        iptables -t filter -A INPUT -s $(head -n ${i} ${TMPDIR}/$country_network_list | tail -n 1) -j DROP
                done
        done
else
        echo "List of blocked countries not found."
        exit 0;
fi
rm -rf $TMPDIR

Для определения списка стран, которые надо забанить используется файл, в котором просто перечисляются их коды:

[root@gateway ~]# cat country_list
RU US GB


Запускается скрипт очень просто:


[root@gateway ~]# ./geoiptban.sh country_list

P.S. Если кто подскажет способ выбирать из файла определённую строку по номеру без использования конвееров(в моём случае head, tail) буду признателен, а то часто приходится такое делать.



warchief 18.03.10 15:09 # +0
спасибо, как раз хотел создать топик-вопрос.
warchief 18.03.10 15:18 # +0
подскажите, как нужно изменить строку iptables.... , чтобы забанить соедниения из стран только на определённом порту?
cppmm 18.03.10 15:33 # +1
iptables -t filter -A INPUT -s $(head -n ${i} ${TMPDIR}/$country_network_list | tail -n 1) -p ${PROTO} --dport ${PORT} -j DROP

И добавить две переменные PROTO и PORT.
Тогда, если выставить, напрмиер PROTO=tcp, а PORT=80, будет закрыт доступ к http-серверу(80-ый порт по протоколу tcp).
redway 18.03.10 22:56 # +0
А еще можно при помощи модуля geoip (входит в xtables-addons):

iptables -t mangle -I PREROUTING -m geoip --dst-cc UA -j DROP
cppmm 19.03.10 08:57 # +0
Сначал я хотел сделать именно так, но скрипт мне показалось, написать проще, чем компилировать пакет с iptables и его модулями.
redway 19.03.10 14:24 # +1
с установкой конечно придется немного повозиться, но там, помимо geoip, еще много вкусностей:

Цепочки:

DELUDE - при обращении к порту, на котором стоит правило DELUDE, iptables отправляет сообщение SYN-ACK на SYN, но в остальных случаях отправляется RST сообщение. Тем самым вводит в заблуждение сканер атакующей машины, показывая что целевой порт открыт, в то время как на самом деле порт закрыт.

TARPIT - коннект в пустоту. При обращении к порту, на котором стоит правило TARPIT, iptables подтверждает запрос на TCP-соединение отправляя атакующему сообщение SYN-ACK, а так же принудительное установление размера TCP-окна, равным нулю. Это приводит к тому, что атакующая сторона не может передать никаких данных, а все ее попытки разорвать соединение игнорируются. До истечения тайм-аута (12-24 минут)соединение находится в "подвисшем" состоянии.

TEE - при обращении к порту, на котором стоит правило TEE, iptables отправляет копию этого пакета на другую машину сегмента локальной сети. Как бы зеркалирует этот пакет и направляет его по другому маршруту.

Модули:

geoip - используя этот модуль можно строить более гибкие правила iptables основываясь на геоположении IP-адреса в сети Интернет.

ipp2p - используя этот модуль можно осуществить фильтрацию трафика популярных P2P сетей:eDonkey, eMule, Direct Connect, KaZaA, Gnutella, BitTorrent, AppleJuice, WinMX, SoulSeek, Ares.

и еще что-то.
warchief 19.03.10 23:24 # +0
хм поставил последнюю версию xtables-addons, потом делаю:
iptables -t mangle -I PREROUTING -m geoip --dst-cc UA -j DROP

>>iptables v1.4.4: Couldn't load match `geoip':/lib/xtables/libipt_geoip.so: cannot open shared object file: No such file or directory

Подскажите, что не так?
warchief 19.03.10 23:43 # +0
ок, с этим разобрался, теперь другая ошибка: /var/geoip/LE/DE.iv0: No such file or directory
iptables v1.4.4: Could not read geoip database


Где брать эти базы данных?
redway 20.03.10 08:50 # +1
geoip_iv0_database-20090901.tar.bz2
razum2um 21.04.10 22:01 # +0
Если кто подскажет способ выбирать из файла определённую строку по номеру без использования конвееров(в моём случае head, tail) буду признателен, а то часто приходится такое делать

sed -n 4p

выбирает четвертую

с диапазоном хуже:
sed -n 4~1p

выбирает c четвертой и с шагом 1 (т.е. каждую) до конца.
Потом head`ить, если нужно не все, т.е. все-таки конвейер :(

Лучшие блоги (все 141)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2839 из 215 городов)
Топ пользователей Топ блогов
welinux.ru

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн