一、防火墙简述
IPtables防火墙是基于内核的防火墙,由netfilter和iptables两个组件组成。主要工作在网络层,直接操作Linux内核的netfilter子系统,针对IP数据包,体现在对包内的IP地址、端口等信息的处理上。
注:文章便于区分,整体防火墙用大写的IPtables表示,实际中还是统一简称iptables。
二、netfilter和iptables关系
iptables是IPtables防火墙的管理工具而已,真正实现防火墙功能的是netfilter,我们配置了iptables规则后,netfilter通过这些规则来进行防火墙过滤等操作。
netfilter:属于“内核态”,是内核的一部分,由–些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。firewalld即是基于netfilter的防火墙,通过libnftables库来操作netfilter。
iptables:属于“用户态”,是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易。
三、四表五链
IPtables的主要的工作模块netfilter,位于内核中,在网络层的五个位置(也就是防火墙四表五链中的五链)注册了一些钩子函数,用来抓取数据包;把数据包的信息拿出来匹配各个各个链位置在对应表中的规则:匹配之后,进行相应的处理ACCEPT、DROP等等。
表:容纳各种链
链:容纳各种规则
规则:即匹配条件+控制类型
总结:表里有链,链里有规则
四表:
filter表 — 过滤数据包,默认表。包含三个规则链,INPUT、 FORWARD、0UTPUT
nat表 — 网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、 POSTROUTING
mangle表 — 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、 OUTPUT、FORWARD、 PREROUTING、 POSTROUTING
raw表 — 确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、 PREROUTING
五链:
INPUT — 处理入站数据包,匹配目标IP为本机的数据包
OUTPUT — 处理出站数据包,–般不在此链上做配置
FORWARD — 处理转发数据包,匹配流经本机的数据包
PREROUTING — 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上
POSTROUTING — 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网
四、IPtables防火墙命令语法
若想使用iptables防火墙。则须关闭firewalld防火墙(开启iptables服务同时会关闭firewalld服务)。
配置方法:
(1)使用 iptables 命令行
(2)使用 system-config-firewall (图形界面)
命令格式:
iptables -t [表名] [管理选项] [链名] [匹配条件] -j [控制类型]
注意事项:
• -t 指定表名,不指定时默认指filter表
• 不指定链名时,默认指filter表内的所有链
• 除非设置链的默认策略,否则必须指定匹配条件
• 控制类型使用大写字母,其余均为小写
常用的控制类型
参数 | 含义 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给出任何回应信息 |
REJECT | 拒绝数据包通过,会给数据发送端一个响应信息。 SNAT∶修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址 |
LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。LOG只是一种辅助动作,并没有真正处理数据包 |
常用的管理选项
参数 | 含义 |
---|---|
-A | 在指定链的末尾追加 (–append)一条新的规则 |
-I | 在指定链的开头插入(–insert)一条新的规则, 未指定序号时默认作为第一条规则 |
-R | 修改、替换(–replace)指定链中的某一条规则,可指定规则序号或具体内容 |
-P | 设置指定链的默认策略(–policy) |
-D | 删除 (–delete)指定链中的某一条规则, 可指定规则序号或具体内容 |
-F | 清空(–flush)指定链中的所有规则,若未指定链名,则清空表中的所有链 |
-L | 列出 (–list)指定链中所有的规则,若未指定链名,则列出表中的所有链 |
-n | 使用数字形式(–numeric)显示输出结果,如显示 IP 地址而不是主机名 |
-v | 显示详细信息,包括每条规则的匹配包数量和匹配字节数 |
--line-numbers | 查看规则时,显示规则的序号 |
五、IPtables防火墙常用命令
查看规则列表∶
iptables -t [表名] -nL [链名] [--line-numbers]
或
iptables -[vn]L # 默认查看filter表里各链的规则
iptables -nL --line-numbers # 默认查看filter表里各链的规则,并显示序列号
清空规则∶
iptables -t [表名] -F [链名]
iptables -F #(慎用)默认清空filter表中所有链里的所有规则,但不会清除-p配置或默认的规则,默认规则需要手动进行修改
iptables -X #(慎用)删除用户自定义的链
iptables -Z # 清除链记录的数据包计数和数据
删除规则∶
iptables -D INPUT 2 # 删除默认filter表INPUT链的第2条规则
iptables -t filter -D INPUT -p icmp -jREJECT # 删除filter表INPUT链所有拒绝icmp协议的规则
一般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单
注意∶
- 若规则列表中有多条相同的规则时, 按内容匹配只删除的序号最小的一条
- 按号码匹配删除时, 确保规则号码小于等于已有规则数,否则报错
- 按内容匹配删数时, 确保规则存在, 否则报错