天道酬勤,学无止境

iptables

除 iptables 外的数据包处理实用程序? [关闭](Packet mangling utilities besides iptables? [closed])

问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 5年前关闭。 改进这个问题 我正在寻找一个 linux 实用程序,它可以根据一组规则更改网络数据包的有效负载。 理想情况下,我会使用iptables和netfilter内核模块,但它们不支持通用有效负载修改: iptables将更改各种标头字段(地址、端口、TOS 等),并且它可以匹配数据包中的任意字节,但是它显然无法更改数据包中的任意数据。 内核模块将是一个很大的优势,因为效率是一个问题,但我很高兴探索可以完成工作的任何其他选项。 谢谢你的想法! 久违的更新: 我们选择使用NFQUEUE模块,这是 Robert Gamble 建议的 QUEUE 模块的最新实现。 它看起来相当简单,具有安全优势,允许我们的代码在用户空间而不是内核空间中运行。 如果我们只是想改变有效载荷而不改变其大小,那么实现几乎是微不足道的。 在这种情况下,我们将定义一个 iptables 规则来为我们选择“有趣”的数据包并向它们发送一个NFQUEUE目标。 我们将编写一个回调函数来检查来自NFQUEUE的数据包,根据需要修改数据,并重新计算它们的 TCP 和 IP 标头中的校验和。 但是,我们的用例涉及向数据流中注入额外的字符。 这具有增加 TCP

2021-06-12 14:52:59    分类:技术分享    linux   networking   iptables   packet-mangling

How can I block some special User-agents Via IPTables

I need to block packets from any source that includes some special User agents using IPTables. But I don’t want to manage it via .htaccess or Apache. Is there any way?

2021-06-11 16:03:46    分类:问答    user-agent   firewall   iptables

在 debian 中的 iptables 中添加规则以打开新端口(Adding a rule in iptables in debian to open a new port)

问题 我试图在我的 Debian 系统的 iptables 中打开端口 3306 以允许访问 MySQL 服务器。 为此我输入了这个命令: root@debian:/# sudo iptables -A INPUT -p tcp --dport 3306 ACCEPT root@debian:/# iptables-save 我输入了新连接,它已保存在 iptables 中,因为我可以在 iptables-save 命令生成的 iptables 列表中看到新规则。 但是,这个 debian 系统运行在基于 Windows7 的虚拟机上,我无法从 Windows telnet 到这个端口。 不知道我应该在哪里检查这个问题的解决方案。 回答1 关于你的命令行: root@debian:/# sudo iptables -A INPUT -p tcp --dport 3306 --jump ACCEPT root@debian:/# iptables-save 您已经以root身份进行身份验证,因此sudo在那里是多余的。 您在ACCEPT参数之前缺少-j或--jump (只是认为这是一个错字并且您正确插入了它)。 关于你的问题: 如果您在问题中指出的那样正确插入了iptables规则,则问题可能与您使用的管理程序(虚拟机提供商)有关。 如果您提供管理程序名称(VirtualBox

2021-06-11 15:08:38    分类:技术分享    debian   iptables

Python端口转发/多路复用服务器(Python port forwarding/multiplexing server)

问题 我想让服务器侦听 UDP 端口 162(SNMP 陷阱),然后将此流量转发给多个客户端。 同样重要的是源端口和地址保持不变(地址欺骗)。 我想最好的工具是 Twisted 或 Scapy 或者可能是香草套接字,只是我在 Twisted 的文档中找不到关于源地址欺骗/伪造的任何内容。 有什么解决办法吗? 编辑:增加了赏金,我的 iptables 有什么解决方案吗? 回答1 我对 Twisted 或 scapy 不满意,但是使用 vanilla python 套接字执行此操作非常简单。 这样做的另一个好处是它会更加便携。 此代码适用于我的有限测试: #!/usr/bin/python from socket import * bufsize = 1024 # Modify to suit your needs targetHost = "somehost.yourdomain.com" listenPort = 1123 def forward(data, port): print "Forwarding: '%s' from port %s" % (data, port) sock = socket(AF_INET, SOCK_DGRAM) sock.bind(("localhost", port)) # Bind to the port data came in on

2021-06-10 18:28:43    分类:技术分享    python   networking   iptables   packet-mangling

具有非标准 SSH 端口的 Gitlab(在具有 Iptable 转发的 VM 上)(Gitlab with non-standard SSH port (on VM with Iptable forwarding))

