iptables

iptables

入门参考:http://www.zsythink.net/archives/1199/

四表五链(默认)

iptables_第1张图片

表(Table, 适配匹配的规则rule)

  • raw:PREROUTING, OUTPUT
  • mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
  • nat: PREROUTING, OUTPUT, POSTROUTING( centos7中还有|NPUT, centos6中没有
  • filter: INPUT, FORWARD, OUTPUT

链(Chain)

  • REROUTING:raw表, mangle表,nat表,用于目标地址转换(DNAT)进站进行的过滤
  • INPUT: mangle表, filter表,( centos7中还有nat表, centos6中没有),处理输入数据包,入站数据包处理
  • FORWARD: mangle表, filter表,处理转发数据包
  • OUTPUT:raw表 mangle表,nat表, filter表,处理输出数据包,出站数据包处理
  • POSTROUTING: mangle表,nat表,用于源地址转换(SNAT)出站进行的过滤。

动态开放端口适配

  • ftp协议 :modprobe nf_conntrack_ftp ports=21,2125,2135
  • sip协议:nf_conntrack_sip
  • tftp协议:nf_conntrack_tftp
  • 其他。。。

iptables命令

库支持:libiptclibiptext

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

动作

ACCEPPT:接受数据包。
REJECT:拒绝
DROP:直接丢弃数据包。不给任何回应信息,这时候客户端会感觉自己的请求沉入大海,等过了超时时间才会有反应。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。是SNAT的一种特殊形式,适用于动态的,临时会变的IP上(内网访问外网,如:LAN->WAN,则wan采用动态伪装)
LOG:日志记录,除了记录对数据包不做任何动作。

状态

NEW:主机连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED:主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
RELATED:主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp
INVALID:无效的封包,例如数据破损的封包状态

官方说明

https://linux.die.net/man/8/iptables

iptables

-N 自定义链
    #iptables -t filter -N use_reject
    #iptables -E use_reject WEB
    #iptables -X WEB
-i 指定进入的网卡(PREROUTING,INPUT,FORWARD)
    #iptables -t filter -I INPUT -i eth2 -p icmp -j DROP
-o 指定出去的网卡(FORWARD,OUTPUT,POSTROUTING)
[!] -d 目标地址
    #iptables -I INPUT ! -d 192.168.0.230 -p tcp  --dport 80 -m connlimit --connlimit-above 2 -j DROP
[!] -s 源地址
-p #协议
    tcp	
        --dport 目标端口
        --sport 源端口
        --tcp-flags 匹配报文的tcp头的标志位
            {
     SYN,ACK,FIN,RST,URG,PSH} {
     ..} 
        --syn 匹配tcp新建连接的请求报文,相当于使用"--tcp-flags SYN,RST,ACK,FIN  SYN"
        #iptables -t nat -I PREROUTING -d 192.168.0.172 -p tcp --dport 553 -m comment --comment "!mapping:rtsp" -j DNAT --to-destination 192.168.100.172:554

    udp
        --dpor  
        --sport
    icmp
        --icmp-type
                echo-request  或数字8
                echo-reply (响应的数据包)一般用0来表示
                其他参考icmp协议

-m	#模块
    tcp #tcp模块
        --source-port [!] port[:port]
        --destination-port [!] port[:port]
        --tcp-flags [!] mask comp
            第一个参数是我们应该检查的标志,写为逗号分隔列表,
            第二个参数是逗号分隔的标志列表,必须设置。
            标志是:SYN ACK FIN RST URG PSH ALL NONE。
        
    multiport	#指定多端口号
        --sport 匹配报文的源端口
        --dport 匹配报文的目标端口
        --ports 匹配源与目标端口
        #iptables -t filter -I -s 192.168.0.12 -p tcp -m multiport --sport 11 -j REJECT 

    iprange	匹配指定范围内的地址
        [!] --src-range from[-to]:指明连续的源IP地址范围;
        [!] --dst-range from[-to]:指明连续的目标IP地址范围;
        #iptables -I INPUT -d 192.168.184.142 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 192.168.184.1-192.168.184.150 -j ACCEPT

    state	状态检查
        --state {
     NEW,ESTATBLISHED,INVALID,RELATED}  指定检测那种状态

    string	字符串匹配,能够检测报文应用层中的字符串
        --algo bm|kmp  指定算法bm或kmp
        [!] --string pattern  指明字符串是什么
        #防止电子邮件欺骗
        #iptables -I INPUT -p tcp --dport 25 -m string --string "Subject" --algo bm -j DROP

    connlimit	连接数限制
        --comlimit-above #限定大连接个数
        #允许8080端口最大连接数为 30
        #iptables -I INPUT -p tcp --dport 8080 -m connlimit --connlimit-above 30 -j REJECT

    conntrack	
        --ctstate
    limit	限定匹配数据包的个数
        --limit 25/sec
        --limit-burst 50
        #响应请求的速率
        # iptables -A INPUT -d 192.168.184.142 -p icmp --icmp-type 0 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT 
    recent	限制一段时间内的连接数

    time	时间        
        --datestart  YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        --datestop  YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        --timestart   hh:mm[:ss]
        --timestop   hh:mm[:ss]
        [!] --monthdays  day[,day...]
        [!] --weekdays  day[,day...]
        #iptables -I INPUT -d 192.168.184.142 -p tcp --dport 80 -m time --timestart 00:00 --timestop 23:59 -j REJECT

	comment #注释(最多256个字符)
        --comment ""
        #-m comment --comment "allow SSH to this host from anywhere"
    mac     #
        --mac-source [!] address 
        匹配的源MAC地址。它的形式必须是XX的:XX:XX:XX:XX:XX。需要注意的是,这恰恰使从以太网设备来并进入PREROUTING,FORWARD和INPUT链的包感。
        # iptables -A INPUT -s 192.168.100.172 -m mac --mac-source e0:50:8b:05:b9:6b -j DROP
        # iptables -A input_rule -s 192.168.100.172 -m mac ! --mac-source e0:50:8b:05:b9:6b -j DROP
    iprange
        --src-range
        #iptables -I INPUT -m iprange --src-range 192.168.1.23-192.168.1.63 -j ACCE
-j
   LOG
      --log-level 日志级别(0-7 man syslog)
      --log-prefix "" 日志记录

-n --line-numbers

你可能感兴趣的:(linux/unix,( ̄﹁ ̄))