У меня проблемы с блокировкой доступа определенных IP-адресов к портам HTTP / HTTPS через iptables
на моем веб-сервере CentOS 7.7.
Проблема в том, когда я добавляю IP-адрес в iptables
и подтвердите, что это указано в правилах, это не блокирует IP-адрес от доступа к HTTP / HTTPS. Однако это делает заблокируйте их от всего остального (ping, SSH, telnet и т. д.).
Ноты:
В этой системе нет NAT или переадресации.
Есть только lo
и eth0
интерфейсы.
Сайты есть на Cloudflare, но пожалуйста прочти нижние ноты.
Это мои текущие правила (с 1.2.3.4 IP для блокировки):
# iptables -L -v --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 783 120K ACCEPT all -- lo any anywhere anywhere
2 15 780 drop all -- eth0 any 1.2.3.4 anywhere
3 0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-reply
4 0 0 ACCEPT icmp -- any any anywhere anywhere icmp destination-unreachable
5 0 0 ACCEPT icmp -- any any anywhere anywhere icmp time-exceeded
6 0 0 ACCEPT icmp -- any any anywhere anywhere icmp echo-request limit: avg 10/sec burst 5
7 0 0 drop icmp -- any any anywhere anywhere
8 224 18088 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:http
9 432 58244 ACCEPT tcp -- eth0 any anywhere anywhere tcp dpt:https
10 0 0 drop all -- eth0 any 1.2.3.4 anywhere
11 260 204K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
12 275 19648 drop all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2771 packets, 634K bytes)
num pkts bytes target prot opt in out source destination
Chain drop (4 references)
num pkts bytes target prot opt in out source destination
1 290 20428 DROP all -- any any anywhere anywhere
Как указано выше, это блокирует IP 1.2.3.4 для всего на моем сервере, кроме доступа к моим веб-сайтам.
Единственное, что я могу думать о том, что потенциально может вызвать проблему или сбой во всем этом, - это тот факт, что мои сайты находятся за Cloudflare. Но даже тогда у меня есть модуль mod_cloudflare установлен, что в основном означает, что он показывает "реальные IP-адреса посетителей" и не IP-адреса Cloudflare в журналах Apache.
Как я это тестирую, я добавляю 1.2.3.4 в брандмауэр, как указано выше, подтверждаю его присутствие в правилах, tailf
журналы Apache, и я вижу, что этот IP-адрес все еще очищает мои веб-сайты.
Есть ли у кого-нибудь идеи о том, что я делаю неправильно?
РЕДАКТИРОВАТЬ №1: Согласно обновлениям сообщения, я переместил drop 1.2.3.4
ниже ACCEPT anywhere
но это по-прежнему не блокирует доступ IP-адреса к HTTP / HTTPS на сервере. Я наклеил свой новый iptables
правилом выше, размещая каплю как до, так и после ACCEPT.
РЕДАКТИРОВАТЬ № 2: Похоже, что это проблема исключительно Cloudflare. Поскольку я только что протестировал это в домене, который не использует DNS Cloudflare, и он блокирует доступ HTTP / HTTPS с IP-адреса, как и ожидалось.
Mod_cloudflare_module предназначен только для Apache или вашего веб-сервера, чтобы видеть исходный IP-адрес. Не IPTables.
IPTables не знает о таком модуле.
Тем не менее, вы блокируете, а затем принимаете все на eth0. Это могло быть из-за этого (не уверен). Кроме того, это eth0 действительно интерфейс / ip, связанный с ответом на запрос к вашей веб-службе (httpd или другой)
Я бы сохранил эту конфигурацию для запуска и попробовал сделать следующее: