Как я добавляю псевдоним dyndns к своему Iptables?

В первую очередь: я знаю об этом старом вопросе: 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 в ПК работы.

1
задан 13 April 2017 в 15:24

1 ответ

Несколько раз назад со мной стояли к той же проблеме, и мое решение состояло в том, чтобы создать шаблон iptables файлы правил, изменить на основе текущего dyndns получило IP, затем установите таблицы с iptable-restore. Стандартная программа периодически тестировала IP и обновляла брандмауэр при необходимости.

Я отказался от такого подхода, когда коллега попросил использовать тот же ssh сервер и установку системы для двух дюйм/с, хотя не особенно трудный, заставьте меня передумать.

Я предложил бы некоторый другой способ приблизиться к проблеме.

Наиболее часто используемый подход должен использовать программное обеспечение, чтобы обнаружить и заблокировать нападения. Например, fail2ban может проанализировать журналы ssh во времени выполнения и запретить/не запретить подозрительные хосты с помощью правил брандмауэра.

С другой стороны, denyhosts добавьте подозрительные хосты /etc/hosts.deny, достижение той же цели fail2ban.

Еще одна опция состоит в том, чтобы использовать стороннюю общественность ssh сервер (см. shellium, blinkensheel, и т.д.) как мост для достижения персонального ssh сервера, которому необходимо доверять общедоступному серверу и никаким другим, и который как статический IP.

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

1
ответ дан 7 December 2019 в 17:51

Другие вопросы по тегам:

Похожие вопросы: