Undel
16-09-2009, 12:33
Добый день!
Не получается настроить IPTables, чтобы он пропускал vpn-трафик. Использую вот такой скрипт:
#!/bin/sh
# Конфигурация внешнего интерфейса
INET_IP="11.22.33.44"
INET_IFACE="eth0"
INET_BROADCAST="255.255.255.0"
#
# Конфигурация внутреннего интерфейса
LAN_IP="192.168.100.253"
LAN_IP_RANGE="192.168.100.0/24"
LAN_IFACE="eth1"
#
# Конфигурация localhost
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
IPT="/sbin/iptables"
#
# Номера непривилегированных портов
NONPRIPORTS="1024:65535"
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_gre
/sbin/modprobe ip_nat_pptp
/sbin/modprobe ip_conntrack_pptp
#
# форвардинг
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/sysctl -w net.ipv4.ip_forward=1
#
# Сбрасываем правила и удаляем цепочки.
$IPT -F
$IPT -X
# Политика по умолчанию.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD ACCEPT
#Logging
$IPT -A INPUT -p tcp -j ULOG
$IPT -A FORWARD -p tcp -j ULOG
$IPT -A INPUT -p 47 -j ULOG
$IPT -A FORWARD -p 47 -j ULOG
#
$IPT -A INPUT -i $LO_IFACE -j ACCEPT
$IPT -A OUTPUT -o $LO_IFACE -j ACCEPT
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i $LO_IFACE -j DROP
# Отбрасываем все неидентифицированные пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
#
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#Правила для VPN-PPTPD
$IPT -A FORWARD -p 47 -s 192.168.100.0/24 -j ACCEPT
$IPT -I INPUT -p tcp --dport 1723 -j ACCEPT
$IPT -I INPUT -p 47 -j ACCEPT
$IPT -I OUTPUT -p 47 -j ACCEPT
$IPT -A INPUT -i ppp0 -j ACCEPT
$IPT -A OUTPUT -o ppp0 -j ACCEPT
# Правило для внутренней сети:
$IPT -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LAN_IFACE -d $LAN_IP_RANGE -j ACCEPT
$IPT -A INPUT -p tcp -i $LAN_IFACE --dport 3128 -j ACCEPT
# Правила защиты от распространенных атак:
$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 INPUT -p UDP -i $INET_IFACE --dport 138 -j DROP
$IPT -A INPUT -p UDP -i INET_IFACE --dport 113 -j REJECT
$IPT -A INPUT -p UDP -i INET_IFACE --sport 67 --dport 68 -j ACCEPT
$IPT -A INPUT -p UDP -j RETURN
$IPT -A OUTPUT -p UDP -o $INET_IFACE -j ACCEPT
$IPT -A INPUT --fragment -p ICMP -j DROP
$IPT -A OUTPUT --fragment -p ICMP -j DROP
# Разрешаем ICMP-соединение.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $LAN_IFACE -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $LAN_IFACE -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-reply -j ACCEPT
# Разрешаем передачу пакета «некорректный параметр» - используется, если в заголовке пакета содержится недопустимая запись или CRC пакета не совпадает с указанной
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# Разрешаем DNS.
$IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 53 --sport $NONPRIPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 53 --sport $NONPRIPORTS -j ACCEPT
$IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport $NONPRIPORTS --sport 53 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65353 --sport 53 -j ACCEPT
# Разрешаем AUTH-запросы на удаленные сервера, на свой - запрещаем.
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 113 --sport $NONPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $NONPRIPORTS --sport 113 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP
# Открываем необходимые нам порты:
# FTP (21)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 21 --sport $NONPRIPORTS -j ACCEPT
# SMTP (25)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 25 --sport $NONPRIPORTS -j ACCEPT
# POP3 (110)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 110 --sport $NONPRIPORTS -j ACCEPT
# HTTP/HTTPS клиент (80, 443)
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --sport $NONPRIPORTS -j ACCEPT --dports 80,443
#ICQ (5190)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 5190 --sport $NONPRIPORTS -j ACCEPT
#QIP-аккаунт (5222)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 5222 --sport $NONPRIPORTS -j ACCEPT
#SSH
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 --sport $NONPRIPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $NONPRIPORTS --sport 22 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 --sport 1020:1023 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 1020:1023 --sport 22 -j ACCEPT ! --syn
#NAT:
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
Удаленному клиенту (Windows XP) не удается подключиться(ошибка 800).
Подскажите, как же надо написать правила, чтобы vpn-трафик проходил через фаервол?
P.S. система Debian Lenny.
Не получается настроить IPTables, чтобы он пропускал vpn-трафик. Использую вот такой скрипт:
#!/bin/sh
# Конфигурация внешнего интерфейса
INET_IP="11.22.33.44"
INET_IFACE="eth0"
INET_BROADCAST="255.255.255.0"
#
# Конфигурация внутреннего интерфейса
LAN_IP="192.168.100.253"
LAN_IP_RANGE="192.168.100.0/24"
LAN_IFACE="eth1"
#
# Конфигурация localhost
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
IPT="/sbin/iptables"
#
# Номера непривилегированных портов
NONPRIPORTS="1024:65535"
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_gre
/sbin/modprobe ip_nat_pptp
/sbin/modprobe ip_conntrack_pptp
#
# форвардинг
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/sysctl -w net.ipv4.ip_forward=1
#
# Сбрасываем правила и удаляем цепочки.
$IPT -F
$IPT -X
# Политика по умолчанию.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD ACCEPT
#Logging
$IPT -A INPUT -p tcp -j ULOG
$IPT -A FORWARD -p tcp -j ULOG
$IPT -A INPUT -p 47 -j ULOG
$IPT -A FORWARD -p 47 -j ULOG
#
$IPT -A INPUT -i $LO_IFACE -j ACCEPT
$IPT -A OUTPUT -o $LO_IFACE -j ACCEPT
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i $LO_IFACE -j DROP
# Отбрасываем все неидентифицированные пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
#
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#Правила для VPN-PPTPD
$IPT -A FORWARD -p 47 -s 192.168.100.0/24 -j ACCEPT
$IPT -I INPUT -p tcp --dport 1723 -j ACCEPT
$IPT -I INPUT -p 47 -j ACCEPT
$IPT -I OUTPUT -p 47 -j ACCEPT
$IPT -A INPUT -i ppp0 -j ACCEPT
$IPT -A OUTPUT -o ppp0 -j ACCEPT
# Правило для внутренней сети:
$IPT -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LAN_IFACE -d $LAN_IP_RANGE -j ACCEPT
$IPT -A INPUT -p tcp -i $LAN_IFACE --dport 3128 -j ACCEPT
# Правила защиты от распространенных атак:
$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 INPUT -p UDP -i $INET_IFACE --dport 138 -j DROP
$IPT -A INPUT -p UDP -i INET_IFACE --dport 113 -j REJECT
$IPT -A INPUT -p UDP -i INET_IFACE --sport 67 --dport 68 -j ACCEPT
$IPT -A INPUT -p UDP -j RETURN
$IPT -A OUTPUT -p UDP -o $INET_IFACE -j ACCEPT
$IPT -A INPUT --fragment -p ICMP -j DROP
$IPT -A OUTPUT --fragment -p ICMP -j DROP
# Разрешаем ICMP-соединение.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type source-quench -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $LAN_IFACE -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $LAN_IFACE -j ACCEPT
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type echo-reply -j ACCEPT
# Разрешаем передачу пакета «некорректный параметр» - используется, если в заголовке пакета содержится недопустимая запись или CRC пакета не совпадает с указанной
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE --icmp-type parameter-problem -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE --icmp-type parameter-problem -j ACCEPT
# Разрешаем DNS.
$IPT -A OUTPUT -p udp -m udp -o $INET_IFACE --dport 53 --sport $NONPRIPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 53 --sport $NONPRIPORTS -j ACCEPT
$IPT -A INPUT -p udp -m udp -i $INET_IFACE --dport $NONPRIPORTS --sport 53 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65353 --sport 53 -j ACCEPT
# Разрешаем AUTH-запросы на удаленные сервера, на свой - запрещаем.
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 113 --sport $NONPRIPORTS -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport $NONPRIPORTS --sport 113 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 113 -j DROP
# Открываем необходимые нам порты:
# FTP (21)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 21 --sport $NONPRIPORTS -j ACCEPT
# SMTP (25)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 25 --sport $NONPRIPORTS -j ACCEPT
# POP3 (110)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 110 --sport $NONPRIPORTS -j ACCEPT
# HTTP/HTTPS клиент (80, 443)
$IPT -A OUTPUT -p tcp -m tcp -m multiport -o $INET_IFACE --sport $NONPRIPORTS -j ACCEPT --dports 80,443
#ICQ (5190)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 5190 --sport $NONPRIPORTS -j ACCEPT
#QIP-аккаунт (5222)
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 5222 --sport $NONPRIPORTS -j ACCEPT
#SSH
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
$IPT -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --set -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 --sport $NONPRIPORTS -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport $NONPRIPORTS --sport 22 -j ACCEPT ! --syn
$IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 22 --sport 1020:1023 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -o $INET_IFACE --dport 1020:1023 --sport 22 -j ACCEPT ! --syn
#NAT:
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
Удаленному клиенту (Windows XP) не удается подключиться(ошибка 800).
Подскажите, как же надо написать правила, чтобы vpn-трафик проходил через фаервол?
P.S. система Debian Lenny.