在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深

所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令

第一步:清空当前的所有规则和计数

iptables -F  #清空所有的防火墙规则
iptables -X  #删除用户自定义的空链
iptables -Z #清空计数

第二步:配置允许ssh端口连接

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT  #22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

第三步:允许本地回环地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT  #本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT

第四步:设置默认的规则

(由于在生产上,我们设置默认的入与转发都不允许,出的允许)

iptables -P INPUT DROP #配置默认的不让进
iptables -P FORWARD DROP #默认的不允许转发
iptables -P OUTPUT ACCEPT #默认的可以出去

第五步:配置白名单

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  #允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  #允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT #允许183.121.3.7访问本机的3380端口

第六步:开启相应的服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT #开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #已经建立的连接得让它进来

第七步:保存规则到配置文件中

因为刚刚的所有的规则都还是在内存中的,如果重启机器或者执行service iptables restart都会让其它失效,所以我们要把它保存在文件中,让它重启的时候能够被加载到。

[root@zejin238 ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak #任何改动之前先备份,请保持这一优秀的习惯
[root@zejin238 ~]# iptables-save > /etc/sysconfig/iptables
[root@zejin238 ~]# cat /etc/sysconfig/iptables# Generated by iptables-save v1.4.7 on Wed Sep 28 18:06:07 2016*filter:INPUT DROP [8:632]  :FORWARD DROP [0:0]:OUTPUT ACCEPT [4:416]-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -s 192.168.1.0/24 -j ACCEPT -A INPUT -s 192.168.140.0/24 -j ACCEPT -A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT# Completed on Wed Sep 28 18:06:07 2016

至次,我们完成了生产环境iptables的配置

iptables文件说明

前面四行

*filter #代表接下来的配置都是在filter表上的。我们默认的配置都在filter表上的,当然还有其它表,如raw,mangle,nat:INPUT DROP [8:632]   #代表filter表上默认的input chain为drop ,对应上面的命令iptables -P INPUT DROP,中括号里面的两个数字代表的是这条链上已经接受到的包的数量及字节数量[包的数量:包的总字节数]
:FORWARD DROP [0:0]   #代表filter表上默认的forward chain为drop ,对应上面的命令iptables -P FORWARD DROP,中括号里面的两个数字代表的是这条链上已经接受到的包的数量及字节数量[包的数量:包的总字节数]
:OUTPUT ACCEPT [4:416] #代表filter表上默认的forward chain为drop ,对应上面的命令iptables -P OUTPUT ACCEPT,中括号里面的两个数字代表的是这条链上已经接受到的包的数量及字节数量[包的数量:包的总字节数]

接下来的部分到commit结束前,都是我们刚刚执行的配置命令

-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A INPUT -s 192.168.140.0/24 -j ACCEPT
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT 

input chain与output chain分开,其它的顺序与我们配置时的顺序一致。

iptables优化

当服务器收到一条请求时,它会把iptables从上往下,一条条匹配定制的规则,那么假如机器收到一个正常的web请求,要走80端口,它需要先去检验前面5条规则,发现都不符合,直到第六条满足条件,那么这样的话防火墙的工作效率就低了很多。

所以我们优化的思路是:请求最频繁的放在最上面,请求频率较小的放在最后面。

我们此时可以直接去修改文件:vi /etc/sysconfig/iptables

调整后顺序大概为:

# Generated by iptables-save v1.4.7 on Wed Sep 28 18:06:07 2016
*filter
:INPUT DROP [8:632]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [4:416]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.135.0/24 -j ACCEPT
-A INPUT -s 192.168.140.0/24 -j ACCEPT
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Wed Sep 28 18:06:07 2016

因为web服务器,肯定是80端口访问最频繁,那为什么不是放第一条呢?

在这里,我们把已经有状态的联接放在第一条是因为在请求连接中,有很多都是在建立在已经联接的基础上通信的,譬如有可能你第一次连接的3380端口,状态是new,但在后续的联接都为ESTABLISHED,第一条就可以匹配到了。

理解iptables格式

我们在上面的iptables文件中,最开始接触会发现格式蛮奇怪的,不知道什么回事

其实iptables就是定义一些规则,满足相应的规则则进行ACCEPT、DROP、REJECT、DNAT、SNAT......

那么怎么定义匹配规则:

通用匹配

-s 指定源地址

-d 指定目标地址

-p 指定协议

-i 指定数据报文流入接口

-o 指定数据报文流出接口

扩展匹配

指定-m选项,表示用什么模块来匹配,如:

-m state --state

NEW,ESTABLISHED,RELATED  表示用state模块来匹配当前连接状态为这三种状态的连接

-m iprange

--src-range 用iprange模块匹配来源的ip地址范围

--dst-range 用iprange模块匹配目的的ip地址范围

-m multiport

--source-ports  用multiport模块来匹配来源的端口范围

--destination-ports 用multiport模块来匹配目的的端口范围

我们看如下一条例子来解读:

-A INPUT -p tcp -m iprange --src-range 121.21.30.36-121.21.30.100 -m multiport --destination-ports 3326,3327,3328 -m state --state NEW -j ACCEPT

这表示来自121.21.30.36-121.21.30.100这个地址范围的,请求端口为3326,3327,3328并且是新建的连接,都给予放行。

模块有很多,参数有很多,有些没看过怎么办?

man iptables

那iptables还有其它表,内部是怎么流转的,请看 Linux iptables原理--数据包流向 。

linux iptables常用命令之配置生产环境iptables及优化相关推荐

  1. linux系统 常用命令

    linux系统 常用命令 ps –ef|grep java 查看进程 netstat –an|grep 52818查看端口是否开启 tail –f log.log 查看日志 echo hello &g ...

  2. linux下常用命令

    目  录 引言    1 一.安装和登录    2 (一)    login    2 (二)    shutdown    2 (三)    halt    3 (四)    reboot    3 ...

  3. linux系统 常用命令(全面总结)

    文章目录 Linux 之 文件目录 工作机制 Linux命令 之 文件目录管理 2.1 目录管理 2.1.1 cd 2.1.2 ls 2.1.3 pwd 2.1.4 mkdir 2.1.5 rmdir ...

  4. Linux入门-常用命令

    学前建议: 个人认为Linux入门首先学会如何安装并成功登录Linux系统 接下来的入门-常用命令完全可以跟着任意的教程敲一下命令,比如怎么复制粘贴文件.创建文件夹.打包.压缩.解压等,自己多实践多理 ...

  5. Linux:常用命令大全

    一.Linux系统的目录结构: 1:Linux所有内容是以文件形式进行管理 2:/ 根目录 (1)bin  引导过程必需的命令,存放二进制可执行文件(ls,cat,mkdir等) (2)boot 存放 ...

  6. linux的常用命令行

    linux的常用命令行 sftp– help chmod g+w 文件 nohl 清除文件高亮显示 可用命令: cd 路径 更改远程目录到"路径" chgrp group plcd ...

  7. Linux GCC 常用命令

    Linux GCC 常用命令与汇编 文章目录 Linux GCC 常用命令与汇编 1 .简介 2 .简单编译 2.1 预处理 2.2 编译为汇编代码 2.3 汇编(Assembly) 2.4 连接(L ...

  8. Linux系统常用命令及其使用详解大全

    Linux系统常用命令及其使用详解大全 整理了linux常用的命令,最长常用的也就几十个,cd,ls ,vi等等,有些容易忘记,经常拿出来看看. 其他的可以推荐一个网站,https://www.lin ...

  9. iptables常用命令小清单

    iptables常用命令小清单 iptables简介 iptables 是集成在 Linux 内核中的包过滤防火墙系统.使用 iptables 可以添加.删除具体的过滤规则,iptables 默认维护 ...

最新文章

  1. 弯道极限超车、击败人类顶级玩家,索尼AI赛车手登上Nature封面
  2. python 把带小数的浮点型字符串转换为整数的解决方案
  3. 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)
  4. [资源分享] 吴恩达最新《机器学习训练秘籍》中文版可以免费下载了
  5. ios图文详情加载html_前端项目009 Vue 信息分享系统 商品列表、详情
  6. SpringBoot搭建天气预报微服务系统
  7. 基于鸿蒙操作系统移植,基于鸿蒙OS的按键驱动
  8. scp实现mac与linux服务器之间文件传输
  9. 在JavaScript中实现命名空间 (转载)
  10. viper4android百度云盘,【图片】打造安卓最强音效,ViPER4Android【西南模范吧】_百度贴吧...
  11. java访问win10共享盘失败_Win10不能访问共享磁盘的解决方法(亲测能用)
  12. 8. PHP7 安装
  13. 使用Java实现面向对象编程(6)
  14. inurl .php sid=,SEO如何快速挖掘找寻可用的外链平台,可以发锚文本的网站平台
  15. 宅男福利!20行Python代码,一网打尽B站小姐姐的直播信号源!
  16. MySQL-Workbench数据库基本操作
  17. ‍Mybatis源码我搞透了,面试来问吧!写了134个源码类,1.03万行代码!
  18. NoteExpress
  19. rinetd 端口转发
  20. Java网络编程基础--Netty预备知识

热门文章

  1. 弱监督语义分割--Object Region Mining with Adversarial Erasing
  2. html css样式div属性,div css
  3. linux dns 添加mx,linux dns配置
  4. java计算程序运行时间_C#里面的时间,如何计算一个程序运行花费的时间
  5. redis搭建集群和主从
  6. SpringBoot获取请求的参数
  7. ajax php加载列表实例,jQuery+PHP+ajax实现加载更多内容列表
  8. chromium android分析,Chromium Android工程迁移编译过程
  9. python中递归函数的实例_Python 递归函数详解及实例
  10. 微软官方pe工具_小白用户如何制作系统启动版,微软出官方工具啦,简单一键制作...