LINUX.ORG.RU
ФорумAdmin

iptables.Подскажите возможные варианты решения


0

1

Есть прокси сервер на Debian 5. На нем висит три сетевые карты: eth0 - смотрит в одну локальную сеть сеть (ip 192.168.8.3, маска подсети 255.255.248.0); eth1 - смотрит в интернет (ip 192.168.1.1, маска подсети 255.255.252.0); eth2 - смотрит во вторую локальную сеть (ip 192.168.111.3, маска подсети 255.255.255.0). Настроен прозрачно squid3.0. Iptables имеет следующий конфиг:

iptables -F

iptables -t nat -F

iptables -t nat -A PREROUTING -s 192.168.8.3 -p tcp --dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.8.3:8080

iptables -t nat -A PREROUTING -s 192.168.111.3 -p tcp --dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.111.3:8080

iptables -t nat -A POSTROUTING -j MASQUERADE

Интернет есть в двух сетях. При это работает абсолютно все программы, даже те, которые не поддерживают настройку прокси. Настроен также lightsquid для сбора статистики. Получается, что при такой конфигурации программы, которые работают на любом другом порте, кроме 80 и 8080 в статистику не попадают и на них не действуют правила squid (например ограничение скорости). Особенно сильно это чувствуется при использовании торрентов. Можно ли при использовании маскарадинга закрыть группу портов (например 1024-65000), чтобы ограничить использование торрентов, просмотр интернет телевидения и подобного рода?



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

в FORWARD (filter) разрешите только нужное: для юзеров udp на 53, 80 и 443. для серверов - все, к примеру, политика по умолчанию - дроп.
и вопрос будет закрыт.

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

Спасибо за ответ! Я не силен в синтаксисе iptables. Как вы думаете я могу использовать для открытия например 80 порта такую связку:

iptables -A FORWARD -i eth0 --source 192.168.1.0/23 -o eth1 -p udp --dport 80 -j ACCEPT

iptables -A FORWARD -i eth0 --source 192.168.1.0/23 -o eth1 -p tcp --dport 80 -j ACCEPT

eth0 - это сетевой интерфейс смотрящий в сеть. eth1 - в интернет. Извеняюсь за тавтологию. Если я правильно понял то этой командой я разрешаю перенаправление пакетов из внутренней сети во внешнюю по 80 порту. Под разрешением всего для серверов вы подразумеваете открытие всех портов на интерфейсе подключенным в интернет?

Я зарание извеняюсь за возможно глупые вопросы. Читая мануалы по iptables очень не хватает человека для структуризации информации.

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

Как бы на вашем месте сделал я...

# Разрешить Пинги на внешние хосты (по желанию)
iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
# Разрешить 80 порт для http 
iptables -A FORWARD -i eth0 -s 192.168.1.0/23 -o eth1 -m tcp -p tcp --dport 80 -j ACCEPT
# Разрешить 443 порт для https
iptables -A FORWARD -i eth0 -s 192.168.1.0/23 -o eth1 -m tcp -p tcp --dport 443 -j ACCEPT
# Разрешить работу с внешними DNS серверами по udp
iptables -A FORWARD -i eth0 -s 192.168.1.0/23 -o eth1 -m udp -p udp --dport 53 -j ACCEPT 
# Разрешить работу с внешними DNS серверами по tcp (Практический не когда не используется но пусть будет)
iptables -A FORWARD -i eth0 -s 192.168.1.0/23 -o eth1 -m tcp -p tcp --dport 53 -j ACCEPT
# Разрешить передачу пакетов по уже установленному соединению и открытия нового этим соединениям (Пакеты от веб-сайтов должныж как-то возвращаться? :) )
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Всё что не попало под правила выше - сбрасывать
iptables -P FORWARD DROP

Tok ★★
()
Ответ на: комментарий от Tok
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Заменить на

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Ошибся малёк

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

iptables -t nat -A PREROUTING -s 192.168.8.3 -p tcp --dport 80 -j ACCEPT

