LINUX.ORG.RU
решено ФорумAdmin

Ipset & iptables

 ,


0

1

Доброго времени.

Проблема такая: Есть список локальных IP и список сайтов. Необходимо сделать так, чтобы фаер блокировал доступ всем IP из списка к сайтам из списка. На серваке настроен нат. Сейчас у меня вот так:

...
ipset -X
ipset -N drop_ip iphash

for i in `cat drop_ip.list`; do
   ipset -A drop_ip $i
done

for i in `cat drop_site.list`; do
   iptables -A FORWARD -m set --set drop_ip src -d $i -j DROP
done
...
Все работает. Но получается по 1 записи на каждый сайт. Можно ли сделать через ipset таблицу для сайтов и как тогда будет выглядеть правило iptables?

p.s. эксперементировать по удаленке не хочется, а то ошибусь и вообще все закрою :)

★★

Последнее исправление: outsider (всего исправлений: 1)

На вскидку:

iptables -N X
ipset -N sites iphash
ipset -N ips iphash

iptables -A FORWARD -m set --set ips src -j X
iptables -A X -m set --set sites dst -j DROP
//Не тестил.

joy4eg ★★★★★
()
Ответ на: комментарий от outsider
[i14]/home/userx/ #ipset -L sites                                          
Name: sites
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536 
Size in memory: 8276
References: 1
Members:

[i14]/home/userx/ #ipset -A sites test.com
[i14]/home/userx/ #ipset -A sites vk.com
[i14]/home/userx/ #ipset -L sites                                      
Name: sites
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536 
Size in memory: 8308
References: 1
Members:
174.36.85.72
87.240.143.243
joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg

Другое дело, что ipset не заносит все полученые IP:

;; ANSWER SECTION:
vk.com.			200	IN	A	87.240.143.244
vk.com.			200	IN	A	87.240.143.245
vk.com.			200	IN	A	87.240.143.246
vk.com.			200	IN	A	87.240.143.247
vk.com.			200	IN	A	87.240.143.248
vk.com.			200	IN	A	93.186.224.244
vk.com.			200	IN	A	93.186.224.245
vk.com.			200	IN	A	93.186.224.246
vk.com.			200	IN	A	87.240.131.97
vk.com.			200	IN	A	87.240.131.98
vk.com.			200	IN	A	87.240.131.99
vk.com.			200	IN	A	87.240.131.100
vk.com.			200	IN	A	87.240.131.101
vk.com.			200	IN	A	87.240.131.102
vk.com.			200	IN	A	87.240.131.103
vk.com.			200	IN	A	87.240.131.104
vk.com.			200	IN	A	87.240.143.241
vk.com.			200	IN	A	87.240.143.242
vk.com.			200	IN	A	87.240.143.243

Это уж придется ручками :)

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

Сделал так

$IPSET -N IP iphash
$IPSET -N SITES iphash

for i in `cat /root/site_drop.list`; do
	for j in `nslookup $i | egrep -v 195.64.222.2\|195.64.192.35 | awk '/Addr/ {print $2}'`; do
		$IPSET -A SITES $j
	done
done 

for i in `cat /root/ip_drop.list`; do
	$IPSET -A IP $i
done 

$FW -N DROP_SITES
$FW -A FORWARD -m set --set IP src -j DROP_SITES
$FW -A DROP_SITES -m set --set SITES dst -j DROP
но работает или нет, скажу только завтра. Может еще есть какие идеи для оптимизации?

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

Оптимизация. Использовать вместо nslookup команду host или dig, тогда результат можно будет обрабатывать одним regexp'ом (без grep -v) и не будет завязки на адреса из /etc/resolv.conf.

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

сквид бы подошел, но его не хотят. причину не знаю.

перехвати 53 udp на свой bind, забей во view vk.com с произвольным адресом (можно со свои-же, так веселее)..далеее дело фантазии.

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

сквид бы подошел, но его не хотят. причину не знаю.

а если попробовать убедить? вдруг они не знают о существовании transparent ))))

бинда нет

Что вообще никакого DNS-а нету?

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

Может еще есть какие идеи для оптимизации?

Как минимум, указать интерфейс для iptables, что бы оно обрабатывало только то, что нужно. Так же можно указать порт (80 && 443). И еще подсеть (192.168.1.0/24) для интерфейса.

joy4eg ★★★★★
()

iptables/ipset для фильтрации хттп не совсем подходит, тут нужно либо прокси, либо приблуду для iptables которая в контент умеет смотреть. не помню как называется

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

Там на самом деле 2е подсетки, от разных отделов. А на счет портов, да ну нафик, может на этом вк или еще чем редиректы, пусть уж полностью доступ к ип закрыт будет.

outsider ★★
() автор топика
perl -n -e '
($u) = (/(\S+)/);
if (open($h, "host $u |"))
{
 while ($l = <$h>)
 {
  if (($a) = ($l =~ /\s+has\s+address\s+(\d+\.\d+\.\d+\.\d+)/))
  {
   print "\$FW -A IP -m comment --comment \"U: $u\" $a\n";
  }
 }
 close($h);
}
' < site_drop.list

«-m comment --comment ...» можно выкинуть, либо использовать для скрипта, который периодически будет апдейтить iptables.

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

А если использовать маркирование исходящих пакетов в SQUID:

Changes in Squid 3.2 tcp_outgoing_mark

New configuration parameter tcp_outgoing_mark

Allows packets leaving Squid on the server side to be marked with a Netfilter mark value in the same way as the existing tcp_outgoing_tos feature.

This feature is only available for Netfilter environments.

Allows you to apply a Netfilter mark value to outgoing packets on the server side, based on an ACL.

tcp_outgoing_mark mark-value [!]aclname ...

Example where normal_service_net uses the mark value 0x00 and good_service_net uses 0x20

	acl normal_service_net src 10.0.0.0/24
	acl good_service_net src 10.0.1.0/24
	tcp_outgoing_mark 0x00 normal_service_net
	tcp_outgoing_mark 0x20 good_service_net

А после этого фильтровать при помощи iptables маркированные пакеты.

Честно говоря, я так не делал. Просто всплыла в голове идея...

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