一 概念介绍
1.四表五链
表, 链, 规则 三者为包含关系:表中存放的是链,链中存放的是规则
四表:优先级:filter<nat<mangle<raw
名称 | 作用 |
---|---|
filter表 | 确定是否被放行该数据包(过滤);负责包过滤(默认) |
NAT表 | 修改数据包中的源、目标IP地址或端口;负责地址转发 |
mangle表 | 为数据包设置标记;负责对数据包进行修改和追踪 |
raw表 | 确定是否对该数据包进行状态跟踪;有限级最高,设置raw是一般是为了不在iptables做数据包的链接跟踪处理,提高性能 |
五链:
名称 | 作用 |
---|---|
INPUT | 处理入站数据包 |
OUTPUT | 处理出站数据包 |
FORWARD | 处理转发数据包 |
PREROUTING | 在进行路由选择前处理数据包 |
POSTROUTING | 在进行路由选择后处理数据包 |
链路顺序:
入站: PREROUTING→INPUT 路由选择前→入站
出站:OUTPUT→POSTROUTING 出站→路由选择后
转发:PREROUTING→FORWARD→POSTROUTIN 路由选择前→转发→路由选择后
不管是路由入站还是转发,都要选择路由选择前
不管是路由出站还是转发,都要选择路由选择后
二 iptables操作命令
1.防火墙
#查看防火墙的状态
systemctl status iptables.service
#停止防火墙
systemctl stop iptables.service
#启动防火墙
systemctl start iptables.service
#重启防火墙
systemctl restart iptables.service
#重载防火墙等价于restart
systemctl reload iptables.service
#禁止开机启动防火墙
systemctl disable iptables.service
#开机启动防火墙
systemctl enable iptables.service
2.防火墙规则基本语法:
iptables [-t 表名] 选项&参数 [链名][匹配条件][-j 动作控制类型]
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
常见动作控制类型:
类型 | 解析 |
---|---|
ACCEPT | 允许通过 |
DROP | 直接丢弃,不给出任何回应 |
REJECT | 拒绝通过,必要时会给出提示 |
LOG | 记录日志信息,然后传给下一条规则继续匹配 |
选项参数列表:
选项参数 | 介绍 |
---|---|
-t | 指定表,默认filter |
-A | 追加一条规则 -A 链名 [序号] 匹配条件 -j 动作 |
-I | 插入一条规则 -I 链名 [序号] 匹配条件 -j 动作;默认第一行(也可以自己指定序号) |
-R | 修改规则 -R 链名 序号 匹配条件 -j 动作 |
-D | 删除指定规则 -D 链名 序号 (-s <IP地址> -j <目标>) |
-P | 设置默认规则 -P 链名 动作(ACCEPT,DROP,REJECT,LOG) |
-p | 指定协议 TCP,UDP,ICMP; |
–sport | 指定源端口 ; |
–dport | 指定目标端口 |
-L | 查看防火墙规则,后可以指定链 |
-F | 清空防火墙规则;也可以指定清空某一个表的所有规则 |
-v | 以更详细的方式显示规则信息 |
-n | 以数字形式显示,不被解析域名或端口服务;要和-L配合看 |
–line-numbers或–line | 显示规则编号;要和-L配合看 |
-s | 指定源IP地址 |
-d | 指定目标IP地址 |
-i | input 进入时指定网卡 |
-o | output 流出时指定网卡 |
-m | 指定模块,没有指定模块,默认使用与-p选项同名的模块 |
2.使用案例:
- 查看指定表的规则并展示规则序号
iptables -t filter -nL --line
对IP地址进行限制
- 以追加形式(放在链的最下层)增加一条规则,使192.168.0.1 禁止访问
iptables -A INPUT -s 192.168.0.1 -j REJECT
- 插入(使用-I 插入放入链的第一条)一条规则,允许192.168.0.1访问
iptables -I INPUT -s 192.168.0.1 -j ACCEPT
- 修改规则,将filter表(默认可不指定)中INPUT链上序号为1的规则修改为限制192.168.0.1 不能访问
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
对端口进行限制
- 允许目标端口8000的 tcp 访问请求
iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
对网卡进行限制
- 限制指定网卡eth1的访问流入
iptables -I INPUT -i eth1 -j DROP
- 限制指定网卡eth1的访问流出
iptables -I OUTPUT -o eth1 -j DROP
删除规则
- 使用链上序号删除规则:删除filter表 INPUT链上序号为2的规则
iptables -D INPUT 2
- 删除指定规则条件的规则:和新建类似,之间把 -I 或 -A 改为 -D,匹配不上时给提示信息并不做任何操作
iptables -t filter -D INPUT -p tcp --dport 24 -j DROP
保存防火墙规则
service iptables save
保存防火墙规则到配置文件,否则重启就失效了
iptables-save > /etc/sysconfig/iptables
3.nat 表的常用操作(共享上网和端口映射)即:SNAT与DNAT
3.1. 共享上网:
在与外界通信时需要是使用公网进行通信,
局域网无法使用局域网IP与公网进行通信,
所以需要在局域网通信是将源IP(请求自身的IP)
替换为可以与公网进行通信的某个公网IP(SNAT)。
**完成共享网卡的公网IP需要进行三步操作**
1. 配置防火墙SNAT规则
2. 开启内核转发功能(虚拟机):sysctl -p 设置:net.ipv4.ip_forward = 1
3. 虚拟机的网关指向该防火墙: vi /etc/sysconfig/network-scripts/ifcfg-eth1 加上网关配置:GATEWAY=172.25.10.10 DNS1=223.5.5.5 #(网关地址和DNS解析地址)
添加路由转发规则:给指定表nat的 POSTOUTING链(因为需要在出口处设置源地址转换) 添加 一条规则将 局域网: 192.168.10.0/24网段的请求 源地址替换为外部网卡(有公网IP)的地址:172.25.10.10
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.25.10.10
3.2 通常都是将某个公网IP的服务器作为入口,接受来自公网的请求信息,
在分发给局域网内部的各服务器进行处理,可以使用(DNAT)来进行端口映射,
将公网服务器的不同端口映射到不同局域网服务的的不同端口上。
给nat表 PREROUTING链(因为是在请求进入前),将目的IP为:172.25.10.10的80端口的tcp请求转发给内网服务器的 192.168.0.1的8000端口进行处理
iptables -t nat -A PREROUTING -d 172.25.10.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:8000