iptables

iptables: 



wKioL1SLup7jz6YmAAL6l1cauRc466.jpg
wKioL1SLuz2St7NTAAIWHpcqp7A596.jpg
Firewall: 工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是二者的结合。
网络层:网络层防火墙
应用层:网关
IDS:
HIDS: OSSEC
NISC: snort
Filesystem: tripware
IPS: IDS + Firewall
honeypot: 蜜罐
Nessus, nmap,
rootkit
乌云
iptables/netfilter: 网络层防火墙,连接追踪(状态检测)
ipfw, ipchains, iptables
iptables: 防火墙规则编写工具
netfilter: framework
hook_function
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
过滤:筛选
NAT:Network Address Translation
DNAT
SNAT
mangle: 
raw:
FORWARD:
filter
mangle
INPUT: 
filter
mangle
OUTPUT:
filter
manage
nat
PREROUTING:
mangle
nat
POSTROUTING:
mangle
nat
四表:
filter, nat, mangle, raw
五链:
PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
表和链的对应关系:
filter:
INPUT, FORWARD, OUTPUT
nat:
PREROUTING, OUTPUT, POSTROUTING
mangle:
PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw: 
规则:检查条件,处理机制
通:默认为堵,只对能识别的进行放行
堵:默认为通,只对能误别的进行阻截
检查条件:
IP:SIP, DIP
TCP:SPORT, DPORT, Flags
UDP:SPORT, DPORT
ICMP:ICMP-TYPE 

扩展机制:
time,string, state(connection-tracking)
处理机制:
DROP
REJECT
ACCEPT
SNAT
DNAT
RETURN
REDIRECT
LOG
INPUT:
filter
mangle
iptables/netfilter
iptables
 iptables [-t table] -N chain
  创建一条自定义的规则链
 iptables [-t table] -X [chain]
  删除一条自定义的规则链
 iptables [-t table] -E old-chain-name new-chain-name
  修改自义链名
 iptables [-t table] -P chain target
  为链指定默认策略,指定默认规则
 iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
  -F: 清空链中的规则
  规则有编号,在链中自上而下,从1开始;
  -L: list,列出表中的所有规则;
  -n: 数字格式显示IP和Port
  -v: 以详细格式显示
   pkts bytes target     prot opt in     out     source               destination 
    pkts: packets, 被本规则所匹配到的报文的个数;
    bytes: 被本规则所匹配到的所有报文的大小之和,会执行单位换算;
    target: 目标,即处理机制;
    prot: 协议,一般为{TCP|UDP|ICMP}; 
    opt: 可选项
    in: 数据包的流入接口;
    out: 数据包的流出接口;
    source: 源地址;
    destination: 目标地址;
  -vv
  -vvv
  -x: exactly, 精确值,不执行单位换算;
  --line-numbers: 显示各规则的行号;
  -Z: zero, 清零
 iptables [-t table] {-A|-D} chain rule-specification
  -A: append, 附加一条规则
   rule-specification
    匹配条件 -j 处理机制
   匹配条件:
    通用匹配:
    -s :匹配原地址,可以IP,也可以网络地址;可以使用!操作符取反, !  -s  172.16.0.0/16; -s 相当于 --src, 或 --source
    -d : 匹配目标地址
    -p : 匹配协议,通常只使用{TCP|UDP|ICMP}三者之一;
    -i :数据报文流入的接口;通常只用于INPUT、FORWARD和PREROUTING
    -o :流出的接口;通常只用于OUTPUT、FORWARD和POSTROUTING
  保存规则:
  service iptables save
  规则会被保存至/etc/sysconfig/iptables文件中;
  默认,start时也会读取此文件中的内容以设置规则;
  # iptables-save > /path/to/some_rulefile
  # iptables-restore < /path/from/some_rulefile
回顾:
iptables/netfilter
netfilter: 工作内核中,让规则能够生效网络框架
iptables: 工作于用户空间,编写规则并且发送到netfilter
Linux 2.0: ipfwadm, Linux 2.2: ipchains, Linux 2.4+: iptables
netfilter: 
iptables:
四表:raw, mangle, nat, filter
五链:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
-N 自定义新链
-F
-X: 删除自定义的空链
-P
-Z
-L
-n, -x, -v, -vv, -vvv, --line-numbers
-E  oldname newname 修改自定义链名
-A 
规则:匹配条件 -j 处理机制
匹配条件:
通用匹配
-s, -d, -p, -i, -o
扩展匹配
隐含扩展: 使用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展
-p tcp
--dport m[-n] :匹配的目标端口,可以是连续的多个端口;
--sport       :       源
--tcp-flags rst,syn,ack,fin syn
--syn
URG, PSH, RST, SYN, ACK, FIN
ALL, NONE



