28_2_iptables系列之基本应用及显示扩展

1. iptables命令

格式:iptables [-t table] COMMAND CHAIN [num] 匹配标准 -j 处理办法

[-t tables]:指定表,可以省略,默认filter表(用于iptables)  
  CMOMAND:
      管理规则:
            -A:附加一条规则,添加在链的尾部
            -I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条
        -D CHAIN [num]:删除指定链中的第num条规则
        -R CHAIN [num]:替换指定的规则
      管理链:
            -F [CHAIN]:flash,清空指定规则链,如果省略CHAIN,可删除对应表中所有链
        -P CHAIN:设定指定链的默认策略
        -N:自定义一个新的空链
        -X:删除一个自定义的空链
        -Z:置零指定链中所有规则的计数器
        -E:重命名自定义的链
     例:【需要注意的是:先不要把默认策略改为DROP,应该先写两条策略让自己不被拒绝】
          iptables -P INPUT   DROP
          iptables -P OUTPUT  DROP
          iptables -P FORWARD DROP
      查看类:
        -L:显示指定表中的规则,会反解IP和端口,反解IP会很慢[DNS]
        -n:以数字格式显示主机地址和端口号
        -v:显示链及规则的详细信息
        -x:显示计数器的精确值
        --line-numbers:显示规则号码
         例:# iptables -L -n -v

CHAIN [num]:指定哪个链的哪一条,CHAIN可取值为INPUT,OUTPUT,FORWARD
               num省略默认为改链的第一条规则

匹配标准:
     通用匹配:
           -s,--src:指定源地址
       -d,--dst:指定目标地址
           -p{tcp|udp|icmp}:指定协议
       -i INTERFACE:指定数据报文流入的接口
                         可用于定义标准的链:PREROUTING,INPUT,FORWARD  
           -o INTERFACE:指定数据报文流出的接口
                         可用于定义标准的链:POUTPUT,FORWARD,POSTROUTING
     例:iptables -t filter -A INPUT -s 172.16.0.0/16  -d 172.16.100.7 -j DROP
     扩展匹配:
        隐含扩展:
        -p tcp:
            --sport PORT[-PORT]:源端口
            --dport PORT[-PORT]:目标端口
        --tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表
             comp:此列表中出现的标志位必须为1,comp中没有出现而mask中出现的为0
             如:--tcp-flags  SYN,FIN,ACK,RST  SYN
                SYN为1其他三个标志位为0,这是TCP第一次连接 == --syn
        例:iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
            iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
        -p udp:
            --sport PORT[-PORT]:源端口
            --dport PORT[-PORT]:目标端口
        -p icmp:
            --icmp-type:
             0:echo-rely,响应报文
             8:echo-request,请求报文
        显示扩展:
        使用额外的匹配规则
        格式:-m EXTEXTION --spe-opt
        I.state:
           状态扩展,结合ip_cootrack追踪会话的状态
           NEW:
           ESTABLISHED:
           INVALID:
           RELATED
           如:

处理办法:
     ACCEPT:    放行
     DROP:      丢弃
     REJECT:    拒绝
     DNAT:      目标地址转换
     SNAT:      源地址转换
     REDIRECT:  端口重定向
     MASQUERADE:地址转换
     LOG:       日志
     MASK:      打标记

2. 练习
(1)放行192.168.1.0/24网段访问192.168.1.40的ssh服务(端口22)
    # iptables -A  INPUT -s 192.168.1.0/24 -d 192.168.1.40 -p tcp --dport 22 -j ACCEPT
    # iptables -A  OUTPUT -s 192.168.1.40 -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT

(2)修改默认策略
   【为了防止远程链接时把自己挡到外面了,所以先放行ssh】
    # iptables -P INPUT DROP
    # iptables -P OUTPUT DROP
    # iptables -P FORWARD DROP

