1

У меня есть внутренний NAS, который я никогда не хочу иметь возможность устанавливать исходящее соединение ни с чем, кроме SSH.

Я считаю, что следующее правило на моем маршрутизаторе будет блокировать весь исходящий трафик для моего NAS на 192.168.1.100:

iptables -A OUTPUT - источник 192.168.1.100 -m состояние --state NEW -j DROP

Что мне неясно, так это как разрешить исходящее TCP-соединение через порт 22.

1 ответ1

0

Указанное вами правило может блокировать доступ, а может и не работать - обратите внимание, что вы использовали «-A», что означает добавление правила в конец таблицы. Если есть более раннее правило, разрешающее доступ, то оно переопределит правило. Кроме того, правило, которое у вас есть, излишне сложное.

Чтобы ответить на вопрос, который вы задали,

iptables -I OUTPUT -j DROP
iptables -I OUTPUT -p tcp --dport 22 -j ACCEPT

Это устанавливает правило в начале входной таблицы для удаления всего трафика. Затем он вставляет перед ним правило, разрешающее исходящие соединения SSH. К сожалению, это вряд ли будет делать то, что вы хотите, потому что (а) это означает, что любые службы, которые вы используете на NAS, также не будут работать, и (б) поиск DNS не будет работать и (в) блокировка ICMP может сломать вещи - хотя это работает большую часть времени.

В зависимости от того, что именно вы пытаетесь сделать, вы можете настроить правила так, чтобы они разрешали ICMP, входящие соединения и SSH и соединения следующим образом:

   iptables -I OUTPUT -m state --state NEW -j DROP
   iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   iptables -I OUTPUT -p icmp -j ACCEPT
   iptables -I OUTPUT -p tcp --dport 22 -j ACCEPT
   iptables -I OUTPUT -p tcp --dport 53 -j ACCEPT
   iptables -I OUTPUT -p udp --dport 53 -j ACCEPT

Отмечу, что эти правила ориентированы на исходящий трафик. Хотя это может работать надежно, часто лучше обрабатывать входящий трафик, особенно если вы знаете диапазоны IP-адресов и / или порты, к которым следует подключаться. Вы бы сделали это, используя цепочку INPUT. Может быть что-то вроде

iptables -I INPUT -j DROP
iptables -I INPUT -p tcp --sport 53 -j ACCEPT
iptables -I INPUT -p udp --sport 53 -j ACCEPT
iptables -I INPUT -p tcp --sport 22 -j ACCEPT
iptables -I INPUT -s 192.168.0.0/16 -j ACCEPT
iptables -I INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -I INPUT -s 172.16.0.0/20 -j ACCEPT

Это позволит пользователям вашей локальной сети (при условии, что они находятся в общем блоке RFC1918) обмениваться данными с вашим устройством по всем протоколам и разрешать ICMP, DNS и SSH из любой точки мира.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .