Linux 之 iptables基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 之 iptables基础相关的知识,希望对你有一定的参考价值。
iptables基础(一)
===========================================================================
概述:
iptables介绍
1)Firewall
★Firewall:防火墙系统
是一种隔离工具,Packets Filter Firewall (包过滤型防火墙);
定义:工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件;
硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现;
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙;
★防火墙范围分类:
主机防火墙:服务范围为当前主机;
网络防火墙:服务范围为防火墙背后的局域网;
2)iptables/netfilter:
★netfilter:防火墙框架,framework;位于内核空间;
⊙hooks function(钩子函数)
prerouting:路由前
input : 入栈
forward : 转发
output : 出栈
postrouting:路由后
注意:钩子函数都是在内核中的TCP/IP协议栈上定义的。
★iptables:命令行工具程序,位于用户空间;规则管理工具;
⊙CHAINS:链,在钩子上定义规则
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
★报文流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文:OUTPUT --> POSTROUTING
3)tables 表
★功能:
filter:过滤,防火墙;
nat:network address translation,网络地址转换;
mangle:拆解报文,做出修改,并重新封装;
raw:关闭nat表上启用的连接追踪机制;
★优先级次序(由高而低):
raw --> mangle --> nat --> filter
★功能<-->钩子对应关系:很重要
raw:PREROUTING,OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
4)iptables规则的组成部分:
★匹配条件:
网络层首部:Source IP(源IP), Destination IP(目标IP)
传输层首部:Source Port(源端口), Destination Port(目标端口)
扩展检查机制:
★处理动作:target 目标
ACCEPT:接受
DROP:丢弃
REJECT:驳回,拒绝
iptables命令使用基础
1)安装:
★netfilter:位于内核中的tcp/ip协议栈报文处理框架;
★iptables:
CentOS 5/6:iptables命令编写规则;
# iptables -t filter -F
# service iptables save
CentOS 7:firewalld,firewall-cmd, firewall-config
# systemctl disable firewalld
★程序包:iptables,iptstate
2)iptables命令的规则:
★规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;
⊙匹配条件:
基本匹配条件:主要是ip层(源地址,目标地址),传输层协议;
扩展匹配条件:需要借助于扩展模块进行指定的匹配条件;
隐式扩展:已经在基本匹配条件中指明的协议相关的扩展;
显式扩展:隐式扩展之外的其它扩展匹配条件;
⊙处理动作:
基本动作:ACCEPT,DROP,...
扩展动作:需要借助于扩展模块进行,但无须显式指定,仅需指明动作;
★添加规则时需要考量的问题:
报文流经的位置:用于判断将规则添加至哪个链;
实现的功能:用于判断将规则添加至哪个表;
报文的方向:用于判断哪个为“源”,哪个为“目标”;
匹配条件:用于编写能够正确匹配目标报文的规则;
2)iptables命令的使用格式:
★规则使用格式
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options] 扩展条件
target = -j targetname [per-target-options] 处理动作
★规则管理格式:
iptables [-t table] COMMAND chain cretieria [-m -m matchname [per-match-options]] [-j targetname [per-target-options]]
⊙-t table:指明要管理的表; 默认为filter;
⊙COMMANDS:
链管理:
-P:iptables [-t table] -P chain target,
定义链的默认策略;其target一般可使用ACCEPT或DROP;
-N:iptables [-t table] -N chain,
自定义规则链;仅在默认链通过某规则进行调用方可生效;因此,每个自定义链都有其引用记数;
-X:iptables [-t table] -X [chain]
删除自定义的空的引用计数为0的链;
-F:iptables [-t table] -F [chain [rulenum]] [options...],
清空指定的链,或删除指定链上的规则 ;
-E:iptables [-t table] -E old-chain-name new-chain-name,
重命名自定义的引用计数为0的链;
-Z:iptables [-t table] -Z [chain [rulenum]] [options...]
规则置零,置零计数器
规则:
-A:append, iptables [-t table] -A chain rule-specification,
追加规则到指定的链尾部;
-I:insert, iptables [-t table] -I chain [rulenum] rule-specification, 插入规则到指定的链中的指定位置,默认为链首;
-D:delete,iptables [-t table] -D chain rule-specification或iptables [-t table] -D chain rulenum,
删除指定的链上的指定规则;
-R:replace,iptables [-t table] -R chain rulenum rule-specification,
将指定的链上的指定规则替换为新的规则;
查看:
-L:list, iptables [-t table] -L [chain [rulenum]] [options...]
-n:数字格式,不要做反解;
-v:verbose,详细格式信息;
-vv, -vvv
--line-numbers:显示链上的规则的编号;
-x:exactly,显示计数器的精确值;
★计数器:
每条规则以及链的默认策略分别有各自的两个计数器:
匹配到的报文的个数:pkts
匹配到的所有报文的大小之和:bytes
命令演示:
链管理
1.-L 查看iptables的表和链
[[email protected] ~]# iptables -vnL # 查看表,默认指的是filter表,有三个链 Chain INPUT (policy ACCEPT 1020 packets, 92926 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 487 packets, 78021 bytes) pkts bytes target prot opt in out source destination [[email protected] ~]# iptables -t nat -vnL # 查看nat表,有四个链 Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
2.-P 定义链的默认策略为DROP
[[email protected] ~]# ping 192.168.1.12 # 定义之前是能ping同 PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data. 64 bytes from 192.168.1.12: icmp_seq=1 ttl=64 time=2.56 ms 64 bytes from 192.168.1.12: icmp_seq=2 ttl=64 time=0.499 ms 64 bytes from 192.168.1.12: icmp_seq=3 ttl=64 time=0.369 ms [[email protected] ~]# iptables -t filter -P INPUT DROP # 定义默认策略为DROP [[email protected] ~]# ping 192.168.1.12 PING 192.168.1.12 (192.168.1.12) 56(84) bytes of data. # 定义之后ping不同了,链ssh远程登录都掉了
3.-Z 自定义链
[[email protected] ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [[email protected] ~]# iptables -N in_web # 定义一个in_web的链 [[email protected] ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain in_web (0 references) # 自定义的链,0次引用 target prot opt source destination
4.-Z 删除自定义连
[[email protected] ~]# iptables -X [[email protected] ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
5.-E 重命名自定义的链
[[email protected] ~]# iptables -N in_web [[email protected] ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain in_web (0 references) target prot opt source destination [[email protected] ~]# iptables -t filter -E in_web web_input_packets # 重命名自定义链 [[email protected] ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain web_input_packets (0 references) # 重新定义完成 target prot opt source destination
6.-Z,置零计数器,即规则置零
[[email protected] ~]# iptables -vnL Chain INPUT (policy ACCEPT 52 packets, 5160 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 33 packets, 5558 bytes) pkts bytes target prot opt in out source destination [[email protected] ~]# iptables -Z INPUT # 置零 [[email protected] ~]# iptables -vnL Chain INPUT (policy ACCEPT 6 packets, 396 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 4 packets, 448 bytes) pkts bytes target prot opt in out source destination
iptables的匹配条件
★匹配条件:
基本匹配条件:主要是ip层(源地址,目标地址),传输层协议;
扩展匹配条件:需要借助于扩展模块进行指定的匹配条件;
隐式扩展:已经在基本匹配条件中指明的协议相关的扩展;
显式扩展:隐式扩展之外的其它扩展匹配条件;
注意:
多重条件之间的隐含逻辑为“与”操作;
匹配规则:
如果被第一条规则所匹配到,就会做处理,处理完之后就到达不了第二条规则了;
不同类别服务的规则(比如控制web服务的,SSH服务的等),应该把访问比较频繁的服务所对应的规则放到前面,即:匹配机会更大的规则放到前面;
同一类别的规则,要把匹配条件苛刻的,范围较小的放到前面,而范围较大的放到后面。
1.基本匹配条件
★参数:
[!] -s, --source address[/mask][,...]:检查报文中的源IP地址是否符合此处指定的地址或地址范围;
[!] -d, --destination address[/mask][,...]:检查报文中的目标IP地址是否符合此处指定的地址或地址范围;
[!] -p, --protocol protocol:检查报文中传输层的协议类型,支持tcp, udp, udplite, icmp,icmpv6,esp, ah, sctp, mh,或者 "all"表示所有协议;
[!] -i, --in-interface name:检查报文进入本机时的接口是否符合本处指定的接口;只适应 INPUT, FORWARD and PREROUTING ;
[!] -o, --out-interface name:检查报文即将离开本机时经由的接口是否符合本处指定的接口;FORWARD, OUTPUT and POSTROUTING;
注意:这里的[!]为取反
★ -m, --match match:显式指明要使用的扩展模块;
★ -j, --jump target:跳转目标;
注意:
对于本地主机上的大多数的访问控制,如果只是本地作为服务器,那我们只需把INPUT链改为DROP,只放行合法的请求进来就可以;
而对于控制本机请求别人的服务时,我们应该把OUTPUT链设为DROP,只放行认为合法的请求出去就可以;
为了安全起见,建议INPUT和OUTUT链的默认策略应该均为DROP。
示例:
1.添加一条规则,仅使192.168.1.0/24网络中的主机可以访问本机服务,使用-A和-s即可,如下:
# 因为是控制访问服务,所以,请求报文会首先经过INPUT链,所以,要把INPUT链的默认策略 设置为DROP,然后只针对符合源地址要求的报文放行; [[email protected] ~]# iptables -t filter -P INPUT DROP [[email protected] ~]# ping 192.168.1.14 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data. # 发现ping不同 # 添加规则,凡是来自于192.168.0.0/24网络的地址,统统放行 [ro[email protected] ~]# iptables -t filter -A -s 192.168.1.0/24 -j ACCEPT [[email protected] ~]# ping 192.168.1.14 # 马上就可以ping 通了 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data. 64 bytes from 192.168.1.14: icmp_seq=120 ttl=64 time=0.919 ms 64 bytes from 192.168.1.14: icmp_seq=121 ttl=64 time=2.48 ms 64 bytes from 192.168.1.14: icmp_seq=122 ttl=64 time=2.64 ms 64 bytes from 192.168.1.14: icmp_seq=123 ttl=64 time=0.682 ms [[email protected] ~]# iptables -vnL Chain INPUT (policy DROP 16 packets, 1098 bytes) # 报文 大小 处理动作 协议 选项 源地址 目标地址 pkts bytes target prot opt in out source destination 74 7383 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 83 packets, 9411 bytes) pkts bytes target prot opt in out source destination
1)在上题的基础上,我想禁止192.168.1.0/24 网络中ip为192.168.1.13这台主机的访问,那就需要在上题定义的规则中添加规则了,使用 -I 选项 如下:
[[email protected] ~]# iptables -I INPUT -s 192.168.1.13 -j REJECT # 插入规则 [[email protected] ~]# iptables -vnL Chain INPUT (policy DROP 0 packets, 0 bytes) # 可以看到先后次序,同一类规则,范围小的放到前面 pkts bytes target prot opt in out source destination 7 588 REJECT all -- * * 192.168.1.13 0.0.0.0/0 reject-with icmp-port-unreachable 235 21761 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 14 packets, 1564 bytes) pkts bytes target prot opt in out source destination [[email protected] ~]# ping 192.168.1.14 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data. # 每次 ping,都给你驳回了,这是REJECT From 192.168.1.14 icmp_seq=1 Destination Port Unreachable From 192.168.1.14 icmp_seq=2 Destination Port Unreachable From 192.168.1.14 icmp_seq=3 Destination Port Unreachable
2)把规则上处理动作的REJECT换为DROP,使用-R 如下
[[email protected] ~]# iptables -R INPUT 1 -s 192.168.1.13 -j DROP # 规则替换 [[email protected] ~]# iptables -vnL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 4 336 DROP all -- * * 192.168.1.13 0.0.0.0/0 # 新替换的规则 420 36377 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 5 packets, 700 bytes) pkts bytes target prot opt in out source destination [[email protected] ~]# ping 192.168.1.14 # 这是发现卡在这了,ping不同 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data.
3)删除对ip为192.168.1.13主机的限制,使用-D选项
[[email protected] ~]# iptables -vnL --line-numbers # 首先查看要删除规则的规则号 Chain INPUT (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 4 336 DROP all -- * * 192.168.1.13 0.0.0.0/0 2 439 38135 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 18 packets, 2396 bytes) num pkts bytes target prot opt in out source destination [[email protected] ~]# iptables -D INPUT 1 # 删除指定规则的规则号码即可 # 注意:也可使用 # iptables -D INPUT 192.168.1.13 -j DROP 来指明确切的匹配条件,一定要写target [[email protected] ~]# iptables -vnL # 查看规则已经被删除 Chain INPUT (policy DROP 9 packets, 632 bytes) pkts bytes target prot opt in out source destination 526 45355 ACCEPT all -- * * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 43 packets, 5555 bytes) pkts bytes target prot opt in out source destination
2.只允许指定网络192.168.1.0/24内的主机,对本机(目标地址为本机)上所有TCP协议的服务请求放行,添加一条规则,指明三重条件-s,-d,-p
[[email protected] ~]# iptables -F #首先清空所有的规则 [[email protected] ~]# iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.14 -p tcp -j ACCEPT [[email protected] ~]# iptables -vnL Chain INPUT (policy DROP 35 packets, 5862 bytes) pkts bytes target prot opt in out source destination 31 2306 ACCEPT tcp -- * * 192.168.1.0/24 192.168.1.14 # 新规则 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 48 packets, 4259 bytes) pkts bytes target prot opt in out source destination [[email protected] ~]# curl # 访问web服务,可以 <html> <head> <title>Test Page</title> </head> <body> <h1>My Test Page</h1> </body> </html> [[email protected] ~]# ping 192.168.1.14 # 但是ping不通,因为只限制tcp协议可以访问 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data. ^C --- 192.168.1.14 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2445ms
2.扩展匹配条件
1)隐式扩展条件
★定义:不用-m选项明确给出要使用的扩展机制的扩展;此处主要指使用-p {tcp|udp|icmp}给定协议后可直接对给定的协议所进行的扩展;
★-p tcp:可直接使用tcp协议对应的扩展选项;
[!] --source-port,--sport port[:port]:
匹配报文中的传输层的源端口;可给出多个连接的端口;
[!] --destination-port,--dport port[:port]:
匹配报文中的传输层的目标端口;可给出多个连接的端口;
[!] --tcp-flags mask comp 标志位的检查机制
标志位:SYN,ACK,FIN,RST,URG,PSH;
mask:要检查的标志位列表,以逗号分隔,例如SYN,ACK,FIN,RST
comp:mask给定的众标志位中,其值必须为1的标志位列表,余下的必须为0;
例如: --tcp-flags SYN,ACK,FIN,RST SYN 表示,要求只匹配tcp协议给定的这些标志位(SYN,ACK,FIN,RST)中SYN为1,而其余都为0的,这也就是tcp的第一次握手阶段。
[!] --syn:相当于--tcp-flags SYN,ACK,FIN,RST SYN 上面的简写格式
★-p udp:可直接使用udp协议对应的扩展选项;
[!] --source-port,--sport port[:port]:
匹配报文中的传输层的源端口;可给出多个连接的端口;
[!] --destination-port,--dport port[:port]:
匹配报文中的传输层的目标端口;可给出多个连接的端口;
★-p icmp(互联网控制报文协议):可直接使用icmp协议对应的扩展选项;
[!] --icmp-type {type[/code]|typename}
例如:
--icmp-type 0/0:匹配对ping请求的响应报文
--icmp-type 8/0:匹配ping请求报文
示例:
1.TCP协议扩展
只开放本地的SSH服务的22号端口给本地网络(192.168.1.0/24)
分析:请求报文入栈(INPUT)时源IP和port为192.168.1.0/24网络中的任意主机ip和端口,不确定,但是 目标IP和port是确定的,都是本地服务器的ip和ssh服务tcp协议的22号端口,所以为如下规则: [[email protected] ~]# iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.14 -p tcp --dport 22 -j ACCEPT 分析:请求报文出栈(OUTPUT)时源IP和port为本地服务器的ip(192.168.1.14)和ssh服务的22号端口,是确定,但是 目标IP和port是192.168.1.0/24网络中的任意主机ip和端口,是不确定的,所以为如下规则: [[email protected] ~]# iptables -A OUTPUT -d 192.168.1.0/24 -s 192.168.1.14 -p tcp --sport 22 -j ACCEPT 然后修改本地服务器的INPUT和OUTPUT的默认策略为DROP [[email protected] ~]# iptables -P INPUT DROP [[email protected] ~]# iptables -P OUTPUT DROP 查看所有规则如下: [[email protected] ~]# iptables -vnL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 16 1056 ACCEPT tcp -- * * 192.168.1.0/24 192.168.1.14 tcp dpt:22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 107 11864 ACCEPT tcp -- * * 192.168.1.14 192.168.1.0/24 tcp spt:22
2.ICMP协议扩展
在上题的基础上开放本机的ping请求,即允许其他人ping本机。
要想能够被别人ping到,即ping请求入栈,源ip是不确定的,目标ip是本地服务器确定,协议为icmp,其类型为8 [[email protected] ~]# iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.14 -p icmp --icmp-type 8/0 -j ACCEPT 此时虽然,ping请求可以接受,但是只能入栈却不能出栈,通过抓包可以看出,有来自192.168.1.13的请求,但本机却未作出回应 [[email protected] ~]# tcpdump -i eno16777736 -nn icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno16777736, link-type EN10MB (Ethernet), capture size 65535 bytes 00:35:43.436103 IP 192.168.1.13 > 192.168.1.14: ICMP echo request, id 41227, seq 752, length 64 00:35:44.435252 IP 192.168.1.13 > 192.168.1.14: ICMP echo request, id 41227, seq 753, length 64 00:35:45.435325 IP 192.168.1.13 > 192.168.1.14: ICMP echo request, id 41227, seq 754, length 64 00:35:46.435659 IP 192.168.1.13 > 192.168.1.14: ICMP echo request, id 41227, seq 755, length 64 开放本机的ping响应报文 [[email protected] ~]# iptables -A OUTPUT -d 192.168.1.0/24 -s 192.168.1.14 -p icmp --icmp-type 0/0 -j ACCEPT [[email protected] ~]# ping 192.168.1.14 # 客户端已经可以ping通 PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data. 64 bytes from 192.168.1.14: icmp_seq=1023 ttl=64 time=0.434 ms 64 bytes from 192.168.1.14: icmp_seq=1024 ttl=64 time=0.703 ms 64 bytes from 192.168.1.14: icmp_seq=1025 ttl=64 time=0.657 ms
如果想让本地主机可以ping互联网上的任意主机
现在本地主机是ping不了其他主机的,因为本地主机发送不了ping的请求报文 [[email protected] ~]# ping 192.168.1.13 PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data. ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted ping: sendmsg: Operation not permitted 要想能够ping其他主机要在OUTPUT上定义出栈的请求报文,如下: [[email protected] ~]# iptables -A OUTPUT -s 192.168.1.14 -d 0.0.0.0/0 -p icmp --icmp-type 8 -j ACCEPT 本地主机ping ip为192.168.1.13 的其他主机 [[email protected] ~]# ping 192.168.1.13 PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data. 在ip为 192.168.1.13 的主机抓包可见能够收到ip为192.168.1.13主机的请求报文,客户端主机也会发送响应报文,如下: [[email protected] ~]# tcpdump -i eth0 -nn icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 12:51:09.454278 IP 192.168.1.14 > 192.168.1.13: ICMP echo request, id 3486, seq 22, length 64 12:51:09.454311 IP 192.168.1.13 > 192.168.1.14: ICMP echo reply, id 3486, seq 22, length 64 12:51:10.454195 IP 192.168.1.14 > 192.168.1.13: ICMP echo request, id 3486, seq 23, length 64 12:51:10.454228 IP 192.168.1.13 > 192.168.1.14: ICMP echo reply, id 3486, seq 23, length 64 12:51:11.454249 IP 192.168.1.14 > 192.168.1.13: ICMP echo request, id 3486, seq 24, length 64 虽然本地主机的ping请求发送出去了,但是ping的其他主机的响应报文不能入栈,所以要定义其他主机 的响应报文入栈,如下: [[email protected] ~]# iptables -A INPUT -d 192.168.1.14 -s 0.0.0.0/0 -p icmp --icmp-type 0 -j ACCEPT [[email protected] ~]# ping 192.168.1.13 # 可以ping通,也有回应了 PING 192.168.1.13 (192.168.1.13) 56(84) bytes of data. 64 bytes from 192.168.1.13: icmp_seq=1 ttl=64 time=5.02 ms 64 bytes from 192.168.1.13: icmp_seq=2 ttl=64 time=0.512 ms
2)显式扩展条件
★定义:必须使用-m选项给出matchname的扩展,而且有些扩展都还存在专用选项;
以上是关于Linux 之 iptables基础的主要内容,如果未能解决你的问题,请参考以下文章