1. iptables介绍
防火墙分类:
从逻辑上分类:
主机防火墙:仅针对单个主机进行防护。
网络防火墙:处于网络入口或边缘,针对网络入口进行防护,服务于防火墙背后的本地局域网
从物理上分类:
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现。性能高且成本高
软件防火墙:应用软件逻辑运行与通用硬件平台之上的防火墙,性能低,成本低。
iptables不是真正意义上的防火墙,是一个内核防火墙netfilter 的管理工具,是将用户的安全设定执行到相应的“安全框架”中,这个安全框架才是真正的防火墙。叫做netfilter---位于内核空间。
netfilter / iptables(简称iptables)是linux平台下的包过滤防火墙。
内核空间:也叫做内核态,操作系统占据的内存区域(硬件驱动代码和kernel运行在内核空间)
用户空间:也叫做用户态,用户进程所在的内存区域
2. iptables 四表五链
四表:
表 | 说明 |
filter | 负责过滤功能,防火墙:内核模块;iptable_filter |
nat | network address translation,网络地址转换功能;内核模块;iptable_nat |
mangle | 拆解报文,修改并重新封装;iptable_mangle |
raw | 关闭nat表上穷的连接追踪级制;iptable_raw |
五链:
链 | 表 |
PREROUTING(路由前) | raw,mangle,nat |
INPUT | mangle,filter,(centos7中还有nat) |
FORWARD(转发) | mangle,filter |
OUTPUT | raw,mangle,nat,filter |
POSTROUTING(路由后) | mangle,nat |
优先级顺序:raw --> mangle --> nat --> filter :高-->低
报文的流向:到本机某进程的报文:
PRETOUTING(判断是否为目标主机)-->(是)-->INPUT-->OUTPUT--> POSTROUTING
-->(否)--> FORWARD(转发地址)--> POSTOUTING-->访问目标主机
3. iptables 基本用法
[root@host ~]# iptables --help
iptables v1.4.21
Usage: iptables -[ACD] chain rule-specification [options] #追加(加在最后)
iptables -I chain [rulenum] rule-specification [options] #添加(需指定,否则最前)
iptables -R chain rulenum rule-specification [options] #修改
iptables -D chain rulenum [options] #删除
iptables -[LS] [chain [rulenum]] [options] #查看
iptables -[FZ] [chain] [options] #清理,删除
iptables -[NX] chain #创建|删除 用户自定义链
iptables -E old-chain-name new-chain-name #更改 用户自定义链
iptables -P chain target [options] #为指定链设置默认规则
iptables -t 表 -I(选项) 链 [n] -j 动作[RDPL] -p 协议 --dport 目的端口 -s 源地址 | (--sport 源端口 -d 目的地址)
匹配条件:
基本匹配条件 | 扩展匹配条件 |
源地址 Souece_IP | 源端口 Source Port |
目标地址 Destination IP | 目标端口 Destination Port |
处理动作:
动作 | 含义 |
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不会给任何回应 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应信息 |
SNAT | 源地址转换,解决内网用户用同一个公网地址上网的问题 |
MASQUERADE | 是SNAT的一种特殊形式,适用于形态的,临时会便的IP上 |
DNAT | 目标地址转换 |
REDIRECT | 在本机做端口映射 |
LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一个规则,对数据包不做其他任何操作 |
常用命令:
-A :在指定链尾部添加规则 #追加
-D :删除匹配到的规则
-R :替换匹配到的规则 #修改
- I :在指定位置插入规则 #需在链后指定位置,若不指定位置则会添加在第一条上
-L/S :列出指定链或所有链的规则
-F :删除指定链或所有链的规则
-N :创建用户自定义链 # iptables -N allowed
-E :更改自定义链的名称 # iptables -E allowed allow
-X :删除指定的用户自定义链
-P :为指定链设置默认规则策略,对自定义链不起作用
-Z :将指定链或所有链的计数器清零
-n :ip地址和端口号以数字的形式显示
常用规则匹配器:
-p tcp/udp/icmp/all :匹配协议,all则会匹配所有
-s addr[/mask] :匹配源地址
-d addr[/mask] :匹配目标地址
-sport port1[:port2] :匹配源端口
-dport port1[:port2] :匹配目标端口
-o interface :匹配出口网卡,只适用于FORWARD, POSTROUTING, OUTPUT
-i interface :匹配入口网卡,只适用于PREROUTING, INPUT, FORWARD
--icmp -type :匹配icmp类型
--tcp -flags mask comp :匹配TCP标记,mask表示检查范围,comp标识匹配mask中的那些标记
如:iptables -A FORWARD -p tcp --tcp-flags ALL SYN , ACK -j ACCEPT 匹配SYN和ACK标记的数据包
实际操作:
首先先将firewalld关闭
[root@host ~]# systemctl stop firewalld
[root@host ~]# yum install iptables -y
[root@host ~]# iptables -F
[root@host ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination #此时显示已经没有规则
1. 增加规则,拒绝所有来自192.168.0.1的所有报文
[root@host ~]# iptables -t filter -I INPUT -p tcp -s 192.168.0.1 -j DROP
[root@host ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.0.1 0.0.0.0/0
2. 增加规则,允许所有来自192.168.0.2的所有报文
[root@host ~]# iptables -t filter -I INPUT -p tcp -s 192.168.0.2 -j ACCEPT
[root@host ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.0.2 0.0.0.0/0
DROP tcp -- 192.168.0.1 0.0.0.0/0
3. 删除规则:允许所有192.168.0.2
[root@host ~]# iptables -t filter -D INPUT 1
[root@host ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.0.1 0.0.0.0/0
4. 删除规则:拒绝所有的192.168.0.1的报文
[root@host ~]# iptables -D INPUT -p tcp -s 192.168.0.1 -j DROP #-D前加-t filter 会报错
[root@host ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
5. 增加规则:将来自于192.168.42.11的80所有请求drop
[root@host ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.42.11 0.0.0.0/0 tcp dpt:80
6. 修改规则:将192.168.42.11的80所有请求ACCEPT
[root@host ~]# iptables -t filter -R INPUT 1 -p tcp --dport 80 -s 192.168.42.11 -j ACCEPT
[root@host ~]# iptables -nL INPUT #上述命令中-R INPUT 后面需要指定修改的规则序号
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.42.11 0.0.0.0/0 tcp dpt:80
规则保存:
安装服务
[root@host ~]# yum install iptables-services -y
两种办法保存用户规则(临时保存):
1. [root@host ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
2. [root@host ~]# iptables-save > /root/iptables #规则(导出)保存到/root/iptables文件中
[root@host ~]# iptables-restore < iptables #规则导入iptables模板中
永久保存:
[root@host ~]# cat /etc/sysconfig/iptables #写入此文件中,下面列出的是系统默认的
# Generated by iptables-save v1.4.21 on Sat Apr 25 21:36:32 2020
*filter
:INPUT ACCEPT [203:12086]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [103:8128]
-A INPUT -s 192.168.42.11/32 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Sat Apr 25 21:36:32 2020