2024年7月6日 星期六 更新
通过 ss 或 ssr 端口转发
1.打开SSR Windows客户端,右键点击任务栏小飞机,选择端口设置:
2.在端口设置窗口中,点击添加按钮。
注意:在点击添加之前,不要直接填写下图右侧内容,即使填写了也无法保存,没有效果。
3.下面就可以填写右侧内容了,如下图所示,填写完成后点击确定保存。
开关:打勾。
类型:选择端口转发。
服务器ID:选择之前设置好的SSR服务器。
本地端口:随意设置一个,用做后期远程桌面连接,建议设置为较大端口号,比如53389,避免冲突。
目标地址:填入Windows服务器IP地址。
目标端口:3389,即远程桌面连接的默认端口。
参考
https://blog.liouxin.com/49/
2024年4月25日 星期四 更新
firewalld 端口转发并限制连接ip
CUSTOMPORT=$(netstat -tlpn | grep 0.0.0.0.*ssh | cut -d: -f2 | cut -f1 -d\ )
SOURCE_IP=1.2.3.4
firewall-cmd --zone=public --permanent --query-masquerade
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --zone=public --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"${SOURCE_IP}\" forward-port port=\"22\" protocol=\"tcp\" to-port=\"${CUSTOMPORT}\""
firewall-cmd --reload
重点是下面这一句
# 添加规则
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.17.16.17 forward-port port=3102 protocol=tcp to-port=3389 to-addr=192.168.56.102'
# 删除规则
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=10.17.16.17 forward-port port=3102 protocol=tcp to-port=3389 to-addr=192.168.56.102'
参考
https://serverfault.com/questions/756138/how-to-port-forward-with-firewalld-depending-on-source-ip
如果 ubuntu 上没有 firewall-cmd 就安装一个,卸载原有的 uwf 防火墙管理工具
卸载 uwf
sudo apt remove ufw
安装 firewalld
sudo apt update
sudo apt install firewalld
# 启动
sudo systemctl start firewalld
# 设置开机自启动
sudo systemctl enable firewalld
# 永久放开 80 端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重启防火墙生效
firewall-cmd --reload
如果此时放开的端口不起作用,设置一下 iptables
允许所有流量通过
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
设置默认策略为所有流量通过
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
保存规则
sudo iptables-save > /etc/sysconfig/iptables
重启服务
sudo systemctl restart iptables
查看规则
sudo iptables -L -v -n
firewall 常用操作
状态:# systemctl status firewalld 或者 firewall-cmd --state(查看防火墙开启关闭状态)
启动:# systemctl start firewalld
停止:# systemctl stop firewalld
自启动:# systemctl enable firewalld (可让防火墙开机自启动,防火墙默认开机不启动的,需手动启动)
禁用:# systemctl disable firewalld
允许数据包转发
首先开启IP转发功能,默认是关闭的。
临时修改:
echo 1 >/proc/sys/net/ipv4/ip_forward
修改过后就马上生效,但如果系统重启后则又恢复为默认值0。
永久修改:
# 找到下面的值并将0改成1
vi /etc/sysctl.conf
# sysctl -p(使之立即生效)
net.ipv4.ip_forward = 1
端口转发命令
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1 --permanent # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent # 将80端口的流量转发至192.168.0.1的8080端口
firewall-cmd --add-forward-port=port=58888:proto=tcp:toaddr=47.97.184.137:toport=80 --permanent # 将58888端口的流量转发至47.97.184.137的80端口
要删除之前设置的转发规则,把以上命令中的--add-forward-port改为--remove-forward-port运行一次即可。
firewall-cmd --permanent --zone=public --remove-forward-port=port=58888:proto=tcp:toaddr=47.97.184.137:toport=8888
firewall-cmd --reload
firewall-cmd --list-all #查询所有配置
一定要打开防火墙 ip 伪装功能
firewall-cmd --query-masquerade # 检查是否允许伪装IP,返回no表示没开启,反之开启伪装IP
firewall-cmd --add-masquerade # 允许防火墙伪装IP
firewall-cmd --add-masquerade --permanent # --permanent 永久生效,没有此参数重启后失效
或
firewall-cmd --zone=区域 --add-masquerade
firewall-cmd --remove-masquerade# 禁止防火墙伪装IP
重新加载firewalld配置
firewall-cmd --reload
(PS:添加或删除端口后不会立即生效,配置完 --reload后才能生效;--permanent代表永久生效)
参考
https://www.fzxm.cn/help/20210419213836001.html
使用Portproxy模式下的Netsh命令即能实现Windows系统中的端口转发,转发命令如下:
netsh interface portproxy add v4tov4 listenaddress=[localaddress] listenport=[localport] connectaddress=[destaddress]
listenaddress – 等待连接的本地ip地址
listenport – 本地监听的TCP端口(待转发)
connectaddress – 被转发端口的本地或者远程主机的ip地址
connectport – 被转发的端口
举个例子,服务器内网IP是172.16.0.4,需要将8080端口转发到国外服务器104.104.104.104的9999端口,那么命令如下:
netsh interface portproxy add v4tov4 listenaddress=172.16.0.4 listenport=8080 connectaddress=104.104.104.104 connectport=9999
上面这条命令有时不起作用,需要改为 0.0.0.0
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=104.104.104.104 connectport=9999
下面的命令是用来展示系统中的所有转发规则:
netsh interface portproxy show v4tov4
删除刚才创建的那个转发的命令:
netsh interface portproxy delete v4tov4 listenaddress=172.16.0.4 listenport=8080
该命令的常用参数如下:
netstat -ano | find listenport 查看是否启动成功
netsh interface portproxy show all 显示系统中的转发规则列表
netsh interface portproxy dump 查看portproxy设置
netsh interface portproxy delete v4tov4 listenport=localport listenaddress=localaddress
netsh interface portproxy reset 清除所有端口转发规则
参考
https://kekxv.github.io/2021/08/07/Port%20forwarding%20that%20comes%20with%20Windows/