знадобилося дистанційно перенаправити порт (webmin у моєму випадку, 10000) на домашньому маршрутизаторі до сервера… секундна справа з веб-інтерфейсом openwrt, але зізовні я маю тільки ssh. зрозуміло, що все можна зробити і в командному рядку — як?
знов uci. отже, ssh до рутера, і дивимося, що в налаштуваннях брендмауера:
uci show firewall | less
десь наприкінці виводу будуть правила перенаправлення (@redirect[x]
). додаємо ще одне:
uci add firewall redirect
після цього можна підглянути номер нового правила (останній рядок @redirect[x]
), але простіше використати -1
(вказівник на останннє); нааштовуємо якось так:
uci set firewall.@redirect[-1].name='Webmin to server (:10000)'
uci set firewall.@redirect[-1].target='DNAT'
uci set firewall.@redirect[-1].src='wan'
uci set firewall.@redirect[-1].src_dport='10000'
uci set firewall.@redirect[-1].dest='lan'
uci set firewall.@redirect[-1].dest_ip='192.168.0.99'
uci set firewall.@redirect[-1].dest_port='10000'
для тих, хто в танку: коли рутер отримує запит на порт 10000 (.src_dport='10000'
) ззовні (.src='wan'
), він переадресує трафік на порт 10000 (.dest_port=10000
) машини зі вказаною адресою (.dest_ip='192.168.0.99'
) в локальній мережі (.dest='lan'
).
перевірка:
uci show firewall | less
збереження налаштувань:
uci commit firewall
перезавантаження брендмауера:
service firewall restart
готово — можна «стукатися» на веб-інтерфейс webmin ззовні (треба знати публічний ip або мати (динамічну?) прив’язку dns, наприклад, на duckdns.org):
https://<сервер>.duckdns.org:10000
зрозуміло, що будь-який відкритий назовні порт, а тим більше webmin за портом — це ризик, тож:
- подумати, чи справді треба?
- поміняти порт 10000 на щось довільне;
- додати користувача і заборонити автентифікацію root;
- встановити/налаштувати fail2ban;
- увімкнути двофакторну автентифікацію;
- що ще?