Я хотел бы заблокировать сайты с помощью iptables
. Как мне это сделать и как сохранить правила iptables
?
6 ответов
Блокировка сайтов с помощью правил iptables - очень плохая идея, главным образом потому, что iptables (как и большинство брандмауэров) имеет дело с IP-адресами, а связь между сайтом и его IP-адресом (ами) довольно рыхлая:
Один сайт может иметь много IP-адресов, которые можно менять довольно часто. После создания правил iptables, даже если вы указали имя сайта как часть правила, используется первый IP-адрес в этот момент . Если адрес сайта изменится, ваши правила iptables будут устаревшими.
Один IP-адрес может содержать много сайтов (и это часто случается). Это будет происходить только чаще из-за нехватки IP-адресов. Если вы блокируете IP-адрес, вы блокируете все размещенные на нем сайты.
Итак, хотя другие ответы объясняют, как вы это делаете, я призываю вас искать какое-то другое решение. Например, установка прозрачного http-прокси даст то, что вам нужно. Этот прозрачный HTTP-прокси HOWTO немного устарел, но поможет вам начать.
Если у вас есть прозрачный прокси, вы можете добавить к нему произвольные правила для блокировки определенных сайтов, вам даже не нужно использовать функцию кэширования squid, если вы этого не хотите.
Существуют и другие способы блокирования сайтов (другие брандмауэры, прокси-серверы и т.д.), Но правила iptables - один из худших возможных способов справиться с этим.
Есть несколько способов ограничения сайтов 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
Вы можете использовать сопоставление строк 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
.
Хорошо, допустим, вы хотите заблокировать 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
и это должно заблокировать этот сайт, чтобы он вас больше никогда не беспокоил. надеюсь это поможет.
В gentoo, чтобы сохранить добавленные вами правила iptables, используйте
/etc/init.d/iptables save
Однако вам также необходимо убедиться, что сценарий инициализации iptables (целью которого является перезагрузка правил) запускается при загрузке:
rc-update add iptables default
Обе команды должны быть запущены от имени пользователя root (через sudo, если он у вас установлен)
-A INPUT -p tcp -m tcp -d www.facebook.com -j DROP
мы только что изучили это сегодня
Debian 7
если вы хотите разрешить им пинговать этот сайт, просто добавьте --dport 80,443
после имени сайта