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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: IPtables как дать определенному пользователю нужные порты и запретить айпи  (Прочитано 2791 раз)

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

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
Проблема в следующем:
1 есть пользователи, некоторых нужно ограничить по портам, чтоб могли пользоваться только асей или почтой, а остальные могли пользоваться инетом.
2 вторая проблема ограничить, опять же не всех в использовании некоторых сайтов
конфигурационник:

#!/bin/bash

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

# Защита от Syn flood атаки
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
IPT="/sbin/iptables"
LO_IFACE="lo"
INET="ppp0"  #Модем
LAN_IFACE="eth0"  #Интерфес который смотрит в общую сеть

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
       
# чистим все правила
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X

#FTP
$IPT -A INPUT -p UDP -s 0/0 --sport 21 -j ACCEPT
$IPT -A INPUT -p TCP -s 0/0 --dport 21 -j ACCEPT
$IPT -A INPUT -p UDP -s 0/0 --sport 20 -j ACCEPT
$IPT -A INPUT -p TCP -s 0/0 --dport 20 -j ACCEPT

#разрешаем пинг
$IPT -A INPUT -p UDP -s 0/0 --sport 53 -j ACCEPT
$IPT -A INPUT -p UDP -s 0/0  --dport 53 -j ACCEPT

# безлимитный трафик для lo интерфейса(для себя)
$IPT -t filter -A INPUT -i $LO_IFACE -j ACCEPT
$IPT -t filter -A OUTPUT -o $LO_IFACE -j ACCEPT

# Трансляция IP адресов (NAT)
$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.55 -d 0.0.0.0/0 -o $INET #Дрону нетик
$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.10 -d 0.0.0.0/0 -o $INET #НА ШЛЮЗ В ОБЩУЮ ЛОКАЛЬ
$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.100 -d 0.0.0.0/0 -o $INET #МНЕ тоже не помешает
# Дрону торенты
$IPT -t nat -A PREROUTING -p tcp -d 0.0.0.0/0 --dport 50000 -j DNAT --to-destination 192.168.0.55:50000
$IPT -A FORWARD -i eth1 -d 192.168.0.55 -p tcp --dport 50000 -j ACCEPT

Оффлайн uid0

  • Активист
  • *
  • Сообщений: 371
    • Просмотр профиля
    • hitetra.ru
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

вот эти правила разрешают вообще весь трафик !!! нужно писать их в DROP вместо ACCEPT и уже по ип адресам распрделять нужные порты

для привте iptables -A FORWARD -p tcp -m tcp -s ip пользюка --dport 21 -j ACCEPT это правило будет разрешать 21 порт ип порту указанному в ключе -s
Be root, be different...

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
я вообще-то имел виду, нельзя ли прописать допустим разрешения а потом туда вписать список айпи
потом дупустим следующий набор правил и к нему тоже список айпи, что-то типа цепочек.
задача просто в селудующем, у меня очень много узеров, политика постоянно меняеться. а на каждый айпи прописать все, включая запрещенные сайты.
А так мне надо будет создать 5 групп пользователей в которых можно  будет быстро ввести новых или переместить в другую группу.

Оффлайн uid0

  • Активист
  • *
  • Сообщений: 371
    • Просмотр профиля
    • hitetra.ru
как-то это можно сделать, но как я не знаю ! если кто ответит, буду рад. для самообразования не помешает.
Be root, be different...

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
что нет того кто может помочь начинающему?????

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
Что ни кто не знает ответ???

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
дошел вот до такой конфигурации:
#!/bin/bash

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

# Защита от Syn flood атаки
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
IPT="/sbin/iptables"
LO_IFACE="lo"
INET="ppp0"  #Модем
LAN_IFACE="eth0"  #Интерфес который смотрит в общую сеть
LAN2_IFACE="eth1" #интерфес к которому подключен ADSL (Bridging)

