LINUX.ORG.RU

Ограничение доступа через iptables


0

0

Добрый День! Возникла такая проблема. Необходимо настроить iptables таким образом, чтобы лишь определенные пользователи (идентификация по IP) имели право выхода в Инет из локальной сети. В локалке несколько сот ПК, по сути дела в данный момент выйти в Инет может каждый, просто указав в качестве прокси сервера адрес сервака. Сквид настроен на разрешение работы с Инетом лишь определенным пользователям, но выход в Инет идет в обход его! Это меня, естественно, не устраивает. Хотелось бы поподробнее узнать каким образом можно это реализовать в iptables. Заренее благодарен!

P.S. Если нужна какая дополнительная информация - я её добавлю! :)

Вот текущие настройки iptables:

# Completed on Tue Jun 20 19:28:03 2006 # Generated by iptables-save v1.3.3 on Tue Jun 20 19:28:03 2006 *nat :PREROUTING ACCEPT [3678:415194] :POSTROUTING ACCEPT [36:4191] :OUTPUT ACCEPT [2965:182676] #-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.235.2 COMMIT # Completed on Tue Jun 20 19:28:03 2006

Здесь: eth0 - внешний интерфейс, который выходит в Инет через прокси: 192.168.235.2 eth1 - внутренний интерфейс

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

а у вас nat или masquerading на сервере работает? если нет, то просто сделайте запрещающие правила на выход с внешнего сетевого интерфейса с фильтром по внутренним IP.

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

Если я не ошибаюсь, то именно nat работает... Каким образом можно реализовать подобный запрет? Я имею ввиду команду. Дело просто в том, что с iptables я не очень хорошо знаком!

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

ну если работает nat, то в таблицу nat необходимо добавить только тех, кому разрешено ходить в инет, остальных отфильтровать как я писал выше. пришлите в _форматированном_ виде вывод с таких команд:

iptables -t nat -L -n

iptables -L -n

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

[root@router_linux /]# iptables -t nat -L -n

Chain PREROUTING (policy ACCEPT)

target prot opt source destination

Chain POSTROUTING (policy ACCEPT)

target prot opt source destination

SNAT all -- 0.0.0.0/0 0.0.0.0/0 to:192.168.235.2

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

[root@router_linux /]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8

DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x02

Chain FORWARD (policy ACCEPT)

target prot opt source destination

ACCEPT all -- 172.16.253.11 0.0.0.0/0

ACCEPT all -- 172.16.253.10 0.0.0.0/0

ACCEPT all -- 172.16.253.7 0.0.0.0/0

ACCEPT all -- 172.16.253.18 0.0.0.0/0

ACCEPT all -- 172.16.253.16 0.0.0.0/0

ACCEPT all -- 172.16.253.12 0.0.0.0/0

ACCEPT all -- 172.16.1.115 0.0.0.0/0

ACCEPT all -- 172.16.1.3 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

В данный момент я внёс кое какие коррективы в iptables:

# Generated by iptables-save v1.3.3 on Fri Jul 14 13:59:00 2006

*filter

:INPUT ACCEPT [956697:190005754]

:FORWARD ACCEPT [717404:471846713]

:OUTPUT ACCEPT [922807:722418094]

-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG SYN -j DROP

-A FORWARD -s 172.16.253.11 -j ACCEPT

-A FORWARD -s 172.16.253.10 -j ACCEPT

-A FORWARD -s 172.16.253.7 -j ACCEPT

-A FORWARD -s 172.16.253.18 -j ACCEPT

-A FORWARD -s 172.16.253.16 -j ACCEPT

-A FORWARD -s 172.16.253.12 -j ACCEPT

-A FORWARD -s 172.16.1.115 -j ACCEPT

-A FORWARD -s 172.16.1.3 -j ACCEPT

COMMIT

# Completed on Fri Jul 14 13:59:00 2006

Единственное, чего не хватает в правилах, так это:

iptables -P FORWARD DROP

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

Меня вот что еще интересовало. В цепочке FORWARD я прописал разрешения, а нужно ли эти же разрешения прописывать в цепочке INPUT?

