iptables 命令基本参数和用法

iptables[-t 表名]命令选项[链名][条件匹配][-j 目标动作或跳转]

说明:

表名链名:用于指定 iptables 命令所操作的表和链

命令选项:用于指定管理 iptables 规则的方式(比如:插入、增加、删除、查看等)

条件匹配:用于指定对符合什么样 条件的数据包进行处理

动作跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转给其它链处理)

参数

作用

-P

设置默认策略:iptables -P INPUT(DROP|ACCEPT)

-F

清空规则链

-L

查看规则链

-A

在规则链的末尾加入新规则

-I   num

在规则链的头部加入新规则

-D  num

删除某一条规则

-s

匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。

-d

匹配目标地址

-i   网卡名称

匹配从这块网卡流入的数据

-o  网卡名称

匹配从这块网卡流出的数据

-p

匹配协议 如tcp,udp,icmp

--dport  num

匹配目标端口号

--sport  num

匹配来源端口号

首先说说局域网内封包的传送

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT反之。当外网的数据经过路由发往内网主机时,数据包中的目的IP(路由器上的公网IP)将修改为内网 IP,这种变更行为就是 DNAT

在 VMware 创建2个虚拟机,环境如下

主机 名称 内网 模拟外网
网关服务器 kvm200 ens37:10.1.0.200(HOST) ens33:192.168.26.200(NAT)
客户机 kvm201 ens37:10.1.0.201(HOST)

拓扑图:

一、kvm200 虚拟机

1、创建 2张网卡:一个NAT模式,一个仅主机模式