start_fw()
{
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
       
# чистим все правила
$IPT -t filter -F
$IPT -t filter -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X


#FTP
$IPT -A INPUT -p UDP -s 0/0 --sport 21 -j ACCEPT
$IPT -A INPUT -p TCP -s 0/0 --dport 21 -j ACCEPT
$IPT -A INPUT -p UDP -s 0/0 --sport 20 -j ACCEPT
$IPT -A INPUT -p TCP -s 0/0 --dport 20 -j ACCEPT


#разрешаем  для клиентов
$IPT -A INPUT -p UDP -s 0/0 --sport 53 -j ACCEPT
$IPT -A INPUT -p UDP -s 0/0  --dport 53 -j ACCEPT
# безлимитный трафик для lo интерфейса(для себя)
$IPT -t filter -A INPUT -i $LO_IFACE -j ACCEPT
$IPT -t filter -A OUTPUT -o $LO_IFACE -j ACCEPT

# Трансляция IP адресов (NAT)
$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.55 -d 0.0.0.0/0 -o $INET #Дрону нетик
$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.10 -d 0.0.0.0/0 -o $INET #НА сеть инетик
}

start_us()
{                                                                        
#$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.100 -d 0.0.0.0/0 -o $INET #МНЕ тоже не помешает

#запрещаем в контакте (VKONTAKTE.ru)
$IPT -A FORWARD -d 93.186.221.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.222.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.223.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.224.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.225.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.226.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.227.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.228.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.229.0/24 -i eth0 -j DROP
 
}

case "$1" in
start)   echo -n "ЗАПУСК ЕПТЬ firewall: iptables"
    start_fw
    start_us
    echo "."
    ;;
    stop) echo -n "ОСТАНОВКА firewall: iptables"
    iptables -F
    iptables -X
    echo "."
    ;;
    save) echo -n "Сохранение  firewall: iptables"
    iptables-save > /etc/rules-save
    echo "."
    ;;   
    restart) echo -n "рестарт firewall как меня это заепало: iptables"
    iptables -F
    iptables -X
    cat /etc/rules-save | iptables-restore
    echo "."
    ;;
    reload|force-reload) echo -n "перезагрузка конфигурации firewall: iptables"
    echo "."
    ;;
    *)   echo "Usage: /etc/init.d/rc.iptables start|stop|restart|reload|force-reload"
    exit 1
    ;;
    esac
    exit 0
                                                                                      
                                                                        
Запрещает мне контакт и другому юзверю тоже.

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
хоть я вместе с запретом дописан отдельно:


start_us()
{                                                                         
#$IPT -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.100 -d 0.0.0.0/0 -o $INET #МНЕ тоже не помешает

#запрещаем в контакте (VKONTAKTE.ru)
$IPT -A FORWARD -d 93.186.221.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.222.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.223.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.224.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.225.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.226.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.227.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.228.0/24 -i eth0 -j DROP
$IPT -A FORWARD -d 93.186.229.0/24 -i eth0 -j DROP
 
}

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
я попытался создать 2-е группы, вся эта суета для того чтоб пять групп с различными правилами и дописывать просто айпи юзеров, т.к политика партии постоянно меняеться.
прийдется каждому писать по 20 строк разрешений, и 20 запретов. Как- то не интерестно! :'(

Оффлайн Tokh

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
я попытался создать 2-е группы, вся эта суета для того чтоб пять групп с различными правилами и дописывать просто айпи юзеров, т.к политика партии постоянно меняеться.
прийдется каждому писать по 20 строк разрешений, и 20 запретов. Как- то не интерестно! :'(

А деньги-то кому платят в зарплату? : ) ) Шутник.

Можно каждому юзеру сопоставить файл с разрешениями, содержимое типа
192.168.0.2 213.95.41.13 80
192.168.0.2 91.189.90.133 80
И сложить такие файлы в каталог allow
Файлы с запрещениями - в deny.

На Bash в цикле перебирать все эти файлы. Из файла в цикле построчно считывать локальный адрес, внешний адрес, порт и подставлять в вызов iptables. Такие правила хоть по расписанию можно обновлять.

Конструкция типа:
find /ipt-allow -type f | while read filename ; do
    while read argv1 argv2 argv3 argv_void ; do
       echo "$argv1"
       iptables bla bla bla -j allow
    done < $filename
done

Видел даже как nslookup приделывают и указывают доменные имена. Естественно имеет смысл отдельно конвертировать доменные имена в ip. Процесс небыстрый.

Но я ещё читал, что непродуманно громоздкие правила очень заметно нагружают процессор.
StarDict и Mueller помогут против английского мануала.

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
Спасибки большое, но мне за это не платят!! На конторе все под виндюками, это собственная инициатива, заодно опыт))))))

Оффлайн admin4ek

  • Автор темы
  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
это от u-375 ответ

Основа предложенного мною подхода описана в "Руководство по iptables (Iptables Tutorial 1.1.19)" http://www.opennet.ru/docs/RUS/iptables/

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

Дальше можно внутрь этого файла делать вставки на языке Bash, например. В инете довольно много книг про Linux, в которых есть краткие или продвинутые руководства по программированию на Bash.

То что ниже, как раз такая идея. При этом нужно уметь писать примитивные скрипты. И то что ниже имеет мало отношения к iptables. Это больше приём автоматизации настройки Linuxа...

Разберём:
Код:
find /ipt-allow -type f | while read filename ; do
    while read argv1 argv2 argv3 argv_void ; do
       echo "$argv1"
       iptables bla bla bla -j allow
    done < $filename
done

find /ipt-allow -type f
построчно печатает список файлов в каталоге /ipt-allow
Символ | направляет эти строки на вход цикла while.
Конструкция
Код:
while read filename ; do
...
done
за один проход цикла, командой read считывает в переменную filename одну стрку из числа появляющися "на входе" от команды find.
Значение переменной filename можно получить через выражение $filename.

Конструкция
Код:
while read argv1 argv2 argv3 argv_void ; do
echo "$argv1"
done < $filename
на вход получает содержимое файла с именем "$filename" и построчно считывает  это содержимое командой read в переменные argv1, argv2, argv3, argv_void
Команда read читает "вход" и всё до первого пробела помещает в первую переменную, всё между первым и вторым пробелами помещает во вторую переменную и т.д. пока не наткнётся на конец строки. Если указана только одна переменная, то вся строка окажется в этой переменной. Если указано две переменные, а слов в строке 10, то первое слово окажется в первой переменной, последние 9 слов окажутся во второй переменной. Если есть "лишняя" переменная - слов в строке меньше чем переменных, то "лишние" переменные не заполняются, остаются пустыми.

echo "$argv1" тупо печатает значение переменной argv1

А теперь если создать каталог /ipt-allow и туда положить файлы. По одному на пользователя. Файлы заполнить подходящими данными, то таким способом можно считывать из файла данные в переменные, а значения переменных использовать при вызове iptables.
Например, там где стоит строка "iptables bla bla bla -j allow". Bla, bla, bla надо заменить на нечто осмысленное и нужное.

Например, в файл можно записывать локальный ip адрес пользователя, ip адрес разрещённого (или запрещённого ресурса в интернете) и номер порта. Считывать это в переменные и ...

Кстати, имена файлов не анализируются в скрипте, подбираются все подряд файлы из указанной папки.

Дальше можно это использовать как угодно, как удобно, как подсказывает необходимость. Например, в скрипте задающем правила iptables, можно вместо 50 строк отличающихся только ip адресом пользователя вставить этот цикл. Вообще это всё сильно зависит от идеи автора...

Отдельно можно сделать скрипт, который через команду nslookup или host формирует списки ip адресов для доменных имён. Т.е. файлы пользователей заполнять доменными именами, автоматически генерить аналогичные списки, но списки по ip адресам. И уже эти ip списки использовать в скрипте задающем правила iptables.

Могу пример опубликовать, но он заточен под мои цели. И содержит лишние для начала сложности.

P.S. Пример скрипта не рассчитан на пробелы в именах файлов. Если есть пробелы, то значения переменных надо использовать в кавычках...
Наверное вместо файлов, как хранилищ списков, даже можно SQL базу приделать, но не нужно...

 

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