iptables初步总结

本文详细介绍了Linux防火墙iptables的工作原理及应用场景,包括其钩子函数、链表管理、规则配置及扩展选项等内容。

iptables是Linux中的防火墙,在Linux中可以过滤数据包。下面简单的介绍下iptables的应用。

①iptables在Linux中有五个钩子函数(hook function)

PREROUTING:数据包进入了主机,但是还没有被路由的阶段。

INPUT:数据包进入到主机内部。

FORWARD:数据包将由从本主机转发出去。

POSTROUTING:数据包马上由本级发送出去。

OUTPUT:数据包从本主机发送出去。

②iptables在Linux中的四个链

fileter:可以应用在 INPUT FORWARDOUTPUT上面

nat:可以应用在PREROUTINGPOSTROUTING OUTPUT上面

mangle:可以应用在PREROUTINGPOSTROUTING OUTPUT INPUT FORWARD。

raw:可以应用在PREROUTINGOUTPUT上面。

③iptables通用匹配

-s:指定过滤数据包的源地址。

-d:指定过滤数据包的目标地址。

-p:指定过滤的协议类型。

-i:指定过滤的数据包进入的网卡接口。

-o:指定过滤的数据包流出的网卡接口。

-j:对指定的数据包的动作

I:ACCEPT---------接受指定的数据包。

II:DROP----------丢弃指定的数据包。

III:REJECT-------丢弃指定的数据包。

eg:对192.168.5.1访问192.168.5.10的http数据包进行丢弃的操作

iptables –A INPUT –s 192.168.5.1 –d192.168.5.10 –p tcp --dport 80 –j DROP

eg:对192.168.5.1访问192.168.5.10的http数据包进行接受的动作

iptables –A INPUT –s 192.168.5.1 –d192.168.5.10 –p tcp –doprt 80 –j ACCEPT

iptables –A OUTPUT –s 192.168.5.10 –d192.168.5.1 –p tcp –sport 80 –j ACCEPT

在对接受的数据包进行处理的时候,需要注意的是数据包一来一回的双向处理。

对自定义的iptables规则就行保存

service iptables save

iptables –L –nv  --line-numbers //查看自定义的防火墙规则。

④管理规则

-A:添加一条规则,添加的位置在规则的末尾。

-I:添加一条规则,如果省略添加的位置,默认的添加的位置在规则的最上方。

-D:删除一条规则。

-R:对某条指定的规则进行修改。

对链进行管理:

-F:清空一条链上面的所有的规则。

-P:更改制定链的默认规则。

-N:自定义一条新的空链。

-X:删除一个自定义的空链。

 

 

⑤扩展选项使用

eg:对于http的服务请求,192.168.5.1服务器段进行连接状态的控制

iptables –A INPUT  -d 192.168.5.1 –p tcp –dport 80 –m state–state NEW,ESTABLISHED –j ACCEPT

iptables –A OUTPUT –s 192.168.5.1 –p tcp–sport 80 –m state –state ESTABLISHED –j ACCEPT

//服务器对于INPUT服务器的NEW和ESTABLISHED状态的报文给予响应,对于OUTPUTon服务器的报文只响应ESTABLISHED类型的报文。

eg:多端口的相应

iptables –A INPUT –d 192.168.5.1 –p tcp –m–multiport –destination-ports 21,22,80 –m state –state NEW,ESTABLISHED –jACCEPT

//在INPUT链上给予21,22,80端口并且是NEW或者是ESTABLISHED的报文放行处理。

eg:编写规则,一个IP地址的ssh连接最多可以有三个。当超过三个的时候过5分钟之后在进行连接处理。

iptables –A INPUT –d 192.168.5.1 –p tcp–dport 22 –m connlimit –connlimit-above 3 –j DROP

iptables –A INPUT –d 192.168.5.1 –p tcp–dport 22 –m state –state NEW –m recent –set –name SSH //记录访问ssh的新的连接,记录来源IP地址。

