iptables命令

发布时间 2023-08-12 06:59:56作者: 王景迁

iptables是用户态的命令行工具。
用户通过iptables来操作netfilter内核数据包处理模块。

规则串到一个链条上后形成了链。
PREROUTING链:DNAT;
INPUT链:处理目的地址为本机的报文;
FORWARD链:处理转发到其他机器或者network namespace的报文;
OUTPUT链:处理原地址为本机并向外发送的数据包;
POSTROUTING链:SNAT

filter表:过滤
nat表:NAT网络地址转换
mangle表:修改数据包内容
raw表:关闭nat表上启用的连接追踪机制

处理动作和规则顺序

ACCEPT 

放行,跳往下一个链。 

REJECT 

拒绝,通知对方(ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset),直接中断。 

DROP 

丢弃,直接中断。 

REDIRECT 

重定向到另一个端口(PNAT),继续执行其他规则。 

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 

MASQUERADE 

把源地址转换成宿主机出口网卡IP,跳往下一个链。 

SNAT 

更改源地址,跳往下一个链。 

DNAT 

更改目的地址,跳往下一个链。 

RETURN 

结束当前链,返回主规则链。 

MARK 

将包设置标志,继续执行其他规则。 

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 

LOG 

封包相关信息记录在/var/log/messages中,继续执行其他规则。 

iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets" 

MIRROR 

把来源IP和目的IP交换,送回包,直接中断。 

QUEUE 

直接中断,把包放入队列,交给其他程序处理。 

具体操作

# 查看filter表中INPUT链的规则并显示行号
iptables -t filter -nvL INPUT --line
# 清空filter表中的INPUT链
iptables -t filter -F INPUT
# 给filter表INPUT链头部插入规则
# 192.168.0.101的虚拟机增加iptables规则
iptables -t filter -I INPUT -s 192.168.0.102 -j DROP
192.168.0.102的虚拟机无法ping通192.168.0.101

# 给filter表INPUT链尾部追加规则
iptables -t filter -A INPUT -s 192.168.0.102 -j ACCEPT
# 删除filter表INPUT链第一条规则
iptables -t filter -D INPUT 1
# 修改filter表INPUT链第一条规则从DROP改成REJECT
iptables -t filter -R INPUT 1 -s 192.168.0.102 -j REJECT

192.168.0.102的虚拟机无法ping通192.168.0.101。

# 保存规则
iptables-save > /etc/sysconfig/iptables
# 重载规则
iptables-restore < /etc/sysconfig/iptables

参考资料

https://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables