我怎样才能让 iptables 显示端口号而不是众所周知的端口号的别名(例如 80 的 http,443 的 https 等)。有没有办法让它始终只显示端口号?
阻止所有端口(进出)很容易,但“除了”这个词很难。我不知道任何满足条件的规则。
PS:我知道这个问题并不新鲜。但事实上,我没有发现任何帮助。所以,请帮帮我!
我想制定一些简单的 iptables 规则来拒绝所有传入连接并允许传出。我怎样才能做到这一点?
我正在使用 CentOS,并在输入以下iptables命令时:
iptables -L -v
Run Code Online (Sandbox Code Playgroud)
输出如下:
Chain INPUT (policy ACCEPT 19614 packets, 2312K bytes) pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 13881 packets, 32M bytes) pkts bytes target prot opt in out source destination
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我可以使用 SSH 连接。我在哪里可以看到那个规则?
我见过人们在多个示例中使用感叹号 (!),但是当我尝试使用它时,却出现错误。
我正在尝试的规则:
-A OUTPUT -m owner --gid-owner 1006 -d ! 192.168.1.0/24 -j DROP
错误:
Bad argument '192.168.1.0/24'
什么是正确的语法?
主机是否可以为 IPv4 和 IPv6 堆栈提供不同的开放端口?例如,让端口 22 仅对 IPv6 开放而不对 IPv4 开放,反之亦然是否可行?此外,当我尝试仅为 IPv6 阻止端口时,它没有任何效果:
ip6tables -A INPUT -p tcp --dport 22 -j REJECT
Run Code Online (Sandbox Code Playgroud) -A PREROUTING -s 10.0.10.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -s 10.0.10.0/24 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080
-A POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE
COMMIT
Run Code Online (Sandbox Code Playgroud)
上面的代码是我用来在linux中转发流量的代码。
现在我需要在 Mac OSX 中做同样的事情。10.8 如果重要。
所以这里是交易。
之前,我使用代理连接到 linux 机器并使用该代理我能够使用 mitmproxy 监控流量
现在,在 mac 上,我使用内置的互联网共享,并想使用 mitmproxy,它只侦听端口 8080 的内容。
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ac:de:48:81:1d:4a
inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
Configuration:
priority 0 hellotime 0 fwddelay 0 maxage 0
ipfilter disabled flags 0x2 …Run Code Online (Sandbox Code Playgroud) 在家里,我连接了一个 IPv6 地址,此外,我的提供商提供了一个类似 NAT 的设置,通过它我可以收到一个公共 IPv4 地址,我与其他客户共享(原因显然是我们的 IPv4 地址不足)。
因此,当我在 IPv4 网络上时,我无法访问家里的设备(例如我的 VPN 网关)。但是,我确实有一台同时具有 IPv4 和 IPv6 地址的服务器。因此,如果我通过我的服务器,应该可以访问我的家庭设备。
到目前为止,这是我的想法:由于在 IPv6 上,每个设备都有自己的 IP,我家中的服务器获得静态 IPv6 IP。我的远程服务器已经有静态 IPv4 和 IPv6。
当我现在想访问家里的 OpenVPN 服务器时,以前我会在路由器中打开端口 1194,NAT 会将连接传递到那里的服务器。在我的新场景中,我想连接到远程服务器上的端口 1194(或不同的,无关紧要),它应该采用该连接并将其隧道连接到我的主服务器(因为它们都具有 IPv6)。
从图形上看,这意味着:
移动设备 (IPv4) --> 远程服务器 (IPv4+IPv6) --> 家庭服务器 (IPv6)
但这应该只发生在选择的端口上(或者有比按端口选择更聪明的方法吗?)。
我的问题是,如何实现此设置?
这应该在哪个级别运行?如果我想通过端口来做,我显然必须在 TCP/UDP 层转发数据包。我的第一个想法是 iptables,但是 iptables 可以将数据包转发到远程 IP 吗?或者有其他软件可以吗?或者我应该在两台服务器之间创建一个隧道,然后在本地转发?我该怎么做?
system-config-firewall 编写的防火墙配置
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在 Windows 10 中获得 iptables 功能的方法。我启用了 IP 路由,我需要将 tcp 数据转发到另一台主机(端口 8080),然后在伪装 IP 的同时转发他的响应。在 linux 中,我可以使用以下方法执行此操作(其中 $1 = <内部 IP >,$2 = 80,$3 = 8080,$4 = tcp)
iptables -t nat -A PREROUTING -p $4 --match multiport --dports $2 -j DNAT --to-destination $1:$3
iptables -A FORWARD -p $4 --match multiport --dports $2 -d $1 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Windows 10 中实现类似的功能?
iptables ×10
linux ×6
firewall ×3
centos ×2
ipv6 ×2
android ×1
blocking ×1
command-line ×1
mac ×1
nat ×1
networking ×1
port ×1
vpn ×1
windows ×1
windows-10 ×1