iptables的用法

基本用法:

  1. iptables [-t table] [subcommand] chain [rulenum] [options...] [match] [target]
  2. iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号][-i|o 网卡名称][-p 协议类型][-s ip地址][源子网][--sport 源端口号][-d 目标ip地址|目标子网][--dport 目标端口号][-j 处理动作]

详细用法说明:

1)table

  1. filter:一般的过滤功能,包含inputforwardoutput。默认选项
  2. nat:用于地址转换、映射、端口映射等,包含preroutingpostrouting
  3. mangle:用于对特定数据包的修改,包含preroutingoutputforwardinputpostrouting
  4. raw:一般是为了不再让iptables做数据包的连接跟踪处理,从而提供性能,包含preroutingoutput

2)subcommand选项

1》链管理

  1. -N new, 自定义一条新的规则链
  2. -X delete ,删除自定义的空的规则链
  3. -P Policy ,设置默认策略;对filter 表中的链而言,其默认策略有:ACCEPT :接受,DROP :丢弃
  4. -E :重命名自定义链;引用计数不为0 的自定义链不能够被重命名,也不能被删除

2》查看:

  1. -L list, 列出指定鏈上的所有规则,本选项须置后
  2. -n numberic ,以数字格式显示地址和端口号
  3. -v verbose ,详细信息
  4. -vv:更详细
  5. -x exactly ,显示计数器结果的精确值, 而非单位转换后的易读值
  6. --line-numbers :显示规则的序号
  7. -S selected, iptables-save命令格式显示链上规则
  8. 常用组合:
  9. --vnL
  10. --vvnxL --line-numbers

3》规则管理:

  1. -A append,追加
  2. -I insert,插入,要指明插入的规则编号,默认为第一条。
  3. -D delete,删除。(1)指明规则序号,(2)指明规则本身
  4. -R replace ,替换指定链上的指定规则编号
  5. -F flush ,清空指定的规则链
  6. -Z zero ,置零
  7. iptables 的每条规则都有两个计数器
  8. (1)匹配到的报文的个数
  9. (2)匹配到的所有报文的大小之和

3)链chain:

  1. INPUT:通过路由表判断后目的地是本机,然后进入本机内部资源
  2. OUTPUT:有本机产生的数据向外部转发
  3. FORWARD:通过路由表判断后目的地不是本机,然后通过路由转发到其他地方
  4. PREROUTING:流入的数据包进入路由表之前
  5. POSTROUTING:传出的数据包到达网卡出口之前

4)match,匹配条件

  1. 基本:通用的,parameters
  2. 扩展:需加载模块,match extentions

1》基本匹配条件:

  1. 无需加载模块,由iptables/netfilter 自行提供
  2. [!] -s, --source address[/mask][,...] :源IP 地址或范围
  3. [!] -d, --destination address[/mask][,...] :目标IP 地址或范围
  4. [!] -p, --protocol protocol :指定协议,可使用数字如0all),protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or all 参看:/etc/protocols
  5. [!] -i, --in-interface name :报文流入的接口;只能应用于数据报文流入环节,只应用于 INPUT FORWARD PREROUTING
  6. [!] -o, --out-interface name :报文流出的接口;只能应用于数据报文流出的环节,只应用于 FORWARD OUTPUT POSTROUTING

2》扩展匹配条件:

  1. 需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效,是对某一种功能的扩展,经由扩展模块引入的匹配机制。
  2. 查看帮助:man iptables-extensions
1>隐式扩展 :对某一种协议的扩展
  1. 在使用-p 选项指明了特定的协议时,无需再用-m 选项指明扩展模块的扩展机制,不需要手动加载扩展模块。
  2. -p做协议匹配,协议有:tcp,udp,icmp,icmpv6,ah,esp,sctp,mh,all
1.tcp 协议,-m tcp,扩展选项
  1. [!] --source-port, --sport port[:port] :匹配报文tcp首部源端口,可为端口范围
  2. [!] --destination-port,--dport port[:port] :匹配报文目标端口,可为范围
  3. [!] --tcp-flags mask compmask需检查的标志位列表,用逗号分隔,如 SYN,ACK,FIN,RST,PSH,URG,ALL,NONE.compmask列表中必须为1的标志位列表,无指定则必须为0,用逗号分割
  4. [!] --syn :用于匹配第一次握手。相当于:--tcp-flags SYN,ACK,FIN,RST,SYN
