LinuxForum.Fans
Тема

iptables перенаправление http и https трафика

Автор: srsd 3 сообщений 1130 просмотров
16.02.2015 07:34 #414428

День добрый!
Запутался с правила, дальше не куда, уже не могу без помощи ибо в любой своей строчке вижу ошибки.
Не могу настроить правильно iptables.
У меня есть некий ресурс который запущен на eth0 8443 порту, мне необходимо что бы входящие соединения на http и https (т.е. 80 и 443) перенаправлялись на 8443.
Вернее даже проще чтобы при попытке доступа на http перенаправлялись на https, а вот уже с https на 8443, а сами порты 80 и 8443 были закрыты для доступа из вне.

Пока оставил старые правила:

Показать

#!/bin/sh
### Script iptables ###
# Очищаем предыдущие записи
iptables -F
# Установка политик по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Разрешаем локальный интерфейс и внутреннию сеть
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
# Отбрасываем кривые пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Блокирование DDoS по 80 порту веб-сервера
iptables -A INPUT -i eth0 -p tcp --syn --dport 80 -m state --state NEW -m recent --name ddos --set
iptables -A INPUT -i eth0 -p tcp --syn --dport 80 -m state --state NEW -m recent --name ddos --update --seconds 60 --rttl --hitcount 100 -j DROP
# Защита от спуфинга
iptables -I INPUT -i eth0 -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
# Защита от попытки открыть входящее соединение TCP не через SYN
iptables -I INPUT -i eth0 -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
# Закрываемся от кривого icmp
iptables -I INPUT -i eth0 -p icmp -f -j DROP
# REL, ESTB allow
iptables -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
# Разрешаем получать данные от DHCP-сервера. (Allow DHCP)
iptables -A INPUT -i eth0 -p UDP --dport 68 --sport 67 -j ACCEPT
# Блокирование доступа тем, кто превышает заданное количество подключений
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 3600 --hitcount 5 -j REJECT
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set -j ACCEPT
# Пресечение попыток взлома сервисов
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --update --seconds 3600 --hitcount 8 -j REJECT
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --set
iptables -A INPUT -p tcp --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешение главных типов протокола ICMP
iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type 12 -j ACCEPT
#Разрешить ICMP запросы для ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
# Opening ports
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
# Перенаправление входящего трафика с 80 порта на 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
16.02.2015 09:44 #414455
text

# Перенаправление входящего трафика с 80 порта на 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443

Вот эти правила у вас никогда работать не будут, ибо при прохождении пакетов по цепочке пакет обрабатывается первым правилом, подходящим по критериям к пакету и выходит из текущей цепочки в следующую. Т.е. последующие правила на пакет не влияют.

Поэтому убирайте вот эти правила:

text

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Оставьте вот так:

text

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT
# Перенаправление входящего трафика с 80 порта на 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443

Ну и сами проверьте прочие правила, указанные выше.

17.02.2015 08:18 · отредактировано #414548

Сделал сегодня следующие:

text

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 8000 -j MARK --set-mark 1
iptables -I INPUT  -i eth0 -m mark --mark 1 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT

Осталось сообразить как перенаправить https на тот же порт.
И думаю правильнее сделать так, что бы при доступе на ресурс (будь то http://site.ru , https://site.ru , www.site.ru) всегда перенаправлялось на https://site.ru, можно ли сделать подобное используя только iptables?

Попробовал:

text

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8443
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 8443 -j MARK --set-mark 1
iptables -I INPUT  -i eth0 -m mark --mark 1 -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT

HTTPS работает а на 80 порту глухо.

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