iptables –A INPUT –d 192.168.5.1 –p tcp–dport 22 –m state –state NEW –m recent –update –seconds 300 –hitcount 3 –nameSSH –j DROP //当超过三次之后,300秒内不许连接—seconds和—hitcount 必须和—update一起使用。

eg:在请求http的过程中,如果请求的页面还有H7N9则不允许显示

iptables –A OUTPUT –d 192.168.5.1 –p tcp–dport 80 –m string –algo kmp –string “H7N9” –j DROP

//注意方向是OUTPUT方向。

⑥nat:

DNAT:目标地址转换

SNAT:源地址转换

eg:访问外网时,将192.168.5.0/24地址转化为172.16.10.1

iptables –A POSTROUTING –s 192.168.5.0/24 –jSNAT –to-source 172.16.10.1

iptables –A POSTROUTING –s 192.168.5.0/24 –jSNAT MASQUERADE //如果需要转化的地址是一个动态变化的地址,那么可以使用MASQUERADE来进行自动的转换。

eg:当访问外放的服务器172.16.10.1的时候转换到内网的192.168.5.1进行访问

iptables –A PREROUTING –d 172.16.10.1 –p tcp–dport 80 –j DNAT –to-destination 192.168.5.1

同样可以进行端口映射

iptables –A PREROUTING –d 172.16.10.1 –p tcp–dport 80 –j DNAT –to-destination 192.168.5.1:8080

⑦在打开了iptables的过程中。利用lsmod|grepip 可以查看加载了那些模块。在Linux6.4系统中,在/proc/sys/net/nf_conntrack_max可以查看iptables允许的最大的连接数量。如果一个服务器非常繁忙的话,当连接数量超过了配置文件的数量的时候,那么就会有大量的请求被丢弃。在/proc/net/nf_conntrack中记录了当前连接的状态信息。这些状态信息也可以利用iptstate来查看。

 

