По моей информации, лучше не использовать команду:
iptables -A INPUT -s example.com -j DROP
Так как example.com
будет заменен в реальном времени на IP-адрес, который не будет охватывать все возможные IP-адреса.
Но если я использую:
iptables -A INPUT -m string --string "example" --algo kmp -j DROP
Взято из этого ответ и я сам это протестировал, тогда мне больше не нужно беспокоиться о подстановке ip, потому что «example» будет соответствовать «example.com» и заблокирует его.
Так что если iptables
работает только с ip адресами, почему во втором случае работает с именами?
Вы не можете искать example.com
в URL-адресе, поскольку большинство веб-сайтов теперь работают исключительно через HTTPS.
Да, в вашем примере iptables
решит example.com
при первом вызове и в случае изменения его IP-адреса это правило больше не будет работать, но вы можете решить его, запустив, например, скрипт cron, который разрешает example.com, и если есть новый IP-адрес, он затем добавляется в ваши правила iptables через -I
или -A
.
Если вы используете -m string --string example
, он будет соответствовать всем IP-пакетам, в которых полезная нагрузка содержит строку example
.
Если вы переходите на страницу через HTTP, а страница содержит слово example
, страница отображается только частично, потому что ваше правило отбрасывает пакет, содержащий слово example
.
Правило также может нарушить работу многих других протоколов, использующих простой текст. Он также может разорвать зашифрованные соединения, если зашифрованная полезная нагрузка будет соответствовать example
.
Вы должны использовать фильтрующий прокси для блокировки вашего трафика, он точен и не вызывает нежелательных побочных эффектов.
Если вы не хотите внедрять фильтрующий прокси, то вариант для бедных - блокировать DNS-запросы для вашего целевого домена:
РЕДАКТИРОВАТЬ Удалено .com
из-за того, что пакеты DNS содержат не точки, а индикаторы длины.
iptables -I OUTPUT -p udp --dport 53 -m string --string example -j DROP
Это отбросит DNS-запросы для вашего целевого домена, эффективно блокируя доступ к этим доменам. Клиенты будут ждать ответа DNS по тайм-ауту, поэтому блокировка довольно агрессивна.
Потому что это образец для струнных. Да, цель у тебя есть. Но! Если вы попытаетесь найти что-нибудь, кроме "example" на google.com, вы тоже не сможете. Будьте осторожны при использовании этого параметра.
Так как example.com
должен присутствовать в заголовок большинства запросов к серверу на example.com:
Если вы отправили электронное письмо, вы поставите to: john@example.com
в заголовке письма.
Если вы сделаете что-нибудь HTTP запрос против example.com, после разрешения DNS минимальный запрос должен содержать целевой хост:
host example.com
example.com has address 123.45.78.89
DNS-запрос выполняется на DNS-сервере, не обязательно на example.com. (если не кешируется!)
nc 123.45.67.89 80 <<eoRequest
GET /index.html HTTP/1.0
Host: example.com
eoRequest
Конечно, твой iptable
Правило отбрасывает только пакет заголовка, но следующий пакет не будет понят сервером, поэтому он будет отброшен самим сервером. Журналы сервера и окно клиента могут запрашивать что-то вроде 400 Bad Request