LINUX.ORG.RU

Проблема с ipset

 , , ,


0

1

Привет по данному мануалу поставил на debian module-assistant xtables-addons-source ipset

Далее создал правила:
ipset -N dropip iphash (сейчас тут пусто)
ipset -N dropnet nethash (сейчас тут пусто)
ipset -N chinasubnet nethash
ipset -N indiasubnet nethash


После выполнил:
iptables -A INPUT -m set --match-set dropip src -j DROP
iptables -A INPUT -m set --match-set dropnet dst -j DROP
iptables -A INPUT -m set --match-set chinasubnet dst -j DROP
iptables -A INPUT -m set --match-set indiasubnet dst -j DROP

Затем скачал список всех ip индии и китая в формате CIDR и выполнил:
for i in $( cat /home/china.txt ) ; do ipset -A chinasubnet $i ; done
for i in $( cat /home/india.txt ) ; do ipset -A indiasubnet $i ; done

Сохранил правила:
ipset -S > /etc/ipset/ipset-save

и записал в /etc/rc.local
cat /etc/ipset/ipset-save | /usr/sbin/ipset -R

Перезагрузил впс подстраховавшись:
crontab -e
*/5 * * * * ipset -F
sudo shutdown -r now

Таким образом хотел отсечь нежелательный траффик. После ребута убрал ipset -F и проверил список правил ipset -L правила загружались.

Спустя какое то время обнаружил что боты все равно лезут, это было видно по статистике одного скрипта. После этого сделал проверку, ip бота перевел в CIDR и проверил: ipset -L | grep «xxx.xxx.xxx.xxx/xx» - и несколько раз убеждался что такая запись уже присутствует, то есть не работают правила почему то.

На сервере стоит nginx + apache2, ставил их не я а сапорт хостинга. Подскажите пожалуйста:

1) Как починить? Хотел бы блочить траффик из данных стран на веб сервер.

2) Как фильтровать не только запросы на 80,443 а полностью отрубить эти страны на всех портах?(чтобы даже пингануть не могли)

А тебе мысль не приходила, что не ты мишень, а весь твой предоставитель услуг? И не надо рубать страны (ты случаем не в госструктурах работаешь?), есть более изящьные решения, НЯ!

mbwa ()
Ответ на: комментарий от mbwa

Брутят фтп, лезут на халявный чекер проксей, проверяют движки ну и все в таком роде. Трафф оттуда не нужен да и логи почище будут. + в любом случае нужно чтобы пару подсетей забанить несмотря на страны.

censured ()

Покажи iptables-save.

Судя по ipset -L | grep «xxx.xxx.xxx.xxx/xx» нужная запись в ipset-е есть, значит следующий кандидат это настройки netfilter (iptables). В посте вообще не сказано что его настойки где-то сохранены, так-что я вправе предположить что это таки не сделано.

И что ещё за */5 * * * * ipset -F? В мане ipset вроде флага -F не заметил.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

в iptables писал только это

iptables -A INPUT -m set --match-set dropip src -j DROP
iptables -A INPUT -m set --match-set dropnet dst -j DROP
iptables -A INPUT -m set --match-set chinasubnet dst -j DROP
iptables -A INPUT -m set --match-set indiasubnet dst -j DROP

censured ()
Ответ на: комментарий от censured

Ты уверен что эти правила пережили перезагрузку сервера? Правильны ответ в данном случае не «да» или «нет» а выхлоп команды iptables-save

MrClon ★★★★★ ()
Последнее исправление: MrClon (всего исправлений: 1)
Ответ на: комментарий от MrClon

Не уверен, вот выхлоп:

# Generated by iptables-save v1.4.14 on Fri Jan 24 02:55:04 2014
*filter
:INPUT ACCEPT [1965327:251923702]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1100185:165335883]
:ISPMGR - [0:0]
-A INPUT -j ISPMGR
-A OUTPUT -j ISPMGR
COMMIT
# Completed on Fri Jan 24 02:55:04 2014
censured ()
Ответ на: комментарий от censured

Нужных правил нет. Видимо они не пережили перезагрузку.
Что-бы правила пережили перезагрузку их нужно заново добавлять при каждой загрузке системы (так-же как ipset-ы). У тебя это либо не сделано, либо сделано как-то неправильно и потому не работает.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

ipset-save выживает после перезагрузки. Пишу ipset -L выводятся все эти правила

censured ()
Ответ на: комментарий от censured

iptables-save просто печатает те правила которые есть в ядре сейчас. При-чём в таком формате из которого их можно легко восстановить после перезагрузки (кажется утилитой iptables-restore).

Правила фаервола это по сути некоторый набор данных с которыми работает ядро, так-же как любые другие данные любой другой программы по умолчанию при перезапуске программы они не сохраняются.

MrClon ★★★★★ ()
Ответ на: комментарий от censured

Потому-что:
[code]
Сохранил правила:
ipset -S > /etc/ipset/ipset-save

