先举例子说明,若服务器网卡:
eth0 10.10.0.100
eth0:0 10.10.0.200
eth0:1 10.10.0.201
eth0:2 10.10.0.202
只允许10.10.0.100的IP启用80端口
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
需要关闭10.10.0.100的80端口,其他ip的80端口都需要打开
iptables -A INPUT -i eth0 -d 10.10.0.100 -p tcp --dport 80 -j DROP
只允许 10.10.0.100 访问本机的80端口
iptables -I INPUT -p TCP –dport 80 -j DROP
iptables -I INPUT -s 10.10.0.80 -p TCP –dport 80 -j ACCEPT
禁用80端口
iptables -I INPUT -p tcp --dport 80 -j DROP
打开80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
只允许通过域名请求80端口
iptables -A INPUT -s 100.64.0.0/10 -p tcp --dport 80 -j ACCEPT
理论详解:
INPUT 链 – 处理来自外部的数据。
OUTPUT 链 – 处理向外发送的数据。
FORWARD 链 – 将数据转发到本机的其他网卡设备上。
保存现有的规则:
iptables-save > /etc/iptables.rules
然后新建一个 bash 脚本,并保存到 /etc/network/if-pre-up.d/ 目录下:
#!/bin/bash
iptables-restore < /etc/iptables.rules
这样,每次系统重启后 iptables 规则都会被自动加载。
描述规则的基本参数
-p 协议(protocol)
指定规则的协议,如 tcp, udp, icmp 等,可以使用 all 来指定所有协议。
如果不指定 -p 参数,则默认是 all 值。这并不明智,请总是明确指定协议名称。
可以使用协议名 (如 tcp),或者是协议值(比如 6 代表 tcp)来指定协议。映射关系请查看 /etc/protocols
还可以使用–protocol 参数代替 -p 参数
-s 源地址(source)
指定数据包的源地址
参数可以使 IP 地址、网络地址、主机名
例如:-s 192.168.1.101 指定 IP 地址
例如:-s 192.168.1.10/24 指定网络地址
如果不指定 -s 参数,就代表所有地址
还可以使用–src 或者–source
-d 目的地址(destination)
指定目的地址
参数和 -s 相同
还可以使用–dst 或者–destination
-j 执行目标(jump to target)
-j 代表 ”jump to target”
-j 指定了当与规则 (Rule) 匹配时如何处理数据包
可能的值是 ACCEPT, DROP, QUEUE, RETURN
还可以指定其他链(Chain)作为目标
-i 输入接口(input interface)
-i 代表输入接口 (input interface)
-i 指定了要处理来自哪个接口的数据包
这些数据包即将进入 INPUT, FORWARD, PREROUTE 链
例如:-i eth0 指定了要处理经由 eth0 进入的数据包
如果不指定 -i 参数,那么将处理进入所有接口的数据包
如果出现! -i eth0,那么将处理所有经由 eth0 以外的接口进入的数据包
如果出现 -i eth+,那么将处理所有经由 eth 开头的接口进入的数据包
还可以使用–in-interface 参数
-o 输出(out interface)
-o 代表 ”output interface”
-o 指定了数据包由哪个接口输出
这些数据包即将进入 FORWARD, OUTPUT, POSTROUTING 链
如果不指定 -o 选项,那么系统上的所有接口都可以作为输出接口
如果出现! -o eth0,那么将从 eth0 以外的接口输出
如果出现 -i eth+,那么将仅从 eth 开头的接口输出
还可以使用–out-interface 参数
Iptables 命令格式
Iptables过滤条件
参考链接: