zoukankan      html  css  js  c++  java
  • iptables介绍iptables和netfilter

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击、黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视。网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络世界的保护伞。下面笔者介绍下Linux系统的守卫者——iptables/netfilter。

     一 兄弟齐心,其利断金

     iptables/netfilter就像一对兄弟,netfilter是大哥,善使长钩;iptables是小弟,擅长书记。这两兄弟一武一文,掌握着守城重任。

     netfilter大哥师承名门,身负五把长钩,每一个流经他的数据流都逃不过他的法眼,只见得五把长钩上下翻飞舞得水泄不通,将那不符合规则的数据包挑落马下。这五把长钩埋伏在城门的五个位置,分别是:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_POST_ROUTING、NF_IP_LOCAL_OUT。他们分别对应了下图的五个位置。

    iptables小弟学富五车,手拿生死簿,记载了乱臣贼子的具体情况,netfilter大哥就是按照生死簿的记载检查每个数据包,以辨忠奸。

    二 四章生死簿

    生死簿内所载内容分为四个章节:raw、mangle、nat、filter

    raw、mangle记载了极高深的内容,正所谓曲高和寡,平常极少用到。filter里记录了过滤规则;nat表记录了地址转换和端口映射相关规则。

    三 iptables命令

    iptables [-t tablename] {-A|-D|-I|-F|-L|-Z|-P} 链名 rule-specification

    -t 指定表名,默认为filter表
    -A 追加防火墙规则
    
    -D 删除规则
    
    -I 插入规则
    
    -F 清空规则
    
    -L 列出规则
    
    -R 替换规则
    
    -Z 清空计数
    
    -P 设置链默认规则
    
    链管理:
    
    -N 创建新链
    
    -X 删除用户自定义引用计数为0的空链
    
    -E 自定义链重命名
    
    -S 列出选定链的规则
    [!] -p 匹配协议
    
    [!] -s 匹配源地址
    
    [!] -d 匹配目标地址
    
    [!] -i 匹配入站网卡地址
    
    [!] -o 匹配出站网卡地址
    
    [!] –sport 匹配源端口
    
    [!] –dport 匹配目的端口
    
    [!] –src-range 匹配源地址范围
    
    [!] –dst-range 匹配目的地址范围
    
    [!] –limit 匹配数据表速率
    
    [!] –mac-source 匹配mac地址
    
    [!] –state 匹配状态(INVALID ESTABLISHED NEW RELATED)
    
    [!] –string 匹配应用层字串

    触发动作:

    ACCEPT 允许数据包通过
    
    DROP 丢弃数据包
    
    REJECT 拒绝数据包通过
    
    LOG 将数据包信息记录syslog日志
    
    DNAT 目标地址转换
    
    SNAT 源地址转换
    
    MASQUERADE 地址欺骗
    
    REDIRRECT 重定向

     四 filter表规则

    filter表是最常被使用的表,是iptables命令默认修改的表。它包含了3条链,分别是input、forward和output,分别用来制定进入本机、转发和离开本机的数据包规则。

    1  修改默认规则

    使用iptables -P命令修改默认规则,例如:

    iptables -P INPUT ACCEPT

    建议在input链最后添加DROP规则,例如:

    iptables -A INPUT -p tcp -d 172.18.55.7 -j
    DROP

    这样即使清空规则后也不会断网。

    2 增、删、改规则

    使用-A在链尾增加规则;使用-I可以指定添加规则的位置,如不指定位置序号,则在开头增加,例如除了22端口以外,禁止连接本机的端口:

    iptables -A INPUT -p tcp -d 172.18.55.7 -j
    DROP
    ----------------------------------------------------------分割线---------------------------------------------------
    iptables -I INPUT -d 172.18.55.7 -p tcp
    –dport 22 ACCEPT

    使用-D可以删除某条规则,例如删除某一条规则

    iptabels -D INPUT 1

    3 扩展规则

    扩展规则分为显式扩展和隐式扩展,显式扩展是指使用-m参数;隐式扩展是指在-p参数后可以省略-m参数。

    隐式扩展包括的参数有:

    -p tcp
    
    [!] –source-port,–sport port[:port]
    
    [!] –destination-port,–dport port[:port]
    
    [!] –tcp-flags mask comp
    
    [!] –syn
    -p udp
    
    [!] –source-port,–sport port[:port]
    
    [!] –destination-port,–dport port[:port]
    -p icmp
    
    [!] –icmp-type {type[/code]|typename}
    
    0/0echo reply
    
    8/0echo request

    显式扩展包括的参数有:

    -m multiport

    以离散或连续的
    方式定义多端口匹配条件,最多15个;

    [!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;
    
    [!] –destination-ports,–dports

    port[,port|,port:port]…:指定多个目标端口;

    例:

    # iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -j ACCEPT 
    -m iprange

    以连续地址块的方式来指明多IP地址匹配条件;

    [!] –src-range from[-to]
    
    [!] –dst-range from[-to]

    例:

    # iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport –dports
    22,80,139,445,3306 -m iprange –src-range 172.16.0.61-172.16.0.70 -j REJECT

    -m time

    以时间或日期作为包过滤条件

    –timestart hh:mm[:ss]
    
    –timestop hh:mm[:ss]
    
    [!] –weekdays day[,day…]
    
    [!] –monthdays day[,day…]
    
    –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    
    –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    
    –kerneltz:使用内核配置的时区而非默认的UTC;
    
    
    -m string

    以字符串为条件过滤数据包

    –algo {bm|kmp}
    
    [!] –string pattern
    
    [!] –hex-string pattern
    
    –from offset
    
    –to offset

    例:

    ~]# iptables -I OUTPUT -m string –algo bm
    –string “gay” -j REJECT

    -m connlimit

    限制每个IP连接服务器的连接数

    –connlimit-upto n
    
    –connlimit-above n

    例:

    ~]# iptables -I INPUT -d 172.16.0.7 -p tcp
    –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

    -m limit

    限制连接速率

    –limit rate[/second|/minute|/hour|/day]
    
    –limit-burst number

    例:

    ~]# iptables -I OUTPUT -s 172.16.0.7 -p
    icmp –icmp-type 0 -j ACCEPT

    -m state

    “state”扩展是对”conntrack”子模块的扩展。  “state”扩展可以依照连接的状态过滤数据包。

    [!] –state state

    INVALID, ESTABLISHED, NEW, RELATED or
    UNTRACKED.

    NEW: 新连接请求;
    
    ESTABLISHED:已建立的连接;
    
    INVALID:无法识别的连接;
    
    RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
    
    UNTRACKED:未追踪的连接;

    state扩展:

    内核模块装载:

    nf_conntrack
    
    nf_conntrack_ipv4

    手动装载:

    nf_conntrack_ftp

    追踪到的连接:

    /proc/net/nf_conntrack

    调整可记录的连接数量最大值:

    /proc/sys/net/nf_conntrack_max

    调整超时时长:

    /proc/sys/net/netfilter/*timeout*

    4 处理动作(跳转目标)

    -j targetname [per-target-options]

    简单target:

    ACCEPT, DROP

    扩展target:

    REJECT

    –reject-with type

    LOG

    –log-level
    
    –log-prefix

    5保存和载入规则:

    保存:iptables-save > /PATH/TO/SOME_RULE_FILE
    
    重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE
    
    -n, –noflush:不清除原有规则
    
    -t, –test:仅分析生成规则集,但不提交

      五 nat表规则

    iptables不仅可以实现数据包过滤,还可以实现网络地址转换,这项功能是通过修改nat表实现的。nat表一般作用在PREROUTING和POSTRONTING链上,然后通过FORWARD链过滤流经的数据包。

    示例:将流经网关的数据包的源地址改为192.168.10.254

    iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -j SNAT –to-source
    192.168.10.254

     

    如果是拨号地址,那么可以用MASQUERADE参数

     

    示例:将流入网关80端口的数据包转发给192.168.10.2

    iptables -t nat -A PREROUTING -d 172.18.55.7 -p tcp –dport 80 -j DNAT
    –to-destination 192.168.10.2
  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/benjamin77/p/8630295.html
Copyright © 2011-2022 走看看