目录
1、iptables介绍
2、iptables四表五链详解
3、iptables基本语法
4、实际操作
4.1 增加规则
4.2 删除规则
4.3 修改规则
5、命令语法总结
6、基本匹配条件
7、iptables进阶用法
7.1 iprange扩展模块
7.2 string扩展模块
8、iptables进行端口转发
防火墙分类:从逻辑上分类
分类 | 说明 |
主机防火墙 | 针对单个主机进行防护 |
网络防火墙 | 处理网络入口或者边缘,针对网络入口进行防护 |
防火墙分类:从物理上分类
分类 | 说明 |
硬件防火墙 | 在硬件级别实现防火墙功能 |
软件防火墙 | 应用软件处理逻辑运行于通用硬件平台之上的防火墙 |
两个概念:
内核空间:也叫内核态,操作系统占据的内存区域
用户空间:也叫用户态,用户进程所在的内存区域
表 | 说明 |
filter表 | 负责过滤功能,防火墙;内核模块:iptable_filter |
nat表 | 网络地址转换功能;内核模块:iptable_nat |
mangle表 | 拆解报文,做出修改;iptable_mangle |
raw表 | 关闭nat表上启用的追踪机制;iptable_raw |
链 | 表 |
prerouting | raw表,mangle表,nat表 |
input | mangle表,filter表 |
forward | mangle表,filter表 |
output | raw表,mangle表,nat表,filter表 |
postrouting | mangle表,nat表 |
表和链的关系:
表 | 链 |
raw | prerouting,output |
mangle | prerouting,input,forward,output,postrouting |
nat | prerouting,output,postrouting |
filter | input,forward,outpu |
优先级次序(由高到低): raw > mangle > nat > filter
处理动作
动作 | 含义 |
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给任何回应信息 |
REJECT | 拒绝数据包通过,客户端会收到拒绝的信息 |
SNAT | 源地址转换 |
DNAT | 目标地址转换 |
常用操作命令
常用操作命令 | 说明 |
-A | 在指定链尾部添加规则 |
-D | 删除匹配的规则 |
-R | 替换匹配的规则 |
-I | 在指定位置插入规则 |
-F | 删除所有链的规则 |
常见设置参数
常见设置参数 | 说明 |
--dport | 指定目标TCP/IP端口 |
--sport | 指定源TCP/IP端口 |
-p tcp | tcp协议 |
-p udp | udp协议 |
-j DROP | 拒绝 |
-j ACCEPT | 允许 |
-s 192.168.150.129 | 指定源地址或地址段 |
-d 192.168.150.130 | 指定目标地址或地址段 |
选项说明:
-t :指定操作的表
-I :指定插入规则到哪个链中
-s :指定“匹配条件”中的源地址
-j :指定“匹配条件”中的动作
拒绝所有来自192.168.150.15的所有报文
iptables -I INPUT -s 192.168.150.15 -j DROP
效果展示:
再允许192.168.150.15的所有报文
iptables -I INPUT -s 192.168.150.15 -j ACCEPT
效果展示:
iptables -D INPUT 1
iptabels -R INPUT 1 -s 192.168.150.15 -j ACCEPT
效果展示:
iptables -t 表名 -A 链名 匹配条件 -j 动作 #在规则尾部追加
iptables -t 表名 -I 链名 匹配条件 -j 动作 #在规则首部增加
iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作 #在链的指定位置添加
iptables - t 表名 -D 链名 规则序号 #按照规则序号删除规则
iptables -t 表名 -D 链名 匹配条件 -j 动作 #按照匹配条件个动作删除规则
iptables - t 表名 -P 链名 动作 #修改指定表的指定链的默认策略
iptables -F #删除所有规则
iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作 #修改规则
# -s 用于匹配报文的源地址,可以同时指定多个源地址,每个IP之间用逗号隔开,也可以指定为一个网段。
iptables -t filter -I INPUT -s 192.168.150.15,192.168.150.16 -j DROP
# -d 用于匹配报文的目标地址,可以同时指定多个目标地址,每个IP之间用逗号隔开,也可以指定为一个网段。
iptables -t filter -I OUTPUT -d 192.168.150.15,192.168.150.16 -j DROP
# -p 用于匹配报文的协议类型,可以匹配的协议类型tcp,udp,udplite,icmp等等。
iptables -t filter -I INPUT -p tcp -s 192.168.150.15,192.168.150.16 -j DROP
# -i 用于匹配报文是哪个网卡接口流入本机的,由于匹配条件只是用于匹配报文的流入的网卡,所以OUTPUT链与POSTROUTING链中不能使用此选项。
iptables -t filter -I INPUT -p tcp -i ens33 -j DROP
使用iprange扩展模块可以指定“一段连续的ip地址范围”,用于匹配报文的源地址或者目标地址。
iprange扩展模块有两个扩展匹配条件可以使用:
iptables -t filter -I INPUT -m iprange --src-range 192.168.150.15-192.168.150.25 -j DROP
使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。
iptables -t filter -I INPUT -m string --algo kmp --string "bit" -j DROP
# 网站有敏感字符串,用户访问不让响应
实例1:
将本机的8080端口转发至其他主机,主机IP:192.168.150.16,目标主机IP和端口:192.168.150.15:8088,规则如下;
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.150.15:8088
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 8088 -j SNAT --to-source 192.168.150.16
echo 1 > /proc/sys/net/ipv4/ip_forward #开启iptables forward转发功能。
实例2:
访问本机的8080端口转发到本地的80端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80