iptables命令大全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
防火墙是内核的配置,iptables是使用防火墙的工具
包过滤防火墙可以分为“状态检测型”和“简单包过滤型”
iptables语法:
iptables [-t 表名] 动作 链名 匹配条件 -j 目标动作或跳转
详解:
一、表名TABLE
1、raw表:确定是否对数据包进行状态跟踪(目标是关闭nat表上启用的连接追踪功能)。
2、mangle表:为数据包设置标记。
3、nat表:地址转换,修改数据包中的源、目标IP地址或端口;启用connection_track;SNAT,DNAT,PNAT
4、filter表:过滤,确定是否放行该数据包
默认为filter表
二、动作COMMAND
1、对于链的动作:
-F:flush, 清空规则链;
-N:new, 自建一条自定义链
-X: delete, 删除一条自定义的空链
-Z:zero,(数据包和流量)计数器归零
-P:policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP,不能为REJECT;
-E:重命名自定义链
2、对于链中规则的动作:
-A:向链中添加一条规则,默认插入所有规则的最后一条。
-I:向链中插入一条规则,默认插入所有规则的第一条。
iptables -I INPUT 2 ·····
即为在链中第2条规则前添加一条规则。
-D:从链中删除一条规则。
-R:替换链中的一条规则。
3、查询动作:
-L
-n: 数字格式显示主机地址和端口;
-v: 详细格式,-vv, -vvv
--line-numbers: 显示规则编号
-x: exactly,不要对计数器的计数结果做单位换算,而显示其精确值
三、链名CHAIN
PREROUTING:路由前,进行路由选择前处理数据包
INPUT:到达本机内部的报文必经之路,处理入站数据包
FORWARD:由本机转发的报文必经之路,处理转发数据包
OUTPUT:由本机发出的报文的必经之路,处理出站数据包
POSTROUTING:路由后,进行路由选择后处理数据包
四、匹配条件CRETIRIA
1、通用匹配
-s IP地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;
--src, --source
-d IP地址:指定报文目标IP地址匹配的范围;
--dst, --destination
-p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;
-i 网络接口名: 数据报文流入的接口;PREROUTING, INPUT, FORWARD
-o 网络接口名: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING
2、扩展匹配
2.1隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;
-p tcp:
--sport 源端口号: 指定源端口
--dport 目标端口号: 指定目标端口
-p udp:
--sport 源端口号: 指定源端口
--dport 目标端口号: 指定目标端口
-p icmp [-m icmp]
--icmp-type
0: echo-reply, ping响应
8: echo-request, ping请求
例:iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8
2.2显式扩展:必须明确
说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;
(1)state:连接状态
-m state –-state {NEW|ESTABLISHED|RELATED|INVALID|}
接下来介绍下用iptables实现状态检测包过滤
介绍tcp以下4种状态的连接
1].NEW:即3次握手的第一次,一次新的请求
iptable -A OUTPUT -o eth0 -m state --state NEW -j DROP
分析这条规则,其中-m表示扩展加载state状态检测模块,--state NEW表示检测tcp的第一次握手,整条规则的作用就是拒绝从eth0网卡发出的新的tcp连接。
2].ESTABLISHED:二次握手以后,连接断开之前的连接
3].RELATED:相关连的状态,可解决控制ftp连接这种超麻烦的协议
4].INVALID:无法识别的状态
应用案例:
结合NEW和ESTABLISHED这2种状态,实现以下规则
iptables -A INPUT -d 192.168.1.1 -p tcp –dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
允许外面向主机发起的新的ssh请求
iptables -A INPUT -d 192.168.1.1 -p tcp -dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
允许外面向主机发起的新的web连接
iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 22 -m state --state ESTABLISHED -j ACCEPT
处于连接状态时,允许主机发往外部的ssh数据包
iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 80 -m state --state ESTABLISHED -j ACCEPT
处于连接状态时,允许主机发往外部的web数据包
iptables -P INTUP DROP
拒绝其它所有进来的数据包
iptables -P OUTPUT DROP
拒绝其它所有出去的数据包
这几条规则可以用在web服务器上,只允许客户向服务器发出ssh和web请求的访问,服务器不能主动向外发出任何连接,避免服务器成为黑客的跳板
(2)mport:多端口匹配
-m {mport|multiport}
--source-ports|--sports port[,port···]
--destination-ports|--dports port[,port···]
--ports port[,port···]
此扩展可以指定不连续的端口,在这里优化以上的案例来说明其作用
iptables -A INPUT -d 192.168.1.1 -m mport --destination-ports 22,80,443 -m state –-state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.1 -m mport --source-ports 22,80,443 -m state –- state ESTABLISHED -j ACCEPT
iptables -P INTUP DROP
iptables -P OUTPUT DROP
一次可以添加多个端口,端口之间用逗号隔开
(3)iprange:多IP匹配
-m iprange
--src-range IP-IP
--dst-range IP-IP
这里用一个简单的例子来说明
iptables -A INPUT -d 192.168.1.1 -m iprange –src-range 192.168.0.1-192.168.0.100 -p tcp –-dport 80 -j DROP
拒绝192.168.0.1-192.168.0.100这段地址访问192.168.1.1的web服务
(4)connlimit:并发连接请求个数限制
-m connlimit
--connlimit-above [n]
例:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
(5)limit:速率限制
-m limit
--limit n[/second|/minute|/hour|/day]平
均速率
--limit-burst n突发速率
iptables -A INPUT -d 192.168.1.1 -p tcp –dport 80 -m limit --limit 10/second --limit-burst 30 -j ACCEPT
此条规则限制了每秒10个数据包,突发最大速率是每秒30个数据包
(6)time:时间限制
-m 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]
1,2,3,4,5,6,7
区分以下两种写法来理解这几个选项的意义
iptables -A INPUT -d 192.168.1.1 -p tcp –-dport 80 -m time –-datestart 2012:07:20:08:30:00 --datestop 2012:07:20:14:30:00 -j ACCEPT
从7月20号8:30到7月30号14:30允许访问本机web服务
iptables -A input -d 192.168.1.1 -p tcp –-dport 80 -m time –- timestart 08:30:00 –-timestop 14:30:00 --datestart 2012:07:20 –-datestop 2012:07:30 -j ACCEPT
从7月20号到7月30号 每天的8:30—14:30时分允许访问本机web服务
(7)string:字符限制(对中文字符匹配有限)
-m string
--algo bm|kmp 指定字符匹配算法
--string "字符" 指定字符
iptables -A out -s 172.16.100.1 -p tcp --sport 80 -m string --algo kmp --string “” -j DROP
包含的数据包都拒绝
例:匹配源mac地址
-m mac --mac-source mac地址
五、目标动作TARGET
1、ACCEPT
2、DROP:丢弃数据包不予处理,进行完此处理后将不再对比其他规则,直接中断过滤程序。
3、REJECT:拦阻数据包,并返回数据包通知对方,可返回的数据包。
4、LOG:将iptables日志存储在/var/log/messages文件中。
[root@localhost log]# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
429 31797 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
1 52 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
15018 1178K REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 378 packets, 96209 bytes)
pkts bytes target prot opt in out source destination
Chain:链
policy:默认策略
pkts:该规则处理数据包的个数
bytes:该规则处理数据包的大小(流量)
target:目标动作
prot:协议(条件)
opt:其他选项
source:源地址
destination:目标地址
练习:INPUT和OUTPUT默认策略为DROP;
1、限制本地主机的web服务器在周
一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
iptables -A INPUT -p tcp --dport 80 -m time --weekdays Mon -j DROP
iptables -A INPUT -m state --state NEW -m limit --limit 100/second -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m string --algo kmp --string "admin" -j DROP
iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;
iptables -A INPUT -p tcp -m time --weekdays 1,2,3,4,5 --timestart 8:30 --timestop 18:00 -m multiport --dports 21 -m state --state RELATED -m iprange --src-range 172.16.0.0 -m connlimit --connlimit-above 5/minute -j ACCEPT ?
3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
5、允许本机ping别的主机;但不开放别的主机ping本机;