iptables 实现nat转发

iptables 可以检测、修改、转发、重定向和丢弃 IPv4 数据包。过滤 IPv4 数据包的代码已经内置于内核中,并且按照不同的目的被组织成  的集合。 由一组预先定义的  组成, 包含遍历顺序规则。每一条规则包含一个谓词的潜在匹配和相应的动作(称为 目标),如果谓词为真,该动作会被执行。也就是说条件匹配。iptables 是用户工具,允许用户使用  和 规则


表(Tables)
iptables 包含 5 张表(tables),常用的是前2种:
filter 是用于存放所有与防火墙相关操作的默认表。
nat 用于 网络地址转换(例如:端口转发)。
raw 用于配置数据包,raw 中的数据包不会被系统跟踪。
mangle 用于对特定数据包的修改(参考 损坏数据包)。
security 用于强制访问控制网络规则


下面介绍常见的2种:

filter (过滤器):主要跟进入 Linux 本机的封包有关,这个是预设的 table 
INPUT:主要与想要进入我们 Linux 本机的封包有关;
OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
FORWARD:这个咚咚与 Linux 本机比较没有关系, 他可以『转递封包』到后端的计算机中,与下列 nat table 相关性较高。


nat (地址转换):是 Network Address Translation 的缩写, 这个表格主要在进行来源与目的之 IP 或 port 的转换,与 Linux 本机较无关,主要与 Linux 主机后的局域网络内计算机较有相关。
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的封包有关。


iptables的流程图


                               XXXXXXXXXXXXXXXXXX
                             XXX     Network    XXX
                               XXXXXXXXXXXXXXXXXX
                                       +
                                       |
                                       v
 +-------------+              +------------------+
 |table: filter| <---+        | table: nat       |
 |chain: INPUT |     |        | chain: PREROUTING|
 +-----+-------+     |        +--------+---------+
       |             |                 |
       v             |                 v
 [local process]     |           ****************          +--------------+
       |             +---------+ Routing decision +------> |table: filter |
       v                         ****************          |chain: FORWARD|
****************                                           +------+-------+
Routing decision                                                  |
****************                                                  |
       |                                                          |
       v                        ****************                  |
+-------------+       +------>  Routing decision  <---------------+
|table: nat   |       |         ****************
|chain: OUTPUT|       |               +
+-----+-------+       |               |
      |               |               v
      v               |      +-------------------+
+--------------+      |      | table: nat        |
|table: filter | +----+      | chain: POSTROUTING|
|chain: OUTPUT |             +--------+----------+
+--------------+                      |
                                      v
                               XXXXXXXXXXXXXXXXXX
                             XXX    Network     XXX

常用命令
显示规则(默认filter表)
# iptables -L -n

显示nat 规则

# iptables -L -n -t nat

清空策略
# iptables -F

清空计数

# iptables -Z

删除自定义规则链

# iptables -X

删除指定表

#iptables -t nat -X

开机启动
# chkconfig iptables on
# chkconfig iptables off

启停/保存
# /etc/init.d/iptables stop /start/restart/save

定义自己的链
#除了INPUT,FORWARD,OUTPUT链,可以定义自己的链  
# iptables -N selfish     #定义一个selfish链,相当于多了一扇门  
# iptables -X selfish     #删除selfish这条链 
# iptables -F      #删除前需要清空策略,否则链路删除不掉  


查看规则文件
# vi /etc/sysconfig/iptables


此规则表示允许22接口ssh

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-m引用模块 state 后面接状态NEW

-j 表示jump 后接动作


允许SSH连接
-A INPUT -p tcp -m tcp -i eth0 --dport 22 -j ACCEPT
允许DHCP
-A INPUT -p udp -m udp -i eth0 --dport 67:68 -j ACCEPT
允许eth0的日志记录行为,级别4
-A INPUT -i eth0 -j LOG --log-prefix "IPTABLES-LOG-INPUT-LAN:" --log-level 4


NAT表:网络地址转换(Network Address Translation)
包括三个动作
(1)DNAT:改变数据包的目的地址使包能重路由到某台机器(使公网能够访问局域网的服务器)
(2)SNAT: 改变数据包的源地址(使局域网能访问公网)
(3)MASQUERADE:和SNAT一样使局域网能访问公网,无固定IP使用PPP.PPPoE等拨号上网接入Internet


使用iptables nat实现端口转发
 
Nat表包含3条链:

(1)PREROUTING链 :数据包到达防火墙时改变包的目的地址。
(2)OUTPUT链:改变本地产生数据包的目标地址。
(3)POSTROUTING:在数据包离开防火墙时改变数据包的源地址。


举个栗子,比如mysql生产服务器经常会限制端口,只允许内网访问,那么可以在一台内网机器上配置nat转发


mysql服务器 192.168.79.129:3306

本地服务器 192.168.79.128 选择一个转发端口,如33306

如下配置可实现 192.168.79.128:33306-->192.168.79.129:3306


首先确定192.168.79.128有开启转发:

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

如更改后需执行sysctl -p



在192.168.79.128上执行:
Iptables  表名   链名    匹配条件  动作

# iptables -t nat -A PREROUTING -p tcp --dport 33306 -j DNAT --to-destination 192.168.79.129:3306
# iptables -t nat -A POSTROUTING -d 192.168.79.129 -p tcp --dport 3306 -j SNAT --to 192.168.79.128
# service iptables save

DNAT将128对33306访问转为129的3306;

SNAT将到129的3306的source定义为128;


之后便可以直接连接192.168.79.128:33306来访问mysql服务器


参考

https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://my.oschina.net/HankCN/blog/117796
http://blog.csdn.net/wailaizhu/article/details/53488954

http://cn.linux.vbird.org/linux_server/0250simple_firewall.php

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值