zoukankan      html  css  js  c++  java
  • iptables动作总结

    ACCEPT动作:

    将数据包放行,进行完此处理动作后,将不再比对当前链的其它规则,直接跳往下一个规则链。

    范例如下:

    #新增自定义链TEST_ACCEPT
    iptables -t filter -N TEST_ACCEPT
    #新增自定义链TEST_ACCEPT2
    iptables -t filter -N TEST_ACCEPT2
    #在INPUT链中引用TEST_ACCEPT,在TEST_ACCEPT链中引用TEST_ACCEPT2
    iptables -t filter -I INPUT -j TEST_ACCEPT
    iptables -t filter -I TEST_ACCEPT -j TEST_ACCEPT2
    #在TEST_ACCEPT2增加如下规则
    iptables -t filter -A TEST_ACCEPT2 -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j ACCEPT
    #在TEST_ACCEPT增加如下规则
    iptables -t filter -A TEST_ACCEPT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT
    

     测试:未加上面规则前,http://192.168.249.149:30180服务能够正常访问,加上上面规则后经测试还是能正常访问,效果入下图所示:

    总结:这就说明自定义链TEST_ACCEPT2匹配规则 192.168.249.149 -p tcp -m tcp --dport 30180后执行ACCEPT动作,执行完ACCET动作后将不再比对当前链的(INPUT->TEST_ACCEPT->TEST_ACCEPT2)其它规则,直接跳往下一个规则链,TEST_ACCEPT链的第二条规则没机会匹配。  

    REJECT动作:

    拦阻该数据包,并传送数据包通知对方,可以传送的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

    范例如下:

    iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT

     测试:

    DROP动作:

    丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。

    范例如下:

    iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j DROP
    

     测试:

     总结:

    DROP表示丢弃,REJECT表示拒绝,REJECT和DROP动作效果类似,只不过REJECT拦阻该数据包后会传送数据包通知对方,REJECT表达的意思好像更坚决一点。

    REDIRECT动作:

    将包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。 这个功能可以用来实作通透式porxy 或用来保护 web 服务器。例如:

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

    MASQUERADE动作:

    改写数据包来源 IP为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(和ACCEPT动作一致)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨号连接时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:linux基础

    iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000 

    总结:使用MASQUERADE动作可以不指定网卡,它可以自动根据目标地址选择出口网卡地址作为伪装的源地址,另外,使用MASQUERADE动作和ACCEPT、SNAT、DNAT动作的效果一致,都是进行完此处理动作后,直接跳往下一个规则链。

    参考:https://serverfault.com/questions/869751/how-does-masquerade-choose-an-ip-address-if-there-are-multiple

    另外可以使用ip route get <dst>命令来确定伪装后将用作源地址的地址。

    SNAT动作 

    改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则链。范例如下:

    iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

    DNAT动作 

    改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规链。范例如下:

    iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
    192.168.1.1-192.168.1.10:80-100

    测试:自定义链C匹配规则后执行DNAT动作,执行完DNAT动作后将不再比对当前链的(A->B->C)其它规则,直接跳往下一个规则链,B链的第二条规则没机会匹配。  

    RETURN动作

    结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主程序中。

    测试:TEST_ACCEPT链第一条规则匹配后,将返回后INPUT链继续执行INPUT链剩下未比对的规则,即INPUT链的第2条规则到第四条规则直到匹配规则成功执行对应动作。 

    MARK动作

    将数据包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:

    iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

    LOG动作

    将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续比对其规则。例如:

    iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

    MIRROR动作

    镜像数据包,也就是将来源 IP 与目的地 IP 对调后,将数据包送回,进行完此处理动作后,将会中断过滤程序。

    QUEUE动作

    中断过滤程序,将数据包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费.......等。 

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/15655301.html
Copyright © 2011-2022 走看看