iptables基本用法
iptables基本用法
iptables -L –line-numbers #查看规则 iptables -S #打印规则
command含义
iptables -A chain rule 将rule添加到chain,是附加,不是add的意思。
一般情况下,最后的规则是丢弃所有数据包,如果丢弃后再增加规则就没有意义。如果插入到中间位置需要用-I指令。
iptables -D chain rule/rulenum 从chain中删除rule,可以指定rulenum
iptables -I chain [rulenum] rule 将rule添加到chain中的第rulenum规则之后,如果没有指定将替换第一条规则
iptables -R chain [rulenum] rule 将chain中第rulenum条规则替换为rule,没有指定则替换第一条
iptables -L 列出规则
iptables -S 打印规则
iptables -F 清空规则
iptables -Z 把chain或者所有chain的包及字节的计数器清空(统计值清空)
–new -N chain 创建一个名称为chain的新链
iptables -X [chain] 删除用户自定义chain,不影响预设规则
iptables -P chain target 改变chain的策略为target target在iptables的意思是处理动作,具体包括:accept、drop、reject等。 参考链接:https://www.zsythink.net/archives/1199
iptables -E old-chain new-chain 将旧链名称改为新链名称,这样会使引用旧链的规则失效。
iptables规则中参数定义
-P 代表协议 protocol 指明当前规则针对的传输协议,如tcp、udp、icmp等,使用all将适应所有协议,如果没有指定-p,默认使用all参数
-S 代表原地址 source 指定数据包源地址,可以使ip、网络地址或主机名,对于网络掩码使用/mask。如果不指定-s参数,默认匹配所有源地址
-D 代表目的地址 destination 指定数据包的目的地址,方法同-s类似,不同之处在于-s指源,-d指目的
-J 带包跳转 target 意思是jump到目标,指定当数据包满足该规则就跳转到下一个处理规则,而不再顺序执行后面的判断(类似于continue、yield),可能的指是accept、drop、queue、return,分别表示接受、丢弃、进入队列、返回(跳出到上层chain),可以跳转到自定义chain SNAT 基于源地址转换,可以转换为固定外网地址 MASQUERADE 动态伪装 REDIRECT 重定向,主要实现端口重定向
-I 代表IN INTERFACE 入站接口 指网络数据处理的网卡,一般eth0表示第一块外网接口,lo表示内网接口。-i表示输入时的接口,-o特指输出用的接口。如果不指定-i参数,默认所有接口都匹配规则。制定数据包进入input、forward、prerouting链时经由的接口
-O 代表 OUT INTERFACE 出站接口 与-I类似
其他参数选项(主要用于匹配)
–sport 表示源端口 用于 -p tcp 或者 -p udp 默认匹配所有端口,可以使用端口号或者名称。使用号码效率更高,也可以用(:)匹配端口范围
–dport 表示目的端口 用于 -p tcp 或者 -p udp 与sport用法类似,区别在于对象是目的端口
–tcp-flags 表示tcp flags 用于 -p tcp 可以用英文逗号来指定多个tcp状态标识,可能的值有:SYN、ACK、FIN、RST、URG、PSH
–icmp-type 表示icmp type 用于 -p icmp 例如 0表示Echo Reply;8表示Echo
-m comment –comment “str” 表示注释
-m state –state NEW,ESTABLISHED,INVALID,RELATED 表示数据状态 分别代表:想要建立连接的封包状态,已经联机成功的状态,无效封包,封包与主机发出的封包有关。
补充概念:链和表
链: 这些"关卡"在iptables中为什么被称作"链"呢?我们知道,防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链",所以,我们把每一个"关卡"想象成如下图中的模样 ,这样来说,把他们称为"链"更为合适,每个经过这个"关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。(下图所示)包括:prerouting、input、output、forward、postrouting
表: 我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围,所以,学习iptables之前,我们必须先搞明白每种表 的作用。 filter表:负责过滤功能,防火墙;内核模块:iptables_filter nat表:network address translation,网络地址转换功能;内核模块:iptable_nat mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle raw表:关闭nat表上启用的连接追踪机制;iptable_raw
表的优先级:raw –> mangle –> nat –> filter
表链关系: 我们可以认为链是流程,而表是对流程的节点归类。
以下就是各链中包含的表种类: PREROUTING 的规则可以存在于:raw表,mangle表,nat表。 INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。 FORWARD 的规则可以存在于:mangle表,filter表。 OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。 POSTROUTING 的规则可以存在于:mangle表,nat表。
我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables,是因为从"关卡"的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各"表"与"链"的关系罗列出来: 表(功能)<–> 链(钩子):
raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT
配置示例
https://github.com/openconnect/recipes/blob/master/ocserv-firewall-iptables-ipv4.md
*nat :INPUT ACCEPT [0:0] :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0]
Generic NAT for LAN Network 192.168.5.0/24
-A POSTROUTING -s 192.168.5.0/24 -o eth0 -j MASQUERADE COMMIT
*mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0]
START INPUT RULES
Stateful Rule - INPUT
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
ACCEPT traffic from Loopback interface
-A INPUT -i lo -j ACCEPT
ACCEPT SSH from LAN
-A INPUT -p tcp -m tcp -i eth1 –dport 22 -j ACCEPT
ACCEPT DHCP from LAN
-A INPUT -p udp -m udp -i eth1 –dport 67:68 -j ACCEPT
ACCEPT Webmin from LAN (Optional, only for Webmin users)
-A INPUT -p tcp -m tcp -i eth1 –dport 10000 -j ACCEPT
ACCEPT DNS UDP From LAN
-A INPUT -p udp -m udp -i eth1 –dport 53 -j ACCEPT
ACCEPT DNS TCP From LAN
-A INPUT -p tcp -m tcp -i eth1 –dport 53 -j ACCEPT
ACCEPT ping from LAN
-A INPUT -p icmp –icmp-type echo-request -i eth1 -j ACCEPT
ACCEPT OpenConnect TCP From WAN
-A INPUT -p tcp -m tcp -i eth0 –dport 443 -j ACCEPT
ACCEPT OpenConnect UPD From WAN
-A INPUT -p udp -m udp -i eth0 –dport 443 -j ACCEPT
DROP wan traffic
-A INPUT -i eth0 -j DROP
LOG LAN
-A INPUT -i eth1 -j LOG –log-prefix “IPTABLES-LOG-INPUT-LAN:” –log-level 4
ACCEPT LAN traffic - Learning rule - Should be changed to DROP once custom rules are created.
-A INPUT -i eth1 -j ACCEPT
LAST RULE - DROP all traffic
-A INPUT -j DROP
END INPUT RULES
START FORWARD RULES
Stateful Rule - FORWARD
-A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
ACCEPT LAN to WAN
-A FORWARD -s 192.168.5.0/24 -j ACCEPT
LOG Forwarded traffic
-A FORWARD -j LOG –log-prefix “IPTABLES-LOG-FORWARD:” –log-level 4
LAST RULE - ACCEPT all traffic - Should be changed to DROP once custom rules are created.
-A FORWARD -j ACCEPT
END FORWARD RULES
START OUTPUT RULES
Stateful Rule - OUTPUT
-A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
LOG Outgoing traffic
-A OUTPUT -j LOG –log-prefix “IPTABLES-LOG-OUTPUT:” –log-level 4
LAST RULE - ACCEPT all traffic - Should be changed to DROP once custom rules are created.
-A OUTPUT -j ACCEPT
END OUTPUT RULES
COMMIT
参考示例链接–作者是个大神 https://www.cnblogs.com/zclzhao/p/5081590.htm https://github.com/openconnect/recipes/blob/master/ocserv-firewall-iptables-ipv4.md