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条规则是无法实现端口转发的

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

转载于:https://www.cnblogs.com/hh2737/p/9512355.html

iptables随笔相关推荐

  1. 代码重构 防火墙 相关知识

    参考 依据Linux命令 以及sysconf下现有的iptables命令,详见hsm_sysconf_server/src/sysconf_server.cpp中的firewall规则. 接口名称 f ...

  2. 一个可以直接使用的可用iptables配置的stateless NAT实现

    使用iptables配置stateless NAT?我没有搞错. 可能你根本不知道这么多NAT的实现细节,或者说根本不在乎,那么本文就当是一个"如何编写iptables模块"的练习 ...

  3. linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件

    虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...

  4. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  5. centos7下没有iptables进行安装或更新

    从centos7开始使用linux,之前版本的没有深入了解过,今天要开放个端口,需要有防火墙的相关操作,从网上查资料都是编辑/etc/sysconfig目录下面的iptables文件,可我进入这个文件 ...

  6. 25个iptables常用示例

    本文将给出25个iptables常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望.  格式 iptables [-t 表名] 选项 [链名] [条件] [-j ...

  7. iptables命令(备忘)

    语法 iptables(选项)(参数) 选项 -t<表>:指定要操纵的表: -A:向规则链中添加条目: -D:从规则链中删除条目: -i:向规则链中插入条目: -R:替换规则链中的条目: ...

  8. linux防火墙cc,Linux防火墙后面的Alljoyn服务(iptables)

    我想在嵌入式linux设备上使用Alljoyn框架.由于安全原因,有必要为该设备配置防火墙.这是通过iptables完成的.Linux防火墙后面的Alljoyn服务(iptables) 我到目前为止所 ...

  9. 关于对IPtables规则的理解

    1,iptables中的所有规则都会存放到/etc/sysconfig/iptables文件中 2,最前端的规则既是现有规则 3,如果要改变现有的规则有两种办法: (1) 使用iptables -t ...

最新文章

  1. 从当前日期算起,获取几天前的日期和几个月前的日期
  2. 史上最全SpaceX火箭数据开源,核心、组员舱、起落架、发射信息全都有!
  3. 双11,如果数据中心断网断电会怎样?
  4. 301重定向的实现方法
  5. Nexys4 DDR + OV7670 摄像头实时监控系统
  6. LeetCode 79. Word Search
  7. php2588,搞清楚一下必胜2588z和2582z哪个好点?都有些什么区别?内幕评测分析
  8. 【项目经验】自动回声消除(AEC)原理
  9. Pwn2Own 2020 曝出的Linux 内核漏洞已修复
  10. 嵌入式系统开发快速体验
  11. 《剑指offer》面试题5———从尾到头打印链表(C++ 实现)
  12. QUIC 协议在蚂蚁落地综述
  13. 物联网LoRa系列-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择
  14. 伍德里奇计量经济学第四章课后计算机作业,伍德里奇---计量经济学第4章部分计算机习题详解(MATLAB).pdf...
  15. 电商直播还有什么新花样?
  16. java发音_多少牛逼的程序员毁在low逼的英文发音上(JAVA)
  17. 2022高教社杯 国赛数学建模 A题思路
  18. 2018年北航计算机学院推免夏令营经验
  19. 【安卓】给ViewFlipper加指示器,类似ViewPagerIndicator库提供的那种、!
  20. 天线因子与增益转换关系

热门文章

  1. Optional Chaining 进入 ES2020,不用满屏`x x.yyy`了
  2. VS 2019 for Mac 第 3 个预览版发布,新编辑器、Xamarin 开发改进
  3. php返回json套数组_教你PHP怎么不用框架写优雅的中小网站
  4. python输出引号内的变量值_引号中的Python变量值
  5. php中,多维数组是什么意思,在PHP中回显多维数组
  6. python程序异常实例_Python werkzeug.exceptions方法代码示例
  7. js生成图片_网页骨架屏自动生成方案(dps)
  8. java下载上传远程文件
  9. java中html5表格_java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)...
  10. python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件