- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将数据从 xml 加载到 iptables。我正在使用以下命令:
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | iptables-restore
但是我得到这个错误
iptables-restore v1.4.12: Couldn't load match `ptcp':No such file or directory
我比较了 ip-tables-save
和 xsltproc/usr/share/iptables/iptables.xslt myiptable.xml
的输出,我得到了这个
xsltproc/usr/share/iptables/iptables.xslt myiptable.xml
的输出:
-A INPUT -m ptcp -m tcp --dport 22 -j ACCEPT
ip-tables-save
的输出:
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
有人可以解释一下发生了什么吗?另外,有没有我可以下载的标准 iptables.xslt
文件?
最佳答案
那么,您的 XSLT 输出在语法上似乎不正确。
所以 -m ptcp -m tcp
应该是 -p tcp -m tcp
. IIRC -m
匹配并且-p
是协议(protocol)。
我对此进行了进一步调查
这似乎是/usr/share/iptables/iptables.xslt
中的错误.实际的 XSLT 与 XML 格式不同步,因此输出不可用。
原文iptables.xslt
(2011-07-22) 使用
<xsl:if test="name() != 'match'">
但是没有<match>
生成的 XML 文件中的元素,因此计算结果始终为真 - 创建 -m ptcp
输出(在许多其他错误字符串旁边)。
解决方案:
我重写了 iptables.xslt
替换与 conditions
匹配的第一个模板与
<!-- output conditions of a rule but not an action -->
<xsl:template match="iptables-rules/table/chain/rule/conditions/*">
<!-- <match> is the psuedo module when a match module doesn't need to be loaded and when -m does not need to be inserted -->
<xsl:choose>
<xsl:when test="document('ipt-ext.xml')//@name = name()">
<xsl:text> -m </xsl:text><xsl:value-of select="name()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(' -',name(),' ')"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="node()"/>
</xsl:template>
此模板需要在同一目录中的辅助 XML 帮助文件,以识别匹配扩展,这些文件列在我命名为 ipt-ext.xml
的文件中.在 /usr/share/iptables/
中使用此名称和以下内容创建一个新文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<IPTablesMatchExtensions>
<IPText name="addrtype" />
<IPText name="ah" />
<IPText name="ah" />
<IPText name="bpf" />
<IPText name="cluster" />
<IPText name="comment" />
<IPText name="connbytes" />
<IPText name="connlimit" />
<IPText name="connmark" />
<IPText name="conntrack" />
<IPText name="cpu" />
<IPText name="dccp" />
<IPText name="devgroup" />
<IPText name="dscp" />
<IPText name="dst" />
<IPText name="ecn" />
<IPText name="esp" />
<IPText name="eui64" />
<IPText name="frag" />
<IPText name="hashlimit" />
<IPText name="hbh" />
<IPText name="helper" />
<IPText name="hl" />
<IPText name="icmp" />
<IPText name="icmp6" />
<IPText name="iprange" />
<IPText name="ipv6header" />
<IPText name="ipvs" />
<IPText name="length" />
<IPText name="limit" />
<IPText name="mac" />
<IPText name="mark" />
<IPText name="mh" />
<IPText name="multiport" />
<IPText name="nfacct" />
<IPText name="osf" />
<IPText name="owner" />
<IPText name="physdev" />
<IPText name="pkttype" />
<IPText name="policy" />
<IPText name="quota" />
<IPText name="rateest" />
<IPText name="realm" />
<IPText name="recent" />
<IPText name="rpfilter" />
<IPText name="rt" />
<IPText name="sctp" />
<IPText name="set" />
<IPText name="socket" />
<IPText name="state" />
<IPText name="statistic" />
<IPText name="string" />
<IPText name="tcp" />
<IPText name="tcpmss" />
<IPText name="time" />
<IPText name="tos" />
<IPText name="ttl" />
<IPText name="u32" />
<IPText name="udp" />
<IPText name="unclean" />
</IPTablesMatchExtensions>
应用:
从 IPTables 规则到 XML 文件:
sudo iptables-save | iptables-xml -c > myiptable.xml
从 XML 文件回到 IPTables 规则:
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | sudo iptables-restore
测试用例:我用这些 iptables
测试了新样式表规则:
$ sudo iptables-save
# Generated by iptables-save v1.4.12 on Thu May 19 12:00:00 2016
*nat
:PREROUTING ACCEPT [11:568]
:INPUT ACCEPT [1:248]
:OUTPUT ACCEPT [35:2284]
:POSTROUTING ACCEPT [35:2284]
-A PREROUTING -s 192.168.69.9/32 -i eth1 -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A PREROUTING -d 192.168.70.124/32 -i eth1 -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
COMMIT
# Completed on Thu May 19 12:00:00 2016
# Generated by iptables-save v1.4.12 on Thu May 19 12:00:00 2016
*filter
:INPUT ACCEPT [138:40810]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [135:24836]
-A INPUT -p tcp -m tcp --dport 65002 -j ACCEPT
-A INPUT -s 10.0.0.0/32 -p tcp -m tcp --dport 65003 -j ACCEPT
-A INPUT -d 10.0.0.1/32 -m connbytes --connbytes 1:4 --connbytes-mode bytes --connbytes-dir both -j ACCEPT
COMMIT
# Completed on Thu May 19 12:00:00 2016
然后我使用上面的命令将此输出转换为 XML
sudo iptables-save | iptables-xml -c > myiptable.xml
生成的 XML 文件如下所示:
<iptables-rules version="1.0">
<!-- # Generated by iptables*-save v1.4.12 on Thu May 19 12:00:00 2016 -->
<table name="nat" >
<chain name="PREROUTING" policy="ACCEPT" packet-count="3" byte-count="96" >
<rule >
<conditions>
PREROUTING <s >192.168.69.9/32</s>
<i >eth1</i>
<p >tcp</p>
<tcp >
<dport >80</dport>
<tcp-flags >FIN,SYN,RST,ACK SYN</tcp-flags>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
PREROUTING <d >192.168.70.124/32</d>
<i >eth1</i>
<p >tcp</p>
<tcp >
<dport >80</dport>
<tcp-flags >FIN,SYN,RST,ACK SYN</tcp-flags>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
</chain>
<chain name="INPUT" policy="ACCEPT" packet-count="0" byte-count="0" />
<chain name="OUTPUT" policy="ACCEPT" packet-count="8" byte-count="541" />
<chain name="POSTROUTING" policy="ACCEPT" packet-count="8" byte-count="541" />
</table>
<!-- # Completed on Thu May 19 12:00:00 2016 -->
<!-- # Generated by iptables*-save v1.4.12 on Thu May 19 12:00:00 2016 -->
<table name="filter" >
<chain name="INPUT" policy="ACCEPT" packet-count="127" byte-count="27749" >
<rule >
<conditions>
INPUT <p >tcp</p>
<tcp >
<dport >65002</dport>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
INPUT <s >10.0.0.0/32</s>
<p >tcp</p>
<tcp >
<dport >65003</dport>
</tcp>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
<rule >
<conditions>
INPUT <d >10.0.0.1/32</d>
<connbytes >
<connbytes >1:4</connbytes>
<connbytes-mode >bytes</connbytes-mode>
<connbytes-dir >both</connbytes-dir>
</connbytes>
</conditions>
<actions>
<ACCEPT />
</actions>
</rule>
</chain>
<chain name="FORWARD" policy="ACCEPT" packet-count="0" byte-count="0" />
<chain name="OUTPUT" policy="ACCEPT" packet-count="78" byte-count="6909" />
</table>
<!-- # Completed on Thu May 19 12:00:00 2016 -->
</iptables-rules>
然后再次从 XML 返回到 iptables
xsltproc /usr/share/iptables/iptables.xslt myiptable.xml | sudo iptables-restore
一切都按预期无缝运行。
关于c - iptables-restore v1.4.12 : iptables. xslt 创建错误输出:无法加载匹配 `ptcp',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37219628/
我有一个 ASP.NET Core 项目,可以使用 Visual Studio 正确构建,但无法在 MSBuild 下构建。 它没有找到所有公共(public)库(系统等)。 我正在使用 TeamCi
我正在尝试将数据库的本地快照恢复到 heroku 开发实例中。 heroku pgbackups:restore --app app_name HEROKU_POSTGRESQL_AMBER_URL
我正在为我的项目使用 rippleeffect 库。但是在 Android Nougat 和 Marshmallow 中,应用程序由于这个库而崩溃: 编译'com.github.traex.rippl
当我想取消暂存文件时,我所有的 Git 教程都显示如下内容: $ git add * $ git status On branch master Changes to be committed:
我有以下 CSS 和 HTML 可以很好地显示 DIV 的 Paralleled。但是当我减小 IE 窗口大小时 (restore-down) 按钮控件溢出根 DIV。有什么办法可以解决它。基本上我希
我开始学习 Canvas ,但我遇到了第一个令人沮丧的情况,我试图在三 Angular 形中制作 .jpg src 的剪贴蒙版。一切看起来都很好,直到我恢复我的上下文并尝试添加任何其他路径...我的剪
Redis 文档说 "RESTORE checks the RDB version and data checksum. If they don't match an error is returne
如何保存寄存器的当前状态并在以后恢复它? 我想确保我的函数没有意外的副作用。 最佳答案 为了安全地执行此操作,您不仅需要恢复寄存器的内容,还需要恢复其类型: let old_reg = getreg(
我刚刚升级到 dotnet core 2.1,但 dotnet restore 失败了。由于某种原因,它没有使用 http_proxy 或 https_proxy 设置。同时提供具有正确代理设置的 n
以编程方式创建系统还原点是“禁忌”吗?我会在执行软件更新之前执行此操作。如果有更好的方法可以仅使用我的软件文件和数据创建还原点,请告诉我。 我想要一种方法,如果在更新期间一切都发生了故障(关闭/终止更
我有一个 SQL Server Express 实例,每天两次对整个服务器进行文件级备份。我在想文件级备份可以作为表的备份。这可能是一个错误。 我现在需要查看旧的 database.mdf 文件中包含
我想知道why and when您会使用 Canvas.save , Canvas.restore ,甚至是 Canvas.saveLayer 。 我听说它们确实有用,但是我不知道何时使用它们。 最佳
以下软删除代码对我来说很好用: $post = Post::find($post_id); $post->delete(); Deleted_at 字段已更新。但这给了我一个错误: $post = P
我目前正在编写代码,当在 Node.js 上运行时,仅记录下面对象的每个值,每次迭代延迟一秒,并与字符串“您现在正在观看”连接 const episodes = [ { id: 's06e01',
假设我有两个数据库实例: InstanceA - Production server InstanceB - Test server 我的工作流程是首先将新的架构更改部署到InstanceB,对其进
This question is about a depeciated feature. dotnet core projects from version 2.x and up no longer
我最近在我的用户模型上添加了软删除,并且它的删除部分工作得很好,但是当我尝试恢复时,我收到一个错误,提示在非对象上调用成员函数restore(). 我恢复软删除用户的代码如下: public func
This question is about a depeciated feature. dotnet core projects from version 2.x and up no longer
我最近在我的用户模型上添加了软删除,并且它的删除部分工作得很好,但是当我尝试恢复时,我收到一个错误,提示在非对象上调用成员函数restore(). 我恢复软删除用户的代码如下: public func
启动Spring boot后如何“恢复”数据库中的数据? 例如 - 当我的服务器关闭时,某些行仍处于 NEW 状态。启动服务器时,我需要将状态更改为另一个状态。首先想到的是调用@PostConstru
我是一名优秀的程序员,十分优秀!