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. 第14章4节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-装备ViewServer-port转发

    在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这种方法: 39 ...

  2. ios4--UIView的常见属性(尺寸和位置)

    // // ViewController.m // 08-UIView的常见属性(尺寸和位置) // // frame:相对于父控件左上角定位 // bounds:改变长宽,左上角是相对于自己 // ...

  3. ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系

    前面我们主要着重于codec.platform.machine驱动程序中如何使用和建立dapm所需要的widget,route,这些是音频驱动开发人员必须要了解的内容,经过前几章的介绍,我们应该知道如 ...

  4. bzoj 3993 星际战争

    题目大意: X军团和Y军团正在激烈地作战  在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai 当一个巨型机器人的装甲值减少到0或者以下时,这个巨型机 ...

  5. [算法基础]斐波那契(recursion+loop)两种方式执行时间对比

    一.斐波那契数列求第n项两种方式 1.递归(自上而下)def recur_fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...

  6. yistack

  7. PCB SVN 服务端VisualSVN Server与TortoiseSVN

    PCB 工程系统SVN源代码招病毒破坏以后,一周时间都没有源代码同步更新了,今天终于将SVN源代码数据恢复并重建SVN服务器,这里将SVN搭建安装过程整理如下 一.服务端SVN安装 1.下载地址:ht ...

  8. Linux基础命令第二波

    第1章 Linux启动过程 开机自检(BIOS)##硬件检查 MBR引导 GRUB菜单(选择不同的内核) 加载内核 运行init进程(Linux系统里面第一个进程) 读取/etc/inittab配置文 ...

  9. VB.NET学习体会

    注:本文写于2018年01月28日,首先发表于CSDN博客"aopstudio的博客"上 下学期要学习VB.NET程序设计课程,这几天在家开始自习.在自习的过程中发现VB.NET和 ...

  10. python配置文件编写

    from configparser import ConfigParser # 配置类,专门来读取配置文件# 配置文件结尾:.ini .conf .config .properties .xml# 配 ...