(3)允许任何主机访问192.168.1.40的web服务
    # iptables -I INPUT -d 192.168.1.40 -p tcp --dport 80 -j ACCEPT
    # iptables -I OUTPUT -s 192.168.1.40 -p tcp --sport 80 -j ACCEPT

(4)放行自己对自己的所有访问
    # ping 127.0.0.1
      PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
      ping: sendmsg: Operation not permitted
      此时连ping自己都不通了,虽然127.0.1是本地回环地址,
      但是从网络角度将,也需要从OUTPUT出去,然后从INPUT进来
    # iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
    # iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
    # ping 127.0.0.1
      PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
      64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.101 ms

(5) 允许自己ping任何主机
    # iptables -A OUTPUT -s 192.168.1.40 -p icmp --icmp-type 8 -j ACCEPT
    # iptables -A INPUT -d 192.168.1.40 -p icmp --icmp-type 0 -j ACCEPT

3. DNS服务器进行解析,如果不是自己负责的域,需要去互联网找,
   假设DNS服务器的INPUT,OUTPUT,FORWARD的默认策略是DROP,
   那一般至少需要几条链呢?
 答:8条
    第1条:允许客户端请求解析
    第2条:允许本机响应客户端的解析请求
    第3条:请求寻找不是自己负责的域
    第4条:响应寻找不是自己负责的域的结果
    UDP和TCP各4条,所以共8条

4. iptables不是服务,但是有服务脚本,服务脚本的主要作用在于管理保存的规则
   命令lsmod:查看内核模块
   装载及移除iptables/netfilter相关的内核模块:
       iptables_nat
    iptables_filter
    iptables_mangle
    iptables_raw
    ip_nat:ip报文实现nat功能的另外的补充模块
    ip_conntrack:追踪连接条目并保存在内存中

5.ip_conntrack:
     追踪连接条目并保存在内存中(/proc/net/ip_conntrack)
     可以防止反木马病毒
     反木马病毒:在主机内有一个执行文件,主动去找一个可出去的端口,主动去连接外面的主机
                 而iptables防止不了这种情况
     ip_conntrack:会追踪所有的连接,保存它们的链接信息
             从而约定有请求的并建立了连接才允许出去,也就是响应
     数目:ip_conntrack是可以限制保存数目的
          /proc/net/ip_conntrack:此文件能保存的信息有限,因为是保存在内存中的
          /proc/sys/net/ipv4/ip_conntrack_max:此文件存放的是能保存的最大数目;
          当存了最大数目的连接条目后,以后的请求将被丢弃。
          大型服务器上并发量很多最大数目也无法满足,在大型服务繁忙的主机上不要开此模块。

注意啦:#iptables -t nat -L
         查看nat条目时,会自动加载ip_conntrack模块

时间: 2024-12-27 08:33:52

28_2_iptables系列之基本应用及显示扩展的相关文章

显示扩展名

有时候系统会默认把扩展名隐藏掉,可以通过如下方式显示扩展名,以便于把.txt修改为.java 打开我的电脑-> F10显示菜单栏->工具->文件夹选项->查看-> 去掉 隐藏已知文件类型的扩展名 上的勾选

打印模板显示扩展字段名称

UBF打印模板中,自定义扩展字段显示均为扩展字段值集值编码,而在实际运用过程中打印需要显示扩展字段名称具体实现方法如下: 1.采用SQL系统定义函数[dbo].[fn_GetSegName]实现 1).检查[fn_GetSegName]函数是否存在(SQL位置:ERP数据库->可编译性->函数->标量值函数) 2).在U9中注册函数[fn_GetSegName]: 文件路径: D:\yonyou\U9V50\Portal\bin\script.xml D:\yonyou\U9V50\Po

点阵字体显示系列之二:汉字显示

