iptables 分为四表五链

四表:

filter表

nat 表

mangle 表

raw 表

五链

INPUT 链

OUTPUT 链

FORWARD 链

PREROUTING(路由前)

POSTROUTING(路由后)

我们最主要使用的就是filter表和nat表

filter表用来过滤流量

NAT主要用来做转发

比如我们要开放一个80端口,这个就用到了filter表

规则定义如下

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

-A 增加一条规则,默认位置为最后

-p 指定协议 这里为tcp

--dport 目的端口 这里为80 由于是外界访问到这台机器,所以对于iptables来说,外界访问的目的端口就是80,反之如果从本机出去,源端口就是80,那就要用--sprot了

-j 执行的动作,这里为放行 ACCEPT

其实我们首先要清除和初始化防火墙

iptables -F

执行后我们可以看到是没有任何规则的

使用iptables -L -n -v --line-numbers 来显示当前规则

还有个参数是-t 指定那个表,如果不写就默认是filter 表

--line-numbers显示规则的的行号,这个下面会用到

这时的防火墙是完全放开的,可以访问这台机器的任何内容,这样是不好的,我们要添加一条默认规则,就是拒绝一切不符合规则的流量

iptables -A INPUT -p tcp -j DROP

注意 执行完上面这条,你就会断开ssh链接,所以在这之前,你要先增加一条规则放行ssh端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

然后我们再执行

iptables -A INPUT -p tcp -j DROP

这样才是妥当的。

由于从本机出去的流量都是安全的也就是OUTPUT链,所以默认我们的OUTPUT链都是默认放行的

现在有2条规则了

我们再增加一条规则

这时候有3条规则了,那么第三条规则会生效吗?

答案是不会,由于规则匹配是从上到下,匹配到第二条后就不会匹配第三条了,所以增加时候要插入到适当的位置

我们先删除第三条规则

iptables -D INPUT 3

再来插入

iptables -I INPUT 2  -p tcp --dport 80 -j ACCEPT

我们在第2个位置插入

这次就可以生效了,其余的不匹配的规则统统丢弃,也就是匹配到了第三条规则

如果是以上规则是无法Ping本机和其他机器以及网站的,因为规则默认丢弃一切非匹配规则,所以还需要增加一条本机主动建立的链接和已经建立链接放行的规则

iptables -I INPUT 3 -m state  --state RELATED,ESTABLISHED -p tcp -j ACCEPT

如果不增加以上规则,比如ping百度是无法ping通的

来试试NAT的端口 转发

比如我们这台机器的IP是172.17.3.78,我们叫他A机器

我们有台B机器IP是172.17.3.117,我们想通过A机器的端口转发来访问B机器的服务

假如B机器上有个nginx服务,并且开放端口是80,由于种种原因我们不想让外界知道B机器存在,所以我们通过A机器端口转发来访问B机器提供的WEB服务,我们通过A机器的8090端口去访问B机器的WEB服务

我们默认的NAT表所有规则都是空的

我们访问172.17.3.78:8090 这时候是无法访问到B机器的WEB服务的

我们来添加转发规则

iptables -t nat -A PREROUTING -p tcp -d 172.17.3.78 --dport 8090 -j DNAT --to-destination 172.17.3.117:80

-t nat 使用nat表

-A 增加一条规则,使用的表为PREROUTING表,路由前表,-d 目的地址, --dport目的端口, -j DNAT --to-destination 转发的目的地址

解释下我对这条规则理解,对于Iptables来说只要符合目的地址是172.17.3.78并且端口是8090的访问请求就转发到172.17.3.117:80的80端口上

然后还需要增加一条路由后规则

iptables -t nat -A POSTROUTING -p tcp -d 172.17.3.117 --dport 80 -j SNAT --to-source 172.17.3.78

在路由后,对于Iptables来说,源地址变成了A机器本机的IP,目的地址和端口变成了B

我们来看下NAT表的规则

我们来访问下172.17.3.78:8090

访问下172.17.3.117

都没问题,成功实现了端口转发

还有个问题就是filter的FORWARD链默认是全放行的,如果我们为了安全期间默认全给拒绝了呢?

iptables -P FORWARD DROP