2.udp 协议,-m udp,扩展选项
  1. [!] --source-port, --sport port[:port] :匹配报文udp首部的源端口;可以是端口范围
  2. [!] --destination-port,--dport port[:port] :匹配报文udp首部的目标端口;可以是端口范围
3.icmp
  1. ICMP是(Internet Control Message ProtocolInternet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。)
  2. -m icmp:专有选项
  3. [!] --icmp-type {type[/code]|typename}:type/code 0/0 echo-reply表示icmp 应答,type/code8/0 echo-request表示icmp 请求
2>显式扩展 :
  1. 额外附加的更多的匹配规则,功能性扩展
  2. 必须使用-m 选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块,即[-m matchname [per-match-options]
  3. -m 模块名称
  4. 每个模块会引入新的匹配机制
  5. 可以通过rpm -ql iptables 来获得那些模块可用,模块是以.so结尾的。
  6. 使用帮助:
  7. man iptables centos6
  8. man iptables-extensionscentos7
1. multiport扩展
  1. 以离散方式定义多端口匹配, 最多指定15 个端口
  2. [!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口
  3. [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口
  4. [!] --ports port[,port|,port:port]...:多个非连续的源或目标端口
  5. 示例:
  6. iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
2. iprange扩展
  1. 指明连续的(但一般不是整个网络)ip 地址范围
  2. [!] --src-range from[-to]:源IP 地址范围
  3. [!] --dst-range from[-to]:目标IP 地址范围
  4. 示例:
  5. iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP
3. mac 扩展
  1. 指明源MAC 地址
  2. 适用于:PREROUTING, FORWARDINPUT chains
  3. [!] --mac-source XX:XX:XX:XX:XX:XX
  4. 示例:
  5. iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
  6. iptables -A INPUT -s 172.16.0.100 -j REJECT
4. string 扩展
  1. 对报文中的应用层数据做字符串模式匹配检测
  2. --algo {bm|kmp} :字符串匹配检测算法,bm Boyer-Moorekmp Knuth-Pratt-Morris
  3. --from offset :开始偏移
  4. --to offset :结束偏移
  5. [!] --string pattern :要检测的字符串模式
  6. [!] --hex-string pattern :要检测字符串模式,16 进制格式
  7. 示例:
  8. iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string google" -j REJECT
5. time扩展
  1. 根据将报文到达的时间与指定的时间范围进行匹配
  2. --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:开始日期
  3. --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:停止日期
  4. --timestart hh:mm[:ss]:开始时间
  5. --timestop hh:mm[:ss]:停止时间
  6. [!] --monthdays day[,day...]:每个月的几号
  7. [!] --weekdays day[,day...]:星期几
  8. --kerneltz :内核时区,不建议使用,CentOS7 系统默认为UTC
  9. 注意:centos6 不支持kerneltz,--localtz 指定本地时区( 默认)
  10. 示例:
  11. iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
6. connlimit 扩展
  1. 根据每客户端IP 做并发连接数数量限制,即每个客户端最多可同时发起的连接数量,通常分别与默认的拒绝或允许策略配合使用,可防止CC(Challenge Collapsar 挑战黑洞) 攻击
  2. --connlimit-upto n :匹配,限定并发连接数的上限
  3. --connlimit-above n :匹配,限定并发连接数的下限
  4. 示例:
  5. iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7. limit扩展
  1. 基于收发报文的速率做匹配,使用令牌桶过滤器
  2. --limit rate[/second|/minute|/hour|/day]:数率限定
  3. --limit-burst number:突发数率限定
  4. 示例:
  5. iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
  6. iptables -I INPUT 2 -p icmp -j REJECT
8. state 扩展
  1. 状态检测扩展,根据“连接追踪机制”去检查连接的状态,较耗资源。
  2. 追踪本机上的请求和响应之间的关系,状态有如下几种:
  3. NEW :新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
  4. ESTABLISHED NEW 状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
  5. RELATED :新发起的但与已有连接相关联的连接,如:ftp 协议中的数据连接与命令连接之间的关系
  6. INVALID :无效的连接,如flag 标记不正确
  7. UNTRACKED :未进行追踪的连接,如raw
  8. [!] --statestate就是NEW等状态
  9. 示例:
  10. iptables -A INPUT -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
  11. iptables -A OUTPUT -s 172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

#######1>

  1. 以上连接追踪功能内核会在内存中开辟一段专用的空间用于存储连接的状态等,由于此段内存空间是有限的,因此就必须对连接追踪功能进行一些调整限制。
  2. 有关的内核参数由以下提供:
  3. 已经追踪到的并记录下来的连接信息库
  4. /proc/net/nf_conntrack
  5. 调整连接追踪功能所能够容纳的最大连接数量
  6. /proc/sys/net/nf_conntrack_max
  7. 不同的协议的连接追踪时长
  8. /proc/sys/net/netfilter/
  9. 注意:CentOS7 需要加载模块: modprobe nf_conntrack

#######2>

  1. iptables 的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max ,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
  2. 解决方法两个:
  3. (1) 加大nf_conntrack_max
  4. vi /etc/sysctl.conf
  5. net.nf_conntrack_max = 393216
  6. net.netfilter.nf_conntrack_max = 393216
  7. (2) 降低 nf_conntrack timeout 时间
  8. vi /etc/sysctl.conf
  9. net.netfilter.nf_conntrack_tcp_timeout_established = 300
  10. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
  11. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  12. iptables -t nat -L -n

#######3>

  1. 开放被动模式的ftp服务
  2. (1)装载ftp 连接追踪的专用模块:
  3. 跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
  4. vim /etc/sysconfig/iptables-config 配置文件
  5. IPTABLES_MODULES=" nf_conntrack_ftp "
  6. modproble nf_conntrack_ftp
  7. (2)放行请求报文:
  8. 命令连接:NEW, ESTABLISHED
  9. 数据连接:RELATED, ESTABLISHED
  10. iptables I INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
  11. iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
  12. (3)放行响应报文:
  13. iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

5)terget,处理动作

  1. -j targetname [per-target-options]:跳转目标
  2. 简单:
  3. ACCEPT :接受
  4. DROP :丢弃
  5. 扩展:
  6. REJECT :明确拒绝,默认
  7. RETURN :返回调用链
  8. REDIRECT :端口重定向
  9. LOG :记录日志,dmesg
  10. MARK :做防火墙标记
  11. DNAT :目标地址转换
  12. SNAT :源地址转换
  13. MASQUERADE :地址伪装
  14. ...
  15. 自定义链:
  16. LOG:非中断target, 本身不拒绝和允许, 放在拒绝和允许规则前并将日志记录在/var/log/messages 系统日志中
  17. --log-level level:级别有emerg, alert, crit, errorwarning, notice, info or debug
  18. --log-prefix prefix:日志前缀,用于区别不同的日志,最多29个字符。
  19. 示例:
  20. iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections:

iptabes的用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. 微信小程序之注册和入门

    一.注册 首先,在微信公众平台mp.weixin.qq.com上注册一个帐号. 小程序开放个人开发者申请注册,个人用户可访问微信公众平台,扫码验证个人身份后即可完成小程序帐号申请并进行代码开发. 这里 ...

  2. MSSQLSERVER并行度

    Microsoft SQL Server最大并行度(MAXDOP) 配置选项控制并行计划用于执行查询的处理器的数目.此选项确定用于执行工作并行查询计划运算符的计算和线程资源.根据是否 SQL Serv ...

  3. Micropython教程之TPYBoardv102 DIY蓝牙智能小车实例

    1.实验目的 1.学习在PC机系统中扩展简单I/O接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习蓝牙模块的接线方法及其工作原理. 4.学习L298N电机驱动板模块的接线方法. 5. ...

  4. Geohash-》通过经纬度计算两地距离的函数

    /**      * 根据起点坐标和终点坐标测距离      * @param  [array]   $from  [起点坐标(经纬度),例如:array(118.012951,36.810024)] ...

  5. 强化学习之Sarsa (时间差分学习)

    上篇文章讲到Q-learning, Sarsa与Q-learning的在决策上是完全相同的,不同之处在于学习的方式上 这次我们用openai gym的Taxi来做演示 Taxi是一个出租车的游戏,把顾 ...

  6. DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究

    一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...

  7. SpringMVC的映射器、适配器、解析器

    1.处理器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映 ...

  8. Python_day1

    一.HelloWorld >>>print("Hello World!") >>>Hello World! 二.变量    1.什么是变量 : ...

  9. CSS3对于盒中容纳不下的内容的显示——overflow属性

    overflow属性 1.如果将overflow属性值设定为hidden,则超出容纳范围的文字将被隐藏起来. div{ overflow:hidden; } 2.如果将overflow属性值设定为sc ...

  10. JavaScript的ajax使用

    使用ajax首先定义个XMLHttpRequest变量,为了判断对IE6以及以下版本的兼容性,需要var xmlHR;        if (window.XMLHttpRequest) {      ...