一.iptables防火墙 组件:
netfilter :属于内核态的功能体系,是一个内核模块,由多个数据包过滤表组成,其中包含数据包的过滤处理规则集,并根据规则过滤处理IP数据包
iptables :属于用户态的管理工具,如同firewalld、ufw,是一个防火墙应用管理程序,用来实现防火墙规则集的增删改查
主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口等信息的处理上
二.四表五链:表中有链 链中有规则
四表: raw表: 数据包状态跟踪
mangle表:修改数据包内容,设置标记
nat表:数据包地址转换
filter表 :数据包过滤
五链:INPUT :处理入站数据
OUTPUT :处理出站数据
FORWARD :处理转发数据
PREROUTING :修改目的地址
POSTROUTING:修改源ip地址
raw表包含:OUTPUT PREROUTING
mangle表: INPUT OUTPUT FORWARD PREROUTING POSTROUTING
nat表: OUTPUT PREROUTING POSTROUTING
filter表: INPUT OUTPUT FORWARD
数据包到达防火墙时,规则表之间的优先顺序
表的匹配顺序: raw -> mangle -> nat -> filter
规则链之间的匹配顺序
链的匹配顺序:入站数据 PREROUTING -> INPUT -> 本机的应用程序
出站数据 本机的应用程序 -> OUTPUT -> POSTROUTING
转发数据 PREROUTING -> FORWARD -> POSTROUTING
规则内的的匹配顺序:
从上往下依次匹配链中的规则,匹配到即停止;若没有匹配的规则,则按照链的默认规则处理
iptables安装
CentOS 7默认使用firewalld防火墙,没有安装 iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装 iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
yum install -y iptables iptables-services
systemctl start iptables.service
iptables防火墙的配置方法
命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
控制类型和链名使用大写字母,其余均为小写
常用的管理选项:
-A :在指定链的末尾追加(--append)一条新的规则
-I :在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-R :修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容
-P :设置指定链的默认策略(--policy)
-D :删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容
-F :清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链
-L :列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链
-n :使用数字形式(--numeric)显示输出结果,如显示 IP 地址而不是主机名
-v :显示详细信息,包括每条规则的匹配包数量和匹配字节数
--line-numbers:查看规则时,显示规则的序v
常用的控制类型:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包通过,会给数据发送端一个响应信息。
SNAT:修改数据包的源地址。
DNAT:修改数据包的目的地址。
REDIRECT:重定向改变目的端口,将接受的包转发至本机的不同端口
MASQUERADE:伪装成一个非固定公网IP地址。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包。
匹配条件
通用匹配:条件选项可直接使用
-p 协议
-s 源IP/网段/域名
-d 目的IP/网段/域名
-i 入站网卡接口
-o 出站网卡接口
案例:
1.增加新的规则
-A :在指定链的末尾追加(--append)一条新的规则
添加新的规则
iptables - t filter -A INPUT -p icmp -j REJECT
查看规则列表 vnL
iptables -t filter -vnL
2.在第一行增加新的规则
在INPUT链添加第一条规则
iptables - t filter -I INPUT -p icmp -j REJECT
查看规则列表 vnL
iptables -t filter -vnL
3.删除规则
1.删除INPUT第一行内容
删除规则
iptables -D 删除的链路第几行
下面演示的时删除INPUT的第一行
2.删除所有链的规则
iptables -t 表名 -F [链名] #如果不指定链名则删除清空所有链的规则
4.修改规则内容
iptables -t 表名 -R 链名 序号 新规则内容
5.修改默认规则
设置默认策略:
iptables [-t 表名] -P <链名> <控制类型>
iptables -P INPUT DROP
iptables -P FORWARD DROP
#一般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单