Здравствуйте, господа. Имеются некоторые сомнения в правильности (правильной последовательности) в написании своего свода правил iptables для домашнего роутера. В связи с этим, хотелось бы Вас попросить указать мне, в чём именно я неправ. Домашний роутер представляет собой обычный системник на основе Intel Atom N2800 со встроенной сетевушкой (eth0, смотрящей в локальную сеть), USB-сетевушкой (eth1, смотрящей в Интернет) и WiFi-адаптер (wlan0, работающий в режиме точки доступа и имеющий доступ как в локальную сеть, так и в Интернет, благодаря мосту). На роутере используется proftpd, transmission-daemon, nginx, mysql, php-fpm и т.д.
#!/bin/sh
##################################################
# Задаём часто используемые переменные #
##################################################
export WAN=eth1
export LAN=eth0
##################################################
# Разрешаем ядру перенаправлять сетевой трафик #
##################################################
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
##################################################
# Блокировка всего сетевого трафика #
##################################################
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
##################################################
# Очищаем все сетевые правила #
##################################################
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -t filter -X
##################################################
# Задаём сетевые правила для цепочки INPUT #
##################################################
# Настраиваем правила маршрутизации
iptables -A INPUT ! -i lo -d 127.0.0.0/24 -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i ${WAN} --match state --state ESTABLISHED,RELATED -j ACCEPT
# Отбрасываем ошибочные пакеты
iptables -A INPUT -m state --state INVALID -j DROP
iptables -I INPUT -m conntrack --ctstate INVALID -j DROP
# Отбрасываем фрагментированные пакеты
iptables -A INPUT -f -j DROP
# Защита от попытки открыть входящее соединение TCP не через SYN
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
# Защита от SYN-флуда
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p udp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p icmp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -j DROP
# Защита от сканеров портов
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# Защита от Ping of death
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Защита от спуфинга
iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
# Защита от некорректных ICMP
iptables -I INPUT -p icmp -f -j DROP
# Разрешаем главные типы протокола ICMP
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
# Чёрный список IP-адресов и их портов
iptables -A INPUT -s 5.45.75.10 -p tcp --dport 80 -j DROP
iptables -A INPUT -s 174.143.173.119 -p tcp --dport 80 -j DROP
iptables -A INPUT -s 61.231.91.253 -p tcp --dport 80 -j DROP
iptables -A INPUT -s 94.102.51.155 -p tcp --dport 80 -j DROP
# Настройка моста
iptables -A INPUT -i br0 -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
# Настраиваем доступ к определённым портам
iptables -A INPUT -i ${WAN} -p tcp -m multiport --ports 21,22,80,443,16843 -m state --state NEW -j ACCEPT
iptables -A INPUT -i ${WAN} -p udp -m multiport --ports 22,80,123,16843 -m state --state NEW -j ACCEPT
iptables -A INPUT -p TCP -i ${WAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ${WAN} -d 0/0 --dport 0:1023 -j DROP
##################################################
# Задаём сетевые правила для цепочки FORWARD #
##################################################
# Настраиваем правила маршрутизации
iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i br0 -o ${WAN} -j ACCEPT
iptables -A FORWARD -i ${WAN} -o br0 -j REJECT
# Отбрасываем ошибочные пакеты
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -I FORWARD -m conntrack --ctstate INVALID -j DROP
# Отбрасываем фрагментированные пакеты
iptables -A FORWARD -f -j DROP
# Выравниваем значение MTU во избежание глюков с сайтами
iptables -A FORWARD -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Защита от SYN-флуда
iptables -A FORWARD -p tcp --syn -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A FORWARD -p icmp -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A FORWARD -j DROP
# Защита от сканеров портов
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
# Защита от Ping of death
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 10/s --limit-burst 50 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
##################################################
# Задаём сетевые правила для цепочки OUTPUT #
##################################################
# Настраиваем правила маршрутизации
iptables -A OUTPUT ! -o lo -d 127.0.0.0/8 -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o ${WAN} --match state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Сбрасываем ошибочные пакеты
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables -I OUTPUT -m conntrack --ctstate INVALID -j DROP
# Сбрасываем фрагментированные пакеты
iptables -A OUTPUT -f -j DROP
# Разрешаем главные типы протокола ICMP
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT
# Настраиваем доступ к определённым портам
iptables -A OUTPUT -o ${WAN} -p tcp -m multiport --ports 21,80,443 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ${WAN} -p udp -m multiport --ports 22,80,123 -m state --state NEW -j ACCEPT
##################################################
# Задаём сетевые правила для цепочки POSTROUTING #
##################################################
# Маскируем внутренние IP под внешний для Интернета
iptables -A POSTROUTING -t nat -o ${WAN} -j MASQUERADE
Всё ли верно?
P.S. Да, и ещё вопрос вдогонку: на ПК, подключённому к роутеру по WiFi, установлен TightVNC Server для удалённого доступа к этому ПК извне. Но почему-то доступа нет - есть доступ к TightVNC Server только из локальной сети. Что следует убрать\добавить в iptables чтобы исправить ситуацию?
С уважением.