Як заблокувати всі порти, крім 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.