LinuxForum.Fans
Тема

Открытие портов через iptables

Автор: FirewallFan 15 сообщений 16120 просмотров
#89285

Доброго времени суток!

Злыми силами было поставлено задание поднять интернет-шлюз на Debian. До определенного момента проблем не возникало. Система, сетевые карты и Сквид работают так как нужно. Осталось малое - настроить порты для почты и бухгалтерских программ.

Как я изначально настраивал iptables:

Показать
# Создаем собственно файл - назовем его например netfilter
# Помещаем скрипт в /etc/init.d/
# Делаем файл исполнимым: chmod +x /etc/init.d/netfilter
# Прописываем в файл стандартный заголовок для shell-скриптов: #!/bin/bash
# Добавляем скрипт в автозагрузку: update-rc.d netfilter defaults

Базовый конфиг:

iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i to -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT

Здесь все должно работать, т.к. если прописать DROP всех типов пакетов, то интернет перестает раздаваться.

Сайты и мануалы, которые я читал на эту тему:

Показать

Варианты открытия портов почты, которые я пробовал:

Показать

#1
#iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 195.2.89.146

#2
#iptables -A FORWARD -o eth0 -m state --state NEW -p tcp --dport 25 -j ACCEPT
#iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT
#iptables -A FORWARD -o eth0 -m state --state NEW -p tcp --dport 110 -j ACCEPT
#iptables -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT

# 3
#iptables -A PREROUTING -i eth1 -p tcp --sport 8110 --dport 110 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --sport 110 --dport 8110 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --sport 8110 --dport 110 -j ACCEPT

#iptables -A PREROUTING -i eth1 -p tcp --sport 8025 --dport 25 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --sport 25 --dport 8025 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --sport 8025 --dport 25 -j ACCEPT

# 4
#iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --destination-port 25,110 -j ACCEPT
#iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --source-port 25,110 -j ACCEPT
#iptables -A INPUT -i eth1 -p tcp --dport 110 -j ACCEPT
#iptables -A OUTPUT -o eth1 -p tcp --sport 110 -j ACCEPT
#iptables -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT
#iptables -A OUTPUT -o eth1 -p tcp --sport 25 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --sport 110 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --sport 25 -j ACCEPT

# 5
#LOCALNET=192.168.0.0/32
#iptables -A FORWARD -p tcp -s $LOCALNET -d smtp.mail.ru --dport 25 -j ACCEPT
#iptables -A FORWARD -p tcp -s smtp.mail.ru -d $LOCALNET --sport 25 -j ACCEPT
#iptables -A FORWARD -p tcp -s $LOCALNET -d pop.mail.ru --dport 110 -j ACCEPT
#iptables -A FORWARD -p tcp -s pop.mail.ru -d $LOCALNET --sport 110 -j ACCEPT
#iptables -t nat -A POSTROUTING -p tcp -s $LOCALNET --dport 110 -j MASQUERADE
#iptables -t nat -A POSTROUTING -p tcp -s $LOCALNET --dport 25 -j MASQUERADE

#6
#iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 8110 -j DNAT --to-destination 94.100.177.6:110
#iptables -A FORWARD -d 94.100.177.6 -j ACCEPT
#iptables -A FORWARD -s 94.100.177.6 -j ACCEPT
#iptables -t nat -A POSTROUTING -d 94.100.177.6 -j SNAT --to-source 192.168.0.1

#iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 8025 -j DNAT --to-destination 94.100.177.1:25
#iptables -A FORWARD -d 94.100.177.1 -j ACCEPT
#iptables -A FORWARD -s 94.100.177.1 -j ACCEPT
#iptables -t nat -A POSTROUTING -d 94.100.177.1 -j SNAT --to-source 192.168.0.1

#iptables -t nat -A PREROUTING -p tcp -d 195.2.89.146 -dport 8110 -j DNAT -to-destination 192.168.0.101:8110
#iptables -t nat -A POSTROUTING -p tcp -dst 192.168.0.101 -dport 8110 -j SNAT -to-source 195.2.89.146

#7
#iptables -A INPUT -i eth0 -p tcp ! --syn --source-port 110 --destination-port 8110 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --source-port 110 --destination-port 80 -j ACCEPT

#iptables -A INPUT -i eth0 -p tcp ! --syn --source-port 25 --destination-port 8025 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p tcp --source-port 25 --destination-port 80 -j ACCEPT

#8
#iptables -A FORWARD -p tcp --dport 110 -i eth1 -j ACCEPT
#iptables -A FORWARD -p tcp --dport 25 -i eth1 -j ACCEPT
#iptables -A FORWARD -p tcp --sport 110 -i eth0 -j ACCEPT
#iptables -A FORWARD -p tcp --sport 25 -i eth0 -j ACCEPT

#9
#iptables -A PREROUTING -t nat -p tcp -i eth1 --dport 110 -j DNAT --to-source 195.2.89.146:110
#iptables -A PREROUTING -t nat -p tcp -i eth1 --dport 25 -j DNAT --to-source 195.2.89.146:25


