iptables命令规则格式:

iptables [-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname [per-target-options]

    四表    增删改查   五联   匹配条件(隐式/显式8个)   jump处理工作(ACCEPT/REJECT等)  

-t table:

  • raw, mangle, nat, [filter]默认

SUBCOMMAND:

  • 链管理:面向内网白名单,面向互联网黑名单
  • -N:new, 自定义一条新的规则链
  • -X:delete,删除自定义的空的规则链
  • -P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受;DROP:丢弃
  • -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
  • 查看:
  • -L:list, 列出指定鏈上的所有规则,本选项须置后
  • -n:numberic,以数字格式显示地址和端口号
  • -v:verbose,详细信息
  • -vv 更详细,竖向显示(像mysql中的\G)
  • -x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
  • --line-numbers:显示规则的序号
  • 常用组合:
  • -vnL
  • -vvnxL --line-numbers
  • -S selected,以iptables-save 命令格式显示链上规则;可利用while read做循环也可写入执行脚本
  1. [root@centos7a ~]#iptables -nvL -t filter
  2. Chain INPUT (policy ACCEPT packets, bytes)
  3. pkts bytes target prot opt in out source destination
  4. ACCEPT all -- * * 192.168.141.102 0.0.0.0/
  5. ACCEPT all -- * * 192.168.141.0 0.0.0.0/
  6.  
  7. Chain FORWARD (policy ACCEPT packets, bytes)
  8. pkts bytes target prot opt in out source destination
  9.  
  10. Chain OUTPUT (policy ACCEPT packets, bytes)
  11. pkts bytes target prot opt in out source destination

规则管理:

  • -A:append,追加
  • -I:insert, 插入,要指明插入至的规则编号,默认为第一条
  • -D:delete,删除;(1) 指明规则序号;(2) 指明规则本身
  • -R:replace,替换指定链上的指定规则编号
  • -F:flush,清空指定的规则链
  • -Z:zero,置零
  • iptables的每条规则都有两个计数器(policy ACCEPT 0 packets, 0 bytes)
  • (1) 匹配到的报文的个数pkts
  • (2) 匹配到的所有报文的大小之和bytes

chain:

PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

  • 匹配条件
  • 基本:通用的,PARAMETERS;扩展:需加载模块,MATCH EXTENTIONS
  • 基本匹配条件:无需加载模块,由iptables/netfilter自行提供
  • [!] -s, --source address[/mask][,...]:源IP地址或范围
  • [!] -d, --destination address[/mask][,...]:目标IP地址或范围
  • [!] -p, --protocol protocol:指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“参看:/etc/protocols
  • [!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
  • [!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
  • 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效,查看帮助 man iptables-extensions
    1. 隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
  • tcp协议的扩展选项
  • [!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围
  • [!] --destination-port,--dport port[:port]:匹配报文目标端口,可为范围
  • [!] --tcp-flags mask comp
  • mask 需检查的标志位列表,用,分隔,例如 SYN,ACK,FIN,RST
  • comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
  • 示例:
  • --tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
  • --tcp-flags SYN,ACK,FIN,RST SYN,ACK
  • --tcp-flags ALL ALL
  • --tcp_flags ALL NONE
  • [!] --syn:用于匹配第一次握手,相当于:--tcp-flags SYN,ACK,FIN,RST SYN
  • udp协议的扩展选项
  • [!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
  • [!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围
  • icmp协议的扩展选项(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
  • [!] --icmp-type {type[/code]|typename}
  • type/code
  • 0/0 echo-reply icmp应答
  • 8/0 echo-request icmp请求
  • 显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块[-m matchname [per-match-options]]
  • 处理动作:-j targetname [per-target-options]
  • 简单:ACCEPT,DROP
  • 扩展:REJECT:--reject-with:icmp-port-unreachable默认
  • RETURN:返回调用链
  • REDIRECT:端口重定向
  • LOG:记录日志,dmesg
  • MARK:做防火墙标记
  • DNAT:目标地址转换
  • SNAT:源地址转换
  • MASQUERADE:地址伪装
  • ...
  • 自定义链:
  • 显式扩展:必须显式地指明使用的扩展模块进行的扩展
  • 使用帮助:CentOS 6: man iptables;CentOS 7: man iptables-extensions
  • 1、multiport扩展,以离散方式定义多端口匹配,最多指定15个端口,
  • [!] --source-ports,--sports port[,port|,port:port]...指定多个源端口
  • [!] --destination-ports,--dports port[,port|,port:port]...指定多个目标端口
  • [!] --ports port[,port|,port:port]...多个源或目标端口
    1. iptables -A INPUT -s 172.16.0.0/ -d 172.16.100.10 -p tcp -m multiport --dports :, -j ACCEPT
  • 2、iprange扩展,指明连续的(但一般不是整个网络)ip地址范围
  • [!] --src-range from[-to] 源IP地址范围
  • [!] --dst-range from[-to] 目标IP地址范围
  1. [root@centos7a ~]#iptables -A INPUT -d 172.16.1.100 -p tcp --dport -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
  2. [root@centos7a ~]#ipshow
  3. Chain INPUT (policy ACCEPT packets, bytes)
  4. pkts bytes target prot opt in out source destination
  5.   DROP tcp -- * * 0.0.0.0/ 172.16.1.100 tcp dpt: source IP range 172.16.1.5-172.16.1.10
  • 3、mac扩展指明源MAC地址,适用于:PREROUTING, FORWARD,INPUT chains
  • [!] --mac-source XX:XX:XX:XX:XX:XX

[root@centos7a ~]#iptables -A INPUT -s 172.16.0.100 -m mac --mac-source ::::: -j ACCEPT [root@centos7a ~]#ipshow Chain INPUT (policy ACCEPT packets, bytes) pkts bytes target prot opt in out source destination ACCEPT all -- * * 172.16.0.100 0.0.0.0/ MAC :::::

  • 4、string扩展,对报文中的应用层数据做字符串模式匹配检测
  • --algo {bm|kmp} 字符串匹配检测算法。bm:Boyer-Moore;kmp:Knuth-Pratt-Morris
  • --from offset 开始偏移
  • --to offset 结束偏移
  • [!] --string pattern 要检测的字符串模式
  • [!] --hex-string pattern要检测字符串模式,16进制格式
  1. [root@centos7a ~]#iptables -A OUTPUT -s 172.16.100.10 -d / -p tcp --sport -m string --algo bm --string "google" -j REJECT
  2. [root@centos7a ~]#ipshow
  3. Chain INPUT (policy ACCEPT packets, bytes)
  4. pkts bytes target prot opt in out source destination
  5.  
  6. Chain FORWARD (policy ACCEPT packets, bytes)
  7. pkts bytes target prot opt in out source destination
  8.  
  9. Chain OUTPUT (policy ACCEPT packets, bytes)
  10. pkts bytes target prot opt in out source destination
  11. REJECT tcp -- * * 172.16.100.10 0.0.0.0/ tcp spt: STRING match "google" ALGO name bm TO reject-with icmp-port-unreachable
  • 5、time扩展。根据将报文到达的时间与指定的时间范围进行匹配
  • --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
  • --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
  • --timestart hh:mm[:ss] 时间
  • --timestop hh:mm[:ss]
  • [!] --monthdays day[,day...] 每个月的几号
  • [!] --weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日
  • --kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC。注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
  1. [root@centos7a ~]#iptables -A INPUT -s 172.16.0.0/ -d 172.16.100.10 -p tcp --dport -m time --timestart : --timestop : --weekdays Sat,Sun --kerneltz -j DROP
  2. [root@centos7a ~]#ipshow
  3. Chain INPUT (policy ACCEPT packets, bytes)
  4. pkts bytes target prot opt in out source destination
  5. DROP tcp -- * * 172.16.0.0/ 172.16.100.10 tcp dpt: TIME from :: to :: on Sat,Sun
  • 6、connlimit扩展。根据每客户端IP做并发连接数数量匹配,可防止CC(Challenge Collapsar挑战黑洞)攻击

--connlimit-upto #:连接的数量小于等于#时匹配
--connlimit-above #:连接的数量大于#时匹配
通常分别与默认的拒绝或允许策略配合使用

  1. [root@centos7a ~]#iptables -A INPUT -d 172.16.100.10 -p tcp --dport -m connlimit --connlimit-above -j REJECT
  2. [root@centos7a ~]#ipshow
  3. Chain INPUT (policy ACCEPT packets, bytes)
  4. pkts bytes target prot opt in out source destination
  5. REJECT tcp -- * * 0.0.0.0/ 172.16.100.10 tcp dpt: #conn src/ > reject-with icmp-port-unreachable
  • 7、limit扩展。基于收发报文的速率做匹配,令牌桶过滤器
  • --limit #[/second|/minute|/hour|/day]
  • --limit-burst number
  1. [root@centos7a ~]#iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type -m limit --limit /minute --limit-burst -j ACCEPT
  2. [root@centos7a ~]#iptables -I INPUT -p icmp -j REJECT
  3. [root@centos7a ~]#ipshow
  4. Chain INPUT (policy ACCEPT packets, bytes)
  5. pkts bytes target prot opt in out source destination
  6. ACCEPT icmp -- * * 0.0.0.0/ 172.16.100.10 icmptype limit: avg /min burst
  7. REJECT icmp -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-port-unreachable
  • 8、state扩展。根据”连接追踪机制“去检查连接的状态,较耗资源
  • conntrack机制:追踪本机上的请求和响应之间的关系
  • 状态有如下几种:
  • NEW:新发出请求(第一次);连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
  • ESTABLISHED:NEW状态之后(第二次及以后),连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
  • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
  • INVALID:无效的连接,如flag标记不正确
  • UNTRACKED:未进行追踪的连接,如raw表中关闭追踪
  • [!] --state state
  1. [root@centos7a ~]#iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dport , -m state --state NEW,ESTABLISHED -j ACCEPT
  2. [root@centos7a ~]#iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sport , -m state --state ESTABLISHED -j ACCEPT
  3. [root@centos7a ~]#ipshow
  4. Chain INPUT (policy ACCEPT packets, bytes)
  5. pkts bytes target prot opt in out source destination
  6. ACCEPT tcp -- * * 0.0.0.0/ 172.16.1.10 multiport dports , state NEW,ESTABLISHED
  7.  
  8. Chain FORWARD (policy ACCEPT packets, bytes)
  9. pkts bytes target prot opt in out source destination
  10.  
  11. Chain OUTPUT (policy ACCEPT packets, bytes)
  12. pkts bytes target prot opt in out source destination
  13. ACCEPT tcp -- * * 172.16.1.10 0.0.0.0/ multiport sports , state ESTABLISHED
  • 已经追踪到的并记录下来的连接信息库
  • /proc/net/nf_conntrack
  • 调整连接追踪功能所能够容纳的最大连接数量
  • /proc/sys/net/nf_conntrack_max
  • 不同的协议的连接追踪时长
  • /proc/sys/net/netfilter/
  • 注意:CentOS7 需要加载模块: modprobe nf_conntrack
  • iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时,解决方法两个:

(1) 加大nf_conntrack_max 值

  1. vi /etc/sysctl.conf
  2. net.nf_conntrack_max =
  3. net.netfilter.nf_conntrack_max =

(2) 降低 nf_conntrack timeout时间

  1. vi /etc/sysctl.conf
  2. net.netfilter.nf_conntrack_tcp_timeout_established =
  3. net.netfilter.nf_conntrack_tcp_timeout_time_wait =
  4. net.netfilter.nf_conntrack_tcp_timeout_close_wait =
  5. net.netfilter.nf_conntrack_tcp_timeout_fin_wait =
  6. iptables -t nat -L -n
  • 开放被动模式的ftp服务
  • (1) 装载ftp连接追踪的专用模块:
  1. 跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
  2. vim /etc/sysconfig/iptables-config 配置文件
  3. IPTABLES_MODULES=“nf_conntrack_ftp"
  4. modproble nf_conntrack_ftp
  • (2) 放行请求报文:
  1. 命令连接:NEW, ESTABLISHED
  2. 数据连接:RELATED, ESTABLISHED
  3. iptables I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
  4. iptables -A INPUT -d LocalIP -p tcp --dport -m state --state NEW -j ACCEPT
  • (3) 放行响应报文:
  1. iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

开放被动模式的ftp服务示例

  1. yum install vsftpd
  2. systemctl start vsftpd
  3. modprobe nf_conntrack_ftp
  4. iptables -F
  5. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  6. iptables -A INPUT -p tcp --dport -m state --state NEW -j ACCEPT
  7. iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  8. iptables -P INPUT DROP
  9. iptables -P OUTPUT DROP
  10. iptables -vnL

Target:

  • ACCEPT, DROP, REJECT, RETURN
  • LOG, SNAT, DNAT, REDIRECT, MASQUERADE,..
  • LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前并将日志记录在/var/log/messages系统日志中
  • --log-level level 级别: debug,info,notice, warning, error, crit, alert,emerg
  • --log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
  1. [root@centos7a ~]#iptables -I INPUT -s 10.0.1.0/ -p tcp -m multiport --dports ,: -m state --state NEW -j LOG --log-prefix "new connections"
  2. [root@centos7a ~]#ipshow
  3. Chain INPUT (policy ACCEPT packets, bytes)
  4. pkts bytes target prot opt in out source destination
  5. LOG tcp -- * * 10.0.1.0/ 0.0.0.0/ multiport dports ,: state NEW LOG flags level prefix "new connections"

任何不允许的访问,应该在请求到达时给予拒绝
规则在链接上的次序即为其检查时的生效次序
基于上述,规则优化

  1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接
  2. 谨慎放行入站的新请求
  3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝
  4. 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
  5. 不同类的规则(访问不同应用),匹配范围大的放在前面
  6. 应该将那些可由一条规则能够描述的多个规则合并为一条
  7. 设置默认策略,建议白名单(只放行特定连接)
  • iptables -P,不建议
  • 建议在规则的最后定义规则做为默认策略
  • 规则有效期限:
  • 使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
  • 保存规则:
  • 保存规则至指定的文件
  • CentOS 6
  • service iptables save
  • 将规则覆盖保存至/etc/sysconfig/iptables文件中
  • CentOS 7
  • iptables-save > /PATH/TO/SOME_RULES_FILE
  • CentOS 6:
  • service iptables restart
  • 会自动从/etc/sysconfig/iptables 重新载入规则
  • CentOS 7 重新载入预存规则文件中规则:
  • iptables-restore < /PATH/FROM/SOME_RULES_FILE
  • -n, --noflush:不清除原有规则
  • -t, --test:仅分析生成规则集,但不提交

开机自动重载规则
开机自动重载规则文件中的规则:

  • (1) 用脚本保存各iptables命令;让此脚本开机后自动运行
  • /etc/rc.d/rc.local文件中添加脚本路径
  • /PATH/TO/SOME_SCRIPT_FILE
  • (2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则
  • /etc/rc.d/rc.local文件添加
  • iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
  • (3)自定义Unit File,进行iptables-restore

Linux之iptables(三、命令--->单主机)的更多相关文章

  1. Linux 中的grep命令单引号,不加任何参数以及双引号的作用

    单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么.单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换. 双引号: 把双引号内的 ...

  2. linux之iptables常用命令

    iptables详解 iptables -L 该命令会以列表的形式显示出当前使用的 iptables 规则,每一条规则前面的编号可以用来做为其它操作--例如删除操作--的参数,很有用 iptables ...

  3. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  4. linux中iptables配置文件及命令详解详解

    iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/iptables. 1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下 ...

  5. linux中iptables配置文件及命令详解

    转自:https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconf ...

  6. linux下IPTABLES配置详解 (防火墙命令)

    linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...

  7. Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)

    Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...

  8. docker的网络-单主机(三种原生网络)none、host、bridge

    docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...

  9. Docker的单主机容器网络

    作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Do ...

随机推荐

  1. bzoj 2044 三维导弹拦截 —— 最小路径覆盖

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 第一问暴力 n^2 即可: 注意这道题对位置没要求!所以先按第一维排序一下即可: 然后 ...

  2. bzoj2427 [HAOI2010]软件安装——缩点+树形DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2427 今天的考试题...好不容易一次写对了树形DP,却没发现有环的情况... 发现自己 ta ...

  3. createrepo

    [root@iio enp]# createrepo -g /enp/comps.xml .Spawning worker 0 with 1362 pkgsWorkers FinishedSaving ...

  4. 【转载】同步与异步--阻塞与非阻塞型I/O

    同步阻塞IO 在这个模型中,应用程序(application)为了执行这个read操作,会调用相应的一个system call,将系统控制权交给kernel,然后就进行等待(这其实就是被阻塞了).ke ...

  5. MVVMLight消息通知实现机制详解(一)

    最近对委托.事件的订阅使用的太多,订阅与被订阅之间的绑定约束非常...麻烦,所以翻了下MVVMLight源码找出这段可以拿出来用的部分,详情见下: 一.开发中遇到的问题: 场景1:ClassA中存在事 ...

  6. Java经典算法之冒泡排序(Bubble Sort)

    原理:比较相邻的两个值,将值大的元素交换至右端 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数 ...

  7. Jmeter jdbc连接

    1.下载对应的驱动包(mysql-connector-java-5.1.13-bin.jar 可能现在有跟新的版本了),并放到Jmeter目录中的lib文件 2.打开Jmeter,添加JDBC Con ...

  8. BZOJ 3473

    思路: CF原题 ZYF有题解 O(nlog^2n) //By SiriusRen #include <bits/stdc++.h> using namespace std; ; ]; i ...

  9. Mac OS安装octave出现的问题-'error:terminal type set to 'unknown'的解决'

    学习Machine learning需要使用Octave语言,毕竟Andrew Ng (恩达.吴)力荐.本机系统Mac OS X EI Capitan, 其实什么系统都无所谓了,安装原理都是一样的. ...

  10. 【转】Java 集合系列09之 Map架构

    概要 前面,我们已经系统的对List进行了学习.接下来,我们先学习Map,然后再学习Set:因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过 ...