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. FireMonkey下的异形窗体拖动(需要使用FmxHandleToHwnd函数转化一下句柄)

    DelphiXE2 Firemoney FMX 的窗体不只是为windows的, 所以很多功能都没有了. 最常见的就是拖拽了 先看 VCL时代 一个经典拖动代码 ReleaseCapture(); S ...

  2. vmware linux虚拟机忘记密码怎么办

    你又忘了root密码??? 针对好多好多同学经常忘记root密码...这里给你整理怎么重置root密码!! 重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面 在 lin ...

  3. 极简代理IP爬取代码——Python爬取免费代理IP

    这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...

  4. request的跳转

    使用request.getRequestDispather(url).forword(request,response)方法跳转页面 地址栏的路径不会发生改变,在后续的ajax调用 使用window. ...

  5. 关于Git 的管理凭据操作

    1.桌面-->2.我的电脑-->3.右击选择属性-->4.控制面板主页-->5.在用户账户和家庭安全下,选择添加或删除用户账户-->转到“主用户账户”页面-->6. ...

  6. HDFS Java API 的基本使用

    一. 简介 二.API的使用         2.1 FileSystem         2.2 创建目录         2.3 创建指定权限的目录         2.4 创建文件,并写入内容 ...

  7. vscode+vagrant+xdebug调试

    配置: { "name": "Listen for XDebug", "type": "php", "requ ...

  8. CI框架注意

    1.在ci框架中,如果想继承自己写的控制器,从而不继承CI_Controller,可以在application/core中定义控制器,从而就可以在controllers中的控制器继承. 2.在ci框架 ...

  9. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  10. python算法与数据结构-二叉树的代码实现(46)

    一.二叉树回忆 上一篇我们对数据结构中常用的树做了介绍,本篇博客主要以二叉树为例,讲解一下树的数据结构和代码实现.回顾二叉树:二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left ...