У меня есть несколько общедоступных веб-серверов и некоторые домашние машины Ubuntu. Я поддерживаю несколько доменов конкретно для контроля вещей как MySQL и Кэш-память. Идеально я смог бы соединиться с MySQL, Кэш-памятью, и т.д. от моих домашних машин при запрете всех остальных доступа.
Таким образом, мои iptables в настоящее время:
ACCEPT tcp -- home ip 0.0.0.0/0 tcp dpt:3306
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:222
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
ACCEPT all -- server 1 ip 0.0.0.0/0
ACCEPT all -- server 2 ip 0.0.0.0/0
ACCEPT all -- server 3 ip 0.0.0.0/0
DROP all -- 198.245.49.225 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я хотел бы расширить свой iptables, таким образом, что я могу получить доступ ко всему из дома. Я полагаю, что это - вероятно, хорошая практика для добавления строки для моего домашнего IP для каждого порта, который я хочу вместо того, чтобы предоставить мой домашний IP доступ к каждому порту. Но возможно это не имеет значения. Дополнительно я хочу выполнить вещи как phpMemcachedAdmin, не требуя пароля.
Таким образом, я запустил несколько поисков Google о том, как запретить доступа к домену к целому миру. Я полагаю, что вставил строку, позволяющую мой IP на порте 80 чуть выше доступа запрета строки к домену к целому миру, и (скрещенные пальцы) я должен блокировать всех, но меня.
В сообщениях, которые я видел в своих поисках Google, было сказано, что Вы могли заблокировать домен через -m string "Host: domain.com"
или через --string "domain.com"
. Ни один, кажется, не работает. Вот то, что я попробовал:
sudo iptables -I 9 -p tcp --dport 80 -m string "Host: domain.com" --algo bm -j DROP
sudo iptables -I 9 -p tcp --dport 80 -m string "domain.com" --algo bm -j DROP
sudo iptables -I 9 -p tcp --dport 80 --string "domain.com" --algo bm -j DROP
Первые две ошибки с Неверным аргументом 'Host:...' и последняя ошибка на неизвестной опции "-строка".
Для создания вопросов немного более сложными, мой домашний IP является динамичным не статичный. Таким образом, было бы хорошо иметь (но не важное) способность позволить мой домашний IP через домен DynDNS, у меня есть установка. У меня есть сценарий для остановки и запуска iptables поэтому, если мне нужно, я могу всегда останавливать и перезапускать его, чтобы вынудить IP обновить. (Я читал в нескольких местах, которые iptables только проверяет на IP для домена при запуске.)
Я приветствую любой связанный с безопасностью совет относительно использования iptables для Вашего стандартного веб-сервера также.
Спасибо
Дополнения 17.03.14: Я нашел синтаксическую ошибку в своей iptables строке - -m string
должен быть -m string --string
. Теперь кажется, что у меня есть iptables распознавание домена, от которого я хочу не допустить людей. Однако проблема затем стала порядком правил iptables.
Мой новый iptables стал:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- Server 1 IP 0.0.0.0/0
ACCEPT all -- Server 2 IP 0.0.0.0/0
ACCEPT all -- Server 3 IP 0.0.0.0/0
DROP all -- 198.245.49.225 0.0.0.0/0
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 STRING match "str_for_matching" ALGO name bm TO 65535
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:222
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Идея состояла бы в том, чтобы поймать мой IP перед ОТБРАСЫВАНИЕМ, которое соответствует строке. Если ОТБРАСЫВАНИЕ является первой строкой затем, это ловит его, и я получаю 502 ошибки. Однако, если iptables - поскольку я перечислил затем запросы, проходят - мой домашний IP еще не находится в таблице правила.
Тот, который работы похожи на это:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- Server 1 IP 0.0.0.0/0
ACCEPT all -- Server 2 IP 0.0.0.0/0
ACCEPT all -- Server 3 IP 0.0.0.0/0
ACCEPT all -- My Home IP 0.0.0.0/0
ACCEPT all -- My Laptop IP 0.0.0.0/0
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 STRING match "str_to_match" ALGO name bm TO 65535
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 198.245.49.225 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:222
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
DROP all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я смог включать своего динамического дюйм/с путем простого использования их доменного имени DynDNS вместо IP.
Я мог, вероятно, сделать это ответом, но я хотел бы некоторый совет относительно лучшей практики с отношениями эта проблема.