спрячьте под спойлер простынку
This.
OUTPUT уберите вообще. Это бред.
Особенно
-A OUTPUT -p tcp -m tcp -m state ! --tcp-flags FIN,SYN,RST,ACK SYN --state NEW -j DROP
и
-A OUTPUT -p icmp -f -j DROP
Что вы вообще пытаетесь этим блокировать, вы задумывались?
В форварде то же самое, ну уже разрешили ESTABLISHED,RELATED соединения, добавьте туда DNAT и успокойтесь...
-A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
порадовало. Интересно, оно вообще будет работать? На сколько я знаю, таким макаром до компа просто не достучаться, на маршрутизации порежет.
Если вам так хочется закрыться от ICMP флуда, это делается другими способами. Корректно
отфильтровать ICMP запросы - задачка не на три-четыре правила. Далеко не...
-A INPUT -p tcp -m tcp -m state ! --tcp-flags FIN,SYN,RST,ACK SYN --state NEW -j DROP
Этого я не понял. Если вы уже сбросили INVALID, зачем тратить время на дополнительный анализ глупостей?
Webmin я бы не стал открывать в мир без крайней на то необходимости.
Почему просто не сделать
-A INPUT -i eth1 -j ACCEPT
? Там есть что-то, что может повалить сервер? Ну, закройте доступ к очевидно лишним портам предварительно (3306 тот же).
-A FORWARD -o tun0 -j ACCEPT
не нужно (и даже вредно) - ошибётесь один раз, и трафик из интернета может оказаться в тоннеле.
-A FORWARD -d 172.16.4.0/24 -i eth1 -j ACCEPT
Что есть сеть 127.16.4.0/24 ?
-A FORWARD -p tcp -m tcp -s 172.16.4.0/24 --dport 5190 -j ACCEPT
Не понял. Если 172.16.... это "интернет" или тоннель, то DNAT это правило перекрывает, если нет, то как это вообще может очутится в FORWARD?
-A FORWARD -p tcp -m tcp -d 172.16.4.50/32 -i ppp+ --dport 3389 -j ACCEPT
Опять не понял. У вас ещё и VPN сервер стоит? Судя по INPUT - да. Тогда правила надо писать совсем не так, и это тема для отдельного разговора.
Короче, в ваших правилах сам чёрт ногу сломит.
Начните с простого набора, и добавляйте правила по необходимости(!!! а не по желанию).
Если нет времени тестировать вживую, пишите сюда. Помогу разобраться.
Ввиду того, что у вас внешний адрес находится на отдельном интерфейсе, использовать его в правилах нет никакого смысла - указывайте интерфейс.
Нат не трогал. Фильтры:
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp -i eth0 --dport 10000 -j ACCEPT
-A INPUT -p tcp -m tcp -i eth1 --dport 10000 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2202 --sport 1024:65535 -j ACCEPT
-A INPUT -p udp -m udp -s x.x.x.x/32 -i eth0 --dport 1194 -j ACCEPT
-A INPUT -p udp -m udp -s x.x.x.x/32 -i eth0 --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i eth+ -p tcp -m tcp --dport 1723 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m conntrack --ctstate DNAT,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -s 172.16.4.178/32 -j ACCEPT
-A FORWARD -s 172.16.4.54/32 -j ACCEPT
-A FORWARD -d 172.16.4.0/24 -i eth1 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.0/24 --dport 5190 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.13/32 --dport 21 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.0/24 --dport 9531 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.2/32 --dport 443 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.34/32 --dport 443 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.54/32 --dport 443 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.54/32 --dport 11371 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.247/32 -d 195.239.59.213/32 --dport 9210 -j ACCEPT
-A FORWARD -p tcp -m tcp -s 172.16.4.246/32 -d 195.239.59.213/32 --dport 9210 -j ACCEPT
-A FORWARD -p tcp -m tcp -d 172.16.4.248/32 -i eth1 --dport 3389 -j ACCEPT
COMMIT
Я не уверен, что не порезал что-то серьёзное... лучше бы ты сам хозяйским глазом просмотрел и переписал концовки.
Самое начало обоих цепочек должно остаться без изменения:
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT ...
-A INPUT -i eth+ -p tcp -m tcp --dport 1723 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT ...
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m conntrack --ctstate DNAT,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i tun0 -s сеть.удалённого/офиса -j ACCEPT // надеюсь, тоннель не маскарадится?
-A FORWARD ....
-A FORWARD -s 172.16.4.178/32 -j ACCEPT
-A FORWARD -s 172.16.4.54/32 -j ACCEPT
-A FORWARD -d 172.16.4.0/24 -i eth1 -j ACCEPT
-A FORWARD ...
COMMIT
В общем случае, я рекомендую соблюдать порядок правил:
1. Правила-ловушки. Печально, что ВЕСЬ трафик будет через них просеиваться, но это реально необходимо. Можно немного выиграть, разбив второй пункт на два, но не буду забивать тебе голову.
2. Правила, разрешающие уже установленные соединения. Предполагается, что установлены они с нашего разрешения, так что нет смысла тратить процессор на повторный анализ трафика.
3. Правила по входящим интерфейсам. (-i lo и иже с ними) Только абсолютно доверенные интерфейсы.
4. Правила по входящим портам. (--dport 80 и так далее)
5. Правила по адресам источника. (-s 192.168.0.0/16 и так далее)
6. Дальше любой другой бред, пришедший мне в голову.
Перед тем, как писать новое правило, сформулируй, нафига вообще козе боян. В три строчка: "Это правило делает вот это. Написано для того, чтобы работало вот это. Если его не будет, вот то сломается."
И проверь, не попадает ли оно в радиус уже написанных правил.