免责声明: 本文是作者在研究过程中的一篇文章,本着互联网共享.自由(free,应该不是“免费”)之精神发布于此.作者才疏学浅,孤陋寡闻,能力有限,对文中出现的术语及概念的描述多有不当之处,由于本文并非学术报告及论文,不对这些概念性东西进行深入调研,如需权威性解释,请自行查阅相关文献.文中错误的地方,欢迎在文后留言,趁作者还有激情研究之时,大家一直探讨,共同学习,天天向上. 计算机中存在许多种格式的编码,比如ASCII.GB2312.GBK.UTF-8,等等.汉字以“内码”的形式存储于计算机中.对

Laravel大型项目系列教程(四)显示文章列表和用户修改文章

小编心语:不知不觉已经第四部分了,非常感谢很多人给小编提的意见,改了很多bug,希望以后能继续帮小编找找茬~小编也不希望误导大家~这一节,主要讲的 是如何显示文章列表和让用户修改文章,小编预告一下(一共有八节哦)如果有不懂得地方,或者本文呢没有讲清楚的地方,敬请期待下一章节. 一.前言 上节教程中实现了发布文章的功能,本节教程中将大概实现在首页和用户主页分页显示文章和标签列表.用户能够修改删除文章. 二.Let's go 1.首页显示文章和标签列表 我们需要在首页显示文章和标签列表,修改view

IT轮子系列(三)——如何显示方法名——Swagger的使用(三)

前言 在上一篇文章IT轮子系列(三)--如何给返回类型添加注释--Swagger的使用(二) 介绍如何使用swashbuckle的时候忽略了一个问题,就是默认创建的API项目在生成文档的时候是没有显示方法名,只显示了控制器的名字.如下图: User 控制器代码如下: 1 public class UserController : BaseController 2 { 3 /// <summary> 4 /// 获取用户信息 5 /// </summary> 6 /// <pa

Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》

这篇博客主要在于,解释如何通过仅仅使用Autolayout很很少的代码,显示高度不同的Cell.虽然标题说的是TableView,但是CollectionView同样适合.但是,这种方法只使用iOS7和iOS8. 在Github上的实例代码是DynamicTableViewCellHeight. 这个Demo显示了一些名人名言,他看起来像这样: preferredMaxLayoutWidth 这种方法,主要来自于preferredMaxLayoutWidth属性.对于更多高级用法,请看Auto

深入理解javascript函数系列第四篇——ES6函数扩展

× 目录 [1]参数默认值 [2]rest参数 [3]扩展运算符[4]箭头函数 前面的话 ES6标准关于函数扩展部分,主要涉及以下四个方面:参数默认值.rest参数.扩展运算符和箭头函数 参数默认值 一般地,为参数设置默认值需进行如下设置 function log(x, y) { y = y || 'World'; console.log(x, y); } 但这样设置实际上是有问题的,如果y的值本身是假值(包括false.undefined.null.''.0.-0.NaN),则无法取得本身值

Android官方开发文档Training系列课程中文版:高效显示位图之位图缓存

原文地址:http://android.xsoftlab.net/training/displaying-bitmaps/cache-bitmap.html 往UI界面中加载单张图片的过程是很简单的,然而如果需要在某个时刻同时加载大量的图片,那么这事情就有些复杂了.在很多情况下,比如使用了ListView.GridView或者是ViewPager来展示一定数量的图片,在本质上这些情况下,屏幕的快速滑动会导致大量的图片被集中展示在屏幕上. 类似这样通过回收移除到屏幕之外的子View的组件会抑制内存

IOS百度地图开发系列-百度地图不能正常显示

有时候我们使用百度地图的时候,会产生这样的问题(如上图) 问题的关键在于 我们申请的 百度地图key的安全码 与我们的项目中的 Bundle Identifier 的value不相符. 所以会出现地图只显示灰色网格而没有地图的情况 解决办法:使两者的值为同一个 项目中,info.plist文件设置 百度地图key设置界面 由此,百度地图就正常显示了. 如果此时还是不能正常显示的话,正在使用wifi的童鞋,不妨在3G下运行项目试试. 在这里,提醒以前就已经申请key,并且现在准备使用它的童鞋们,k