赞
踩
本文目的:padavan下,自定义 SSH 端口 并实现 ipv6 外网访问
本文记录于 2022年4月10日,随着固件更新可能会存在变动。
最近在倒腾路由器固件,使用的是 hiboy 大的 padavan 固件。
在 WebUI 中,可以启用内网下 22 端口的服务,并通过端口转发实现 ipv4 下的外网访问,但是 ipv6 暂时不行。
像路由器这种设备的 SSH服务
通常是由 dropbear
提供的,默认端口是22。
这里可以启用 SSH 服务。
根据我的理解,WebUI 的设置是通过 /usr/bin/sshd.sh
实现其功能的,这里截取start
和 stop
两部分:
#!/bin/sh ... func_start() { key_a="" key_s="" key_4="" [ ! -d "$dir_storage" ] && mkdir -p -m 755 $dir_storage old_pattern="/etc/storage/dropbear_" for i in rsa_host_key dss_host_key ecdsa_host_key ; do [ -f "${old_pattern}_${i}" ] && mv -n "${old_pattern}_${i}" "$dir_storage/${i}" done if [ ! -f "$rsa_key" ] || [ ! -f "$dss_key" ] ; then func_createkeys fi if [ ! -f "$ecdsa_key" ] ; then /usr/bin/dropbearkey -t ecdsa -f "$ecdsa_key" chmod 600 "$ecdsa_key" fi if [ "$1" == "1" ] ; then key_s="-s" fi if [ "$2" == "1" ] ; then key_a="-a" fi ip6_service=`nvram get ip6_service` if [ -z "$ip6_service" ] && [ -d /proc/sys/net/ipv6 ] ; then key_4="-4" fi /usr/sbin/dropbear $key_4 $key_s $key_a } func_stop() { killall -q dropbear } ...
可以看到脚本并没有提供自定义端口的功能,而且 usr
分区是只读的,我们不在这部分做文章。
这里提供端口转发服务,但仅限于 ipv4。
似乎是因为 padavan 不支持 ipv6 的 NAT6,查了一圈测试了以下命令
>> ip6tables -t nat -I PREROUTING -p tcp --dport 10022 -j REDIRECT --to-port 22
ip6tables v1.4.16.3: unknown option "--to-port"
>> ip6tables -t nat -I PREROUTING -p tcp --dport 10022 -j REDIRECT --to-destination [fe80::1]:22
ip6tables v1.4.16.3: unknown option "--to-destination"
蛋疼。有个 nat66 我也不知道怎么用。
接着整,打开选项,可以看到默认转发端口为 10022 (由defaults.c@rt-n56u定义)
关闭 SSH 服务
关闭防火墙 SSH 转发选项
定位到 高级设置 - 自定义设置 - 脚本 - 在防火墙规则启动后执行
在logger前的空白行添加内容
killall -q dropbear
/usr/sbin/dropbear -p 10022
iptables -A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH_blacklist -j DROP
iptables -A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --name SSH_blacklist --set -j ACCEPT
ip6tables -A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH_blacklist6 -j DROP
ip6tables -A INPUT -p tcp --dport 10022 -m state --state NEW -m recent --name SSH_blacklist6 --set -j ACCEPT
如
脚本实现的功能:
此处 recent 模块的使用,参考 Iptables 之 recent 模块小结 中的案例2。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。