1

Помогите дописать правила iptables. Есть задача пустить трафик через проксю (уже сделано), закрыть все порты адресам 172.22.4.30-172.22.4.254, кроме доступа в инет через прокси, а адресам 172.22.4.1-172.22.4.29 открыть все порты (из/вне).

мой текущий конфиг:

+ открыть спойлер

#!/bin/sh

IPTABLES="/sbin/iptables"

# Очистка таблиц, установка политик по умолчанию

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

# Удаление всех правил во всех таблицах
#
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
#
# Удаление пользовательских правил во всех таблицах
#
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

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

# Разрешаем трафик на loopback-интерфейс
iptables -A INPUT -i lo -j ACCEPT

# Запрещаем доступ к веб-серверу из внешней сети
iptables -A INPUT -i eth0 -p tcp --dport 80 -j REJECT

# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 172.22.4.0/24 -j MASQUERADE

# Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Запрещаем доступ снаружи во внутреннюю сеть
# iptables -A FORWARD -i eth0 -o eth1 -j REJECT

# Заворачиваем http на прокси SQUID
#iptables -t nat -A PREROUTING -i eth1 ! -d 172.22.4.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:3128

# Заворачиваем http на прокси Dansguardian
iptables -t nat -A PREROUTING -i eth1 ! -d 172.22.4.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:8081

2

progmo, начни с политик по-умолчанию

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

И прочтения этой. темы:
http://linuxforum.ru/viewtopic.php?id=13140
Также сюда:
http://linuxforum.ru/viewtopic.php?pid=176106#p176106

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

3

Как изначально все запретить понятно. На прокси трафик тоже завернут. Вопрос как разрешить доступ во внешку по нужным портам (какие точно не знаю, поэтому для начала все) адресам 172.22.4.2-172.22.4.29?
Ну и их трафик по 80 порту также заруливать на прокси.

4

Так не делается.
Уже сколько раз говорили, золотое правило админа - запрещаем всё, открываем по мере необходимости.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

5

newzenon пишет:

Так не делается.
Уже сколько раз говорили, золотое правило админа - запрещаем всё, открываем по мере необходимости.

Так не делается потому что это дурной тон или в принципе невозможно?! Насколько я понимаю все же первое ab Так почему бы не подсказать человеку если знаешь решение вместо того чтобы убеждать в чем то.

Выше я писал что пока не знаю какие порты на нужных машинах нужно открыть... Экспериментировать никто не даст, поэтому и надо открыть все, только нужным машинам... А не как сейчас все у всех.

6 (19.01.2012 11:02:21 отредактировано Kettler)

Вроде как то так

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle
 
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
 
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT

#Маскардинг в инет и локалку
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Разрешаем dns серверу
iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

#Разрешаем пинговать узлы интернета
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j ACCEPT

#Разрешаем серверу http
iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -j ACCEPT

#Разрешаем серверу ftp
iptables -A INPUT -i eth0 -p tcp --sport 21 --dport 21 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 21 --dport 21 -j ACCEPT

#Разрешаем серверу ssh
iptables -A INPUT -i eth0 -p tcp --dport 2022 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 2022 -j ACCEPT

iptables -A FORWARD -s 172.22.4.1-172.22.4.29 -o eth0 -j ACCEPT
iptables -A FORWARD -i  eth0 -d 172.22.4.1-172.22.4.29 -j ACCEPT

# Заворачиваем http на прокси SQUID
#iptables -t nat -A PREROUTING -i eth1 -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:3128

# Заворачиваем http на прокси Dansguardian
iptables -t nat -A PREROUTING -i eth1  -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:8081
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

7

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

Обозначу еще раз задачу:
- На роутере открыть ssh;
- Пускать трафик с адресов 172.22.4.2-172.22.4.30 по любым портам (пока) во внешку и обратно;
- Весь веб трафик заруливать на сквиду.

+ открыть спойлер

#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0

# Локальная сеть
export LAN=eth1
export LAN_IP_RANGE=172.22.4.0/24

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для новых, а так же уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем доступ из внутренней сети наружу
#$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT

# Разрешаем доступ из внутренней сети наружу по любым портам
iptables -A FORWARD -m iprange --src-range 172.22.4.2-172.22.4.30 -j ACCEPT

# Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT

# Маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE

# Открытие портов на роутере извне:
# **********************************************************************
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 2022 -j ACCEPT

# Открытие 443 порта
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT

# Заворачиваем http на прокси SQUID
iptables -t nat -A PREROUTING -i eth1 ! -d $LAN -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:3128

8

progmo пишет:

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

Обозначу еще раз задачу:
- На роутере открыть ssh;
- Пускать трафик с адресов 172.22.4.2-172.22.4.30 по любым портам (пока) во внешку и обратно;
- Весь веб трафик заруливать на сквиду.

+ открыть спойлер

#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0

# Локальная сеть
export LAN=eth1
export LAN_IP_RANGE=172.22.4.0/24

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для новых, а так же уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем доступ из внутренней сети наружу
#$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT

# Разрешаем доступ из внутренней сети наружу по любым портам
iptables -A FORWARD -m iprange --src-range 172.22.4.2-172.22.4.30 -j ACCEPT

# Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT

# Маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE

# Открытие портов на роутере извне:
# **********************************************************************
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 2022 -j ACCEPT

# Открытие 443 порта
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT

# Заворачиваем http на прокси SQUID
iptables -t nat -A PREROUTING -i eth1 ! -d $LAN -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:3128

Забыли 53 порт. Без него не одна страница не откроется.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

9

Вроде работает. Но пока открыл доступ из локалки всем, а не выбранным адресам. Как лучше сделать?!

Да, еще наверно мне очень нужно написать 2 конфига.
В одном: доступ к веб трафику есть у всех из локалки, а порты открыты только у избранных.
В другом: доступ к веб трафику и порты открыты только у избранных.

+ открыть спойлер

#!/bin/sh

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0

# Локальная сеть
export LAN=eth1
export LAN_IP_RANGE=172.22.4.0/24

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Закрываем изначально ВСЁ (т.е. изначально все что не разрешено - запрещено):
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback и внутренней сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Разрешить форвардинг для новых, а так же уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT

# Разрешаем доступ из внутренней сети наружу по любым портам только указанным адресам
#iptables -A FORWARD -m iprange --src-range 172.22.4.2-172.22.4.30 -j ACCEPT

# Запрещаем доступ снаружи во внутреннюю сеть
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT

# Маскарадинг
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE

#
# Открытие портов на роутере извне:
#
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 2022 -j ACCEPT

# Открываем ftp
$IPT -A INPUT -i $WAN -p tcp --dport 21 -j ACCEPT

# Открытие 443 порта
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT

# Разрешаем dns серверу
$IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT

# Проброс rpd к db-server-ikc
$IPT -t nat -A PREROUTING -p tcp -d 93.93.138.ХХХ --dport 3389 -j DNAT --to-destination 172.22.4.201:3389
$IPT -t nat -A POSTROUTING -p tcp -d 172.22.4.201 --dport 3389 -j SNAT --to-source 172.22.4.200

# Заворачиваем http на прокси DG
$IPT -t nat -A PREROUTING -i $LAN ! -d $LAN_IP_RANGE -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.22.4.200:8081

10

Kettler пишет:

Забыли 53 порт. Без него не одна страница не откроется.

Открываются любые.