7

Я хотел бы заблокировать сайты с помощью iptables . Как мне это сделать и как сохранить правила iptables ?

6 ответов6

10

Блокировка сайтов с помощью правил iptables - очень плохая идея, главным образом потому, что iptables (как и большинство брандмауэров) имеет дело с IP-адресами, а связь между сайтом и его IP-адресом (ами) довольно рыхлая:

  1. Один сайт может иметь много IP-адресов, которые можно менять довольно часто. После создания правил iptables, даже если вы указали имя сайта как часть правила, используется первый IP-адрес в этот момент . Если адрес сайта изменится, ваши правила iptables будут устаревшими.

  2. Один IP-адрес может содержать много сайтов (и это часто случается). Это будет происходить только чаще из-за нехватки IP-адресов. Если вы блокируете IP-адрес, вы блокируете все размещенные на нем сайты.

Итак, хотя другие ответы объясняют, как вы это делаете, я призываю вас искать какое-то другое решение. Например, установка прозрачного http-прокси даст то, что вам нужно. Этот прозрачный HTTP-прокси HOWTO немного устарел, но поможет вам начать.

Если у вас есть прозрачный прокси, вы можете добавить к нему произвольные правила для блокировки определенных сайтов, вам даже не нужно использовать функцию кэширования squid, если вы этого не хотите.

Существуют и другие способы блокирования сайтов (другие брандмауэры, прокси-серверы и т.д.), Но правила iptables - один из худших возможных способов справиться с этим.

1

Есть несколько способов ограничения сайтов https.

1- Squid Proxy

2- IPtables

С прокси-сервером Squid

-> Откройте конфигурацию squid в моем случае (vim /etc/squid/squid.conf)

-> Разместите правила, как определено.

acl badsite dstdomain .facebook.com .soundcloud.com .playit.pk .songs.com

http_reply_access deny badsite # Эта строка блокирует HTTP

http_access deny CONNECT badsite # Этот блок строк HTTPS

-> После этого перезапустите свой кальмар

С Iptables нужно поставить правила как определите здесь

iptables -N STREAM

iptables -I OUTPUT -m string --string "www.facebook.com" --algo bm --от 1 - до 600 -j ПОТОКА

iptables -I OUTPUT -m string --string "facebook.com" --algo bm - от 1 - до 600 -j STREAM

iptables -I FORWARD -m строка --string "www.facebook.com" --algo bm --от 1 - до 600 -j ПОТОКА

iptables -I FORWARD -m строка --string "facebook.com" --algo bm - от 1 - до 600 -j STREAM iptables -A STREAM -j REJECT

1

Вы можете использовать сопоставление строк iptables для достижения этой цели:

iptables -A OUTPUT -p tcp -m string --string "block-me.com" --algo kmp -j REJECT

-A OUTPUT добавляет следующее правило в цепочку OUTPUT .

-m string --string "block-me.com" --algo kmp указывает iptables искать строку block-me.com с использованием алгоритма сопоставления Кнута-Морриса-Пратта.

Самый простой способ восстановить ваши iptables при перезагрузке компьютера - это установить пакет iptables-persistent если он доступен в вашей системе. Если вы установите пакет после установки новых правил, вас спросят, хотите ли вы сохранить используемые в настоящее время правила для постоянного использования. iptables-persistent основном просто загружает правила, сохраненные в файлах /etc/iptables/rules.v4 и /etc/iptables/rules.v6 .

Если вы снова измените свои правила, чтобы сохранить изменения и восстановить их при перезагрузке, вы должны сохранить их в вышеупомянутых файлах, используя команды

iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6

Теперь они будут восстановлены при перезагрузке.

На самом деле вам не нужен iptables-persistent . Этот вопрос имеет другое, почти такое же простое решение.

Обратите внимание, что вам нужно запустить iptables-save от имени пользователя root или с sudo следующим образом:

sudo bash -c "iptables-save > /etc/iptables/rules.v4"

Если вы просто запустите sudo iptables-save > /etc/iptables/rules.v4 вы получите сообщение "access denied" для rules.v4 .

0

Хорошо, допустим, вы хотите заблокировать IP-адрес 192.168.1.5, просто введите это в командной строке в вашем сценарии оболочки:

iptables -A INPUT -s 192.168.1.5 -j DROP

Затем вы можете заблокировать выходящий IP-адрес 192.168.1.2 с сервера с помощью этой команды:

iptables -A OUTPUT -d 192.168.1.2  -j DROP

и это должно заблокировать этот сайт, чтобы он вас больше никогда не беспокоил. надеюсь это поможет.

0

В gentoo, чтобы сохранить добавленные вами правила iptables, используйте

/etc/init.d/iptables save

Однако вам также необходимо убедиться, что сценарий инициализации iptables (целью которого является перезагрузка правил) запускается при загрузке:

rc-update add iptables default 

Обе команды должны быть запущены от имени пользователя root (через sudo, если он у вас установлен)

-1
-A INPUT -p tcp -m tcp -d www.facebook.com -j DROP

мы только что изучили это сегодня

Debian 7

если вы хотите разрешить им пинговать этот сайт, просто добавьте --dport 80,443 после имени сайта

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