Как заблокировать все порты, кроме 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 ПРИНЯТЬ ------ Это не работает!
user71169

Ответы:


25

Во первых то! это символ НЕ

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

Во-вторых, написанные вами правила могут не дать ожидаемых результатов. Вы отбрасываете все, включая ответ на соединение через порт 80. Таким образом, вы не сможете подключиться к нему, говорит в целях веб-сервера.

Эти правила разрешают RELATED и ESTABLISHED соединения, поэтому веб-сервер должен функционировать, если это именно то, что вы пытаетесь сделать.

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параметром (в этом случае ПРИНЯТЬ). Если он не найдет соответствия, он вернется к политике по умолчанию и отбросит пакет.

Обратите внимание, что с помощью этого обходного пути любые субдомены будут заблокированы. Например, с этим методом у вас все будет работать на www.mydomain.com, но ваш поддомен, скажем, www.sub.mydomain.com не будет открываться для ошибок DNS.


Это должно быть работой, но это не так. Я так запутался.
user71169

Что не работает? Разрешает ли он все входящие пакеты или нет? Можете ли вы обновить свой вопрос с выводом iptables -nvL?
mtak

Почему голосование против? У меня это работает в производстве, поэтому я на 100% уверен, что это работает.
mtak

Сожалею! Это не я, кто-то это сделал :)) Да, ты точно такой же, как я, но это не работа. Вот почему я должен сделать вопрос.
user71169

2
Не делай этого снова ssh.
Ашеш
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.