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做循环也可写入执行脚本
[root@centos7a ~]#iptables -nvL -t filter
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT all -- * * 192.168.141.102 0.0.0.0/
ACCEPT all -- * * 192.168.141.0 0.0.0.0/ Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT packets, bytes)
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]...多个源或目标端口
  • 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地址范围
[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
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
  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进制格式
[root@centos7a ~]#iptables -A OUTPUT -s 172.16.100.10 -d / -p tcp --sport  -m string --algo bm --string "google" -j REJECT
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
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指定本地时区(默认)
[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
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
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 #:连接的数量大于#时匹配
通常分别与默认的拒绝或允许策略配合使用

[root@centos7a ~]#iptables -A INPUT -d 172.16.100.10 -p tcp --dport  -m connlimit --connlimit-above  -j REJECT
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
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
[root@centos7a ~]#iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type  -m limit --limit /minute --limit-burst  -j ACCEPT
[root@centos7a ~]#iptables -I INPUT -p icmp -j REJECT
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT icmp -- * * 0.0.0.0/ 172.16.100.10 icmptype limit: avg /min burst
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
[root@centos7a ~]#iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dport , -m state --state NEW,ESTABLISHED -j ACCEPT
[root@centos7a ~]#iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sport , -m state --state ESTABLISHED -j ACCEPT
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT tcp -- * * 0.0.0.0/ 172.16.1.10 multiport dports , state NEW,ESTABLISHED Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
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 值

vi /etc/sysctl.conf
net.nf_conntrack_max =
net.netfilter.nf_conntrack_max =

(2) 降低 nf_conntrack timeout时间

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

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

yum install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp
iptables -F
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
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个字符
[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"
[root@centos7a ~]#ipshow
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
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. WebView与JavaScript交互--Android

    转载请注明出处:  http://blog.csdn.net/forwardyzk/article/details/46819925 在工作中,有一个这种需求,须要用到WebView与javascri ...

  2. iOS_截屏并裁剪

    截图使用场景: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fil ...

  3. Bootloader - main system - Recovery的三角关系【转】

    本文转载自:http://blog.csdn.net/u012719256/article/details/52304273 一.MTD分区: BOOT:        boot.img,Linux ...

  4. git配置用户信息

    git配置用户信息 一.在本地配置用户信息 配置内容:user.name 和 user.email 配置目的:Git用来记录谁做了什么事 配置方法:windows下打开Git Bash进行操作  gi ...

  5. RHEL6.5 设置yum,IP地址,解压缩

    系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接 服务器相关设置如下: 操作系统:RHEL 6.5 64位 IP地址:192.168. ...

  6. 【HTML5】基于HTML5的高性能动画与游戏

    其实这篇文章类似版本早在12年就在网上各处出现了,也随着HTML5的兴起,HTML的新特性也是倍受开发者们追捧,自然相关HTML5的高性能动画与游戏的相关文章也是层出不穷的,笔者也是在12年接触的相关 ...

  7. Spinner的样式大致简介

    Spinner Spinner 是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择.Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter ...

  8. Flume NG基本架构与Flume NG核心概念

    导读 Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中. 由原来的Flume OG到现在的Flume NG, ...

  9. Android 基础知识图谱

    四大组件 Activity Service BroadcastReceiver ContentProvider Application 常用组件 Fragment RecyclerView WebVi ...

  10. PHP MySQL 连接数据库,进行增、删、改、查、操作

    <table width="100%" border="1" cellpadding="0" cellspacing="0& ...