iptables初见
1 认识进站, 出站 , 转发请求
1.1 入站请求
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126000830335-534279690.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126000830335-534279690.png)
客户端发出请求, 数据包流向如图, iptables规则过滤进站数据包请求
1.2出站请求
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126000928893-1325652291.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126000928893-1325652291.png)
1.3转发请求
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001037089-100715729.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001037089-100715729.png)
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001137786-1515311084.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001137786-1515311084.png)
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001219713-912452469.png)](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001219713-912452469.png)
2 iptables的四表五链
- 当一个数据包进入网卡时 , 首先进入PREROUTING链, 根据路由表中的数据判断进入FORWARD或INPUT链 .
- 如果数据包是进入本机的, 就会进入INPUT链 . 数据包到了INPUT链后 , 任何进程都会收到它 . 本机上运行的程序可以发送数据包 , 数据包经过OUTPUT链, 然后到达POSTROUTING 链输出
- 如果数据包是转发出去的, 且需要经过内核允许转发 , 数据包就会经过FORWARD链, 然后到达POSTROUTING链
- 路由前PREROUTING(路由表之前)
- 路由后POSTROUTING
2.1 iptables中的顺序
表顺序: raw -> mangle -> nat -> filter
链顺序:
PREROUTING -> FORWARD -> POSTROUTING
PPREROUTING -> INPUT
OUTPUT -> POSTROUTING
规则匹配顺序:
自上而下 依次匹配 匹配即停止(log动作除外)
3 规则匹配顺序对性能的影响
规则1
ACCEPT 80
ACCEPT 443
ACCEPT 22
DROP all
规则2
ACCEPT 443
ACCEPT 80
ACCEPT 22
DROP all
那么规则1 和规则2 哪个性能更好呢
肯定是443处理多的请求更多
4 iptables 的常用匹配类型
iptables规则分类
自定义规则
REJECT
DROP
ACCEPT
LOG 记录日志信息
SNAT
DNAT
REDIRECT 重定向
默认规则: DROP ACCEPT
三种匹配类型
常用的通用匹配
协议匹配: -p (tcp udp icmp)
地址匹配: -s 源地址 -d 目的地址
接口匹配: -i 入站网卡 -o 出站网卡
常用的隐含匹配
端口匹配: --sport --dport 需要在-p tcp 或udp之后使用
icmp匹配类型: --icmp-type (038 级别)
0 echo-reply (回应)
3 destination-unreachable
8 echo-request (请求)
防火墙规则防近不防出 出去的数据包默认都是放行的
互联网发展之初 有过死亡之ping 的dos攻击,
多台主机 将serverping到宕机
那么就有了防御手段, client不能ping server, 但是server可以ping client
s: 80.4
c: 80.5
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT # 接收0级别
#目前可以达成目的, 但是ping 一个不存在的主机时 s:80.5 不能显示木有目标主机
再次
iptables -t filter -I INPUT -p icmp --icmp-type 3 -j ACCEPT # 先接收3级别 再接收0 级别
显式匹配
-m 扩展模块
IP范围匹配:
MAC范围匹配:
转发匹配:
状态匹配: -m state --state (NEW , ESTABLISH , RELATED )
NEW 新建立的链接
ESTABLISHED 已建立过的链接
RELATED 相关联的
5 SNAT与DNAT
一些小概念
上行带宽 即上传带宽
下行带宽 即下载带宽
双发 即下载与上传可同时进行
单发 只能单位时间内 上传和下载
当做了snat 数据包返回时便会自动做dnat
反之同理
snat应用场景
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001411065-460514793.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001411065-460514793.png)
#路由器配置
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o eth0 -j SNAT --to-source 10.10.10.20
dnat 应用场景
iptables -t nat -A PREROUTING -i eth1 -d 10.10.10.12 -p tcp ---dport 80 -j DNAT --to-destination 192.168.66.11:80
#ip映像
#将公网ip映像到局域网的的主机
iptables -t nat -A PREROUTING -d 10.10.10.12 -j DNAT --to-destination 192.168.66.11 #这样我们暴露路由公网IP,可以连接到内网的webServer
路由前和路由后 -> 防止数据包方向错误进入localhost
![https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001930185-1056845488.png](https://img2022.cnblogs.com/blog/2672061/202201/2672061-20220126001930185-1056845488.png)
为什么SNAT要使用路由后呢
源地址转换的场景
家庭局域网 路由器 百度
192.168.80.3 80.1 10.1 10.8
sIP80.3 80.3 10.8
dIP10.8 10.8 10.1
所以在路由之后才做的源地址转换,如果在之前做
sIP80.3 10.1
dIP10.8 10.8
路由表在路由器中
从百度回来的数据包,没有记录对应局域网ip 是不能返回到对应家庭设备中的
posted on 2022-01-26 00:26 joe_HelloWorld 阅读(64) 评论(0) 编辑 收藏 举报