• iptables命令介绍


      1、iptables:administration tool for IPv4/IPv6 packet filtering and NAT

      1)简介:Linux的2.4版内核引入了一种全新的包处理引擎Netfilter,同时还有一个管理它的命令行工具iptables。iptables用于建立、维护和检查Linux内核中IPv4包过滤规则的表。

      2)结构层次:iptables - 表table - 链chain(内建或自定义) - 规则(目标target子句等)。

      iptables对网络上的数据包有次序地施加规则“链”。链的集合就构成了表,用于处理特定类型的流量。

      默认的iptables表为filter(过滤器)。它包含3个默认链:FORWARD、INPUT和OUTPUT,内核处理的每个包都要经过3个链中的某一个。FORWARD链里的规则用于在一个网络接口收到的、而且需要转发到另一个网络接口的所有包。INPUT和OUTPUT链里的规则分别用于目的是本地主机,或者从本地主机发出的流量。

      nat表包含的规则链控制着NAT(网络地址转换)。另外,还有mangle、raw和security表,这里不详述。

      构成一条链的每条规则都有一个“target(目标)”子句,它决定了如何处理匹配的包。一旦某个包匹配了一条规则,那么它的结局就确定了,不再用其他规则来检查它。虽然iptables内部定义了许多target,但还是可以指定另一条链作为规则的target。在filter表中的规则可以使用的target子句有ACCEPT(包可以继续通过)、DROP(默默地丢弃包)和REJECT(把包丢弃并返回一则ICMP错误消息)等。

      3) 示例:

      本例中,eth1(128.138.101.4)通往Internet,eth0(10.1.1.1)通往内部网络,两个接口的子网掩码都是255.255.255.0。IP为10.1.1.2的Web服务器受到该防火墙保护。

    # -F:冲洗指定的链(删除所有规则);-P:为链设置默认的目标(建议使用DROP)
    iptables -F # 冲洗掉表中所有的链
    iptables -P INPUT DROP # 设置INPUT链的默认目标为DROP(最安全的策略就是丢弃没有明确允许的任何包
    iptables -P FORWARD DROP # 设置FORWARD链的默认目标为DROP
    
    # 规则是按照它们出现在链中的顺序来进行匹配的,所以将用得最多的规则放在最前面
    # -A:在指定链上追加规则;-i:接收数据包的接口;-j:目标;-p:协议;-d:主机或网络的目的地址;--dport:目的端口
    iptables -A FORWARD -i eth0 -p ANY -j ACCEPT # 让源自内部网络的任何包都能被转发
    iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 22 -j ACCEPT # 允许SSH/HTTP/HTTPS能够通过防火墙连到Web服务器10.1.1.2
    iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 80 -j ACCEPT
    iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 443 -j ACCEPT
    
    iptables -A INPUT -i eth0 -d 10.1.1.1 -p tcp --dport 22 -j ACCEPT # 允许到防火墙主机10.1.1.1的唯一TCP流量是SSH,它用于管理防火墙
    iptables -A INPUT -i lo -d 127.0.0.1 -p ANY -j ACCEPT # 允许环回流量
    iptables -A INPUT -i eth0 -d 10.1.1.1 -p icmp --icmp-type 8 -j ACCEPT # 允许从内部网络来的ICMP ECHO_REQUEST包
    
    # 为了让主机在Internet上正常工作,必须允许某些类型的ICMP包通过防火墙。以下规则就是既能送到防火墙主机,也能送到在它之后的网络的最小ICMP包集合
    iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 5 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
    iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT
    iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 3 -j ACCEPT
    iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 5 -j ACCEPT
    iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 11 -j ACCEPT
    
    # 虽然nat表的目的并不是用作包过滤的,但它的PREROUTING链对于反IP欺骗的过滤来说特别有用
    # 如果在PREROUTING链中加入DROP项,它们就不需要出现在INPUT和FORWARD链里了,因为PREROUTING链会应用到所有进入防火墙主机的数据包上
    # -t:表;-s:主机或网络的源地址
    iptables -t nat -A PREROUTING -i eth1 -s 10.0.0.0/8 -j DROP  # eth1接收到的包的源地址不可能是内部地址、环回地址或D类地址
    iptables -t nat -A PREROUTING -i eth1 -s 172.16.0.0/12 -j DROP
    iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.0/16 -j DROP
    iptables -t nat -A PREROUTING -i eth1 -s 127.0.0.0/8 -j DROP
    iptables -t nat -A PREROUTING -i eth1 -s 224.0.0.0/4 -j DROP
    
    iptables -A INPUT -i eth1 -j LOG # 禁止所有没有得到明确许可的包。LOG目标提供一种跟踪数据包的简单途径
    iptables -A FORWARD -i eth1 -j LOG

      4)以下问题可能与配置了iptables有关:

      (1)可以ping通,但nc提示"No route to host":ping所用的icmp流量允许通过防火墙,但nc所用的tcp流量不允许(使用tcpdump观察到一个SYN包,但它被防火墙丢弃,所以三次握手都没完成)。

      参考资料:

      《UNIX/Linux系统管理技术手册》

    不断学习中。。。

  • 相关阅读:
    转载JGTM' 2004[MVP]有关AOP的三篇精彩文章
    新增Skin
    发表文章的要求
    自定义UserControl的属性为什么不能在设计时显示在属性窗口中
    .Text学习笔记(一)
    访问类的private或internal成员[转载]
    博客园对发表文章的一些要求
    博客园成立了管理团队
    推荐一篇介绍.NET MetaData的文章
    让大家久等了:终于完成了AOP尝鲜系列之第三部[JGTM'2004 [MVP]文章转载]
  • 原文地址:https://www.cnblogs.com/hanerfan/p/5810606.html
Copyright © 2020-2023  润新知