表的概念
我们把相同功能的规则的集合叫做“表”,所以说,不同功能的规则,我们可以放在不同的表中进行管理。比如,A类表规则都是对应的IP的过滤,B类都是修改报文。
而iptables已经为我们定义了4种表,每种表对应不同的功能,而我们定义的规则也逃脱不了这4种功能的范围
filter表:负责过滤功能,防火墙; 内核模块:iptable_filter
net表:network address translation,网络地址转换功能; 内核模块:iptable_nat
mangle表:拆解报文,作出修改,并重新封装的功能; 内核模块:iptable_mangle
raw表:关闭nat表上启动的连接追踪机制; 内核模块:iptable_raw
PREROUTING 的规则可以存在于:raw表、mangle表、nat表。
INPUT 的规则可以存在于:mangle表、filter表、(centos7中有nat表,centos6中没有)
FORWARD 的规则可以存在于:mangle表、filter表。
OUTPUT 的规则可以存在于:raw表、mangle表、nat表、filter表。
POSTROUTING 的规则可以存在于:mangle表、nat表
iptables为我们定义了4张表,当他们处于同一条链时,执行的优先级如下:
raw-->mangle-->nat-->filter
规则的概念:条件+动作 组成规则
动作
ACCEPT:允许数据包通过
DROP:直接丢弃数据包。客户端过了超时时间才会有反应
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERAED:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上
DNAT:目标地址转换
REDIRECT:在本机做端口映射
LOG:在/var/log/messages文件中记录日志信息,然后讲数据包传递给下一条规则。也就是说除了记录以外不对数据包做任何操作,仍然让下一条规则去匹配
pkts:对应规则匹配的报文的个数
bytes:对应匹配到报文包的大小总和
target:规则对应target,往往表示规则对应的“动作”,即规则匹配成功后需要采取的措施
prot:表示规则对应的协议,是否只针对某些协议应用此规则
opt:表示规则对应的选项
in:表示数据包由哪个接口(网卡)流入,我们可以设置通过哪块网卡流入的报文需要匹配当前规则
out:表示数据包由哪个接口(网卡)流出,我们可以设置通过哪块网卡流出的报文需要匹配当前规则
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段
destination:表示规则对应的目标地址。可以是一个IP,也可以是一个网段
查看filter表中的规则
iptables -t filter -L(省略-t 表名时,默认表示操作filter表) -L表示列出规则
iptables -t 表名-L 链名
查看指定表的指定链的规则
iptables -t 表名-L -v
查看指定表的所有规则,并且显示更详细的信息,-v表示详细的,冗长的,当使用-v时,会显示出’计数器‘的信息,
iptables -t 表名 -n -L
表示查看表的所有规则,并且在显示规则时,不对规则的ip或端口进行名称反解,-n表示不解析IP地址
iptables --line -t 表名 -L
表示查看表中的所有规则,并且显示规则的序号
iptables -t 表名 -v -x -L
表示查看表中的所有规则,并且显示更详细的信息,计数器中的信息显示为精确的计数值。-x表示显示计数器的精确值
iptables --line -t filter -nvxL
也可以查看某张表中的某条链,此处以filter表中INPUT链为例
iptable --line -t filter -nvxL INPUT
在指定链的尾部添加一条规则,-A选项表示在对应链的末尾添加规则
命令语法:iptables -t 表名 -A 链名 匹配条件 -j 动作
例:iptables -t filter -A INPUT -s 192.168.10.10 -j DROP
-I 在指定链的指定位置添加一条规则
命令语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
例:iptables -t filter -I INPUT 5 -s 192.168.10.10 -j REJECT
设置指定表的指定链的默认策略(默认动作),并非添加规则
命令语法:iptables -t 表名 -P 链名 动作
例:iptables -t filter -P FORWARD ACCEPT(将filter表中FORWARD链的默认策略设置为ACCEPT)
-D表示删除对应链中的规则
命令语法:iptables -t 表名 -D 链名 规则序号
例:iptables -t filter -D INPUT 3
按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则
命令语法:iptables -t 表名 -D 链名 匹配条件 -j 动作
例:iptables -t filter -D INPUT -s 192.168.10.10 -j DROP
删除filter表中INPUT 链中源地址为192.168.10.10并且动作为DROP的规则
删除指定表的指定链的所有规则,-F选项表示清空对应链中的规则,三思而行
命令语法:iptables -t 表名 -F 链名
例:iptables -t filter -F INPUT
删除指定表中的所有规则,三思而行
命令语法:iptables -t 表名 -F
示例:iptables -t filter -F
修改规则,-R选项表示修改对应链中的规则
命令语法:iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作
示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT
表示修改filter表中INPUT链中的第三条规则,将这条规则的动作修改为ACCEPT,-s 192.168.1.146为这条规则中原本的匹配条件,如果省略匹配条件,修改后的规则中的源地址可能变为0.0.0.0/0
修改指定表的指定链的默认策略(默认动作),并非修改规则
命令语法:iptables -t 表名 -P 链名 动作
示例:iptables -t filter -P FORWARD ACCEPT
保存规则,将iptables规则保存至/etc/sysconfig/iptables文件中,如果对应的操作没有保存,那么当重启iptables服务以后
Service iptables save
或者使用如下方法保存规则
Iptables-save > /etc/sysconfig/iptables
可以使用如下命令从指定的文件载入规则,注意:重载规则时,文件中的规则将会覆盖现在规则
Iptables-restore < /etc/sysconfig/iptables
-s用于匹配报文的源地址,可以同时指定多个源地址,每个IP之间用逗号隔开,也可以指定一个网段
#示例如下
iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT
-d用于匹配报文的目标地址,可以同时指定多个源地址,每个IP之间用逗号隔开,也可以指定一个网段
#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT
-p用于匹配报文的协议类型,可以匹配的协议类型 tcp udp udplite esp ah sctp等
#示例如下
iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
iptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT
-i用于匹配报文是从哪个网卡接口流入本机的,由于匹配条件只用于匹配报文流入的网卡,所以在OUTPUT链与POSTROUTING链中不能使用
#示例如下
iptables -t filter -I INPUT -p icmp -i eth4 -j DROP
iptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP
-o用于匹配报文是从哪个网卡接口流入本机的,由于匹配条件只用于匹配报文流入的网卡,所以在INPUT链与POSTROUTING链中不能使用
#示例如下
iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROP
iptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP
下面只打开22端口,就是下面2个语句
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
最后别忘记了保存 对防火墙的设置
通过命令:service iptables save 进行保存