Потому что FORWARD, если я не ошибаюсь, для прямой работы с инетом нужен а SQUID из цепочки INPUT пакеты берёт... Мы же используем именно Squid вместе с Iptables.

Ildar_aka_Casper
() автор топика

Щас тебе тут насоветуют ядро патчить, разве не видно, что человек новичок.

ты вначале определись, как будешь инет раздавать, через сквид или nat-омм. (имхо - черех сквид удобнее.)
вместе можно, но лучше что-то одно.


а потом и предпринимай действия и задавай вопросы.
прямо скажу, что тебе необходимо почитать howto по iptables, иначе сложно будет вкуритить, что какое правило делает. а вопросов будет море.

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

если пускать только через сквид, то правила что-нибудь типа этого:

# Generated by iptables-save v1.2.8 on Wed Mar  2 14:33:22 2005
*nat
:PREROUTING ACCEPT [16:1884]
:POSTROUTING ACCEPT [13:745]
:OUTPUT ACCEPT [13:745]
-A POSTROUTING -s 192.168.5.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.100.2
COMMIT
# Completed on Wed Mar  2 14:33:22 2005
# Generated by iptables-save v1.2.8 on Wed Mar  2 14:33:22 2005
*filter
:INPUT DROP [3:144]
:FORWARD DROP [1:260]
:OUTPUT DROP [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -d 192.168.5.2 -i eth1 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -d 192.168.5.2 -i eth1 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -s DNS_Провайдера -i eth0 -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -d 192.168.100.2 -i eth0 -p tcp -m tcp --sport 20:21 --dport 1024:65535  -j ACCEPT
-A INPUT -d 192.168.100.2 -i eth0 -p tcp -m tcp --sport 80 --dport 1024:65535 -j ACCEPT
-A INPUT -d 192.168.100.2 -i eth0 -p tcp -m tcp --sport 8000 --dport 1024:65535 -j ACCEPT
-A INPUT -d 192.168.100.2 -i eth0 -p tcp -m tcp --sport 8080 --dport 1024:65535 -j ACCEPT
-A INPUT -m limit --limit 30/min -j LOG --log-prefix "Drop_INPUT: "
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m limit --limit 30/min -j LOG --log-prefix "Drop_FORWARD: "
-A OUTPUT -s 192.168.5.2 -o eth1 -p tcp -m tcp --sport 3128 -j ACCEPT
-A OUTPUT -s 192.168.5.2 -o eth1 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -d DNS_провайдера -o eth0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -s 192.168.100.2 -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 20:21 -j ACCEPT
-A OUTPUT -s 192.168.100.2 -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 80 -j ACCEPT
-A OUTPUT -s 192.168.100.2 -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 8000 -j ACCEPT
-A OUTPUT -s 192.168.100.2 -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 8080 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m limit --limit 30/min -j LOG --log-prefix "Drop_OUTPUT: "
COMMIT
# Completed on Wed Mar  2 14:33:22 2005

если не нужны пинги, то еще меньше строк и можно не поднимать нат и запретить на внутреннем интерфейсе все, кроме порта прокси и ДНС. В моем случае мо ДНС форвардит запросы к прову. 192.168.5.2 смотрит в локалку, 192.168.100.2 - выход на шлюз с антеной
Правил у меня побольше, но если только для инета, я думаю этого хватит. 

deys ★★★
()

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

но iptables tutorial курить всё равно нужно - пригодится в дальнейшем ;)

bsh ★★★
()

... по сути дела в данный момент выйти в Инет может каждый, просто указав в качестве прокси сервера адрес сервака. Сквид настроен на разрешение работы с Инетом лишь определенным пользователям, но выход в Инет идет в обход его!

Предложения друг другу противоречат накорню... То может каждый, то неможет...

Имхо если инет через сквида раздаётся - проще всего настроить аклы. Второй вариант - правилами таблесов по инпуту разрешить конкретным ip доступ на 3128 (по дефаулту), если маскарада нету. Вопщем вы батенька определитесь что вам надо, а решение не за горами.

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