Как заблокировать все порты, кроме 80,443, с помощью iptables? [Дубликат]

15

Блокировать все порты (вход и выход) легко, но сложно со словом «кроме». Я не знаю никаких правил, которые удовлетворяют условию.

PS: я знаю, что в этом вопросе нет ничего нового. Но на самом деле я не нашел ничего полезного. Итак, помогите мне, пожалуйста!

user71169
источник
Разве вы не можете закрыть ВСЕ порты, а затем ОТКРЫТЬ один порт в следующей строке?
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
cybernard
источник
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

Это должно дать вам то, что вам нужно

Fazer87
источник
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.

mtak
источник
Это должно быть работой, но это не так. Я так запутался.
user71169
Что не работает? Разрешает ли он все входящие пакеты или нет? Можете ли вы обновить свой вопрос с выводом iptables -nvL?
mtak
Почему голосование против? У меня это работает в производстве, поэтому я на 100% уверен, что это работает.
mtak
Сожалею! Это не я, кто-то это сделал :)) Да, ты точно такой же, как я, но это не работа. Вот почему я должен сделать вопрос.
user71169
2
Не делай этого снова ssh.
Ашеш