问题 我的gitlab位于主机服务器上的虚拟机上。 我使用非标准 SSH 端口(即766 )到达 VM,然后 iptable 规则从host:766转发到vm:22 。 所以当我创建一个新的 repo 时,添加远程的指令提供了一个格式错误的 URL(因为它不使用766端口。例如,Web 界面给了我这个: 畸形 git remote add origin git@git.domain.com:group/project.git 而不是在组之前包含:766/的 URL。 格式良好 git remote add origin git@git.domain.com:766/group/project.git 所以当我创建一个 repo 时,我必须手动进行修改,我的合作者也是如此。 我该如何解决? 回答1 如果您在 config/gitlab.yml 中正确配置了 ssh_port,网页将显示正确的 repo url。 ## GitLab Shell settings gitlab_shell: ... # If you use non-standard ssh port you need to specify it ssh_port: 766 附: 正确的网址是:ssh://git@git.domain.com:766/group/project.git 编辑:更改后您需要清除缓存等:

2021-06-10 17:15:20    分类:技术分享    configuration   ssh   virtual-machine   iptables   gitlab

如何检查 iptables 中每个规则的命中计数?(How can I check the hit count for each rule in iptables?)

问题 我想知道如何从我使用 iptables 创建的访问列表中找出访问了哪个规则以及访问了多少次。 我的防火墙在 iptbales 中有超过 1000 条输入和输出规则; 我想找出他们每个人被访问的次数。 例如,假设我有以下规则: iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state

2021-06-10 11:20:45    分类:技术分享    linux   firewall   iptables

nfq_get_payload 如何构造它的返回数据?(How does nfq_get_payload structure its return data?)

问题 首先,我试图从 Netfilter 队列负载的负载中获取源地址和目标端口(负载是使用 nfq_get_payload 函数检索的)。 以下问题提出了同样的问题并得到了正确答案: 如何从iptables队列中的数据包中提取源端口号和目标端口号 不幸的是,没有解释为什么在地址中添加 20 和 22 会让您处于阅读信息的正确位置。 我认为这是因为数据的结构(显然),但如果有一个定义的结构,它是什么? 该文档没有明确解释数据的格式,只有“此函数检索的数据类型将取决于使用 nfq_set_mode() 函数设置的模式”,但是 set_mode 的文档没有提及任何有关数据的内容输入并且来源不会立即显示任何内容。 我觉得这一定是我遗漏或不理解的常见网络编程结构的核心内容。 注:nfq_get_payload 函数:http://www.netfilter.org/projects/libnetfilter_queue/doxygen/group__Parsing.html#gaf79628558c94630e25dbfcbde09f2933 回答1 我设法弄清楚了这一点,我将把它留在这里供其他人找到。 负载以 iphdr 结构开头。 iphdr 结构有一个协议字段,例如 tcp,如果它是 tcp,那么 iphdr 结构之后的数据是一个 tcphdr 结构,如果它是 udp,那么还有另一个

2021-06-10 01:17:18    分类:技术分享    c++   linux   network-programming   iptables   netfilter

iptables:在不同的接口和端口上转发请求(Iptables: forward request on different interfaces and port)

问题 我有一台有 2 个接口的机器: eth0 inet addr:1.1.1.1 eth1 inet addr:2.2.2.2 eth0 是服务器,eth1 是虚拟机上的网络。 我在服务器上有 ssh,所以 1.1.1.1:22 很忙。 我需要一个规则来将 eth0 端口 6000 上的传入连接重定向到端口 22(虚拟机 ip)上的 eth1、ip 2.2.2.100。 在这种模式下,如果我这样做,在外部机器上, ssh -p 6000 root@1.1.1.1 我会在虚拟机上登录。 我试过这个规则,但没有用: sudo iptables -P FORWARD ACCEPT sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 6000 -j DNAT --to 2.2.2.100:22 回答1 好吧,这种情况下有大约 100 万个脚本/教程/东西,但是如果有人从 google 登陆这里,则是这样的: iptables -I FORWARD -d 2.2.2.2 -m comment --comment "Accept to forward ssh traffic" -m tcp -p tcp --dport 22 -j ACCEPT iptables -I FORWARD -m comment --comment

2021-06-09 12:59:38    分类:技术分享    iptables   portforwarding

How to write specific iptables rules using python-iptables

I am trying to use python-iptables to write a script to set certain rules. I figured out how to set rules to allow all and deny all, but I need to figure out how to write a rule to allow established connections. For example I need to write the following rules using python-iptables: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT If anyone has firsthand knowledge or knows a good resource for writing the above or similar rules I would greatly appreciate it. Thanks in advance! Here's the finished product. I

2021-06-05 03:49:44    分类:问答    python   iptables

iptables FORWARD 和 INPUT(iptables FORWARD and INPUT)

问题 我有一个带有 Linux pc 的家庭网络,所有这些网络都在运行 iptables。 我认为将我的 LAN 放在 Linux 网关/防火墙后面更容易,所以我在我的路由器和 LAN 之间放置了一台电脑(带 Fedora,没有 gui)并配置了 iptables。 这里没问题,INPUT 只允许 dns 和 http(和一些本地的东西),转发工作正常:局域网连接到互联网。 但我的问题是:FORWARD 是否允许所有来自外部的端口,或者仅允许我配置为 INPUT 的端口? FORWARD 和 INPUT 是一起工作还是分开? 这是我的 iptables: *nat :PREROUTING ACCEPT [16:1336] :INPUT ACCEPT [14:840] :OUTPUT ACCEPT [30:2116] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o p1p1 -j MASQUERADE COMMIT # Completed on Tue Oct 16 09:55:31 2012 # Generated by iptables-save v1.4.14 on Tue Oct 16 09:55:31 2012 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT

2021-06-04 15:49:03    分类:技术分享    linux   input   iptables   forwarding