Як заблокувати всі порти, крім 80,443, за допомогою iptables? [дублікат]


15

Блокувати всі порти (входи та виходи) легко, але важко зі словом "крім". Я не знаю жодних правил, які б відповідали умові.

PS: Я знаю, що це питання не є новим. Але насправді я не знайшов нічого, що допомагає. Отже, допоможіть мені, будь ласка!


Ви не можете закрити ВСІ порти, а потім відкрити один порт у наступному рядку?
— sinni800

Я роблю це: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------ Це не працює!
— користувач71169

Відповіді:


25

По-перше! - символ НЕ.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

По-друге, правила, які ви написали, можуть не мати очікуваних результатів. Ви кидаєте все, включаючи відповідь на з'єднання на порт 80. Отже, ви не зможете підключитися до нього, це говорить для цілей веб-сервера.

Ці правила дозволяють пов'язані і встановлені з'єднання, тому веб-сервер повинен функціонувати, якщо це насправді те, що ви намагаєтеся зробити.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
Не !слід уникати так \!, якщо використовується оболонка Bash?
— Крістіан Цюпіту

@ CristianCiupitu Ні, цього не потрібно уникати. У вас може статися щось дивне, але на моєму голові мені не потрібно цього уникати.
— кібернард

Я перевірив вихід "iptables -nvL", щоб побачити пакунки у зв'язку. Здається, це працює, ваші правила. Але я не можу перевірити, чи справді це працює чи ні, крім використання деяких додатків, які використовують ці порти. Порт для використання додатків не означає, що він використовує лише цей порт. Отже, будь-яку пропозицію перевірити?
— user71169

1
@cybernard, так, ти маєш рацію. Рівнину !не потрібно уникати. Вибачте за помилкову тривогу.
— Крістіан Цюпіту

3
@MohammadShahid Правила не є постійними автоматично, перезавантажте систему, і вона піде, і ви можете увійти. Вам потрібно додати 22 до списку портів, якщо ви хочете підтримувати ssh-з'єднання.
— кібернард

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Це має дати вам те, що вам потрібно


4
Пам’ятайте, якщо ви підключені через SSH, вам слід відкрити порт TCP 22
— Maximilian Ast

Так, не забувайте про ваш порт SSH, напевно, слід додати свій порт SSH, перш ніж встановити політику за замовчуванням для відмови. ;)
— Джеймс Літтл

3

Ви можете встановити дію за замовчуванням на DROP, а потім створити правила виключення, щоб дозволити 80 і 443, наприклад:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables буде проходити список "винятків", поки не знайде збіг. Потім він виконає дію, вказану -jпараметром (ACCEPT у цьому випадку). Якщо він не знайде збігу, він повернеться до політики за замовчуванням і скине пакет.

Зауважте, що при цьому вирішенні будь-які субдомени будуть заблоковані. Наприклад, за допомогою цього методу ви будете працювати з www.mydomain.com нормально, але ваш піддомен, скажімо, www.sub.mydomain.com не відкриється для помилок DNS.


Це має бути робота, але це не так. Я так плутаю.
— користувач71169

Що не працює? Чи дозволяє це всі вхідні пакети, або жоден? Чи можете ви оновити своє запитання результатом iptables -nvL?
— mtak

Чому голосування "за"? У мене це працює, тому я впевнений, що він працює на 100%.
— mtak

Вибачте! Це не я, хтось це робив :)) Так, ти впевнена, що я є, але це не працює. Ось чому я мушу поставити питання.
— user71169

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