iptables 是 Linux 系统中的一个命令行工具,用于配置内核的网络包过滤规则。它允许系统管理员根据数据包的源地址、目的地址、传输协议、端口号等信息来决定如何处理这些数据包,例如允许、拒绝或记录。
iptables 工作在 Linux 内核的网络层,它使用一系列预定义的链(chains)和规则(rules)来过滤和转发数据包。主要的链包括 INPUT(处理进入的数据包)、OUTPUT(处理发出的数据包)、FORWARD(处理转发的数据包)等。
iptables 规则可以分为多种类型,主要包括:
以下是一个简单的 iptables 规则示例,它允许 SSH 连接并拒绝所有其他入站流量:
# 清除现有规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环接口的流量
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接和相关流量
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH 连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 记录被拒绝的连接尝试
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# 保存规则
service iptables save
原因:可能是由于 iptables 规则阻止了 SSH 连接。
解决方法:
检查 iptables 规则是否允许 SSH 端口(默认是 22):
iptables -L -n | grep 22
如果没有相应的允许规则,可以添加:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
service iptables save
原因:可能是规则没有正确保存或者内核模块没有加载。
解决方法:
确保规则已保存:
service iptables save
检查内核模块是否加载:
lsmod | grep iptable
如果没有加载,可以尝试手动加载:
modprobe iptable_filter
通过以上信息,你应该能够对 Linux 中的 iptables 有一个基本的了解,并能够解决一些常见问题。
领取专属 10元无门槛券
手把手带您无忧上云