我不清楚对 INVALID 与 ESTABLISHED,RELATED 的检查对于这两种情况是否同样快(并且如果状态完全正交),我是否必须在接受 ESTABLISHED 之前删除 INVALID 或者我可以安全地接受 ESTABLISHED 然后删除 INVALID 吗?
我已经设置了 iptables 来记录除一组有限用户之外的所有用户的传出流量,并且我正在尝试了解由此产生的日志消息。查看 /var/log/syslog,我看到从 127.0.0.1 到 127.0.0.53 的请求(DNS 查找?)以及相当多到 224.0.0.22 的请求,如下所示:
IN= OUT=wlp2s0 SRC=10.100.102.200 DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2 MARK=0x94
这是一个多播地址...有什么想法会导致这种情况吗?
最后,我有几个看起来像这样的,它们似乎是发往世界各地的传出 ICMP 请求:
IN= OUT=wlp2s0 SRC=10.100.102.200 DST=151.80.9.69 LEN=138 TOS=0x08 PREC=0xC0 TTL=64 ID=26846 PROTO=ICMP TYPE=3 CODE=3 [SRC=151.80.9.69 DST=10.100.102.200 LEN=110 TOS=0x08 PREC=0x40 TTL=51 ID=48812 DF PROTO=UDP SPT=27209 DPT=8083 LEN=90 ]
但是,真正让我困惑的是括号()中的部分SRC=151.80.9.69 PROTO=UDP SPT=27209 DPT=8083
。是否意味着 ICMP 数据包是对端口 8083 的 UDP 请求的响应?我是否应该担心这可能是入侵(或企图入侵)?如果是这样,我是否有任何理由不应该阻止所有传入的 UDP 流量?(我只有网络服务器监听端口 80 和 443,没有其他端口打开——我已经检查并仔细检查了这一点。)
感谢您帮助理解我在这里看到的内容......
我的服务器上有一个不寻常的设置。我们有三个传出以太网端口,全部连接到一个桥接接口,我们将其分为两个 VLAN:
ip link add veth type bridge
ip link set veth address 01:23:45:67:89:0A
ip link set dev eth1 master veth
ip link set dev eth2 master veth
ip link set dev eth3 master veth
[...]
ip link add veth name veth.10 type vlan id 10
ip link add veth name veth.20 type vlan id 20
ip link add veth.20-local link veth.20 type macvlan mode bridge
[...]
docker network create --driver=macvlan --subnet=192.168.XXX.0/24 --opt com.docker.network.driver.mpu=1500 --gateway 192.168.XXX.1 --opt parent=veth.20-local dockerbr20
我的服务器内有一个连接到该地址的 docker 映像veth.20
,该映像只允许通过veth.20
. 网络的其余部分中存在路由和转发规则,允许 docker 映像与该 VLAN 之外的一些选定目标进行通信。
我想添加一条iptables
规则,涵盖将我的服务器排除在接口之外的传出数据包veth.20
,无论其目的地如何。(某些数据包必须保留在veth.20
接口内;某些数据包可以路由到其他 VLAN。)
已尝试以下规则,并且无论出于何种原因,似乎都没有标记veth.20
从 docker 容器留下的数据包:
iptables -A POSTROUTING -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A POSTROUTING -t nat -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t nat -i veth.20 -j MARK --set-mark 3
iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A INPUT -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -o veth.20 -j MARK --set-mark 3
也就是说,iptables -L -n -v -t mangle
不iptables -L -n -v -t nat
显示任何这些规则应用于从veth.20
另一个 VLAN 上的主机发出的传出数据包。
我已经通过 确认ifconfig
来自 docker 镜像的所有数据包都将离开服务器veth.20
;这
iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3
当我从服务器或 Docker 映像向 VLAN 20 上的外部计算机发送数据包时,适用该规则;但是当我veth.20
通过 docker 的接口发送路由到外部 VLAN 10 或 VLAN 30 地址(未显示)的数据包时,不会应用任何标记。
我觉得这应该是一个简单的问题,但我尝试过的任何方法都无法根据数据包用于离开盒子的接口进行标记。我缺少什么?
我将使用 iptables 过滤入站流量。
我有 2 个目标。
a) Allow HTTPS inbound at port 443.
b) Redirect port 443 to process listening port on 9443.
不确定这两条规则的处理。
我是否需要将输入规则设置为接受端口 443 或 9443 的入站 HTTPS?7
取决于我认为重定向是在之前还是之后完成的。
我正在尝试在 Windows 10 计算机上的 WSL-2 中运行的 Ubuntu 22.04.3 LTS 中运行 docker。
我已按照此处的说明进行操作。但它仍然不起作用,当我运行时出现以下错误sudo dockerd
:
failed to register "bridge" driver: failed to create NAT chain DOCKER:
iptables failed: iptables -t nat -N DOCKER:
iptables v1.8.7 (legacy): can't initialize iptables table `nat':
Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
当我这样做时,modprobe ip_tables
我得到:
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.4.0-22621-Microsoft
我有一个简单的 Linux 路由器,具有多个 NIC 并启用了 IPv4 转发。
路由器有两个静态 WAN IP 地址,分配给一个接口 ( eth0
, eth0:0
)。(在下面的文本中,我将混淆实际的公共 IP 地址(257 作为一个八位字节)。)
可以从外部 Internet 对两个外部 WAN IP 地址执行 ping 操作。
接口:
eth0
:互联网连接,134.257.10。10月24日,网关134.257.10.1eth0:0
:该接口上的第二个 IP 地址:134.257.10。20 /24eth1
:局域网1、192.168.1.1/24eth2
:局域网2、192.168.2.1/24eth3
:局域网3、192.168.3.1/24
我的设置有效,所有 LAN 客户端 (LAN 1-3) 都可以访问 Internet,并且在外部显示为 134.257.10。10 . 此外,我有两个传入端口转发。
我的 iptables NAT 表如下所示:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Port forwarding:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
-A PREROUTING -i eth0:0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.3.33:25
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
如何让 LAN3 客户端 ( eth3
) 显示为 134.257.10。20在 Internet ( eth0:0
) 上用于传出连接,而不是 134.257.10。10 ( eth0
)?
我运行一个服务器,其中一个 Web 服务器作为无根 podman 容器运行。这会暴露端口 10080 和 10443,因为作为无根容器,不允许暴露端口 80 和 443。
为了可以从外部访问我的网站,我使用 ufw 作为防火墙并在那里设置了端口转发。为此,我将以下行添加到文件的开头/etc/ufw/before.rules
:
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 10080
-A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 10443
COMMIT
到目前为止一切正常。
我现在想运行另一个运行 Wireguard 服务器的容器。这会在其日志中输出以下内容,并且似乎将其设置为防火墙中的规则:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.13.13.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
如果我在没有激活 ufw 防火墙的情况下运行 Wireguard 容器 - 特别是没有定义的端口转发 - 一切都会正常。我可以与客户端连接,其流量通过隧道路由并到达互联网。
另一方面,如果我激活 ufw 防火墙(包括定义的端口转发),然后使用客户端连接到 Wireguard VPN,则所有页面视图似乎都会到达我的服务器本身 - 至少我会收到如下错误消息:
This server could not prove that it is www.google.de. Its security certificate comes from <myServer>.de
如何配置 ufw 防火墙以便
- 来自外部到端口 80 或 443 的请求将转发到端口 10080 或 10443,从而到达我的 Web 服务器
- 来自我的 VPN 客户端的请求通过 WireGuard 隧道到达 Internet,而不是我自己的服务器?
(在另一台服务器上,我在 docker 下运行 WebServer 和 WireGuard - 一切正常,因为 Docker WebServer 直接公开端口 80 和 443,因此我不需要任何端口转发。)
非常感谢您的帮助。
我试图清楚地了解br_netfilter
Linux 内核模块到底做了什么(我知道它与网络有关)。
我在这里提出的简单问题如下:
举例说明启用此模块后我可以执行哪些操作,而禁用此模块时我不能执行此操作?我原以为这与 有关iptables
,但是当禁用/启用该模块时,我总是能够运行相同的iptables
命令。
注意:由于我不确定禁用内核模块不会杀死我的计算机,因此我创建了一个测试 AWS EC2 实例来测试这一点。
编辑:为了澄清,我想看到的是一组简单的步骤,又名运行 X、Y、Z 命令,启用时,系统按预期运行,禁用时,则不会。
我正在处理 RHEL 版本 6.4 服务器的防火墙设置,目标是允许远程设备连接 tcp 端口 6162,无论服务类型如何。
iptables规则如下( iptables -L --line-numbers
),并且iptables服务已经重启。
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:6160
6 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:patrol-coll
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
另外,我确实在 中设置了我想要的端口sytem-config-firewall
,如下图所示。
奇怪的是:
无论我如何设置防火墙/iptable,端口 6162 就是无法打开。它已经使用位于该 RHEL 6.4 服务器的同一 IP 子网中的 Windows/Linux 远程主机的 telnet 客户端进行了测试。与端口 6162 的连接被拒绝,但其他端口可以工作(例如端口 6160)。
TCP 端口 6162 似乎总是“patrol-coll”,但严格来说,我想允许任何类型的服务连接 6162 端口,而不仅仅是“patrol-coll”。不知道服务类型是否对连接有影响...
任何人都可以提供一些提示来解决操作系统端的连接问题吗?
注1: 的输出netstat -tulpn
如下所示。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2538/rpcbind
tcp 0 0 192.9.110.1:1521 0.0.0.0:* LISTEN 4806/tnslsnr
tcp 0 0 0.0.0.0:37426 0.0.0.0:* LISTEN 4493/ora_d000_SOGOE
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2917/sshd
tcp 0 0 0.0.0.0:46775 0.0.0.0:* LISTEN 4686/ora_d000_SOGOL
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2737/cupsd
tcp 0 0 127.0.0.1:10808 0.0.0.0:* LISTEN 3126/veeamservice
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3007/master
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 4046/sshd
tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN 2869/snmpd
tcp 0 0 0.0.0.0:37449 0.0.0.0:* LISTEN 2657/rpc.statd
tcp 0 0 :::111 :::* LISTEN 2538/rpcbind
tcp 0 0 :::6160 :::* LISTEN 2886/veeamdeploymen
tcp 0 0 :::40976 :::* LISTEN 2657/rpc.statd
tcp 0 0 :::22 :::* LISTEN 2917/sshd
tcp 0 0 ::1:631 :::* LISTEN 2737/cupsd
tcp 0 0 ::1:25 :::* LISTEN 3007/master
tcp 0 0 ::1:6010 :::* LISTEN 4046/sshd
udp 0 0 0.0.0.0:111 0.0.0.0:* 2538/rpcbind
udp 0 0 127.0.0.1:2547 0.0.0.0:* 4495/ora_s000_SOGOE
udp 0 0 0.0.0.0:631 0.0.0.0:* 2737/cupsd
udp 0 0 0.0.0.0:1017 0.0.0.0:* 2538/rpcbind
udp 0 0 127.0.0.1:13179 0.0.0.0:* 4660/ora_pmon_SOGOL
udp 0 0 10.50.89.26:123 0.0.0.0:* 2925/ntpd
udp 0 0 192.9.110.1:123 0.0.0.0:* 2925/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2925/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2925/ntpd
udp 0 0 0.0.0.0:28426 0.0.0.0:* 4672/ora_lgwr_SOGOL
udp 0 0 0.0.0.0:18843 0.0.0.0:* 2657/rpc.statd
udp 0 0 0.0.0.0:161 0.0.0.0:* 2869/snmpd
udp 0 0 127.0.0.1:22464 0.0.0.0:* 4688/ora_s000_SOGOL
udp 0 0 0.0.0.0:9798 0.0.0.0:* 4479/ora_lgwr_SOGOE
udp 0 0 0.0.0.0:713 0.0.0.0:* 2657/rpc.statd
udp 0 0 127.0.0.1:48982 0.0.0.0:* 4467/ora_pmon_SOGOE
udp 0 0 127.0.0.1:26208 0.0.0.0:* 4686/ora_d000_SOGOL
udp 0 0 127.0.0.1:54112 0.0.0.0:* 4493/ora_d000_SOGOE
udp 0 0 :::111 :::* 2538/rpcbind
udp 0 0 :::1017 :::* 2538/rpcbind
udp 0 0 fe80::20c:29ff:fe74:83b5:123 :::* 2925/ntpd
udp 0 0 fe80::20c:29ff:fe74:83bf:123 :::* 2925/ntpd
udp 0 0 ::1:123 :::* 2925/ntpd
udp 0 0 :::123 :::* 2925/ntpd
udp 0 0 :::46340 :::* 2657/rpc.statd```
首先我要说的是,我已经在互联网上进行了搜索,甚至包括我购买该软件的公司,而且已经 5 个月了!因此,我转向社区,因为我的眼睛和大脑因阅读和长时间的尝试而流血,却一无所获。简而言之,这可以吗,可以。显然我太愚蠢了,无法做到这一点,但至少我现在对 iptables 有大量的了解:-)
我的要求:我使用 protonmail 作为我的电子邮件。如果您不知道,它是如此安全,以至于您必须在每台需要发送/接收电子邮件的计算机上运行一个“桥接软件”。我只是想向我自己发送电子邮件,用于我的智能家居、摄像头、警报等。正如您可以想象的那样,我无法在 20 台设备上安装此软件,更不用说摄像头了!所以我需要一个运行这个软件的 Linux 服务器来充当电子邮件“中心”
我的网络是 192.168.10.0/24 没有 VLAN,没有复杂性(pfsense 作为我的路由器/防火墙)
我使用 mxlinux / debian 作为我的“电子邮件主机” 192.168.10.106 IMAP 正在侦听端口 1143 SMTP 正在侦听端口 1025
我想做的就是让我网络上的任何设备都可以使用 192.168.10.106 在端口 1025 上使用 SMTP 发送电子邮件。我以为这很容易..但是不,只是因为该死的软件只会侦听 127.0.0.1 !!! 我无法将其更改为 0.0.0.0 等。
首先你应该知道我直接联系了 protonmail,因为它是一项付费电子邮件服务,他们实际上拥有知道他们在做什么并与你交谈的技术人员。然而,他们认为允许他们的服务监听 0.0.0.0 存在“安全风险”,因此代码不允许对此进行更改。我在“电子邮件服务器/192.168.10.106”上执行了以下操作
编辑
/etc/sysctl.conf
并取消注释#
net.ipv4.ip_forward=1 前面的内容更新
iptables
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.10.0/24 --dport 1025 -j DNAT --to-destination 127.0.0.1:1025 sudo iptables -t nat -A POSTROUTING -o lo -p tcp --dport 1025 -j SNAT --to-source 192.168.10.106 sudo iptables -A FORWARD -i eth0 -o lo -p tcp --dport 1025 -j ACCEPT
让我的条目在重新启动时保存,它会询问我是否要保存上面的表格,我需要说是,所以我会:
sudo apt install iptables-persistent
进入MX“防火墙配置”,关闭“公共、私人和办公室”,基本关闭防火墙
重新启动计算机
好的,现在列出重新启动后的情况,如下所示。我尝试从网络 192.168.10.50 上的 Windows 计算机进行 telnet,如您所见,我看到了数据包,但它不起作用:-( :-( :-( :-( :-( :-( :-( :- ( :-( :-( :-(
sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 15748 packets, 1719K bytes)
pkts bytes target prot opt in out source destination
5 260 DNAT tcp -- eth0 * 192.168.10.0/24 0.0.0.0/0 tcp dpt:1025 to:127.0.0.1:1025
Chain INPUT (policy ACCEPT 15748 packets, 1719K bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 730 packets, 73256 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 730 packets, 73256 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT tcp -- * lo 0.0.0.0/0 0.0.0.0/0 tcp dpt:1025 to:192.168.10.106
这是我在本地主机电子邮件计算机上测试该服务
$ telnet 127.0.0.1 1025
Trying 127.0.0.1... Connected to 127.0.0.1.
Escape character is '^]'.
220 127.0.0.1 ESMTP Service Ready
注意 eth0 接收端丢弃的数据包
$ uname -a
Linux email 5.10.0-23-amd64 #1 SMP Debian 5.10.179-2 (2023-07-14) x86_64 GNU/Linux
bob@email:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.106 netmask 255.255.255.0 broadcast 192.168.10.255
ether 00:0c:29:63:d5:4f txqueuelen 1000 (Ethernet)
RX packets 126620 bytes 24077186 (22.9 MiB)
RX errors 0 dropped 6447 overruns 0 frame 0
TX packets 30080 bytes 3728557 (3.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 57 bytes 4931 (4.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 57 bytes 4931 (4.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
以上都不起作用,所以我尝试了不同的变体。我还发现一个建议我使用的命令似乎没有帮助,但还是尝试了一下。
sysctl -w net.ipv4.conf.eth0.route_localnet=1