• 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
  • 相关阅读:
    个人技能总结8--linux 基本命令的使用
    个人技能总结7--Apache服务器反向代理,负载均衡,热备份+Tomcat配置
    个人技能总结6--Java网络接口以及协议
    个人技能总结5--Redis在Javaweb项目中的应用
    个人技能总结4--MongoDB在windows上安装以及java中的增删改查
    个人技能总结3--Mysql--20170828
    从源码的角度解读String、StringBuilder、StringBuffer的性能差别
    java二叉树的实现
    如何理解递归?
    继承泛型类
  • 原文地址:https://www.cnblogs.com/benjamin77/p/8630295.html
Copyright © 2020-2023  润新知