Помогите дописать правила 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
Нужна помощь в настройке роутера
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
Как изначально все запретить понятно. На прокси трафик тоже завернут. Вопрос как разрешить доступ во внешку по нужным портам (какие точно не знаю, поэтому для начала все) адресам 172.22.4.2-172.22.4.29?
Ну и их трафик по 80 порту также заруливать на прокси.
Так не делается.
Уже сколько раз говорили, золотое правило админа - запрещаем всё, открываем по мере необходимости.
Так не делается.
Уже сколько раз говорили, золотое правило админа - запрещаем всё, открываем по мере необходимости.
Так не делается потому что это дурной тон или в принципе невозможно?! Насколько я понимаю все же первое :) Так почему бы не подсказать человеку если знаешь решение вместо того чтобы убеждать в чем то.
Выше я писал что пока не знаю какие порты на нужных машинах нужно открыть... Экспериментировать никто не даст, поэтому и надо открыть все, только нужным машинам... А не как сейчас все у всех.
Вроде как то так
#!/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
Изменил под себя готовый пример, не уверен что все правильно.
Обозначу еще раз задачу:
- На роутере открыть ssh;
- Пускать трафик с адресов 172.22.4.2-172.22.4.30 по любым портам (пока) во внешку и обратно;
- Весь веб трафик заруливать на сквиду.
Показать
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
Изменил под себя готовый пример, не уверен что все правильно.
Обозначу еще раз задачу:
- На роутере открыть 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 порт. Без него не одна страница не откроется.
Вроде работает. Но пока открыл доступ из локалки всем, а не выбранным адресам. Как лучше сделать?!
Да, еще наверно мне очень нужно написать 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
Забыли 53 порт. Без него не одна страница не откроется.
Открываются любые.