[[ Правила iplables для сервера OpenVZ ]]

Правила iplables для сервера OpenVZ

#!/bin/bash
 
#######################################################################################################
### Переменные окружения
#######################################################################################################
 
IPT="/sbin/iptables"
 
WAN1_IF="eth0"           # внешний интерфейс
WAN1_IP="91.189.82.156"  # внешний IP адрес
 
VPS_LAN="192.168.0.0/24" # внутренняя сеть VPS
 
LO_IF="lo"               # loopback-интерфейс
LO_IP="127.0.0.1"        # loopback-адрес
LOOPBACK="127.0.0.0/8"   # loopback-петля
 
POLICY="ACCEPT"          # политика по умолчанию (ACCEPT/DROP)
 
#######################################################################################################
### Сброс правил
#######################################################################################################
 
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F
 
$IPT -P INPUT $POLICY
$IPT -P FORWARD $POLICY
$IPT -P OUTPUT $POLICY
 
modprobe ip_conntrack ip_conntrack_enable_ve0=1
modprobe ip_conntrack_ftp
 
#######################################################################################################
### Переброс портов в VPS
#######################################################################################################
 
## VPS ns1 (DNS)
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 53 -i $WAN1_IF -j DNAT --to-destination 192.168.0.11:53
$IPT -t nat -A PREROUTING -p udp -d $WAN1_IP --dport 53 -i $WAN1_IF -j DNAT --to-destination 192.168.0.11:53
$IPT -t nat -A PREROUTING -p tcp -d 91.189.83.156 --dport 53 -i $WAN1_IF -j DNAT --to-destination 192.168.0.11:53
$IPT -t nat -A PREROUTING -p udp -d 91.189.83.156 --dport 53 -i $WAN1_IF -j DNAT --to-destination 192.168.0.11:53
 
## VPS proxy (nginx)
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 80 -i $WAN1_IF -j DNAT --to-destination 192.168.0.10:80
 
## VPS site (ftp, ssh, mail, smtp, pop3, imap)
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 12021 -i $WAN1_IF -j DNAT --to-destination 192.168.0.20:21
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 12022 -i $WAN1_IF -j DNAT --to-destination 192.168.0.20:22
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 25 -i $WAN1_IF -j DNAT --to-destination 192.168.0.20:25
$IPT -t nat -A PREROUTING -p tcp -d $WAN1_IP --dport 143 -i $WAN1_IF -j DNAT --to-destination 192.168.0.20:143
 
 
#######################################################################################################
### Правила фильтрации
#######################################################################################################
 
## защита ssh через sshguard
$IPT -N sshguard
# Максимум 2 новых запроса в минуту для одного ip
$IPT -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
$IPT -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
 
## Общий список заблокированных IP
$IPT -N blacklist
$IPT -F blacklist
$IPT -A blacklist -s 211.48.62.181 -j DROP
$IPT -A blacklist -s 211.48.62.182 -j DROP
$IPT -A blacklist -s 202.30.143.105 -j DROP
$IPT -A blacklist -s 203.116.61.214 -j DROP
$IPT -A blacklist -s 82.100.5.251 -j DROP
$IPT -A blacklist -s 62.24.64.34 -j DROP
$IPT -A blacklist -s 212.70.224.47 -j DROP
$IPT -A blacklist -s 212.70.224.66 -j DROP
$IPT -A blacklist -s 195.239.64.17 -j DROP
$IPT -A blacklist -s 213.166.201.0/24 -j DROP
$IPT -A blacklist -s 203.116.61.0/24 -j DROP
$IPT -A blacklist -s 203.116.255.0/24 -j DROP
$IPT -A blacklist -s 77.222.41.0/24 -j DROP
 
## Базовая проверка пакетов
$IPT -N common-check
$IPT -F common-check
 
# Отбрасываем невалидные пакты
$IPT -A common-check -m state --state INVALID -j DROP
$IPT -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A common-check -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A common-check -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A common-check -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
 
## Правила для входящего трафика c VPS
$IPT -N vps-in
$IPT -F vps-in
# можно всё :)
$IPT -A vps-in -j ACCEPT
 
## Входящие icmp запросы (пинг etc)
$IPT -N icmp-in
$IPT -F icmp-in
 
$IPT -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPT -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
 
## Исходящие icmp запросы (пинг etc)
$IPT -N icmp-out
$IPT -F icmp-out
 
## Разрешаем icmp-reply в ответ на icmp-request'ы
$IPT -A icmp-out -p icmp --icmp-type 8 -j ACCEPT
$IPT -A icmp-out -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A icmp-out -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
 
 
## Разрешает пакеты с уже установленный соединений
$IPT -N statefull
$IPT -F statefull
 
$IPT -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT
 
## Веб траффик
$IPT -N http-in
$IPT -F http-in
 
# Максимум 3 новых запроса в секунду для одного ip
$IPT -A http-in -m state --state NEW -m recent --name HTTP --update --seconds 1 --hitcount 3 -j DROP
$IPT -A http-in -m state --state NEW -m recent --name HTTP --set -j ACCEPT
$IPT -A http-in -j ACCEPT
 
## Почтовый траффик (smtp)
$IPT -N smtp-in
$IPT -F smtp-in
 
# Максимум 2 новых запроса в секунду для одного ip
$IPT -A smtp-in -m state --state NEW -m recent --name SMTP --update --seconds 1 --hitcount 2 -j DROP
$IPT -A smtp-in -m state --state NEW -m recent --name SMTP --set -j ACCEPT
$IPT -A smtp-in -j ACCEPT
 
 
#######################################################################################################
### Применение правил фильтрации
#######################################################################################################
 
## Задание правил для входящего траффика
$IPT -A INPUT -j common-check
$IPT -A INPUT -p tcp --dport 22 -j sshguard
$IPT -A INPUT -s $VPS_LAN -j vps-in
$IPT -A INPUT -p icmp -j icmp-in
# Переправляем входящие на петлю, при его включении заметно улучшение отклика при ssh-авторизации
# (хотя это сомнительно)
$IPT -A INPUT -i $LO_IF -d $LOOPBACK -j ACCEPT
$IPT -A INPUT -j statefull
 
## Задание правил для сквазного траффика в VPS
$IPT -A FORWARD -j common-check
$IPT -A FORWARD -j blacklist
$IPT -A FORWARD -i $WAN1_IF -p tcp --dport 80 -j http-in
$IPT -A FORWARD -i $WAN1_IF -p tcp --dport 25 -j smtp-in
$IPT -A FORWARD -s $VPS_LAN -j ACCEPT
$IPT -A FORWARD -j statefull
$IPT -t nat -A POSTROUTING -s $VPS_LAN -o $WAN1_IF -j SNAT --to $WAN1_IP
 
## Задание правил для исходящего траффика
$IPT -A OUTPUT -j common-check
$IPT -A OUTPUT -s $VPS_LAN -j ACCEPT
$IPT -A OUTPUT -p icmp -j icmp-out
$IPT -A OUTPUT -o $LO_IF -j ACCEPT
$IPT -A OUTPUT -o $WAN1_IF -j ACCEPT
$IPT -A OUTPUT -j statefull

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
133 +6 = 
 
howto/iptables/правила_для_сервера_openvz.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki