Linux之iptables(三、命令--->单主机)
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
- 隐式扩展:在使用-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"
任何不允许的访问,应该在请求到达时给予拒绝
规则在链接上的次序即为其检查时的生效次序
基于上述,规则优化
- 安全放行所有入站和出站的状态为ESTABLISHED状态连接
- 谨慎放行入站的新请求
- 有特殊目的限制访问功能,要在放行规则之前加以拒绝
- 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
- 不同类的规则(访问不同应用),匹配范围大的放在前面
- 应该将那些可由一条规则能够描述的多个规则合并为一条
- 设置默认策略,建议白名单(只放行特定连接)
- 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(三、命令--->单主机)的更多相关文章
- Linux 中的grep命令单引号,不加任何参数以及双引号的作用
单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么.单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换. 双引号: 把双引号内的 ...
- linux之iptables常用命令
iptables详解 iptables -L 该命令会以列表的形式显示出当前使用的 iptables 规则,每一条规则前面的编号可以用来做为其它操作--例如删除操作--的参数,很有用 iptables ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- linux中iptables配置文件及命令详解详解
iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/iptables. 1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下 ...
- linux中iptables配置文件及命令详解
转自:https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconf ...
- linux下IPTABLES配置详解 (防火墙命令)
linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...
- Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)
Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...
- docker的网络-单主机(三种原生网络)none、host、bridge
docker的网络分为:单主机.跨主机 这篇先说:单主机 我们先说一下docker的原生网络模式 网络模式 简介 优点 使用场景 none 空网络,没有网络 此网络与外界隔离,安全度非常高 适合公司内 ...
- Docker的单主机容器网络
作者:杨冬 欢迎转载,也请保留这段声明.谢谢! 出处: https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/ 本篇文章主要探索Do ...
随机推荐
- 布局技巧4:使用ViewStub
多亏了<include />标签,在Android里,很容易就能做到共享和重用UI组件.在Android开发中,很容易就能创建出复杂的UI结构,结果呢,用了很多的View,且其中的一些很少 ...
- Kconfig详解-文件的基本要素 ***
当执行make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会 ...
- bzoj3545
线段树合并+离线+启发式合并 半年前这道题t成狗... 离线的做法比较好想,按照边的权值排序,询问的权值排序,然后枚举询问不断加边,加到上限后查找第k大值,这里平衡树,权值线段树都可以实现. 那么我们 ...
- java将JSON字符串转换为实体类对象,基于net.sf.json实现
@SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonString, C ...
- SQL Server 数据字典生成脚本
SELECT sysobjects.name AS 表名称 ,--sysproperties.[value] AS 表说明 ,syscolumns.name AS 字段名称 ,--properties ...
- Linux必知必会的目录结构
1.目录结构 /bin 二进制文件 命令 /sbin 超级命令 只有root用户可以使用 /boot 系统的引导文件 系统内核 /dev 设备文件 光盘 硬盘分区 /etc 系统配置文件 /home ...
- sql简单学习---备忘
2:Hibernate public boolean deleteFlowerById(int id) { Session session = sessionFactory.openSession() ...
- Elasticsearch创建文档,利用Kibana进行创建文档
首先先来了解一下什么是文档,es里边的文档相当于mysql数据库里边的一张表,如果你用过mongodb的话,那么肯定对es这种数据格式一定很了解了.接下来我们来看一下如何创建一个文档. PUT /sd ...
- RocketMQ(1)--helloworld
双Master方式: 服务器环境 序号 IP 角色 模式 1 192.168.32.135 nameServer1,brokerServer1 Master1 2 192.168.32.136 na ...
- 数塔问题mod 100(orz)
看一下题目 和普通的数字三角形看似没啥区别(区别很大) 然后去想:DP方程 DP[i][j]=Max(DP[i-][j],DP[i-][j-])+a[i][j] ans=Max(DP[n][..n]) ...