iptables是防火墙的一种,是用来设置、维护和检查linux内核的IP过滤规则的,可以完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables包含3张表和5条链。3张表分别是:filter、mangle、nat。5条链分别是:INPUT、FORWARD、OUTPUT、PREROUTING、POSTROUTING。

3张表分别代表:

filter:  一般的过滤功能

mangle:  用于对特定数据包的修改

nat   :  用于nat功能(端口映射,地址映射等)

现阶段还加入了raw表,一般是为了不再让iptables做数据包的连接跟踪处理,提高性能。

5条链分别代表:

INPUT       :通过路由表后,目的地为本机

FORWARD     :通过路由表后,目的地不为本机

OUTPUT      :由本机产生,向外转发

PREROUTING  :数据包进入路由表之前

POSTROUTING :发送到网卡接口之前

1、iptables的基本命令和设置

"iptables -t filter -nL"。查看filter表的信息。如下图所示,可以看到filter表中包含了哪几条链,各有什么策略。同理也可以看到其他表的。

"iptables -t filter -F"。清空这个表里面的全部策略,这只是临时清空,在重启iptables后还会出现,所以还需要输入命令"service iptables save"来保存。

"iptables -t filter -P INPUT ACCEPT|DROP"。改变filter表中改变INPUT模式,ACCEPT接受,DROP表示丢弃数据包。例如设置成DROP以后,其他主机无法通过ssh服务连接这台主机。

"iptables -t filter -A INPUT -j REJECT"。"-A"表示在最后添加一个策略,该策略是拒绝所有数据。如下图所示,client主机无法连接,请求被拒绝。

"iptables -t filter -I INPUT 1 -i lo -j ACCEPT"。"-I"表示插入,插在后面数字之前,该策略表示本机的数据可以通过,如下图所示,本机可以通过ssh连接本机,但是其他主机不行。

"iptables -t filter -I INPUT 2 -s 172.25.254.102 -p tcp --dport 22 -j ACCEPT"。这条策略表示,172.25.254.102的主机的数据可以通过本机的22号端口,22号端口是sshd服务的端口。

"iptables -t filter -I INPUT 3 -p tcp --dport 80 -j ACCEPT"。这条策略表示80号端口的数据都可以通过。

"iptables -t filter -D INPUT 3"。删除第3条策略。

"iptables -t filter -D INPUNT -p tcp --dport 80 -j ACCEPT"。也可以通过后面的条件来删除策略。

"iptables -t filter -R INPUT 2 -s 172.25.254.102 -p tcp --dport 22 -j REJECT"。"-R"表示改变策略,将之前设置的策略中的"ACCEPT"改为"REJECT"。

"iptables -t filter -N WE"。添加一个"WE"链。

"iptables -t filter -E WE REDHAT"。改变自定义链的名称,需注意,只有自定义链可以改变名称。

"iptables -x REDHAT"。删除自定义的链。

2、策略举例

数据包进入后读取策略是从上到下逐条读取,如果有很多的策略,一个数据包再次进入显然会因为读取策略占用较长的时间,所以可以设置策略,数据包第一次进入需要读取是否允许进入的策略,再次进入则直接通过。以此为例简要介绍策略应用。

如下图所示,因为策略读取是逐条的,所以将再次进入的策略写在第一个可以大大缩短读取时间。第一条输入"iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT",这条策略表示再次进入的数据包直接通过。然后添加"iptables -t filter -A INPUT -m state --state NEW -i lo -j ACCEPT",该条策略表示本机的数据都可以直接通过。在后面就可以添加图中所示的首次进入的数据包的各种策略了。

这就是策略的一个简单的应用。

但是,需要注意的是,在设置的策略中,ftp的策略是特殊的,因为ftp的被动模式在连接时会随机开启一个大于1024的端口,端口不固定,所以策略也有所不同。

具体步骤如下:

编辑ftp的配置文件"/etc/vsftpd/vsftpd.conf",在其中输入"pasv_max_port=1025"和"pasv_min_port=1025",即将端口固定在1025上,也可以是大于1024的其他端口。重启服务后输入"iptables -t filter -I INPUT 3 -p tcp --dport 1025 -j ACCEPT"添加通过这个端口的策略。完成配置后就可以使用ftp了。

3、路由策略

现有3台主机,分别是一台有两个卡的主机server,IP分别为"172.25.254.202"、"172.25.2.202",一台client的主机IP为"172.25.2.102",网关是"172.25.2.202",一台主机的IP为"172.25.254.2"。

"2"网段的client主机现在想通过ssh连接"254"网段的主机,在不做任何配置的情况下,这是不可能的。先在可以以server主机为路由器,配置iptablse,使得可以实现。

在server主机上的配置如下:

a、"sysctl -a | grep forward"。通过这个命令查看内核路由功能"net.ipv4.ip_forward"是否开启,0为关闭,1为开启。

b、"vim  /etc/sysctl.conf"。如果没有开启,编辑这个文件,在其中写入"net.ipv4.ip_forward = 1"。完成后输入"sysctl -p"加载。

c、"iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.102"。添加策略,使得所有通过eth0网卡的数据包封装为"172.25.254.102"的数据包。

