标签: iptables

netfilter/iptables:为什么不使用原始表?

在Linux下,我们通常使用“过滤器”表来做常见的过滤:

iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT
Run Code Online (Sandbox Code Playgroud)

根据下面的 netfilter 流程​​图,数据包首先通过“原始”表:

在此处输入图片说明

所以我们可以写:

iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
Run Code Online (Sandbox Code Playgroud)
  • 更快地处理数据包,而无需通过 conntrack+mangle+nat+routing。因此使用的 CPU/内存稍微减少了(反过来,由于必须加载 iptable_raw 模块而稍微补偿了这一点)
  • 只有一个规则,以防盒子也是路由器(显然不是每个规则都可以),因为不需要为过滤/转发添加相同的规则

我只进行了快速测试,这非常有效。
我发现的文档总是描述在严格情况下使用的原始表。但没有人给出哪怕是最小的理由。

问题:除了教条之外,是否有任何理由不使用原始表?

linux iptables

28
推荐指数
1
解决办法
3万
查看次数

基于目的端口的不同接口上的输出流量

我的问题与仅允许某些接口上的某些出站流量基本相同。

我有两个接口eth1(10.0.0.2) 和wlan0(192.168.0.2)。我的默认路由是eth1. 假设我希望所有 https 流量都通过wlan0。现在,如果我使用另一个问题中建议的解决方案,https 流量将通过wlan0,但源地址仍为eth1(10.0.0.2)。由于此地址对于wlan0网关不可路由,因此永远不会返回答案。简单的方法是在应用程序中正确设置 bind-addr,但在这种情况下它不适用。

我想我需要重写 src-addr:

# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
Run Code Online (Sandbox Code Playgroud)

现在 tcpdump 看到传出的数据包很好,传入的数据包到达 192.168.0.2,但是它们可能永远不会在应用程序中结束,因为我所看到的是应用程序正在重新发送 SYN 数据包,尽管 SYN-已经收到 …

linux networking routing iptables

27
推荐指数
2
解决办法
9万
查看次数

iptables 重定向 DNS 查找 IP 和端口

我发现我的 ISP (verizon) 正在拦截端口 53 上的所有 DNS 流量。

使用 iptables,我想将所有 DNS 查找流量重定向到特定的 IP 和端口 (5353)。我的计算机在端口 53 上连接到另一台计算机的任何尝试都应重定向到 23.226.230.72:5353。

为了验证我尝试使用的 DNS 服务器和端口,我运行了这个命令。

~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用的 iptables 规则。

iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353
Run Code Online (Sandbox Code Playgroud)

添加该规则后,未找到所有 DNS 查找。网站 ping 返回unknown host。网页显示“找不到服务器”。

~$ mtr serverfault.com
Failed to resolve host: Name or service not known
Run Code Online (Sandbox Code Playgroud)

我希望我的 DNS 查询从 23.226.230.72:5353 中提取。如何使 iptables 规则起作用?

编辑

我的 ISP 拦截 DNS(端口 53)的演示。通过端口 5353 …

dns iptables

27
推荐指数
1
解决办法
8万
查看次数

为什么 Iptables 持久服务不保存我的更改?

我按照教程在 ubuntu 12.04 上设置 IP 规则。设置时一切正常——但现在我对防火墙进行了更改,这些更改在重新启动时不会持续存在。我不明白为什么会这样。这是我如何使用 iptables-persistent 的演示。我究竟做错了什么?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back
Run Code Online (Sandbox Code Playgroud)

iptables iptables-persistent

26
推荐指数
3
解决办法
8万
查看次数

透明 SOCKS 代理如何知道要使用哪个目标 IP?

我知道有两个 SOCKS 代理支持任何传出 TCP 连接的透明代理:Torredsocks。与 HTTP 代理不同,这些 SOCKS 代理可以透明地代理任何传出 TCP 连接,包括加密协议和没有元数据或标头的协议。

这两个代理都需要使用 NAT 将任何传出 TCP 流量重定向到代理的本地端口。例如,如果我TransPort 9040在本地机器上运行 Tor ,我需要添加这样的 iptables 规则:

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-port 9040
Run Code Online (Sandbox Code Playgroud)

