1、iptables介绍
防火墙分类:从逻辑上分类
分类 | 说明 |
---|---|
主机防火墙 | 针对单个主机进行防护 |
网络防火墙 | 处于网络入口或者边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网 |
防火墙分类:从物理上分类
分类 | 说明 |
---|---|
硬件防火墙 | 在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本也高 |
软件防火墙 | 运用软件处理逻辑运行于通用硬件平台上的防火墙,性能低,成本低 |
- iptables并不是真正意义上的防火墙,我们可以理解为一个客户端工具,用户通过ipatbles这个客户端,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。
- netfilter才是防火墙真正的安全框架,netfilter位于内核空间。
- iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。
- netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
两个概念:
内核空间:也叫做内核态,操作系统占据的内存区域
用户空间:也叫做用户态,用户进程所在的内存区域
硬件驱动代码运行在内核空间,与kernel运行在相同空间内,所以驱动程序发生问题容易造成系统的崩溃。将用户空间与内核空间隔离开,可减少系统崩溃的可能,提高系统的稳定性。再现实环境中,应用程序崩溃的情况比一些硬件故障出现的概率要多的多得多。所以将用户空间和内核空间隔离开很有必要。
2、iptables四表五链
- 防火墙就是按规则办事,我们提前定义好规则条件,防火墙就根据定义好的对应方法去处理。
- 规则一般的定义为:“如果数据包头符合这样的条件,就这样处理这个数据包”。
- 这些规则存储在内核空间的信息过滤表中,这些规则分别定义了源地址、目的地址、传输协议、服务类型等。
- 当数据和规则匹配时,就会执行对应的动作,如:放行、拒绝、丢弃等。
- 配置防火墙的主要工作就是添加、修改和删除这些规则。
我们把具有相同功能的规则的集合叫做“表”,不同的规则放在不同的表中工作,在iptables中定义了四种表。
表 | 说明 |
---|---|
filter表 | 负责过滤功能,防火墙;内核模块:iptables_filter |
nat表 | 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表 |
但在实际使用中,我们通常是按表来操作的。
表 | 链 |
---|---|
raw | REROUTING,OUTPUT |
mangle | REROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING |
nat | REROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有) |
filter | INPUT,FORWARD,OUTPUT |
当四个表处于同一条链上时,优先级如下:
优先级次序(高到低):raw>mangle>nat>filter
3、iptables基本用法
匹配条件加上处理动作共同组成了规则。
- 匹配条件:
基本匹配条件 | 扩展匹配条件 |
---|---|
源地址 | 源端口 |
目的地址 | 目的端口 |
- 处理动作
动作 | 含义 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了 |
超时时间才会有反应。 | |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的 |
信息 | |
SNAT | 源地址转换,解决内网用户用同一个公网地址上网的问题 |
MASQUERADE | 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上 |
DNAT | 目标地址转换 |
REDIRECT | 在本机做端口映射 |
LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配 |
常见操作命令 | 说明 |
---|---|
-A | 在指定链尾部添加规则 |
-D | 删除匹配的规则 |
-R | 替换匹配的规则 |
-I | 在指定位置插入规则(例:iptables -I INPUT 1 --dport 80 -j ACCEPT(将规则插入到filter表INPUT链中的第一位上) |
-L/S | 列出指定链或所有链的规则 |
-F | 删除指定链或所有链的规则 |
-N | 创建用户自定义链[例:iptables -N allowed] |
-X | 删除指定的用户自定义链 |
-P | 为指定链设置默认规则策略,对自定义链不起作用 |
-Z | 将指定链或所有链的计数器清零 |
-E | 更改自定义链的名称[例:iptables -E allowed disallowed] |
-n | ip地址和端口号以数字方式显示[例:iptables -nL] |
常见规则匹配器 | 说明 |
---|---|
-p | |
tcp/udp/icmp/all | 匹配协议,all会匹配所有协议 |
-s addr[/mask] | 匹配源地址 |
-d addr[/mask] | 匹配目标地址 |
–sport | |
port1[:port2] | 匹配源端口(可指定连续的端口) |
–dport | |
port1[:port2] | 匹配目的端口(可指定连续的端口) |
-o interface | 匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT(例:iptables -AFORWARD -o eth0) |
-i interface | 匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。 |
–icmp-type | 匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型) |
–tcp-flags maskcomp | 匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。(例:iptables-A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT 表示匹配SYN和ACK标记的数据包) |
iptables常用命令:
iptables -A 将一个规则添加到链末尾
iptables -D 将指定的链中删除规则
iptables -F 将指定的链中删除所有规则
iptables -I 将在指定链的指定编号位置插入一个规则
iptables -L 列出指定链中所有规则
iptables -t nat -L 列出所有NAT链中所有规则
iptables -N 建立用户定义链
iptables -X 删除用户定义链
iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP
常见设置参数介绍:
--dport 指定目标TCP/IP端口 如 –dport 80
--sport 指定源TCP/IP端口 如 –sport 80
-p tcp 指定协议为tcp
-p icmp 指定协议为ICMP
-p udp 指定协议为UDP
-j DROP 拒绝
-j ACCEPT 允许
-j REJECT 拒绝并向发出消息的计算机发一个消息
-j LOG 在/var/log/messages中登记分组匹配的记录
-m mac –mac 绑定MAC地址
-m limit –limit 1/s 1/m 设置时间策列
-s 192.168.1.153或192.168.1.0/24 指定源地址或地址段
-d 192.168.1.153或192.168.1.0/24 指定目标地址或地址段
-s ! 192.168.1.0 指定源地址以外的
iptables规则配置
环境清零
[root@centos6 ~]# iptables -F //清理规则
[root@centos6 ~]# iptables -nvL //查看规则
Chain INPUT (policy ACCEPT 6 packets, 400 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3 packets, 312 bytes)
pkts bytes target prot opt in out source destination
增加规则
新增一个拒绝所有来自192.168.229.129报文的规则
[root@centos6 ~]# iptables -t filter -I INPUT -s 192.168.229.129 -j DROP
[root@centos6 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 7 packets, 424 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.229.129 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 624 bytes)
pkts bytes target prot opt in out source destination
删除规则
[root@centos6 ~]# iptables -t filter -D INPUT 1
[root@centos6 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 10 packets, 640 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 592 bytes)
pkts bytes target prot opt in out source destination
修改规则
[root@centos6 ~]# iptables -t filter -I INPUT -s 192.168.229.129 -j ACCEPT
[root@centos6 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 8 packets, 512 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 192.168.229.129 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 472 bytes)
pkts bytes target prot opt in out source destination
[root@centos6 ~]# iptables -t filter -R INPUT 1 -s 192.168.229.129 -j DROP
[root@centos6 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 6 packets, 384 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.229.129 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 368 bytes)
pkts bytes target prot opt in out source destination
保存规则
[root@centos6 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@centos6 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Sat May 2 03:55:52 2020
*filter
:INPUT ACCEPT [51:3240]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:2648]
-A INPUT -s 192.168.229.129/32 -j DROP
COMMIT
# Completed on Sat May 2 03:55:52 2020
扩展匹配条件
- 隐式扩展——在使用-p选项指明了特定的协议时,无需再同时使用-m选项指明扩展模块的扩展机制
- 显式扩展——必须使用-m选项指明要调用的扩展模块的扩展机制
iptables模板制作的思路
-
白名单机制:默认规则是拒绝所有,需要方通的请求accept。
-
黑名单机制:默认规则是容许所有,需要拒绝的请求REJECT。
-
在黑名单的条件下,实现白名单的效果:默认容许所有,添加最后一条规则为拒绝所有。