iptables概述
防火墙分为两类:硬件防火墙+软件防火墙
iptables防火墙对数据包进行过滤,在linux中,防火墙工作在第三层,针对TCP/IP数据包实施过滤和限制。linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率,因此获得广泛的应用。在很多安全技术资料中,netfilter和iptables都用来指linux防火墙,netfilter基于内核态工作,iptables基于用户态工作,由iptables告知netfilter过滤放通什么包,然后netfilter进行过滤。
四表五链
规则表用于容纳各种规则链,表依据防火墙规则的作用而划分。
raw表:确定是否对该数据包进行跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标ip地址或端口
filter表:确定是否放通该数据包,也就是对该数据包进行过滤
规则链用于容纳各种防火墙的规则,对数据包进行过滤或处理,链依据处理数据包的不同时机而分类。
INPUT:处理自己是目标地址的数据包
OUTPUT:处理自己是源地址的数据包
FORWARD:处理转发数据包
POSTROUTING:在进行路由选择后处理数据包
PREROUTING:在进行路由选择前处理数据包
raw表含有PREROUTING和OUTPUT链
mangle表含有PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD链
nat表含有PREROUTING、POSTROUTING、OUTPUT和INPUT链
filter表含有INPUT、OUTPUT和FORWARD链
数据包过滤的匹配流程
规则表之间由raw、mangle、nat、filter按顺序依次匹配。
规则链的匹配顺序:
入站:PREROUTING→INPUT
出站:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
规则链内按设定的规则依次检查,匹配到即停止,如果找不到匹配的规则,那么按照该链的默认策略进行处理
iptables格式
iptables基础语法构成
iptables -t 表名 选项 链名 条件 -j 控制类型 其中链名和控制类型必须大写
例如:iptables -t filter -A OUTPUT -p tcp -j DORP 在链的末尾添加一条由tcp出去的数据包丢弃的规则 -p 指定什么协议
控制类型包括ACCEPT(允许通过)、DROP(直接丢弃,不回复任何信息)、REJECT(拒绝通过,但会回复信息)、LOG(记录日志,然后给下一条规则匹配)
注意事项:
不指定表名时,默认指filter表
不指定链名默认指表内所有链
添加新的规则
iptables -t filter -A INPUT -p tcp -j ACCEEPT -A在最后添加
iptables -t filter -A INPUT ! -p icmp -j DROP 丢去除了icmp外的所有数据包,!表示取反
iptables -t filter -I INPUT 2 -p icmp -j ACCEPT -I在开头添加,如果指定了规则的序号,则实在该序号的规则前添加,序号在链后写上
iptables的选项
-P:指定链的默认规则 iptables -P OUTPUT REJECT
-D:删除某个规则,不指定规则的序号就是删除链里的所有规则,删除一条规则后,剩余的规则会向前进一位,所以序号会发生变更 iptables -t nat -R INPUT
-R:修改替换某个规则 iptables -t nat -R INPUT
-L:查看所有链的规则 iptalbes -t filter -L
-n:将所有字段以数字形式显示
-v:显示更详细的信息,通常和-n -L一起使用
--line-number:显示规则的编号 iptables -t filter -L -n --line-number
-F:清除所有表的所有规则 iptables -F
对源地址和目标地址进行规则设置
iptables -A INPUT -p icmp -s 192.168.214.214 -j DROP -s source对源地址进行设置
iptables -A INPUT -p icmp --s 192.168.214.0/24 -j DROP 对源网段进行设置
iptables -A OUTPUT -p tcp --d 192.168.245.11 -j DROP 对目标地址进行设置
对端口进行规则设置
iptables -A INPUT -p tcp --dport 80 -s 192.168.214.214 -j DROP 指定端口必须指定是tcp还是udp协议
对网卡的接口进行设置
iptables -t filter -A INPUT -i ens33 -j DROP -i表示in,当数据包从该网卡进入时丢弃掉
iptables -t filter -A OUTPUT -o ens33 -j DROP -o表示out,当数据包从该网卡出去时丢弃掉
-o必须和OUTPUT链一起使用
-i必须和INPUT链一起使用