当前位置 : 主页 > 操作系统 > centos >

iptables防火墙总结

来源:互联网 收集:自由互联 发布时间:2022-07-05
iptables是Linux下自带的开源的一款免费的基于包过滤的防火墙工具,可以对 流入、流出、流经服务器的数据包进行精细的控制 iptables的工作流程 iptables是采用数据包过滤机制工作的,所

iptables是Linux下自带的开源的一款免费的基于包过滤的防火墙工具,可以对

流入、流出、流经服务器的数据包进行精细的控制

iptables的工作流程

iptables是采用数据包过滤机制工作的,所以他会对请求的数据包的包头进行

分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机

  • 防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  • 如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不能向下匹配新规则了。
  • 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
  • 防火墙的默认规则是对应链的所有的规则执行完才会执行的(最后执行的规则)
  • iptables的五表

    filter***

    过滤功能,确定是否放行该数据包,属于真正的主机防火墙(默认)

    nat***

    网络地址转换功能,修改数据包中的源、目标IP地址或端口

    mangle

    对数据包进行重新封装功能,为数据包设置标记

    raw

    确定是否对数据包进行跟踪

    security

    是否定义强制访问控制规则(后加上的)

    iptables的五链

    INPUT

    处理入站数据包

    OUTPUT

    处理出站数据包

    FORWARD

    处理转发数据包(流经本机)

    PREROUTING

    在进行路由选择前处理数据包,适用于外网访问内网,修改到达防火墙的数据包的目的IP

    POSTROUTING

    在进行路由选择后处理数据包,适用于内网访问外网,修改要离开防火墙的数据包的源IP

    iptables中表链之间的关系

    这里只对常用的表进行记录

    优先级:nat>filter

    filter

    nat

    INPUT

    PREROUTING

    OUTPUT

    POSTROUTING

    FORWARD

    OUTPUT

    数据包流经iptables的流程

    iptables防火墙总结_iptables总结

  • 所有的数据包在进入iptables之前,都会匹配NAT表的PREROUTING链
  • 如果数据包的目标就是本机,在进入本机之前,还会匹配FILTER表的INPUT链,离开本机后还会匹配NAT表的OUTPUT链与FILTER表的OUTPUT链
  • 如果数据包是流经本机的,会匹配FILETER表的FORWARD链
  • 所有的数据包在离开iptables的时候,都会匹配NAT表的POSTROUTING链
  • iptables语法结构

    iptables [-t ] [] [] [-j ]

    注意:

    不指定表名时,默认表示filter表

    不指定链名时,默认表示该表内所有链

    除非设置链的默认策略,否则需要指定匹配条件

    管理选项

    链管理

    -F
    -P(ACCEPT|DROP)

    -N
    -X0
    -E
    -Z

    规则管理

    -A
    -I

    -R
    -D

    规则显示

    -L
    -v
    -n
    --line-numbers

    -vv
    -x
    -S

    匹配条件

    基本匹配条件

    匹配协议,源目IP,出入接口

    -p tcp udp icmp all
    -s
    -d
    -i
    -o
    !

    扩展匹配条件

    隐式匹配

    匹配源目端口

    -p tcp
    --sport
    --dport
    --tcp-flags mask comp tcp
    -p udp
    --sport
    --dport
    --icmp-type
    0/0echo reply ping
    8/0echo request ping

    显式匹配

    multiport 多端口

    iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
    #在INPUT链中开放本机tcp 22,tcp80端口

    iptables -I OUTPUT -s 192.168.2.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
    #在OUTPUT链中开放源端口tcp 22,tcp80

    iprange 多ip地址

    iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT

    iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 23 -m iprange --dst-range 192.168.2.11-192.168.2.21 -j ACCEPT

    time 指定访问时间范围

    iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

    iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 901 -j ACCEPT

    动作

    ACCEPT:

    DROP:

    REJECT:

    SNAT:
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100

    MASQUERADE:SNATip
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j MASQUERADE

    DNAT:
    iptables -t nat -A PREROUTING -i eth1 -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.11:8080

    REDIRECT:

    LOG:/var/log/message

    iptables规则的保存与重载

    保存

    iptables-save > /etc/sysconfig/iptables

    重载

    iptables-restore < /etc/sysconfig/iptables

    iptables范例

    清空现有规则


    iptables -F


    iptables -F INPUT

    查看规则

    iptables -nL


    iptables -nvL


    iptables -nL --line-numbers

    设置链的默认规则

    iptables -P INPUT ACCEPT
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP

    删除规则


    iptables -D INPUT 2


    iptables -D INPUT -p tcp --dport 80 -j ACCEPT

    禁止来自10.0.0.188 ip地址访问80端口的请求

    iptables -A INPUT -p tcp -s 10.0.0.188 --dport 80 -j DROP

    实现把访问10.0.0.3:80的请求转到172.16.1.17:80(DNAT)

    iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80

    实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网(SNAT)

    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26

    只允许远程主机访问本机的80端口

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT 80访
    iptables -P INPUT DROP 访

    允许通过本地回环网卡访问本机

    [root@localhost ~]# iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT

    [root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT

    允许连接态产生的衍生态

    iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    实现共享主机上网

    iptables防火墙总结_iptables总结_02

  • 实现PC-D可以经过linux网关B上网,上因特网浏览网页等
  • iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.8

    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
  • 实现外部用户A通过访问Linux网关B:10.0.0.8 即可以访问到内部 Server 172.16.1.51:80提供的web服务
  • iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.61:80
  • 假如1,2都配好了,但是问题处在内网普通PC-D和内部server-C,没有配置正确的网关,如何通过tcpdump来排查
  • windowsping 10.0.0.8
    tcpdump|grep -i icmp


    网友评论