据我所知,这将与替换原来的目的地IP和端口127.0.0.19040,所以考虑到这是一个加密的数据流(如SSH)或一个无头(如域名注册),请问代理知道原来的目的IP和端口?

iptables proxy socks tor

26
推荐指数
1
解决办法
1万
查看次数

端口转发到 VPN 客户端?

我遇到了一些难题,但找到解决方案的运气并不好。现在我(遗憾地)通过 Verizon 3G 连接到网络。他们过滤所有传入的流量,所以我不可能打开端口来接受连接。

我目前在 linode.com 上有一台 Linux 虚拟机,我想到要安装pptpd并尝试进行一些iptables端口转发。我已经pptpd安装,我的家用机器连接愉快。也就是说,这里有一些一般信息:

服务器 (Debian) WAN IP: xxxx on eth0 - pptpd IP: yyy1 on ppp0 - 客户端 VPN IP: yyy100

为了验证我没有发疯,我尝试了一些从服务器到客户端开放端口的连接,并且客户端确实通过 VPN IP 接受了这些连接。

我想要完成的是:

Internet -> WAN IP:Port -> 转发到客户端 VPN IP:Port

例如,如果我在我的客户端上打开了 6000 端口,那么一个人可以远程登录到 xxxx:6000,服务器会捕获它并将其转发到 192.168.3.100:6000。

我已经尝试了至少 20 种不同的 Google 搜索iptables配置,但都没有奏效。有没有人有任何想法,或者甚至是我可能不知道的完全不同的方法?这里的目标是通过可怕的防火墙连接侦听,最好是 TCP 和 UDP 流量。

iptables vpn port-forwarding openvpn

24
推荐指数
1
解决办法
6万
查看次数

tun 网络接口有什么用?

我在运行 ifconfig 时注意到有一个名为 tun0 的网络接口,它有一个 ipv4 地址。一些研究表明它是一个隧道设备,但我真的不知道它是如何使用的,使用它的目的是什么,以及为什么它有一个 IP 地址。

我确实启用了 iptables,如果有帮助的话,iptables 和 tun 之间似乎有一些联系。

networking iptables tunneling

24
推荐指数
2
解决办法
4万
查看次数

iptables 和 RETURN 目标

我不明白RETURN目标在 iptables 命令中的作用。

疑问来自本指南,其中说:

链是按顺序检查数据包的一组规则。当数据包与规则之一匹配时,它会执行关联的操作,并且不会根据链中的其余规则进行检查。

所以如果一个数据包匹配一个规则并且它停止检查其他规则,为什么我需要一个RETURN

例如,我在互联网上找到了这个:

iptables -A PREROUTING -t mangle -i wlan0 -s 192.168.1.10 -j MARK --set-mark 30;
iptables -A PREROUTING -t mangle -i wlan0 -s 192.168.1.10 -j RETURN;
Run Code Online (Sandbox Code Playgroud)

为什么我需要RETURN?如果数据包与第一个规则匹配,则它会自动停止执行其他规则。

iptables

24
推荐指数
1
解决办法
4万
查看次数

设置一些防火墙端口只接受本地网络连接?

如何在 LAN 中的系统上设置防火墙,以便某些端口仅对来自局域网的连接开放,而不对来自外部世界的连接开放?

例如,我有一个运行Scientific Linux 6.1(基于 RHEL 的发行版)的机器,我希望它的 SSH 服务器只接受来自本地主机或 LAN 的连接。我该怎么做呢?

ssh firewall iptables

22
推荐指数
2
解决办法
7万
查看次数

( /etc/sysconfig/iptables ) “不建议手动自定义此文件。” 为什么?

直接编辑这个文件

/etc/sysconfig/iptables 
Run Code Online (Sandbox Code Playgroud)

可以为我节省这么多头痛的时间等等......

然而在文件的最顶部它说..

Manual customization of this file is not recommended.
Run Code Online (Sandbox Code Playgroud)

这是一个全新的 centos 6.4 云服务器附带的“/etc/sysconfig/iptables”。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with …
Run Code Online (Sandbox Code Playgroud)

firewall rhel iptables centos

22
推荐指数
2
解决办法
4万
查看次数