и записал в /etc/rc.local
cat /etc/ipset/ipset-save | /usr/sbin/ipset -R
[/code]

Первая команда сохраняет существующие в ядре ipset-ы в файл, вторая при загрузке компьютера (скрипт /etc/rc.local выполняется при старте системы) восстанавливает ipset-ы из файла

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Спасибо кажется нашел

iptables-save -c > /etc/iptables-save

а в /etc/rc.local внести
cat /etc/iptables-save | iptables-restore -c
censured ()
Ответ на: комментарий от censured

Кажется можно без -c
И лучше /sbin/iptables-restore вместо iptables-restore
На момент выполнения /etc/rc.local переменная $PATH может быть ещё не определена.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

может на всякий случай еще задержку поставить в rc.local?

sleep 100 && /sbin/iptables-restore -c /etc/iptables-save

censured ()
Ответ на: комментарий от censured

Зачем? Загрузка в большенстве дистров происходит вроде синхронно, так-что скорее всего по завершению sleep-а система будет в том-же состоянии что и при входе в него.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Сразу после перезагрузки после набора ipset -L правила отобразились не сразу а где то на 3 раз, где то через 5 секунд после первого ввода.

Тупанул, хотел зачем то сначала в rc.local загрузить ipset а затем iptables-restore.
Щяс сделаю наоборот iptables-restore первым правилом
а cat /etc/ipset/ipset-save | /usr/sbin/ipset -R вторым

Большое спасибо за помощь, а то гуглил пару дней никак не мог понять в чем дело. Получается чтобы для данных цепочек блочился весь траффик(не только 80,443 порты), надо будет доработать правила iptables?

censured ()
Ответ на: комментарий от censured

Сразу после перезагрузки после набора ipset -L правила отобразились не сразу а где то на 3 раз, где то через 5 секунд после первого ввода.

Странно. Насколько мне известно так быть не должно. Либо у ipset есть какие-то особо извращённые тонкости (например сначала принимает IPы, даёт отлуп утилите ipset (мол правила принял) а потом долго что-то с ними делает перед тем как реально добавить их в наборы), либо что-то не так.
С ipset-ами я не работал (и не интересовался особо) так-что утверждать ничего не стану.

Тупанул, хотел зачем то сначала в rc.local загрузить ipset а затем iptables-restore.

Ну думаю что есть какая-то разница. По логике правила фаервола и ipset-ы должна работать независимо.

Получается чтобы для данных цепочек блочился весь траффик(не только 80,443 порты), надо будет доработать правила iptables?

В приведённых выше правилах нет никакой селективности по портам или даже протоколам четвёртого уровня (tcp/udp/icmp), так-что под правило должен подпадать весь трафик с подходящими IP.

Кстати три последних правила фильтруют трафик по IP адресу назначения (dst). Не думаю что в случае с не-роутером в этом есть хоть какой-то смысла. Тем более в таблице INPUT.
Хотя у меня уже голова не варит, может я не врубаюсь просто.
В общем спокойной эмм… утра. Я пошёл спать.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Делал по образу и подобию мануала в самом начале поста. Там на set'ы dropnet стоит dst но я по правде говоря не знаю разницу между src и dst. В любом случае спасибо тебе большое за помощь, спокойной.

Надеюсь что добрые палладины лора помогут добить тему, как сделать наиболее правильно.

Ставить src или dst в iptables на set'ы из подсетей чтобы отсекать не нужный траффик?

censured ()

Команда iptables настраивает текущие параметры. Чтобы они сохранились, надо записать их в какой-то файл настроек. В Debian для этого есть пакет iptables-persistent. Или руками загрузку правил в interfaces добавить.

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

selivan ★★★ ()
Ответ на: комментарий от censured

src это сокращённо от source (источник), dst — destination (назначение).
Таким образом три последних правила по идее выбирают пакеты которые направляются на IP из соответствующих списков. На сколько я понимаю на не-роутере таким пакетам в цепочке INPUT взяться просто неоткуда.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Спасиб, вчера пришлось в ночь пахать. Будет ли смысл делать оба правила и src и dsc?

censured ()
Ответ на: комментарий от censured

Раньше часть типов ipset ( а сейчас может быть и все ) поддерживали параметр «timeout», что делает лишним «ipset -F ...» по хрону.

iptables -A INPUT -m set --match-set dropnet dst -j DROP
iptables -A INPUT -m set --match-set chinasubnet dst -j DROP
iptables -A INPUT -m set --match-set indiasubnet dst -j DROP

dst здесь использовать нелогично. В INPUT - src, а в OUTPUT dst.

vel ★★★★★ ()
Ответ на: комментарий от MrClon

На сколько я понимаю на не-роутере таким пакетам в цепочке INPUT взяться просто неоткуда.

Даже на роутере получить в INPUT с нелокальными dst не просто. IMHO только с DNAT/REDIRECT/TPROXY.

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.