1

РЕДАКТИРОВАТЬ: Рабочий скрипт для использования iptables для блокировки всего входящего / исходящего трафика, кроме ssh (порт 22) и RDP (порт 3389):

#!/bin/sh
# Block all incoming/outgoing traffic except for ssh and rdp

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains

# Set default filter policy to DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Allow DNS
iptables -A INPUT --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

# Allow unlimited traffic on loopback (localhost)
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow ssh (22) and rdp (3389)
iptables -A INPUT  -p tcp -m multiport --dports 22,3389 -j ACCEPT

# Continue accepting packets after connection is established (and moved to some random >1024 port)
iptables -A INPUT --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED -j ACCEPT

Отменить:

#!/bin/sh

# Set default filter policy to ACCEPT
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains

1 ответ1

1

Вы пропустите что-то вроде:

iptables -A INPUT  --match state --state ESTABLISHED,RELATED --jump ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT

продолжить прием пакетов после установления соединения. Когда это происходит, соединение на стороне сервера переносится на некоторый случайный порт> 1024, поэтому приема пакетов на порты 22 и 3389 недостаточно.

Чтобы разрешить поиск DNS:

iptables -A INPUT  --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

Чтобы установить правило для нескольких портов одновременно (например, --sports или --dports), вы должны включить multiport модуль. В противном случае iptables будет жаловаться на неизвестную опцию «--dports». Итак, чтобы разрешить входящие соединения SSH и RDP в одной строке:

iptables -A INPUT --proto tcp -m multiport --dports 22,3389 --jump ACCEPT

Кроме того, поскольку вы устанавливаете политику по умолчанию в DROP, вам не нужны последние две строки, в которых вы дополнительно устанавливаете DROP для входных / выходных соединений. Я понимаю, что они заставляют вас чувствовать себя в большей безопасности, но это все равно, что задавать имя хоста, а также задание cron - устанавливать его на всякий случай каждую минуту. Фактически это может привести к проблемам в будущем, когда вы забудете об этих двух строках и добавите некоторые другие правила, и будете озадачены, почему они не работают.

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