LINUX.ORG.RU

Избирательное добавление записей в iptables

 ,


0

2

Здравствуйте, помогите, пожалуйста, советом. ОС: Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic i686). Машина используется как роутер. После загрузки сетевых интерфейсов (в interfaces через post-up) выполняется скрипт:

#!/bin/sh

#Очистка

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -t mangle -F

iptables -t mangle -X

# Форвардинг

echo 1 > /proc/sys/net/ipv4/ip_forward

# Запись которая не добавляется

iptables -t filter -A FORWARD -p tcp -s 192.168.3.0/24 -d e.mail.ru -j DROP

# Разрешаем трафик на loopback-интерфейсе

iptables -A INPUT -i lo -j ACCEPT

# Разрешаем доступ из внутренней сети наружу

iptables -A FORWARD -i p2p1 -o p4p1 -j ACCEPT

# Включаем NAT

iptables -t nat -A POSTROUTING -o p4p1 -s 192.168.3.0/24 -j MASQUERADE

# Разрешаем ответы из внешней сети

iptables -A FORWARD -i p4p1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем доступ снаружи во внутреннюю сеть

iptables -A FORWARD -i p4p1 -o p2p1 -j REJECT

# Заворачиваем http на прокси

iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.3.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.3.1:3128

После загрузки системы смотрим таблицу filter и nat: nat заполняется по скрипту, таблица filter пустая. Но если с консоли напрямую запустить скрипт, тогда заполняются все таблицы. Вопрос: почему не заполняются правила в filter при автозагрузке (post-up в interfaces)?



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

iptables -t filter -A FORWARD -p tcp -s 192.168.3.0/24 -d e.mail.ru -j DROP

а если указать не доменное имя, а адрес?

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

Запись вида (ip e.mail.ru) iptables -t filter -A FORWARD -p tcp -s 192.168.3.0/24 -d 217.69.139.215 -j DROP

также не добавляется при автозагрузке

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

ubuntu

Снести нахрен, поставить debian stable.

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

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

И не нужно писать в iptables днс-имена. Нужно использовать айпишники.

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

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

Прокси слушает только http, а почтовые сервисы (доступ к которым нужно ограничить), как правило используют https.

При замене url на IP адрес картина не меняется

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

При замене url на IP адрес картина не меняется

Айпишников у мейлру много, как уже говорили.

Прокси слушает только http, а почтовые сервисы (доступ к которым нужно ограничить), как правило используют https.

Запретить connect на порт 443 на определенное днс-имя прокси-сервер в состоянии. Я ошибаюсь?

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

Айпишников у мейлру много, как уже говорили.

Когда прописываю один/десять (без разницы) в цепочку FORAWARD таблицы filter запись все равно не попадает.

administrator@isk-gateway:~$ sudo iptables -t filter -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

TCPMSS tcp  — 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU

REJECT all  — 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

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

По прокси, буду очень благодарен за синтаксис запрета CONNECT по 443 к определенным ip. Sqid3

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

Я Убунту никогда не видел. Общее, логи, какие сервисы какие запускаются.

lvi ★★★★
()
Ответ на: комментарий от sm1
acl CONNECT method CONNECT
acl mailru urlpath_regex ^4.4.4.4$
acl ssl_ports port 443
http_access deny CONNECT mailru ssl_ports

по идее как-то так, вообще - man squid.conf

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

Сначала убедитесь, что на момент завершения скрипта все правила есть в iptables, то есть поставьте в конец команду iptables-save или iptables -L -n -v с перенаправлением вывода в файл в /tmp и после загрузки посмотрите.

Возможно, что правила удаляет iptables-persistent, если он у вас установлен или ещё что. Решение в лоб — временно поправить /etc/init/rc, чтобы он после запуска каждого сервиса дампил правила iptables в файл в /tmp и потом посмотреть.

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

и даже если резолвится, то может несколько адресов выдать

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

Да это как ложкой консервы открывать - конечно можно, но за@#$шься ведь

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

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

Если не трудно подскажите как прописать в rc.conf команду по дампу правил. Пробовал вот так, не получилось:

emits deconfiguring-networking

emits unmounted-remote-filesystems

start on runlevel [0123456]

stop on runlevel [!$RUNLEVEL]

export RUNLEVEL

export PREVLEVEL

console output

env INIT_VERBOSE

task

iptables>/etc/ipt $RUNLEVEL

exec /etc/init.d/rc $RUNLEVEL

И где взять переменную с именем сервиса? $RUNLEVEL это, наверное, уровень запуска.

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

Когда же вы уже все научитесь, ньюфаги читающие древние свитки???

выполняется скрипт

apt-get install iptables-persistent

Форвардинг

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от sm1

В /etc/init/rc.conf нет переменных с именем сервиса. Задача этого файла вызвать /etc/rc.d/rc. Вот этот скрипт вам и надо поправить, конечно, на время и с сохранением оригинально версии.

Находите в скрипте цикл по запуску сервисов и в его тело заносите строку дампа iptables.

for i in /etc/rc$runlevel.d/S* ; do

  # В файл дописываем, перед перезагрузкой стираем(обнуляем) файл вручную
  echo "Before /etc/rc$runlevel.d/S*" >> /tmp/iptables-DUMP
  /sbin/iptables-save >> /tmp/iptables-DUMP

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

Всем большое СПАСИБО! Проблема была в файле rc.local, таблица filter очищалась там.

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