Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [Решено]Настройка iptables в Ubuntu Server 11.04 на выборочную раздачу интернета  (Прочитано 4496 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
Здравствуйте.
В сети небольшой организации настроил работу Интернет-шлюза на базе Ubuntu 11.04 по статье https://help.ubuntu.com/community/Internet/ConnectionSharing.
После настройки политика прохождения цепочки FORWARD была ACCEPT. Интернет работает у всех. Следующий шаг - оставить интернет только некоторым пользователям. Ставим политику в цепочке FORWARD на DROP и добавляем правила по конкретным IP (статическим): sudo iptables -A FORWARD -s 192.168.0.128 -o eth0 -j ACCEPT Всё бы казалось хорошо, однако на некоторых компьютерах интернет появляется, а на некоторых нет.
Вывод команды: iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  localnet/24          anywhere            ctstate NEW
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  fileserver.local     anywhere
ACCEPT     all  --  alex-P5K-EPU.local   anywhere
ACCEPT     all  --  192.168.0.128        anywhere
ACCEPT     all  --  192.168.0.104        anywhere
ACCEPT     all  --  192.168.0.204        anywhere
ACCEPT     all  --  192.168.0.11         anywhere
Для компьютеров fileserver.local (192.168.0.228), alex-P5K-EPU.local (192.168.0.228), 192.168.0.128 интернет есть, для остальных - нет. Меняем политику транзитных пакетов на ACCEPT -  всё снова работает.
В чём ошибка настройки? Заранее спасибо.
« Последнее редактирование: 07 Сентября 2011, 12:06:06 от shyr1punk »

Оффлайн тов. Новичок

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Я такой же вопрос решил через Squid.

Отвечу почему:

Сначала использовал просто IPTables. Маскарадинком раздавал инет на нужные компы. Все было хорошо, за исключением моментов, когда какой-нибудь пида..с начинал смотреть ролики на ютуб или вконтакте, а я в это время получал люлей от бухгалтерии, потому что у них важный отчет не уходил в банк/центр отчетности.

Поэтому сверху поставил скид3, прикрутил к нему кламАВ. Инет сейчас раздаю сквидом (настроил прозрачную проксю).
Плюсы:
+ Трафик кешируется - плюсы заметны невооруженным глазом. А сетка то у меня тоже не очень большая (около 40-50 компов).
+ Трафик сканиться на вири. Конечно от крупной заразы не спасет, но салите не проходит (а судя по логам пытался).
+ Пользаки теперь не сидят весь день на однокласниках/вконтакте. А любители посмотреть онлайн-видео смотрят на низкой скорости, не мешая работе бухов.
+ Постоянно просматриваю статистику с помощью лигхтсквид - надо сказать очень удобная штука.

Даже на несколько компов стоит раздать инет при помощи сквида.

Что же касается инета, раздавать просто средствами IpTables, то правило для форвардинга - это мало.
Попробуй так:

#!/bin/bash
#scriptname '/etc/network/firewall.sh'

##Перейдем в режим root, если не сделали этого раньше
sudo -i

##Включим форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

##Очистим старые правила
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

##Опишем необходимые правила

# Разрешаем локальтый траф
sudo iptables -A INPUT -i lo -j ACCEPT

# Разрешаем себе конектиться по SSH (192.168.0.xxx - твой IP)
iptables -A INPUT -p tcp -s 192.168.0.xxx --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT

# Правила для форвардинга на нашу подсеть (форвардин не значит инет, но разрешает транзитный трафик)
iptables -A FORWARD -d 192.168.0.0/24 -o eth0 -j ACCEPT (форвардинг из инета в локалку)
iptables -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT (форвардинг из локарки в инет)
# Коментарии к ^этим правилам:
# Так конечно делать нельзя. Нужно открыть только те порты/протоколы,
# которые будут использоваться, что бы не осталось каких либо лазеек извне.
# Но так как все делается для быстрого старта, то пока пойдет и так,
# а потом исправить по обстоятельствам

# Правила для проброса инета
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.104 -j MASQUERADE    #Иванов
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.204 -j MASQUERADE    #Петров
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.115 -j MASQUERADE    #Сидоров
# ip взял от балды, впрочем как и имена в коментах. Добавь свой вариант


#Запрещаем остальное
iptables -P INPUT DROP      #Запрещаем любые входящие соединения к процессам сервера (!SSH)
iptables -P FORWARD DROP    #Запрещаем транзитный поток трафика кроме описного выше
iptables -P OUTPUT ACCEPT   #На выход — можно все


Вроде так. Возможно в моем коде есть ошибки, так как писал на скорую руку и по памяти. Если кто то найдет - поправьте.
Сохрани этот код в файл, сделай исполняющим (можно добавить бит запуска от рута). А в файл /etc/network/interfaces добавь в конец строчку post-up /etc/network/firewall.sh

Как видишь, я форвард разрешаю всем машиноам, а маскарадин только там где нужет инет.
Конечно, если делать все по совести, то нужно создать отдельный файл со списком IP. А в данном скрипте написать обработку данного файла, что бы скрипт и форвардинг и инет открывал только нужным IP. Но на скорую руку можно и так. Если у тебя внешний IP статический, то лучше тогда использовать SNAT.

Попробуй, удачи в настройке.

Пользователь решил продолжить мысль 05 Сентября 2011, 13:34:24:
Я то же сначала пользовался данной схемой.
Причины: Это очень быстро настроить, около 15 минут на установку, плюс 5 минут на написание скрипта.

Но потом я сверху накатил сквид (как писал выше). В таком скрипте вместо маскарадинга для пользаков, добавил правила на переброс на сквид:
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192.168.0.1:8888

Порт 8888 прослушивает сквид.

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

Пользователь решил продолжить мысль 06 Сентября 2011, 07:21:57:
P.S. Как сделаешь, отпишись, интересно увидеть твое решение...
« Последнее редактирование: 06 Сентября 2011, 07:21:57 от ivanlex »

Оффлайн uid0

  • Активист
  • *
  • Сообщений: 371
    • Просмотр профиля
    • hitetra.ru
Полностью согласен на счёт сквида. Особенно если в дальнейшем придётся блочить сайты и разрешать всякую порнуху в заданное время.
Be root, be different...

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
А теперь по теме вопроса. А не по той теме по которой хочется поговорить предыдущим ораторам

1. Почему у fileserver.local и alex-P5K-EPU.local один адрес? Не критично, но интересно
2. покажите правила так
sudo iptables -nvL FORWARD

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
Думаю сейчас вывод её совсем не поможет, т.к. правила для тех, у кого не работает интернет постоянно удаляю и переписываю. Но всё же. последние 3 были добавлены только что:
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  eth1   eth0    192.168.0.0/24       0.0.0.0/0           ctstate NEW
  19M   14G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
 600K   44M ACCEPT     all  --  *      *       192.168.0.228        0.0.0.0/0   
 9331  838K ACCEPT     all  --  *      *       192.168.0.27         0.0.0.0/0   
 207K   15M ACCEPT     all  --  *      *       192.168.0.128        0.0.0.0/0   
    0     0 ACCEPT     all  --  *      eth0    192.168.0.22         0.0.0.0/0   
    0     0 ACCEPT     all  --  *      eth0    192.168.0.17         0.0.0.0/0   
    0     0 ACCEPT     all  --  *      eth0    192.168.0.10         0.0.0.0/0
С компа 192.168.0.17 пробовал выходить перед выводом команды.

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
ifconfig eth0
ifconfig eth1
ещё покажите

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1d:7d:ae:91:c4
          inet addr:192.168.0.29  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21d:7dff:feae:91c4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11869005 errors:0 dropped:446 overruns:0 frame:0
          TX packets:13419440 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3431655808 (3.4 GB)  TX bytes:1673835100 (1.6 GB)
          Interrupt:43 Base address:0xe000
ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 00:1b:21:23:25:d1
          inet addr:46.61.162.186  Bcast:46.61.162.187  Mask:255.255.255.252
          inet6 addr: fe80::21b:21ff:fe23:25d1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18670466 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15077275 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1887073422 (1.8 GB)  TX bytes:3669837375 (3.6 GB)


Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      eth0    192.168.0.17         0.0.0.0/0   
ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1d:7d:ae:91:c4
          inet addr:192.168.0.29  Bcast:192.168.0.255  Mask:255.255.255.0
Смотрим внимательней на выделенное и понимаем, где мы ошиблись

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
Смотрю, и вижу что... мы шлём пакеты, которые предназначены для для интерента на интерфейс, который смотрит в локальную сеть?... Извиняюсь, если сказал глупость  ???

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Не так...
В правилах мы берём за условия, что пакет должен придти от 192.168.0.17 и уйти на любой адрес через eth0.
Учитывая, что у данного интерфейса адрес как раз из этой сети, я уверен, что это правило НИКОГДА не сработает (хаки не рассматриваются)

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
Спасибо огромное fisher74, ошибка с твоей помощью найдена (если не ошибаюсь). Верная команда:
sudo iptables -A FORWARD -s 192.168.0.128 -o eth1 -j ACCEPTт.е. как я понял указываем в качестве выходного интерфейса eth1, смотрящий в интернет. В итоге:
sudo iptables -nvL FORWARD
Chain FORWARD (policy DROP 7 packets, 336 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  eth1   eth0    192.168.0.0/24       0.0.0.0/0           ctstate NEW
  28M   22G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
  317 24301 ACCEPT     all  --  *      eth1    192.168.0.17         0.0.0.0/0   
   53  2756 ACCEPT     all  --  *      eth1    192.168.0.228        0.0.0.0/0   
    4   208 ACCEPT     all  --  *      eth1    192.168.0.128        0.0.0.0/0   
    0     0 ACCEPT     all  --  *      eth1    192.168.0.27         0.0.0.0/0   
    0     0 ACCEPT     all  --  *      eth1    192.168.0.22         0.0.0.0/0 
Вроде как то так, интернет работает у тех, кому он нужен.
Сейчас разберусь с дальнейшей настройкой файрвола, и уже потом наверное подключу squid.

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Всё верно сделали.
Только вот это правило непонятно что делает
0     0 ACCEPT     all  --  eth1   eth0    192.168.0.0/24       0.0.0.0/0           ctstate NEW

Оффлайн shyr1punk

  • Автор темы
  • Новичок
  • *
  • Сообщений: 7
  • Ubuntu 11.04
    • Просмотр профиля
Как я понял - это разрешение новых подключений с компьютеров локальной сети в интернету. Добавил командой
sudo iptables -A FORWARD -o eth0 -i eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
1. Вы там тоже с интерфейсами напутали, потому правило бестолковое.
2. Когда исправите нюанс с интерфейсами, у Вас появится новая проблема - интернет будет у всех.

 

Страница сгенерирована за 0.067 секунд. Запросов: 25.