1.iptables防火墙基本介绍
Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件 netfilter和 iptables 组成。
主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。
iptables由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包。
2. 四表五链
iptables是基于内核的防火墙,其中内置了raw、mangle、nat和 filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
规则表的作用:容纳各种规则链。
规则链的作用:容纳各种防火墙规则。
四表
raw表∶ 确定是否对该数据包进行状态进行跟踪。
mangle表∶为数据包设置标记。
nat表∶ 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。(地址转换)
filter表;负责过滤数据包, 确定是否放行该数据包(过滤)。(是否允许流量通过)
五链
pre-routing : 路由选择前
post-routing 路由选择后
input 进入本机
output 出本机
forward 转发
数据包到达防火墙时,规则表之间的优先顺序:raw >mangle > nat > filter
3. iptables的配置
3.1 安装iptables,并且开启服务。
3.2 iptables防火墙的配置方法
使用iptables命令行管理
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
常用控制类型:
控制类型 | 作用 |
ACCEPT | 允许数据包通过(默认) |
DROP | 直接丢弃数据包,不给出任何回应信息 |
REJECT | 拒绝数据包通过,会给数据发送端一个响应信息 |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址 |
LOG | 日志添加备注 |
常用管理选项:
管理选项 | 作用 |
-A | 在指定链的末尾追加(--append)一条新的规则 |
-I | 在指定链的开头插入(--insert)一条新的规则,未指定序号时默认作为第一条规则 |
-R | 修改、替换(--replace) 指定链中的某一条规则,可指定规则序号或具体内容 |
-P | 设置指定链的默认策略(--policy) |
-D | 删除(--delete) 指定链中的某一条规则,可指定规则序号或具体内容 |
-F | 清空(--flush)指定链中的所有规则,若未指定链名,则清空表中的所有链 |
-L | 列出(--list) 指定链中所有的规则,若未指定链名,则列出表中的所有链 |
-n | 使用数字形式(--numeric) 显示输出结果,如显示IP地址而不是主机名 |
-v | 显示详细信息,包括每条规则的匹配包数量和匹配字节数 |
--line-numbers | 查看规则时,显示规则的序号 |
列出与清空
列出(filter)表中的所有链 iptables -nvL
清空(filter)表的规则
删除规则
删除默认filter表中INPUT链中第2条规则
添加规则
不允许其他主机ping本机192.168.66.10
不允许其他主机ping通本机,并且不给任何回应。
插入规则
设置默认规则
-P设置了DROP后,使用-F仅仅是清空链中的规则 并不会影响设置的默认规则,
如果使用-F,那么所有的规则清除后,则使用默认策略DROP,将会使远程连接
断连。使用重启服务器解决 systemctl restart iptables 或者重启服务器。
替换规则
规则替换前
4. 规则匹配
规则的匹配是 通用匹配 和 隐含匹配
通用匹配:
可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
- 协议匹配:-p 协议名
- 地址匹配:-s 源地址、-d 目的地址 可以是IP、网段、域名、空(任何地址)
- 接口匹配:-i 入站网卡、-o出站网卡
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.91.101 -j DROP
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROPiptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT //感叹号”!”表示取反
隐含扩展
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件。
[root@localhost ~]#iptables -A INPUT -p tcp --sport 10000:30000 -j REJECT
#10000到30000 全部被拒TCP标记匹配: --tcp-flags TCP标记:SYN,RST,ACK,SYN
[root@localhost ~]#iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
#禁止其它主机ping本机[root@localhost ~]#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
#允许本机ping其它主机 iptables -A INPUT -p icmp -j DROP