放行来自于172.16.0.0/16网络的主机对本机ssh服务的请求;
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT



-p udp
--dport
--sport
放行本机的tftp服务:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 69 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp --sport 69 -j ACCEPT
放行本机dns服务:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p udp --sport 53 -j ACCEPT
-p icmp
--icmp-type
8: ping请求
0:ping响应
例子:放行ping其它主机
iptables -A OUTPUT -s 172.16.100.7 -p icmp  --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT



显式扩展:必须要明确指定的扩展模块
规则命令:
删除规则
iptables [-t table] -D chain rulenum
插入规则
iptables [-t table] -I chain [rulenum] rule-specification
替换指定规则
iptables [-t table] -R chain rulenum rule-specification
只显示指定链上的规则添加命令:
iptables [-t table] -S [chain [rulenum]]



显式扩展:必须要明确指定的扩展模块
-m 扩展模块名称 --专用选项1 --专用选项2
               
                mac
                         --mac-source XX:XX:XX:XX:XX:XX
multiport: 多端口匹配,一次指定多个(15个以内)离散端口
--source-ports , --sports  port[,port|,port:port]
--destination-ports, --dports
--ports
例子:
iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange: ip地址范围
[!] --src-range from[-to]
[!] --dst-range from[-to]
例子:
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT
     iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
    time: 指定时间范围
     --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
        --timestart hh:mm[:ss]
            --timestop hh:mm[:ss]
            [!] --weekdays day[,day...]
            例子:
             iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
             iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 901 -j ACCEPT
        string: 字符串匹配
         --algo {bm|kmp}:字符匹配查找时使用算法
         --string "STRING": 要查找的字符串
         --hex-string “HEX-STRING”: 要查找的字符,先编码成16进制格式
        connlimit: 每IP对指定服务的最大并发连接数;
         [!] --connlimit-above [n]



        limit: 报文速率控制
         --limit #[/second|/minute|/hour|/day]
         --limit-burst #   最大峰值
         hping3: 安装此包,做测试
        state: 状态匹配
         ip_conntrack, nf_conntrack
         --state
         NEW
         ESTABLISHED建立了
         RELATED相关的
         INVALID
     调整连接追踪功能所能容纳的追踪的最大连接数:
         # cat /proc/sys/net/nf_conntrack_max 
         定义了连接追踪的最大值,因此,建议按需调大此值;
         # cat /proc/net/nf_conntrack
         记录了当前追踪的所有连接
         # cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

                        连接处于ESTABLISHED状态的超时时长

        法则:
         1、对于进入的状态为ESTABLISHED都应该放行;
         2、对于出去的状态为ESTABLISHED都应该放行;
         3、严格检查进入的状态为NEW的连接;
         4、所有状态为INVALIED都应该拒绝;
        如何放行工作于被动模式下的FTP服务?
         1、确保iptables加载ftp协议支持的模块:ip_nat_ftp, ip_conntrack_ftp
         编辑/etc/sysconfig/iptables-config文件,定义如下参数:
         IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
         2、放行请求报文的RELATED和ESTABLISHED状态,放行响应报文的ESTABLISHED状态;

iptables  -A INPUT -d 192.168.131.128/32 -p tcp  --dport 21 -m state --state NEW -j ACCEPT
iptables  -A INPUT     -m state --state RELATED,ESTABLISHED -j ACCEPT   
iptables  -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
 