iptables -t nat -A PREROUTING -s 192.168.111.3 -p tcp --dport 80 -j ACCEPT

И ещё... фильтрацию пакетов в таблице nat делать не желательно... для этих целей есть таблица filtr. Поскольку в новых версиях iptables такой приём уже запрещён... Лучше маркировать данные пакеты и фильтровать их в таблице filtr. Пример;

iptables -t mangle -I PREROUTING -s 192.168.8.3 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -I PREROUTING -s 192.168.8.3 -p tcp --dport 80 -j MARK --set-mark 111
iptables -A FORWARD -m mark --mark 0x8 -j ACCEPT
iptables -A FORWARD -m mark --mark 0x6f -j ACCEPT

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

> для серверов - все, к примеру
Я бы не был столь категоричен. Только пару дней назад довелось наблюдать сервер под оффтопиком, в котором поселилась вирусня, беглый скан nmap-ом показал, что там на 21 порту висит какое-то затуннеллированное TCP соединение. Так что закрывать. Все зарезервированные порты — закрывать.

Deleted
()

Спасибо большое за ваши ответы!

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

Не совсем правильно. Наверняка это сервак за натом, то есть для доступа извне делаем -j DNAT на, к примеру, 3389 порт. В этом случае достаточно в FORWARD

-m conntrack --ctstate DNAT -j ACCEPT

Пускаем всё, что идёт к этому серваку и обратно.

Другой вопрос, если этот сервак инициализирует соединение извне, скажем, для обновления (через, что там видна обновляется http/https?). В этом случае полюбому надо разрешать коннект на dst ports 80, 443 на апдейт-узлы microsoft. А вот если там вирусня висит на 21-м, то как достучаться до этого порта, если сервак за натом. А если вирус инициализирует соединение, то есть порт будет _src_ и dst пусть даже 80, 443, то это соединение уже попадает под established в цепочке FORWARD и, если политика DROP, а также разрешены коннекты только к ресурсам microsoft, то вирусня соснёт х*йца.

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

Спасибо за ваши очень точные подсказки. Интересует вопрос, почему после прописывания iptables -P FORWARD DROP пакеты с eth2 все равно перекидываються на eth1? На сколько я понял для eth2 нет правил в FORWARD, т.е. все должно «рубиться»...

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

Если пакеты с eth2 не как не попадают под правила выше (ip-адресом портом и т п ) то они будут сбрасываца... если вам надо чтоб трафик не бегал не при каких обстоятельствах между интерфейсами, укажите это явно.

iptables -I FORWARD -i eth2 -o eth1 -j DROP
iptables -I FORWARD -i eth1 -o eth2 -j DROP 

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

Уважаемый Tok, благодаря вашим советам обнаружил\решил ошибки в настройке DNS, DHCP сервера. Интересует вопрос если после прописывания всех вышеуказаных правил с установленной по умолчанию политикой FORWARD DROP я допишу

iptables -A FORWARD -s 192.168.1.0/23 -i eth0 -o eth1 -p tcp -m tcp --dport 1:65536 -j LOG

будет ли это значить, что все запросы не удовлетворяющие правилам FORWARD будут записываться в лог?

Благодарю за понимание и терпение.

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

Всё верно Уважаемый solmus Но я бы поставил слежку только за tcp пакетами у которых соединение в состоянии «NEW» или флаг пакета «SYN» чтоб отслеживать только попытки открывания портов пользователями.. и этим сэкономить килотоны логов которые вы захотите просмотреть для простоты удобства парсинга..
Вариант 1.

iptables -A FORWARD -m conntrack --ctstate NEW -p tcp --dport 0:1023 -j LOG --log-level DEBUG --log-prefix "[DROP] TCP CONNTRACK NEW: "
Вариант 2.

iptables -A FORWARD -p tcp --syn -j LOG --log-level DEBUG --log-prefix "[DROP] TCP SYN: "

Но ваш вариант тоже будет работать... :)

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