[root@kvm200 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.26.200  netmask 255.255.255.0  broadcast 192.168.26.255inet6 fd15:4ba5:5a2b:1008:c0d8:937d:ed09:c0d5  prefixlen 64  scopeid 0x0<global>inet6 fe80::8735:cc32:f095:3e11  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:21:2a:53  txqueuelen 1000  (Ethernet)RX packets 38072  bytes 34377140 (32.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 16715  bytes 2201613 (2.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 10.1.0.200  netmask 255.255.255.0  broadcast 10.1.0.255inet6 fe80::8830:37df:81ac:3a00  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:21:2a:5d  txqueuelen 1000  (Ethernet)RX packets 12565  bytes 1468734 (1.4 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 27327  bytes 51224592 (48.8 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、检查网络互通

# 跟客户机 ens37 端口
[root@kvm200 ~]# ping 10.1.0.201 -c 4
PING 10.1.0.201 (10.1.0.201) 56(84) bytes of data.
64 bytes from 10.1.0.201: icmp_seq=1 ttl=64 time=0.436 ms
64 bytes from 10.1.0.201: icmp_seq=2 ttl=64 time=1.17 ms
64 bytes from 10.1.0.201: icmp_seq=3 ttl=64 time=2.39 ms
64 bytes from 10.1.0.201: icmp_seq=4 ttl=64 time=1.35 ms--- 10.1.0.201 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3030ms
rtt min/avg/max/mdev = 0.436/1.342/2.399/0.702 ms# 访问外网
[root@kvm200 ~]# ping www.baidu.com -c 4
PING www.a.shifen.com (112.80.248.76) 56(84) bytes of data.
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=1 ttl=128 time=24.5 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=2 ttl=128 time=26.3 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=3 ttl=128 time=23.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=4 ttl=128 time=24.6 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3028ms
rtt min/avg/max/mdev = 23.152/24.702/26.397/1.155 ms

3、查看路由

[root@kvm200 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.26.2    0.0.0.0         UG    102    0        0 ens33
10.1.0.0        0.0.0.0         255.255.255.0   U     101    0        0 ens37
192.168.26.0    0.0.0.0         255.255.255.0   U     102    0        0 ens33

二、kvm201 虚拟机

1、创建 1 张网卡:网络选仅主机模式,注意要手动指向 网关服务器 10.1.0.200

vim /etc/sysconfig/network-scripts/ifcfg-ens37# 省略
......
NAME=ens37
UUID=06bb4b98-8c50-4697-9168-651e5574c32e
DEVICE=ens37
ONBOOT=yes
IPADDR=10.1.0.201
NETMASK=255.255.255.0
GATEWAY=10.1.0.200    # 指向网关服务器
[root@kvm201 ~]# ifconfig
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 10.1.0.201  netmask 255.255.255.0  broadcast 10.1.0.255inet6 fe80::135d:9bb7:e42:d740  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:6e:81:b3  txqueuelen 1000  (Ethernet)RX packets 27742  bytes 32541988 (31.0 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 9728  bytes 1257471 (1.1 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 25  bytes 2640 (2.5 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 25  bytes 2640 (2.5 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、查看路由表

(1)这里有一条默认网关,手动添加的命令:route add default gw 10.1.0.200

[root@kvm201 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.200      0.0.0.0         UG    100    0        0 ens37
10.1.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens37

3、检查网络互通

# 跟网关服务器 ens37 端口
[root@kvm201 ~]# ping 10.1.0.200 -c 4
PING 10.1.0.200 (10.1.0.200) 56(84) bytes of data.
64 bytes from 10.1.0.200: icmp_seq=1 ttl=64 time=0.645 ms
64 bytes from 10.1.0.200: icmp_seq=2 ttl=64 time=1.28 ms
64 bytes from 10.1.0.200: icmp_seq=3 ttl=64 time=1.42 ms
64 bytes from 10.1.0.200: icmp_seq=4 ttl=64 time=1.60 ms--- 10.1.0.200 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3087ms
rtt min/avg/max/mdev = 0.645/1.240/1.607/0.363 ms
[root@kvm201 ~]# # 跟网关服务器 ens33 端口
[root@kvm201 ~]# ping 192.168.26.200 -c 4
PING 192.168.26.200 (192.168.26.200) 56(84) bytes of data.
64 bytes from 192.168.26.200: icmp_seq=1 ttl=64 time=0.709 ms
64 bytes from 192.168.26.200: icmp_seq=2 ttl=64 time=1.08 ms
64 bytes from 192.168.26.200: icmp_seq=3 ttl=64 time=0.966 ms
64 bytes from 192.168.26.200: icmp_seq=4 ttl=64 time=1.04 ms--- 192.168.26.200 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3066ms
rtt min/avg/max/mdev = 0.709/0.950/1.085/0.149 ms

基础环境已经部署完成,现在 kvm 201是不能上网的,接下来我们配置 SNAT,让它可以上网

三、配置 SNAT、DNAT

1、网关服务器上开启转发功能

[root@kvm200 ~]# vim /etc/sysctl.conf# 添加
net.ipv4.ip_forward = 1# 生效
sysctl -p

2、网关服务器配置SNAT:源地址转换

能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING

(1)如果有外网固定IP(本例)

[root@kvm200 ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.26.200

(2)如果是动态 IP

# MASQUERADE(动态伪装),动态 IP 使用
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

(3)此时 kvm201 就可以上网了

[root@kvm201 ~]# ping www.baidu.com -c 4
PING www.a.shifen.com (112.80.248.76) 56(84) bytes of data.
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=1 ttl=127 time=24.2 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=2 ttl=127 time=35.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=3 ttl=127 time=22.1 ms
64 bytes from 112.80.248.76 (112.80.248.76): icmp_seq=4 ttl=127 time=21.8 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3092ms
rtt min/avg/max/mdev = 21.892/25.842/35.117/5.429 ms

3、网关服务器配置DNAT:目地地址转换

则能够让外网用户访问局域网内不同的服务器,使用 PREROUTING

(1)如果是本机端口跟其它主机端口转发:

访问服务器 2222 端口转到 内网 kvm201机器 22 端口

[root@kvm200 ~]# iptables -t nat -A PREROUTING -d 192.168.26.200 -p tcp --dport 2222 -j DNAT --to-destination 10.1.0.201:22

(2)如果是本机端口转发

# 将发往本机 80 端口流量 转到本机 8080 端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

(3) 宿主机打开 PowerShell 看下是否成功

PS C:\Users\shihua.ma.SBI> ssh root@192.168.26.200 -p 2222
The authenticity of host '[192.168.26.200]:2222 ([192.168.26.200]:2222)' can't be established.
ECDSA key fingerprint is SHA256:kF7UVt4ESc2S9PFATiAJaKLjI9Dvxjp9tsyj5TYuUn4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.26.200]:2222' (ECDSA) to the list of known hosts.
root@192.168.26.200's password:
Last login: Thu Mar  9 11:19:03 2023 from 192.168.26.1
[root@kvm201 ~]#

(4)最后我们来看下网关服务器上面的 iptables中NAT表规则

[root@kvm200 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            192.168.26.200       tcp dpt:2222 to:10.1.0.201:22Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  10.1.0.0/24          0.0.0.0/0            to:192.168.26.200

其它常用场景

  1. 到本机应用的数据包:PREROUTING → INTPUT
  2. 由本机转发数据包:PREROUTING → FORWARD → OUTPUT
  3. 由本机应用发出的数据包:OUTPUT → POSTROUTING
  4. 本机作为lvs转发数据包:PREROUTING → INTPUT → IPVS → POSTROUTING

CentOS 7 iptables 防火墙 SNAT DNAT 用法相关推荐

  1. 基于iptables的SNAT+DNAT+docker服务器集群搭建

    什么是SNAT? SNAT用于局域网访问互联网,局域网的主机A想访问互联网上的主机C,首先要将数据包发送到防火墙所在的主机B,B收到后修改数据包的源地址为B机的公网IP,然后再发送到互联网. C机收到 ...

  2. linux防火墙的复规则,Centos下iptables防火墙规则编辑方法 - YangJunwei

    今天整理一下Centos下iptables防火墙规则的保存.清除等编辑方法. 如已经安装,请跳过. $ yum install iptables 二.查看 iptables 防火墙已有规则 以下四种方 ...

  3. centos 安装iptables防火墙

    安装iptables防火墙 yum install iptables-services -y 启动iptable防火墙 systemctl enable iptables systemctl star ...

  4. IPTABLES防火墙SNAT、DNAT网关策略

    查看地址:http://www.jiayf.com/pots/912.html pdf资料下载:  http://www.feijishu.com/thread-29-1-1.html 转载于:htt ...

  5. iptables中SNAT, DNAT, MASQUERADE

    文章出处:http://server.zdnet.com.cn/server/2008/0317/772069.shtml iptables中可以灵活的做各种网络地址转换(NAT) 网络地址转换主要有 ...

  6. linux防火墙删除ip白名单命令,利用CentOS系统IPtables防火墙添加网站IP白名单

    centos6.5添加白名单如下: 在防火墙 配置文件中加入白名单  ip -A INPUT-s 183.136.133.0/24-j ACCEPT     //保存重启iptables服务,则只有该 ...

  7. 关于阿里云Centos配置iptables防火墙

    虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...

  8. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)

    文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...

  9. Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则

    Linux的iptables防火墙.SNAT.DNAT 一.iptables概述 1.netfilter/iptables关系 2.四表五链 四表 五链 规则表之间的优先顺序 规则链之间的匹配顺序 二 ...

最新文章

  1. 3.什么叫堆排序?与快速排序有什么不同?
  2. CSSE*PTC student tutoring program student lecturers of 2018-2019 Academic Year.
  3. python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路
  4. DataFountain新上两项CV算法竞赛(文化传承——汉字书法多场景识别、大数据医疗——肝癌影像AI诊断)——50万巨奖等你来拿!
  5. [代码]Delphi实现双击左CTRL键调用记事本
  6. JQGrid 在页面加载时展开SubGrid
  7. 电商常用字体_字体商用有风险,侵权罚款上千万!告诉你怎么正确使用
  8. 接第三方图片滑动验证极验
  9. Python 爬虫对链家网广州二手房源信息的处理与可视化分析
  10. 用vant 自定义小程序tabBar
  11. 黑苹果虚拟机——显卡只有7M玩玩就行
  12. python:使用 PythonMagick 生成 icon 图标
  13. 我在工作群和ChatGPT聊了会天,找到了升职加薪的新思路
  14. 带上传文件功能的写CSDN博客并发表
  15. android bp文件_理解Android.bp
  16. 高德地图js-api简单使用
  17. 处理ios软键盘弹起和收起时页面滚动问题
  18. QT-----无人机地面站如何修改显示界面1——OpenPilotGCS_config.xml
  19. 云原生之Linux命名空间和docker容器隔离
  20. MYSQL学习笔记(自用) 第二章

热门文章

  1. C++ ——vector作为函数返回值用法
  2. 运输问题的单纯形解法
  3. 质量云时代,WeTest品牌全面升级
  4. JavaScript数学运算(取整,取余和取模)
  5. 迁移学习:《SHARPNESS-AWARE MINIMIZATION FOR EFFICIENTLY IMPROVING GENERALIZATION》
  6. Vue 插件 vee-validate校验插件详解大全
  7. Server-U配置
  8. 基于docker的storm集群搭建
  9. android打开应用程序,通过浏览器直接打开Android App 应用程序
  10. linux下制作ISO文件