Спроба використовувати iptables для блокування всього трафіку, крім SSH та RDP


1

EDIT: Робочий скрипт для використання 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

Ви пропускаєте щось подібне:

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 встановлювати його на всякий випадок на кожну хвилину. Насправді це може призвести до проблем у майбутньому, коли ви забудете про ці два рядки та додасте деякі інші правила, і будете спантеличені, чому вони не працюють.


Дякую за відповідь. Це допомогло прояснити речі, але у мене все ще виникають проблеми. Я вніс зміни, про які ви згадали, і додав логіку, щоб дозволити вихідним DNS-пошукам (відредагував сценарій у початковій публікації, щоб це відобразив). На жаль, я досі не можу перейти на цю скриньку. Будь-яка ідея, що ще може бути не так?
Беннет Лінч

@BennettLynch дякую за оновлення питання, будь ласка, перевірте мою редакцію щодо пошуку DNS. і дайте мені знати, чи допомогло це.
rsm

@BennettLynch Якщо це відповідає на ваше запитання, будь-ласка, нагородьте його зеленою галочкою (і, можливо, нагородою за корисність), інакше поясніть, що все ще не працює.
rsm

Дуже ціную вашу допомогу, але я, на жаль, не маю жодної удачі. Я оновив свою оригінальну публікацію з поточною версією сценарію, який я використовую. Не хотіли б ви спробувати його виконати, якщо у вас є середовище для безпечного тестування? В даний час я запускаю це на екземплярі EC2 і намагаюся пізніше перетворити його на екземпляр, але моя ssh спроба вимкнено. Мені потрібно перезавантажити екземпляр, щоб кожен раз скидати iptables.
Беннет Лінч

@BennettLynch я тестував його лише на ssh, тому я пропустив --dportsпроблему. будь ласка, перевір мою оновлену відповідь, частина о multiport.
rsm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.