# 10
#iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
#iptables -A OUTPUT -i eth0 -p tcp --dport 110 -j ACCEPT

# 11
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.101:110
#iptables -t nat -A PREROUTING -i eth0 -p udp --dport 110 -j DNAT --to-destination 192.168.0.101:110

Для применения параметров я делал рестарт Нетфильтра и рестарт сети (.../netfilter restart; .../networking restart )
Соответственно в почтовых клиентах пробовался как вариант с прямым доступом к почтовому серверу, так и вариант с прописыванием в клиент айпи прокси сервера, в зависимости от типа правила.
С виндовым сервером почта с тех же клиентских машин идельно работала после обычного портмаппинг правила в Usergate.

Я сделал какую-то очень детскую или глупую ошибку? Не могут же все эти правила быть неверными, часть из них взята с этого же форума.
ps. система - Debian Lenny, ядро 2.6.26, версия iptables - 1.4.2, графического интерфейса нет, только консоль.

#89338

А вообще проброс пакетов включен?

cat /proc/sys/net/ipv4/ip_forward должен давать "1". wink

#89378

Нарисуй схему что куда помогу а всё что выше бред.
Главное что куда и покажи скоко интерфейсов на шлюзе.
Отпиши порты бухгалтера.

#89392
dwak написал:
А вообще проброс пакетов включен?

cat /proc/sys/net/ipv4/ip_forward должен давать "1".

Да, конечно включен

Kettler написал:
Нарисуй схему что куда помогу а всё что выше бред.
Главное что куда и покажи скоко интерфейсов на шлюзе.
Отпиши порты бухгалтера.

В шлюзе 2 интерфейса, eth0 - смотрит в интернет, eth1 - смотрит в локалку

локальный адрес шлюза - 192.168.0.1
внешний адрес шлюза - 1.2.3.4
адрес клиентской машины - 192.168.0.2

для почты -

порт 110 на pop.smth.org
порт 25 на smtp.smth.org


для бухгалтерии -

Исходный пакет (UDP-протокол)
Адрес источника: 192.168.0.2
Порт источника: 1024-65535
Адрес назначения: 192.168.0.1
Порт назначения: 87

NAT-пакет (UDP-протокол)
Адрес источника: 1.2.3.4
Порт источника: 1024-65535
Адрес назначения: Интернет-адрес налоговой конторы
Порт назначения: 87

ps. главное хотя бы один работающий пример, это все должно быть однотипно
pps. спасибо.

#89399
text
nano /home/nat
#вписываем туда

#!/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 --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

# разрешаем локальный траффик для loopback и внутренней сети 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 -A INPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED. # Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

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

# Разрешаем dns серверу iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -o eth0 -p udp --dport 53 -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 iptables -A INPUT -i eth0 -p tcp --sport 20 --dport 20 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 20 --dport 20 -j ACCEPT

#Ну а тут разрешаем пользователям внутренней сети доступ в инет iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 53 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --dport 80,443,110,25,143,5190 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --sport 80,110,443,25,143,5190 -j ACCEPT

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

#Бхгалтерия iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 87 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 87 -j ACCEPT

Сохраняем! Назначаем права chmod +x /home/nat

Не забываем у клиентов вписать днс вручную Выполним ./home/nat

Ну если что сам подправишь под свои нужды.
Если что пиши помогу.

#89403

Спасибо большое! буду пробовать

#89405
FirewallFan написал:
Спасибо большое! буду пробовать

Проверено smile а так если что пиши wink

#89455

Kettler, не подскажете хорошее подробное руководство по иптейблс (лучше если на русском , с примерами)

#89484
k0xy написал:
Kettler, не подскажете хорошее подробное руководство по иптейблс (лучше если на русском , с примерами)

Главное понять прохождение пакетов.
http://ru.wikipedia.org/wiki/Iptables
Готовые примеры google.ru
А так пишите помогу.

#89487

Перенёс в "помощь системному администратору"

#89488

По теме:
рекомендую не только тс, но и многим прочитать вот эту документацию по iptables http://www.opennet.ru/docs/RUS/iptables/ для меня это как библия.

#89576
.snif написал:
По теме:
рекомендую не только тс, но и многим прочитать вот эту документацию по iptables http://www.opennet.ru/docs/RUS/iptables/ для меня это как библия.

Согласен но пока не поймешь прохождение дальше не стоит вкуривать.

#89679
Kettler написал:
Проверено smile а так если что пиши wink

Спасибо огромное, все заработало!
Все-таки главной моей ошибкой было то, что я не прописывал DNS на клиентских машинах.

#89692

И не токо :)

#322627

Мне вот 1 не понятно, зачем указывать

text
iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --sport 80,110,443,25,143,5190 -j ACCEPT

запросы же идут не с этих портов, это же запросы с клиента а не сервера, как я понимаю запросы идут с эфемерного диапазона 32768-61000 . И при этом уже ведь присудствует правило а с эфимерного диапозона 32768-61000 . И при этом уже ведь присудствует правило

text
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

или я не правильно понимаю ?

Войдите или зарегистрируйтесь, чтобы ответить.