命令:
iptables [ -t 表名] 命令选项 [链名] [条件匹配] [-j 处理动作或跳转]
ACCEPT: 允许数据包通过。
DROP : 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT : 源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT : 目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
一般不使用REJECT(拒绝)行为.REJECT会带来安全隐患
规则表:
1. filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
1. nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
1. Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
1. Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
(这个是REHL4没有的,不过不用怕,用的不多)
规则链:
1. INPUT——进来的数据包应用此规则链中的策略
1. OUTPUT——外出的数据包应用此规则链中的策略
1. FORWARD——转发数据包时应用此规则链中的策略
1. PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
1. POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
一、封单个IP
1、封锁单个ip: iptables -I INPUT -s IP -j DROP #-I 指插入表第一列 [root@node1 ~]# iptables -I INPUT -s 192.168.1.11 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 192.168.1.11 anywhere
2、解封单个ip:iptables -D INPUT -s IP -d IP -j ACCEPT
[root@node1 ~]# iptables -D INPUT -s 192.168.1.11 -j DROP # 解封IP: 192.168.1.11 #-D 删除 [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination
二、封IP段
1、封IP段: 从123.0.0.1到123.255.255.254的命令 [root@node1 ~]# iptables -I INPUT -s 123.0.0.0/8 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.0.0.0/8 anywhere 2、封IP段: 从123.45.0.1到123.45.255.254的命令 [root@node1 ~]# iptables -I INPUT -s 123.45.0.0/16 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.45.0.0/16 anywhere DROP all -- 123.0.0.0/8 anywhere 3、封IP段:从123.45.6.1到123.45.6.254的命令是 [root@node1 ~]# iptables -I INPUT -s 123.45.6.0/24 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.45.6.0/24 anywhere DROP all -- 123.45.0.0/16 anywhere DROP all -- 123.0.0.0/8 anywhere
三、全部清理
[root@node1 ~]# iptables -F
四、查询
[root@node1 ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
target:代表进行的动作,ACCEPT 是放行,REJECT 是拒绝,DROP 则是丢弃数据包。
port:代表使用的协议,主要有 tcp、udp 和 icmp 三种。
opt:额外的选项说明。
source:规则针对的来源 IP。
destination:规则针对的目标 IP。
五、删除某一条规则
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT [root@localhost ~]# iptables -L OUTPUT Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:bootpc ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp spt:mysql state ESTABLISHED [root@localhost ~]# iptables -L OUTPUT -n --line-number Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 2 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:3306 state ESTABLISHED [root@localhost ~]# iptables -D OUTPUT 3 [root@localhost ~]# iptables -L OUTPUT -n --line-number Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 2 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
六、端口映射
1、本机端口转发
iptables -t nat -A PREROUTING -p tcp -d 192.21.131.81 --dport 80 -j DNAT --to-destination :8081 iptables -t nat -A POSTROUTING -j MASQUERADE 解释一下以上命令: -t nat :指定操作的表是 NAT 表。 -A PREROUTING :表示将规则添加到 PREROUTING 链中,即在数据包进入路由前执行。 -p tcp :指定数据包协议为 TCP。 -d 172.21.131.81 :指定目标 IP 地址为 172.21.131.81。 --dport 80 :指定目标端口为 80 端口。 -j DNAT :表示对符合条件的数据包进行目标地址转换。 --to-destination :8081 :将目标 IP 地址转换为本地的 8081 端口。 以上规则将在 PREROUTING 链中对源主机发送到 172.21.131.81 的所有流量进行转发。 -t nat :指定操作的表是 NAT 表。 -A POSTROUTING :表示将规则添加到 POSTROUTING 链中,即在数据包离开路由后执行。 -j MASQUERADE :表示对数据包进行源地址转换,实现 NAT 功能。 以上规则将在 POSTROUTING 链中进行源地址转换,确保返回的数据包正确路由回源主机。 验证端口转发 完成以上配置后,源主机上的 192.21.131.81:80 端口的流量将被转发到本地的 8081 端口。 将在 PREROUTING 链中对源主机发送到 172.21.131.81 的所有流量进行转发,并在 POSTROUTING 链中进行源地址转换,确保返回的数据包正确路由回源主机。
2、将192.21.131.81的80端口的所有流量转发到192.21.131.99机器的80端口上
在源主机(172.21.131.81)上添加 iptables 规则 在源主机上执行以下命令,添加 iptables 规则进行端口转发: iptables -t nat -A PREROUTING -p tcp -d 192.21.131.81 --dport 80 -j DNAT --to-destination 192.21.131.99:80 iptables -t nat -A POSTROUTING -j MASQUERADE 以上规则将在 PREROUTING 链中对源主机发送到 192.21.131.81 的所有流量进行转发,并在 POSTROUTING 链中进行源地址转换,确保返回的数据包正确路由回源主机。 请注意,这些规则仅在源主机上设置即可完成端口转发。目标主机不需要进行任何额外的设置。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通