Iptables

iptables

> 下图为iptables的表和链,重点在nat表和filter表。
>
> filter表是默认表,实现防火墙即包过滤功能。
>
> nat表实现网络地址转换。
>
> - 配置iptables时,不指定表,就是使用filter表
> - 配置时不指定规则链,则配置所有链

![](image-20211013113027470.png)

#### 一、iptables

**包的整个流程是一个回环**

> iptables常用功能是防火墙和NAT
>
> firewalld底层调用iptables

```shell
# 环境准备
client1:
    eth0 -> 192.168.88.10/24
    gateway -> 192.168.88.11
fw1:
    eth0 -> 192.168.88.11/24
    eth1 -> 192.168.99.11/24
server1:
    eth1 -> 192.168.99.100/24
    gateway -> 192.168.99.11

# 安装firewalld
yum install -y iptables-services
systemctl start iptables.service    # iptables在起动服务时会出现一些默认规则
```

##### iptables参数

- INPUT:数据包目标地址为本机,则进入INPUT链
- OUTPUT:数据包源地址为本机,则进入OUTPUT链
- FORWARD:数据包穿过本机做转发功能,则进入FORWARD链

> iptables语法格式
>
> ​    iptables    [-t表名]    选项    [链名]    [条件]    [-j满足条件的操作]

```
常用参数:

追加规则:-A

​    eg:iptables    -A    INPUT

删除规则:-D

​    eg:iptables    -D    INPUT    1

修改规则:-R(替换目标规则,顺序不变)

​    eg:iptables    -R    INPUT    [替换位置]    -s    [IP地址]    -j    DROP

插入规则:-I(插入一条规则,原本位置上的规则将往后顺位)

​    eg:iptables    -I    INPUT    [插入位置]    --dport    [端口]    -j    ACCEPT

查看规则:-L(列出规则链中的所有规则)

​    eg:iptables    -L    INPUT

显示规则行号:--line-numbers

​    eg:iptables    -nL    INPUT    --line-numbers

通用参数:

协议:-p

​    eg:iptables    -A    INPUT    -p    tcp

源地址:-s

​    eg:iptables    -A    INPUT    -s    [IP源地址]

目的地址:-d

​    eg:iptables    -A    INPUT    -d    [IP目的地址]

源端口:--sport

​    eg:iptables    -A    INPUT    -p    tcp    --sport    [端口号]

目的端口:--dport

​    eg:iptables    -A    INPUT    -p    tcp    --dport    [端口号]

指定入口网卡:-i

​    eg:iptables    -A    INPUT    -i    [网卡]

指定出口网卡:-o

​    eg:iptables    -A    FORWARD    -o    [网卡]

最后指定要处理的动作:-j

​    DROP(直接丢弃)    REJECT(明确拒绝)    ACCEPT(接受)

规则清空:-F

​    eg:iptables    -F
```

白名单默认拒绝明确允许;黑名单默认允许明确拒绝

> 保存规则,如果不保存规则,那重启iptables服务后自定义规则将消失
>
> iptables-save > /etc/sysconfig/iptables

从本机发出包会带有标识:ESTABLISHE

> 如果从本机设置防火墙阻止外界访问,本地ping的包可以发包但返回不能接收
>
> iptables    -I    INPUT    -m    state    --state    ESTABLISHED    -j    ACCEPT

#### 二、NAT网络地址转换

追踪httpd日志信息:/var/log/httpd/access_log    #可以查看登录用户详细信息

<img src="iptables-nat.png" style="zoom:250%;" />

互联网环境中,运营商不允许私有地址出现在互联网上,发现私有地址的数据会直接丢弃。所以私有地址发往互联网时,需要用NAT转换成公有地址,也叫合法地址。
同样,作为公司也不会暴露内网地址,也需要路由器将内网地址在对外端口做公网转换,所有内网地址对外统一使用一个公网IP

所以不同内网路由器需要配置对应路由表,大致路线为:

​    从客户端发向服务器的包
​    经路由器A将客户端ip地址改成公网IP后发往路由器B
​    路由器B将接收包中的公网IP改变成内网ip转发给服务器
​    服务器接收请求后将返回结果发送给路由器B
​    路由器B将包内网ip改成公网IP后转发给路由器A
​    路由器A将包中的ip改为社区内网ip传给客户端

​    以上整个传输步骤完结,但有两处细节,第一整个流程中客户端与服务器都不知道对方的ip只知道对方路由器的ip地址,第二在公司内网,服务器提供服务的端口不一定与路由器B的端口一致,比如服务器80端口提供http服务但路由器B转发时会采用8080端口发包

(客户端到路由器A的步骤)**Easy IP**是一种特殊的动态NAT技术,直接使用路由器或防火墙外网接口的公网IP作为转换后的地址,无需额外配置公网地址池。多个内网设备通过共享同一个公网IP的不同端口访问外网

(路由器A到路由器B的步骤)**静态NAT**是一对一固定映射的NAT技术,将内网设备的私有IP永久映射到一个公网IP。通常用于内网服务器对外提供服务

```shell
# 路由器A添加规则追加到postrouting链:将88.0网段的源ip包装成99.11
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j SNAT --to-source 192.168.99.11
# ip伪装
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j MASQUERADE
# 路由器B添加规则追加到prerouting链:将发给88.11:8080的包转发到内网服务器99.100:80
iptables -t nat -A PREROUTING -d 192.168.88.11 -p tcp --dport 8080 -j DNAT --to-destination 192.168.99.100:80
```

> postrouting在数据包离开路由器前生效
> prerouting在数据包进入路由器后、路由决策前生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值