执行完以前命令后,FORWARD默认规则就是DROP了,那我们的端口转发还有效吗?

肯定是失效了

因为访问请求过来后需要通过PREROUTING---ROUT--FORWARD----ROUTE---POSTROUTING

FORWARD默认拒绝的话是无法访问到的

如果是这样我们需要增加两条规则

[root@localhost ~]# iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp --sport 80 -j ACCEPT

增加以上2条规则后就可以了

为什么增加以上2条规则就可以了呢?

我的理解是FORWARD在PREROUTING之后在POSTROUTING之前

在PREROUTING-ROUTE 之后目的端口被转换成了80

在ROUTE-POSTROUTING 之后源端口变成80

所以FORWARD不加这2条规则是无法实现端口转发的

可以参照下以下,是摘抄别人的

iptables随笔的更多相关文章

  1. 使用nginx和iptables做访问权限控制(IP和MAC)

    之前配置的服务器,相当于对整个内网都是公开的 而且,除了可以通过80端口的nginx来间接访问各项服务,也可以绕过nginx,直接ip地址加端口访问对应服务 这是不对的啊,所以我们要做一些限制 因为只 ...

  2. 5、iptables之nat

    iptables: 显式扩展.网络防火墙 显式扩展:multiport, iprange, string, time, connlimit, limit, state state:无关是哪种协议 /p ...

  3. Linux 常用命令随笔(一)

    Linux 常用命令随笔(一) 1.检查linux服务器的文件系统的磁盘空间 df -h 说明: -h更具目前磁盘空间和使用情况 以更易读的方式显示 -H根上面的-h参数相同,不过在根式化的时候,采用 ...

  4. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  5. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  6. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  7. C++随笔:从Hello World 探秘CoreCLR的内部(1)

    紧接着上次的问题,上次的问题其实很简单,就是HelloWorld.exe运行失败,而本文的目的,就是成功调试HelloWorld这个控制台应用程序. 通过我的寻找,其实是一个名为TryRun的文件出了 ...

  8. iptables

    一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...

  9. 浅谈iptables 入站 出站以及NAT实例

    --------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...

随机推荐

  1. cut语法

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut  [-bn] [file] 或 cut ...

  2. 二,编程语言类别,和python变量基础

    编程语言类别 机器语言:由二进制组成,直接控制操作硬件,执行效率高,开发效率低. 汇编语言:用英文代替二进制,直接操作控制硬件,执行效率高,开发效率低. 高级语言: 编译型,如C语言,类似谷歌翻译,先 ...

  3. nf_conntrack

    How to Fix Nf_conntrack Table Full Dropping Packet Linux CentOS PacketLoss  2 minutes to read (234 w ...

  4. java 环形链表实现约瑟夫(Joseph)问题

    约瑟夫问题又名丢手绢问题.相传著名犹太历史学家 Josephus 利用其规则躲过了一场自杀游戏,而后投降了罗马. 问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.* 从编号为 ...

  5. jQuery-2.DOM---节点插入

    DOM内部插入append()与appendTo() 动态创建的元素是不够的,它只是临时存放在内存中,最终我们需要放到页面文档并呈现出来.那么问题来了,怎么放到文档上? 这里就涉及到一个位置关系,常见 ...

  6. APP加急审核

    提交加急审核需要理由,一般涉及到银行信息,或者崩溃打不开这种的比较容易通过.反正苹果很苛刻,一般不给处理.如果处理第二天就可以下载最新了,省去了漫漫的等待.一个成功加急审核的借口-- We found ...

  7. Eclipse 护眼背景色设置

    链接地址:http://blog.chinaunix.net/uid-27183448-id-3509010.html 背景颜色推荐:色调:85,饱和度:123,亮度:205  文档都不再是刺眼的白底 ...

  8. 利用开源项目jadx反编译Android应用

    原文转自:http://bbs.itheima.com/thread-200475-1-1.html 利用开源项目jadx反编译Android应用 利用Github开源项目jadx可以直接对 .dex ...

  9. : LDAP & Implementation

    LDAP LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要 ...

  10. react hooks 笔记

    1. 建议安装以上版本: "dependencies": { "react": "^16.7.0-alpha.2", "react ...