完成上述策略后,"2"网段的client主机就可以连接到"172.25.254.2"的主机了。

但是,因为数据包是封装过的,在"172.25.254.2"的主机上只能看到连接的是"172.25.254.202"的主机,并不知道有client主机的存在。这时候可以在server主机上加入策略,使得"172.25.254.2"的主机连接看到的IP时,直接连到"2"网段的主机client上。使得server主机完成路由的功能。

在server主机上加入策略"iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.2.102"。加入后"172.25.254.2"的主机连接server主机就会自动连接到"2"网段的client主机上了。

以上只是iptables的一些命令和应用,如果读者有兴趣也可以研究。

linux初学者-iptables篇的更多相关文章

  1. linux初学者-firewall篇

     linux初学者-firewall篇 firewalld是防火墙的另一种程序,与iptables相同,但是使用起来要比iptables简单的点,不需要了解3张表和5条链也可以使用. 1.firewa ...

  2. linux初学者-SElinux篇

    linux初学者-SElinux篇 SElinux是强制访问控制(MAC)安全系统,是linux历史上最杰出的新安全系统.对于linux安全模块来说,SElinux的功能是最全面的,测试也是最充分的, ...

  3. linux初学者-mail篇

     linux初学者-mail篇 邮件是在生活中比较常用的一个工具,在linux系统中的邮件也是.在linux中,邮件的发送所用的服务时postfix,邮件的接收所用的服务是pop(110端口).ima ...

  4. linux初学者-Apache篇

     linux初学者-Apache篇          Apache提供了超文本传输协议http,httpd是Apache超文本传输协议的主服务器.下文将对httpd的安装和配置进行简单的叙述.     ...

  5. linux初学者-iscsi篇

     linux初学者-iscsi篇         之前介绍过网络文件共享系统NFS和CIFS.在系统中,设备也是可以共享的,这就是iSCSI,它可以用来建立和管理IP存储设备.主机和客户机等之间的相互 ...

  6. linux初学者-ftp篇(一)

    linux初学者-ftp篇(一) FTP是文件传输协议,是用于Internet上的控制文件的双向传输.用户可以通过客户机程序从远程主机上下载或者向远程主机上传文件. linux系统中,如果不了解SEL ...

  7. linux初学者-磁盘阵列篇

    linux初学者-磁盘阵列篇 在磁盘的使用中,有时候需要提高磁盘的读写数据速度,就要用到磁盘组——raid,也就是磁盘阵列. 磁盘阵列是由最少两块以上的磁盘组成的,raid有许多模式,在这里将介绍其中 ...

  8. linux初学者-进程篇

    linux初学者-进程篇 不管是windows还是linux,都有进程,那么什么是进程呢?进程就是cpu未完成的工作.下面会介绍一些关于系统中进程的查看以及管理的方法. 1.命令 1.1.命令使用 查 ...

  9. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...

随机推荐

  1. Spring Boot:整合Spring Data JPA

    综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范.其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种 ...

  2. kali 源文件 更改和使用 更新日期:2018.04.21

    我的公众号,正在建设中,欢迎关注: 0x01 源文件格式: kali下常用的更新命令有: apt-get install update和apt-get install upgrade,update是下 ...

  3. Flink UDF

    本文会主要讲三种udf: ScalarFunction TableFunction AggregateFunction 用户自定义函数是非常重要的一个特征,因为他极大地扩展了查询的表达能力.本文除了介 ...

  4. Hadoop —— 集群环境搭建

    一.集群规划 这里搭建一个3节点的Hadoop集群,其中三台主机均部署DataNode和NodeManager服务,但只有hadoop001上部署NameNode和ResourceManager服务. ...

  5. 【设计模式】结构型01代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 定义:顾名思义,增加中间层,为其他对象提供一种代理以控制对这个对象的访问.核心在于代理二字. 1.和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理 ...

  6. CSS中浮动的使用

    CSS有两个性质 第一个是 :继承性 第二个是:层叠性: 选择器的一种选择能力,谁的权重大就选谁 { 里面分两种情况: 分别是 选中和没选中. 1.选不中的情况下,走继承性,(font,color,t ...

  7. C语言:正负数之间取模运算(转载)

    如果 % 两边的操作数都为正数,则结果为正数或零:如果 % 两边的操作数都是负数,则结果为负数或零.C99 以前,并没有规定如果操作数中有一方为负数,模除的结果会是什么.C99 规定,如果 % 左边的 ...

  8. Google 的 Java 编码规范,参考学习!

    这份文档是 Google Java 编程风格规范的完整定义.当且仅当一个 Java 源文件符合此文档中的规则, 我们才认为它符合 Google 的 Java 编程风格. 与其它的编程风格指南一样,这里 ...

  9. Bzoj 2563: 阿狸和桃子的游戏 题解

    2563: 阿狸和桃子的游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 970  Solved: 695[Submit][Status][Discu ...

  10. 聊聊C语言的预编译指令include

    "include"相信大家不会陌生,在我们写代码时,开头总会来一句"include XXX".include是干嘛用的,很多教材都提到了,因此这里不会再详细解释 ...