<think> 首先,用户的问题是基于引用内容,询问如何解决Docker中的特定错误:"iptables: No chain/target/match by that name",这与Docker的编程外部连接性错误相关。引用提供了几个可能的解决方案。 关键错误信息:"iptables: No chain/target/match by that name",这通常发生在Docker尝试管理iptables规则时。 从引用中提取解决方案: - 引用[1]和[3]提到问题可能是iptables规则没有正确设置或意外删除。 - 引用[2]建议: 1. 检查防火墙配置:使用 `iptables -L` 查看。 2. 重启Docker服务:`service docker restart`。 - 引用[4]提到错误:"Failed to Setup IP tables: Unable to enable SKIP DNAT rule",并建议检查iptables规则。 用户需求是解决这个错误,所以我需要提供一个清晰的、结构化的解决方案。 回答结构: 1. **理解问题**:解释错误的原因。 2. **提供解决方案**:逐步指导如何解决。 3. **添加引用**:在相关部分末尾自然添加引用标识。 4. **生成相关问题**:在回答结束后添加相关问题部分。 系统指令要求: - 所有行内数学表达式使用 $...$,但这里没有数学内容,所以不需要。 - 独立公式使用 $$...$$,但这里不需要公式。 - LaTeX语法正确:保持回答中的代码块正确。 - 使用中文回答。 - 生成相关问题:在最后添加。 - 回答结构清晰,逐步解决问题。 用户查询:"我想查找解决Docker编程外部连接性错误及iptables无匹配链/目标/规则错误的方案",所以重点是解决这个错误。 综合引用中的解决方案: - 重启Docker服务:这通常是最简单的第一步。 - 检查iptables规则:使用 `iptables -L` 查看。 - 如果规则缺失,可能需要重置iptables或重新配置Docker。 - 引用[2]提到重启Docker服务。 - 引用[3]提到问题可能与容器启动失败有关。 - 引用[4]建议检查iptables规则。 可能的步骤: 1. 重启Docker服务:`sudo service docker restart` 或 `sudo systemctl restart docker`。 2. 检查iptables规则:`sudo iptables -L` 查看是否正常。 3. 如果问题持续,尝试重置iptables:`sudo iptables -F` (flush rules),但要注意这可能删除所有规则,需要谨慎。 4. 重启系统:有时重启整个系统可以解决问题。 5. 确保Docker的iptables配置正确:Docker默认管理iptables规则,但如果有冲突,可能需要调整。 在回答中,引用相关部分: - 例如,在解释原因时引用[1]。 - 在建议重启Docker时引用[2]。 确保回答真实可靠:基于提供的引用。 最终回答结构: - 引言:解释错误原因。 - 解决方案步骤:逐步列出。 - 结论:确认解决。 - 相关问题:添加一些相关问题。 生成相关问题: 1. 如何防止Docker iptables错误再次发生? 2. Docker网络配置的最佳实践是什么? 3. 除了iptables,还有什么可能导致Docker外部连接失败? 现在,起草回答。 </think>### 解决Docker编程外部连接性错误及iptables "No chain/target/match by that name"错误的方法 当Docker尝试管理网络连接时,如果遇到"iptables: No chain/target/match by that name"错误,通常表示Docker在配置iptables规则时失败。这可能是由于iptables规则被意外删除、Docker服务未正确初始化或系统防火墙配置冲突导致[^1][^3]。以下是基于引用内容的逐步解决方案,帮助您高效修复问题。请按顺序操作,确保操作环境有管理员权限(使用`sudo`)。 #### 步骤1: 重启Docker服务(首选方法) 重启Docker服务是最简单且最有效的初步解决方案,它能强制Docker重新加载iptables规则[^2]。 ```bash sudo systemctl restart docker # 重启Docker服务 ``` - **验证是否解决**:尝试重新启动您的Docker容器(例如 `docker start <容器名>`)。如果错误消失,说明问题已修复。 - **注意事项**:如果重启后问题依旧,请继续下一步。 #### 步骤2: 检查并修复iptables规则 iptables规则缺失是常见原因。使用以下命令检查当前规则: ```bash sudo iptables -L -v # 查看详细的iptables规则链 ``` - **期望输出**:确保`DOCKER`链存在。如果输出中缺少`DOCKER`链或显示"chain not found",则需手动恢复。 - **修复命令**:如果规则缺失,重启iptables服务并刷新规则: ```bash sudo systemctl restart iptables # 重启iptables服务 sudo iptables -F # 刷新所有规则(谨慎操作,可能清除自定义规则) sudo systemctl restart docker # 再次重启Docker ``` 此操作会重置iptables,通常能恢复DOCKER链[^2][^4]。 #### 步骤3: 验证Docker网络配置 确保Docker的网络设置正确,避免与外部连接冲突: ```bash docker network ls # 列出所有Docker网络 docker inspect <网络名> | grep "IPAM" # 检查IP分配 ``` - **常见问题**:如果容器网络子网与宿主机冲突,可能导致连接失败。尝试重建Docker网络: ```bash docker network prune # 清理未使用网络 sudo systemctl restart docker ``` #### 步骤4: 重启系统(最终手段) 如果以上步骤无效,可能是系统级配置错误。重启宿主机以完全重置网络堆栈: ```bash sudo reboot # 重启系统 ``` 重启后,Docker会自动重建iptables规则链[^3]。 #### 验证修复结果 - 测试容器连接:启动一个测试容器(例如 `docker run -it --rm alpine ping google.com`),检查是否能访问外部网络。 - 监控日志:使用 `journalctl -u docker.service` 查看Docker日志,确认无错误输出。 **原因总结**:该错误通常源于iptables规则损坏或Docker服务状态异常。通过重启服务和重置规则,大多数情况下可快速解决[^1][^4]。如果问题复发,建议检查系统防火墙(如firewalld)是否与Docker冲突。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值