1

Я применил следующие правила из текстового файла с именем «iptables.save» к iptables.

Но, к моему ужасу, я обнаружил, что IP-адрес 107.22.26.176 все еще может получить доступ к моему серверу через TCP.

Что я сделал не так? Порядок правил неправильный?

Спасибо за любой совет.

iptables.save
===================

*filter

-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -s 107.20.0.0/14 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT

Update1: вот вывод iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             loopback/8          reject-with icmp-port-unreachable 

DROP       all  --  ec2-107-20-0-0.compute-1.amazonaws.com/14  anywhere            

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request 
LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: ' 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere 

Update2: я думаю, что знаю почему. Я использую Cloudflare для разрешения моего доменного имени, поэтому iptables видит только IP-адреса Cloudflare вместо IP-адресов посетителей. Мой вопрос сейчас таков: есть ли способ для iptables увидеть реальные IP-адреса? Благодарю.

2 ответа2

1

Отвечая на второй вопрос - ваш обратный прокси-сервер (как я полагаю, это и есть cloudflare) должен дать вам HTTP-заголовок, сообщающий вам фактический IP-адрес подключения - x-forwarded-for.

http://en.wikipedia.org/wiki/X-Forwarded-For

Однако это означает, что iptables не является подходящим инструментом для работы. Вам необходимо отфильтровать эти соединения на уровне приложения (в конфигурации вашего веб-сервера, основываясь на значении этого заголовка http). Или, возможно, у cloudflare есть свой способ блокировать IP-адреса по периметру.

0

Первое правило INPUT не должно быть «Принять все». Все остальные правила теряют силу. Попробуйте поставить первое правило iptables.save в конце или просто удалите его. Затем выполните команду восстановления снова.

В качестве альтернативы вы можете ввести:

iptables -D INPUT -i lo -j ACCEPT

в терминале

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .