В первую очередь: я знаю об этом старом вопросе: iptables позволяют dyndns доменное имя и правила автоматического обновления, Но так или иначе оно не помогает мне.
Iptables на моем ПК работы настроены для отбрасывания всех запросов из Интернета за исключением нескольких выбранных IP адресов. Это вызвано тем, что мы поворачиваем кругом 10 000 нападений в день. Время формы ко времени я хотел бы к ssh в мой ПК работы из дома. Дома однако у меня нет статического IP.
Таким образом, я полагал, что регистрируюсь в dyndns и добавляю правило к /etc/iptables
для этого dynalias myUser.dynalias.net
:
# in /etc/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
# namesevers
-A RH-Firewall-1-INPUT -p 50 -d some.local.ip -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -d the.same.local.ip -j ACCEPT
# ...and so on...
# all connections already established (started outgoing from my machine)
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# allow local connections
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source some.local.ip/255.255.0.0 -j ACCEPT
# allow my dns
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source myuser.dynalias.net -j ACCEPT
# block all others (without answering - thus nobody is able to scan the network)
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT
Это работает, пока мой домашний IP не сбрасывается каждый день в полночь. Таким образом, по выходным я в основном завинчен и не могу войти в систему. Мое предположение, что я должен обновить правило регулярно (например, крон использования). Мой вопрос: Как я обновляю правило на регулярной основе? По некоторым причинам, когда я обновляю таблицу на рабочем системном использовании:
sudo iptables -D RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source ip.that's.listed.by.-L.option -j ACCEP
sudo iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source myUser.dynalias.net -j ACCEP
Я не могу ssh в свой ПК работы после того обновления. Единственная вещь, которая помогает, называет кого-то для перезагрузки моего ПК работы. Так или иначе изменения не вступят в силу без той перезагрузки несмотря на правило, перечисляемое правильно:
username@server:~/bin$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
DROP icmp -- anywhere anywhere icmp echo-request
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
# some stuff (e.g. nameserver)
# ....
DROP all -- anywhere anywhere
ACCEPT tcp -- 123-123-12-123.host.name.foo.bar.at anywhere state NEW tcp dpt:ssh
В этом списке нет никакого различия прежде и после обновления вообще - это просто не работает к ssh в ПК работы.
Несколько раз назад со мной стояли к той же проблеме, и мое решение состояло в том, чтобы создать шаблон iptables файлы правил, изменить на основе текущего dyndns получило IP, затем установите таблицы с iptable-restore
. Стандартная программа периодически тестировала IP и обновляла брандмауэр при необходимости.
Я отказался от такого подхода, когда коллега попросил использовать тот же ssh сервер и установку системы для двух дюйм/с, хотя не особенно трудный, заставьте меня передумать.
Я предложил бы некоторый другой способ приблизиться к проблеме.
Наиболее часто используемый подход должен использовать программное обеспечение, чтобы обнаружить и заблокировать нападения. Например, fail2ban
может проанализировать журналы ssh во времени выполнения и запретить/не запретить подозрительные хосты с помощью правил брандмауэра.
С другой стороны, denyhosts
добавьте подозрительные хосты /etc/hosts.deny
, достижение той же цели fail2ban
.
Еще одна опция состоит в том, чтобы использовать стороннюю общественность ssh сервер (см. shellium, blinkensheel, и т.д.) как мост для достижения персонального ssh сервера, которому необходимо доверять общедоступному серверу и никаким другим, и который как статический IP.
Я уверен, что эксперты там могут предложить все же другое решение лучше, чем, что я предлагаю.