-j target
         RETURN: 返回调用链



       回顾:开机流程
        POST --> BootSequence(MBR: bootloader) --> GRUB --> kernel (initramfs) --> /sbin/init (/etc/inittab, /etc/init/*.conf)
        启动服务时的最后一个服务通常是/etc/rc.d/rc.local (/etc/rc.local),这事实上是一个脚本,但凡写在此脚本中的命令或脚本调用都在系统运行至此服务被执行;




练习:INPUT和OUTPUT默认策略为DROP;
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;



2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;



3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;



4、拒绝TCP标志位全部为1及全部为0的报文访问本机;



5、允许本机ping别的主机;但不开放别的主机ping本机;






练习:判断下述规则的意义:
# iptables -N clean_in
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
# iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
# iptables -A clean_in -d 172.16.100.7 -j RETURN 



# iptables -A INPUT -d 172.16.100.7 -j clean_in
# iptables -A INPUT  -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT



# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT  -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT  -i eth0 -p udp --dport 1026 -j DROP
# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
# iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT





利用iptables的recent模块来抵御DOS攻击: 22,建立一个列表,保存有所有访问过指定的服务的客户端IP



ssh: 远程连接,
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP



iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attach: "
iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
2.利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。
下面对最后两句做一个说明:
1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
3.iptables的记录:/proc/net/xt_recent/SSH



也可以使用下面的这句记录日志:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"



2014.03.27
FSM: Finite State Machine
客户端:closed --> syn_sent --> established ... --> fin_wait_1 --> find_wait_2 --> timewait (2MSL)
服务端:closed --> listen --> syn_rcvd --> established ... --> close_wait --> last_ack 


-m state: 追踪连接状态 (tcp, udp, icmp)
模板:
NEW
ESTABLISHED
RELATED
INVALID


iptables子命令:
规则:-A, -I, -D, -R
链:-N, -X, -F, -Z, -E, -P
通:DROP
堵:ACCEPT
显示:-L, -S
-L: 
-n, -v, -x, --line-numbers


规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target
匹配条件:
通用匹配:-s, -d, -i, -o, -p
扩展匹配
隐含扩展:
-p tcp
--sport, --dport, --tcp-flags
                                                
        --tcp-flags rst,syn,ack,fin syn : 空格之前表示匹配哪些标识位,空格之后是哪些标识位为1 
        --syn:单独匹配某一项标识位
        所有使用的值: URG, PSH, RST, SYN, ACK, FIN,ALL, NONE 
   [!] --syn等价于--tcp-flags RST,ACK,SYN,FIN   SYN
                                                          --tcp-flags ALL NONE匹配所有标记都未置1的包
                                
-p udp
--sport, --dport
-p icmp
--icmp-type
echo-request: 8
echo-reply: 0
显式扩展:
-m state
--state


-m multiport
--sports, --dports, --ports


-m iprange
--src-range, --dst-range


-m string
--algo {bm|kmp}, --string, --hex-string


-m connlimit
--connlimit-above 


-m limit
--limit n(/second|/minute|/hour|/day), --limit-burst 


-m time
--datestart, --datestop
--timestart, --timestop
--weekdays 


-j
ACCEPT, DROP, REJECT, LOG, REDIRECT, SNAT, DNAT, MASQUERADE, MARK, RETURN, 自定义链


四表:raw, mangle, nat, filter
五链:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING


iptables/netfilter


iptables-save, iptables-restore


主机防火墙:INPUT, OUTPUT
网络防火墙:FORWARD




路由:对于Linux主机来说,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启了路由功能;
路由表的生成:
静态:手机添加
动态:基于路由协议学习,RIP2, OSPF
NAT:网络地址转换
A:10
B:172.16-172.31
C:192.168.0-192.168.255


NAT: 过载技术
Basic NAT: 静态NAT;
NAPT:动态NAT,网络地址端口转换;
源地址转换:SNAT,用于让内网主机访问互联网
目标地址转换:DNAT,让互联网上主机访问本地内网中的某服务器上的服务,(发布)


iptables基于SNAT和DNAT这两个目标实现地址转换技术;
-j SNAT --to-source SIP
规则添加:POSTROUTING链
                                        iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3-192.168.5.5
                                        iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 192.168.5.3
                                        对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip
-j MASQUERADE          

                                        iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
                                   他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取                       eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。

-j DNAT --to-destination DIP[:PORT]
支持端口映射


例子:
# iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 22022 -j DNAT --to-destination 192.168.20.12:22
                                      iptables -t nat -A PREROUTING -s 192.168.0.0/24 -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 10443

Proxy: 



作业:如何基于FORWARD链转发对内部ftp服务的访问?


iptables实现七层访问过滤:


模块:layer7
识别应用层协议


iptables/netfilter
iptables -m state, 
netfilter state


对内核中的netfilter,打补丁layer7,重新编译内核
对iptables打补丁,补上layer7模块,重新iptables



diff/patch:文本操作工具



diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的核心工具之一。其用法非常简单:
  # diff <变动前的文件> <变动后的文件>


由于历史原因,diff有三种格式:
  * 正常格式(normal diff)
  * 上下文格式(context diff)
  * 合并格式(unified diff)


1、正常格式的diff
例如,对file1(变动前的文件)和file2(变动后的文件)进行比较可使用如下命令:
    # diff file1 file2
显示结果中,第一行是一个提示,用来说明变动位置。它分成三个部分:前面的数字,表示file1的第n行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion);


2、上下文格式的diff
上个世纪80年代初,加州大学伯克利分校推出BSD版本的Unix时,觉得diff的显示结果太简单,最好加入上下文,便于了解发生的变动。因此,推出了上下文格式的diff。它的使用方法是加入-c选项(即context)。
    # diff -c f1 f2
结果分成四个部分。第一部分的两行,显示两个文件的基本情况:文件名和时间信息,"***"表示变动前的文件,"---"表示变动后的文件。第二部分是15个星号,将文件的基本情况与变动内容分割开。第三部分显示变动前的文件,即file1。
另外,文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。
第四部分显示变动后的文件,即file2。


3、合并格式的diff
如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。
它的使用方法是加入u参数(代表unified)。
  # diff -u f1 f2
其结果的第一部分,也是文件的基本信息。"---"表示变动前的文件,"+++"表示变动后的文件。第二部分,变动的位置用两个@作为起首和结束。第三部分是变动的具体内容。
除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。


diff 
-u


patch


尽管并没有指定patch和diff的关系,但通常patch都使用diff的结果来完成打补丁的工作,这和patch本身支持多种diff输出文件格式有很大关系。patch通过读入patch命令文件(可以从标准输入),对目标文件进行修改。通常先用diff命令比较新老版本,patch命令文件则采用diff的输出文件,从而保持原版本与新版本一致。


patch的标准格式为
patch [options] [originalfile] [patchfile]


如果patchfile为空则从标准输入读取patchfile内容;如果originalfile也为空,则从patchfile(肯定来自标准输入)中读取需要打补丁的文件名。因此,如果需要修改的是目录,一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下,patch都用以下这种简单的方式使用:
patch -p[num] < patchfile


patch命令可以忽略文件中的冗余信息,从中取出diff的格式以及所需要patch的文件名,文件名按照diff参数中的"源文件"、"目标文件"以及冗余信息中的"Index:"行中所指定的文件的顺序来决定。


-p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个"/"以前的目录,依此类推。如/usr/src/linux-2.4.15/Makefile这样的文件名,在提供-p3参数时将使用linux-2.4.15/Makefile作为所要patch的文件。


patch
-p
-R


mockbuild


总结:操作步骤


1、获取并编译内核


# useradd mockbuild
# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm
# cd rpmbuild/SOURCES
# tar linux-2.6.32-*.tar.gz -C /usr/src
# cd /usr/src
# ln -sv 


2、给内核打补丁
# tar xf netfilter-layer7-v2.23.tar.bz2
# cd /usr/src/linux
# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
# cp /boot/config-*  .config
# make menuconfig


3、编译并安装内核
# make
# make modules_install
# make install


4、重启系统,启用新内核


5、编译iptables


# tar xf iptables-1.4.20.tar.gz
# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/
# cp /etc/rc.d/init.d/iptales /root
# cp /etc/sysconfig/iptables-config /root
# rpm -e iptables iptables-ipv6 --nodeps
# ./configure  --prefix=/usr  --with-ksource=/usr/src/linux
# make && make install


# cp /root/iptables /etc/rc.d/init.d
# cp /root/iptables-config /etc/sysconfig


6、为layer7模块提供其所识别的协议的特征码


# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install


7、如何使用layer7模块


ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效。
net.netfilter.nf_conntrack_acct = 1




l7-filter uses the standard iptables extension syntax 
# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action] 



# iptables -A FORWARD -i eth1 -m layer7 --l7proto qq -j REJECT


注意:
网络防火墙:ip_forward
net.netfilter.nf_conntrack_acct参数只有装载nf_conntrack模块后方能生效



-j LOG 
--log-prefix "":指定日志前缀信息
注意:如果同样的内容要做过滤,日志规则一定放在过滤规则之前。
原文地址:https://www.cnblogs.com/as007012/p/10003120.html