2014-06-17 09:06:40 +0000 2014-06-17 09:06:40 +0000
15
15

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

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

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

Ответы (3)

25
25
25
2014-06-18 01:46:30 +0000

Сначала символ “НЕ”.

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
5
5
5
2014-06-17 09:12:54 +0000
# 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

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

3
3
3
2014-06-17 09:11:51 +0000

Вы можете установить действие по умолчанию в 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.

Похожие вопросы

6
10
5
37
3