YDen
21-11-2024, 03:34
Добрый всем. Плиз подскажите. Поднимаю на debian 12 почтовик mailcow. Debian стоит на ВМ Proxmox. Порты с роутера проброшены. Вопрос по iptables.
Этот скрипт будет оптимален для настройки iptables для работы почтового сервера?
#!/bin/bash
IPTABLES="/sbin/iptables"
#################################################################################################### ###
# Настройки
#################################################################################################### ###
# !!! НЕОБХОДИМО ИЗМЕНИТЬ НА СОБСТВЕННЫЕ !!!
IF_OUT="ens18" # Имя интерфейса подключенного к интернет
#################################################################################################### ###
IF_LO="lo"
ADDR_LO="127.0.0.1"
LOOPBACK="127.0.0.0/8"
sysctl -w net.ipv4.ip_forward=1 # Настройка ядра, для разрешения на продвижение пакетов
sysctl -w net.ipv4.ip_dynaddr=1 # Позволяет выполнять корректно MASQUERADE при динамическом изменении ip адреса
modprobe ip_nat_ftp # Для правильной работы активного режима FTP
#################################################################################################### ###
# Сброс и установка правил по умолчанию
#################################################################################################### ###
$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
$IPTABLES -P INPUT DROP # По умолчанию блокирует входящий трафик
$IPTABLES -P FORWARD DROP # По умолчанию блокирует проходящий трафик
$IPTABLES -P OUTPUT ACCEPT # По умолчанию разрешает исходящий трафик
#################################################################################################### ###
# Создание цепочек правил
#################################################################################################### ###
# Базовая проверка пакетов - невалидные пакты (common-check)
$IPTABLES -N common-check
$IPTABLES -F common-check
$IPTABLES -A common-check -m state --state INVALID -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Обработка входящих icmp запросов (icmp-in)
$IPTABLES -N icmp-in
$IPTABLES -F icmp-in
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
# Разрешает уже установленные соединения (statefull)
$IPTABLES -N statefull
$IPTABLES -F statefull
$IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
#################################################################################################
# Задание правил для входящего трафика
#################################################################################################
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A INPUT -j common-check
## Разрешаем icmp запросы к серверу (ping)
$IPTABLES -A INPUT -j icmp-in
## Разрешаем SSH (!из интернета)
$IPTABLES -A INPUT -p tcp --dport 22 -i $IF_OUT -j ACCEPT
#Разрешаем обращение к почтовым портам
Denis Yu, [20.11.2024 23:13]
iptables -A INPUT -p tcp -m multiport --dports 25,110,143,80,443,465,587,993,995,11211 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 25,110,143,80,443,465,587,993,995,11211 -j ACCEPT
## Разрешаем локальный интрефейс
$IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A INPUT -j statefull
#################################################################################################
# Задание правил для исходящего трафика
#################################################################################################
# По умолчанию исходящий трафик разрешен
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A OUTPUT -j common-check
#################################################################################################
# Задание правил для продвижения пакетов
#################################################################################################
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A FORWARD -j common-check
## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A FORWARD -j statefull
##################################################################################################
iptables-save > /etc/iptables/rules.v4
echo done!
Благодарю
Этот скрипт будет оптимален для настройки iptables для работы почтового сервера?
#!/bin/bash
IPTABLES="/sbin/iptables"
#################################################################################################### ###
# Настройки
#################################################################################################### ###
# !!! НЕОБХОДИМО ИЗМЕНИТЬ НА СОБСТВЕННЫЕ !!!
IF_OUT="ens18" # Имя интерфейса подключенного к интернет
#################################################################################################### ###
IF_LO="lo"
ADDR_LO="127.0.0.1"
LOOPBACK="127.0.0.0/8"
sysctl -w net.ipv4.ip_forward=1 # Настройка ядра, для разрешения на продвижение пакетов
sysctl -w net.ipv4.ip_dynaddr=1 # Позволяет выполнять корректно MASQUERADE при динамическом изменении ip адреса
modprobe ip_nat_ftp # Для правильной работы активного режима FTP
#################################################################################################### ###
# Сброс и установка правил по умолчанию
#################################################################################################### ###
$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
$IPTABLES -P INPUT DROP # По умолчанию блокирует входящий трафик
$IPTABLES -P FORWARD DROP # По умолчанию блокирует проходящий трафик
$IPTABLES -P OUTPUT ACCEPT # По умолчанию разрешает исходящий трафик
#################################################################################################### ###
# Создание цепочек правил
#################################################################################################### ###
# Базовая проверка пакетов - невалидные пакты (common-check)
$IPTABLES -N common-check
$IPTABLES -F common-check
$IPTABLES -A common-check -m state --state INVALID -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# Обработка входящих icmp запросов (icmp-in)
$IPTABLES -N icmp-in
$IPTABLES -F icmp-in
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
# Разрешает уже установленные соединения (statefull)
$IPTABLES -N statefull
$IPTABLES -F statefull
$IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
#################################################################################################
# Задание правил для входящего трафика
#################################################################################################
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A INPUT -j common-check
## Разрешаем icmp запросы к серверу (ping)
$IPTABLES -A INPUT -j icmp-in
## Разрешаем SSH (!из интернета)
$IPTABLES -A INPUT -p tcp --dport 22 -i $IF_OUT -j ACCEPT
#Разрешаем обращение к почтовым портам
Denis Yu, [20.11.2024 23:13]
iptables -A INPUT -p tcp -m multiport --dports 25,110,143,80,443,465,587,993,995,11211 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 25,110,143,80,443,465,587,993,995,11211 -j ACCEPT
## Разрешаем локальный интрефейс
$IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A INPUT -j statefull
#################################################################################################
# Задание правил для исходящего трафика
#################################################################################################
# По умолчанию исходящий трафик разрешен
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A OUTPUT -j common-check
#################################################################################################
# Задание правил для продвижения пакетов
#################################################################################################
## Проверяем пакеты (!первое правило в цепочке)
$IPTABLES -A FORWARD -j common-check
## Разрешаем установленные соединения (!последнее правило в цепочке)
$IPTABLES -A FORWARD -j statefull
##################################################################################################
iptables-save > /etc/iptables/rules.v4
echo done!
Благодарю