我正在尝试从我们的服务器中删除被阻止的 IP。
405 35964 DROP all -- !lo * IP ADDRESS 0.0.0.0/0
19 988 DROP all -- * !lo 0.0.0.0/0 24.7.56.95
root@host01 [~]# iptables -D INPUT 35964
iptables: Index of deletion too big
root@host01 [~]# iptables -D INPUT 405
iptables: Index of deletion too big
root@host01 [~]# iptables -D INPUT -s IPADDRESS -j ACCEPT
iptables: Bad rule (does a matching rule exist in that chain?)
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?!谷歌没有帮助,因为我一直在寻找给我同样错误的相同行。
在 CentOS 5 和 6 Linux 中使用 iptables - 您如何防止以root、apache或nobody身份运行的进程启动传出连接?
在 CentOS 5 Linux 上,我尝试将这些行放入 /etc/sysconfig/iptables:
-A OUTPUT -m owner --uid-owner root -j DROP
-A OUTPUT -m owner --uid-owner apache -j DROP
-A OUTPUT -m owner --uid-owner nobody -j DROP
Run Code Online (Sandbox Code Playgroud)
但不幸的是得到错误:
# sudo service iptables restart
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: iptables-restore …Run Code Online (Sandbox Code Playgroud) 我无法找出用户定义的 iptables 链末尾缺少 RETURN 规则的后果是什么。显然,“iptables [missing] return [jump]”确实是非常糟糕的关键字。
联机帮助页和我可以挖掘的任何博客或 howto 只是告诉我做了什么-j RETURN(这很明显),但不会告诉我如果缺少它会发生什么。此外,我似乎无法建立健全的实验规则来尝试...
iptables -N userchainA
iptables -A INPUT -j userchainA
iptables -N userchainB
iptables -A INPUT -j userchainB
iptables -A INPUT -j ACCEPT
iptables -A userchainA ... # anything here, that DOES NOT MATCH
#### no explicit return from userchainA!
iptables -A userchainB ... # anything here, that DOES NOT MATCH
iptables -A userchainB -j RETURN
Run Code Online (Sandbox Code Playgroud)
鉴于这些规则,任何事情都可以正常工作。数据包穿过所有链并最终命中,ACCEPT from INPUT就好像(丢失的)-j RETURN来自userchainA将隐式完成。是这种情况吗?
为什么这是有效的?我会期望某种错误或至少是关于链执行下降的日志消息。
我们有一个相当复杂的 iptables/ipchains 配置,它是由APF生成的。应该阻止到端口 80 的流量,但我们的 Apache 日志显示有人能够探测网页:
[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist: /var/www/w00tw00t.at.blackhats.romanian.anti-sec:)
[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist: /var/www/phpMyAdmin
[Sun Feb 03 13:08:45 2013] [error] [client 50.57.125.169] File does not exist: /var/www/phpmyadmin
Run Code Online (Sandbox Code Playgroud)
有没有办法在 iptables 中模拟源 IP 来调试为什么数据包50.57.125.169没有被阻止?该-C | --check选项似乎只报告是否存在明确匹配 IP 的规则,但我想做的是(伪代码)
myserver% iptables --test --source_ip=50.57.125.169 --dest_port=80
Rule #17 matches (ALLOW) // i.e. this would be the rule that …Run Code Online (Sandbox Code Playgroud) 我在我的 linux 嵌入式系统上构建并安装了 iptables。如果我列出所有规则,一切正常:
#iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加一个新规则来阻止 icmp ping,我会得到以下错误:
iptables -A INPUT -i eth0 -p icmp --icmp-type any -s 0/0 -d 10.20.3.179 -m state --state NEW,ESTABLISHED,RELATED -j DROP
iptables: No chain/target/match by that name.
Run Code Online (Sandbox Code Playgroud)
如何解决?
注意:我以超级用户身份启动命令
是否可以仅在建立连接时写入日志条目?我试过了:
iptables -I OUTPUT -p tcp --dport 22 -j LOG --log-level notice --log-prefix "outgoing ssh connection"
Run Code Online (Sandbox Code Playgroud)
记录传出的 SSH 连接,但这会记录每个数据包,正如您可以想象的那样,对于监控目的来说有点不知所措。我正在运行 SLES 11 SP3。因此,如果有人能指出一种仅在建立连接时编写日志条目的方法,我将不胜感激。
我没有路由器,所以我将 Linux 系统变成了一个具有 CentOS 6.4 的路由器,用于将公共网络流量转发到我的本地 LAN。它有两个 NIC 卡。一个用于公共 IP 地址 (eth1),另一个用于私有 IP 地址 (eth2)。
我有一台连接到本地 LAN 的服务器,假设为 192.168.1.2。
xxxx 是公网 IP 地址(这个 IP 地址在 eth1 上)。
Linux系统路由器IP地址假设为192.168.1.1(该IP地址在eth2上)。
我希望当来自任何地方的任何网络的人使用它时,即,
ssh x.x..x.x(公共 IP 地址)或使用PuTTY
它将转到服务器。
我禁用了服务器上的 SELinux 和 iptables 防火墙。
我在 Linux 系统路由器上做了一些 Iptables 修改,但它本身作为路由器工作,而不是来自其他网络和同一网络的主服务器。
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 22 -j DNAT --to-destination 192.168.1.2:22
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
我想再次使用来自同一 Linux 系统路由器的 iptables 将所有 HTTP (80) 流量转发到我的内部服务器。
解决这个问题的方法是什么?
我有一个eth1:3带有 IP 地址的虚拟接口222.192.124.3,我已经设置了一个 iptables 规则来使用接口的 IP 记录来自该接口的数据包(我知道 iptables 不关心虚拟接口标签),如下所示:
iptables -A INPUT -d 222.192.124.3 -j LOG --log-level warning --log-prefix "VIP3-IN: "
Run Code Online (Sandbox Code Playgroud)
当我运行 tcpdump 并从另一台机器在这个 IP 上发送数据包时,我看到了它们,所以我假设它们被内核正确接收和处理,但是 iptables 从不记录这些数据包,当我运行时iptables -nvL,该规则的数据包计数是'不增加,就像他们从未达到规则一样(或者就像 iptables 甚至没有看到该接口上的数据包)。
我首先想到了另一个匹配数据包的规则,从而在它遇到 LOG 规则之前处理它,所以我删除了每个 iptables 规则,只添加了日志记录规则,但没有成功。
服务器在 RHEL 6.2 上运行,具有 2.6.32 内核,在 VMware ESX 上虚拟化。
这是完整的输出iptables -nvL:
Chain INPUT (policy ACCEPT 40 packets, 2891 bytes)
pkts bytes target prot opt in out source destination
0 0 LOG all -- * * 0.0.0.0/0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 CentOS 6.5,并且在我的 iptables 中添加了以下命令以将端口 8088 上的所有传入流量转发到 4569:
iptables -A PREROUTING -t nat -p udp --dport 8088 -i eth0 -j DNAT --to-destination 127.0.0.1:4569
iptables -I FORWARD 1 -d 127.0.0.1 -p udp --dport 4569 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
iptables --list 显示以下输出:
iptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere localhost.localdomain udp dpt:iax
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Run Code Online (Sandbox Code Playgroud)
但是当我在 udp 端口 4569 上进行数据包跟踪时,我在该端口上看不到任何数据包。然后我添加了这个:
iptables …Run Code Online (Sandbox Code Playgroud) 我正在使用最新的 debian relese,我需要做一些端口转发,但我不知道怎么做。我有 2 个流源从 2 个不同的 ip-s 在同一个 udp 端口上进入我的服务器
192.168.1.2:1003 via udp to 192.168.1.4 (server)
192.168.1.3:1003 via udp to 192.168.1.4 (server)
Run Code Online (Sandbox Code Playgroud)
我的问题是:例如,如何将此来自 1.2 的端口 1003 转发到其他端口 1004?