IT_luo关注0人评论219人阅读2018-10-24 21:33:40
防火墙的几个知识点
一、防火墙的概念
二、iptables的基本认识
三、iptables的组成
四、iptables的基本语法
五、iptables之forward的概念
六、iptables之地址转换法则
七、SNAT源地址转换的具体实现
八、DNAT目标地址转换的具体实现
九、firewalld介绍
十、firewalld配置命令
十一、rich规则
防火墙概念
防火墙通常分为硬件防火墙和软件防火墙。但实际上,无论是硬件和软件防火墙,它们都须要使用硬件来做为联机介质,
也须要使用软件来设定安全政策,严格来讲,二者间的差异并不太大,所以只能从使用的硬件与操做系统来加以区分:硬件防火墙使用专用的硬件,
而软件式防火墙则使用通常的计算机硬件、硬件防火墙使用专有的操做系统,而软件式防火墙则使用通常的操做系统。
根据工做方式,防火墙仍是能够分为封包过滤式防火墙,应用层网关防火墙两种,其中广为采用的是封包过滤式防火墙,本次介绍的iptables防火墙就属于这一种。
iptables是Linux系统内嵌的一个防火墙软件,它集成在系统内核中,所以执行效率很是高。iptables经过设置一些封包过滤规则,来定义什么数据能够接受,什么数据须要拒绝,所以,用户经过iptables能够对进出计算机的数据包进行IP过滤以达到保护主机的目的。html
一、安全技术:
检测与管理系统(Intrusion Detection Systems):
特色是不阻断任何网络访问,量化、定位来自内外网络的威胁状况,主要以提供报告和过后监督为主,提供有针对性的指导措施和安全决策依据。通常采用旁路部署方式
防护系统(Intrusion Prevention System):
以透明模式工做,分析数据包的内容如:溢出、拒绝服务、、蠕虫、系统漏洞等进行准确的分析判断,在断定为行为后当即予以阻断,主动而有效的保护网络的安全,通常采用在线部署方式
防火墙(FireWall):
隔离功能,工做在网络或主机边缘,对进出网络或主机的数据包基于必定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认状况下关闭全部的经过型访问,只开放容许访问的策略
通常而然,对一台主机来说网络通讯就是经过网络通讯接口设备,通常叫作网卡,经过报文交换来实现
而主机所谓的防火墙,无非就是对此类的报文通讯的来回交换给它予以隔离,称为"防火墙"
防火墙功能自己是如何具体实施规则的,是须要用户根据本身的实际需求进行设置的
防火墙防火是靠报文过滤实现的(Packet filter)
定义一些特殊的访问行为特征前端
二、防火墙的分类:
防火墙的分类
主机防火墙:
服务范围为当前主机
网络防火墙:
服务范围为防火墙一侧的局域网
硬件防火墙:
在专用硬件级别实现部分功能的防火墙;另外一个部分功能基于软件实现,Checkpoint,NetScreen
软件防火墙:
运行于通用硬件平台之上的防火墙的应用软件
网络层防火墙:
OSI模型下四层
应用层防火墙/代理服务器:
代理网关,OSI模型七层node
要想达到识别越透彻目的,所消耗的时间成本就越大,这是必然的 从平均的角度来说,所以应用层防火墙和网络层防火墙的主要区别在于: 网络层防火墙性能好、可是识别的精确度就没有应用层那样高,可是应用层的识别很显然,它们对于时间的消耗或者对用户的访问带来的延迟略大、越长
三、网络型防火墙:
包过滤防火墙
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),经过检查数据流中每一个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来肯定是否容许该数据包经过
优势:
对用户来讲透明,处理速度快且易于维护
缺点:
没法检查应用层数据,如病毒等
iptables防火墙linux
四、应用层防火墙:
应用层防火墙/代理服务型防火墙(Proxy Service)
将全部跨越防火墙的网络通讯链路分为两段
内外网用户的访问都是经过代理服务器上的“连接”来实现
优势:在应用层对数据进行检查,比较安全
缺点:增长防火墙的负载
现实生产环境中所使用的防火墙通常都是两者结合体
即先检查网络数据,经过以后再送到应用层去检查
端口表明进程地址
iptables防火墙web
iptables的基本认识
一、Netfilter组件:
内核空间,集成在linux内核中
扩展各类网络服务的结构化底层框架
内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户能够经过一个命令工具(iptables)向其写入规则
由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
二、三种报文流向:
流入本机:
PREROUTING --> INPUT-->用户空间进程
流出本机:
用户空间进程-->OUTPUT--> POSTROUTING
转发:
PREROUTING --> FORWARD --> POSTROUTING
三、防火墙工具
四、iptables
命令行工具,工做在用户空间
用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
五、firewalld
CentOS7 引入了新的前端管理工具
管理工具:
firewall-cmd命令行
firewall-config图形
iptables的组成
iptables由五个表和五个链以及一些规则组成
五个表table:
filter、nat、mangle、raw、security
filter表:
过滤规则表,根据预约义的规则过滤符合条件的数据包
nat表:
network address translation 地址转换规则表
mangle:
修改数据标记位规则表
raw:
关闭NAT表上启用的链接跟踪机制,加快封包穿越防火墙速度
security:
用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter
conntrack
五个内置链chain:
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING算法
表和链的对应关系: 不一样的功能,实现位置是不同的 filter: INPUT,FORWARD, OUTPUT nat: PREROUTING, INPUT, OUTPUT, POSTROUTING mangle: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING raw: PREROUTING, OUTPUT 配置文件保存路径 /etc/sysconfig/iptables 从指定目录中读取或加载配置文件 iptables-restore < /etc/sysconfig/iptables
Netfilter表和链对应关系
iptables防火墙数据库
数据包过滤匹配流程
iptables防火墙centos
IPTABLES和路由
路由功能发生的时间点
报文进入本机后
判断目标主机是否为本机
是:INPUT
否:FORWARD
报文离开本机以前
判断由哪一个接口送往下一跳
iptables防火墙安全
内核中数据包的传输过程
内核中数据包的传输过程
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否须要转送出去
若是数据包就是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序能够发送数据包,这些数据包通过OUTPUT链,而后到达POSTROUTING链输出
若是数据包是要转发出去的,且内核容许转发,数据包就会向右移动,通过FORWARD链,而后到达POSTROUTING链输出服务器
进入,流出 进入本机:PREROUTING 目标为本机IP:INPUT 目标非为本机IP:FORWARD 流出本机:POSTROUTING 转发:FORWARD 本机发出:OUTPUT 一、进入本机:从PREROUTING进来,而后到达INPUT 二、转发:从PREROUTING进来,而后送给FORWARD,随后再路由就从选定哪块网卡发出之后,再由网卡离开的时候经由POSTROUTING 三、本机发出:进入OUTPUT,随后进入POSTROUTING离开本机 链接追踪机制; 断定一个出去的报文是否是跟某个进来的请求有关联,若是对进来的某个请求进行响应,就是安全的,若是是本机莫名其妙的链接别人就由于是不安全的,所以咱们能够把出行的时候策略设置为拒绝,并且咱们也不明确放行任何出去的报文,也就是说跟进来的请求有关联才给予放行,要用到链接机制 链接追踪,其实就是数据库,在本地保存一个会话数据库、每一次请求来了在数据库里面查下这个请求以前是否有请求记录 链接追踪是把双刃剑,能帮咱们识别链接,但也可以消耗不少系统资源 面向互联网服务的高并发支撑的服务器必定不要启用链接追踪,除非内存资源足够大,mangle足够宽,不然这个链接是致命的
iptables规则
规则rule:
根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动做做出处理
匹配条件:
默认为与条件,同时知足
基本匹配:
IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:
经过复杂高级功能匹配
隐式扩展:
TCP, UDP, ICMP
显示扩展:
必须明确指定扩展模块进行的扩展
处理动做:
称为target,跳转目标
内建处理动做:
ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
自定义处理动做:
自定义chain,利用分类管理复杂情形
规则要添加在链上,才生效;
添加在自定义上不会自动生效
链chain:
内置链:
每一个内置链对应于一个钩子函数
自定义链:
用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
iptables添加要点
iptables规则添加时考量点
要实现哪一种功能:
判断添加在哪张表上
报文流经的路径:
判断添加在哪一个链上
报文的流向:
判断源和目的
匹配规则:
业务须要
实验环境准备:
Centos7:
systemctl stop firewalld.service
systemctl disable firewalld.service
Centos6:
service iptables stop
chkconfig iptables off
扩展匹配又分为两类:
一、隐式扩展
端口、TCP属于隐式扩展
二、显示扩展:
咱们本身必须明确手动指定如何扩展
iptables命令
一、man 8 iptables
iptables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
二、规则格式:
iptables[-t table] SUBCOMMAND chain [-m matchname[per-match-options]] -j targetname[per-target-options]
三、-t table:
raw, mangle, nat, [filter]默认
四、SUBCOMMAND:
一、链管理:
-N:new, 自定义一条新的规则链
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
-E:重命名自定义链;引用计数不为0的自定义链不可以被重命名,也不能被删除
二、查看:
-L:
list, 列出指定鏈上的全部规则,本选项须置后
-n:
numberic,以数字格式显示地址和端口号
[root@node7 ~]#iptables -vnL
-v:
verbose,详细信息
-vv更详细
-x:
exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:
显示规则的序号
经常使用组合:
-vnL
-vvnxL--line-numbers
[root@node7 ~]#iptables -vnL --line-number -S: selected,以iptables-save 命令格式显示链上规则 三、规则管理: -A: append,追加 -I: insert, 插入,要指明插入至的规则编号,默认为第一条 -D: delete,删除 (1) 指明规则序号 (2) 指明规则自己 -R: replace,替换指定链上的指定规则编号 -F: flush,清空指定的规则链 -Z: zero,置零 iptables的每条规则都有两个计数器 (1) 匹配到的报文的个数 (2) 匹配到的全部报文的大小之和
五、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, mhor“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,--dportport[:port]:匹配报文目标端口,可为范围
[!] --tcp-flags mask comp
mask 需检查的标志位列表,用,分隔
例如SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
udp
[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
[!] --destination-port,--dportport[:port]:匹配报文的目标端口或端口范围
icmp [!] --icmp-type {type[/code]|typename} type/code 0/0 echo-replyicmp应答 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
12.一、multiport扩展
以离散方式定义多端口匹配,最多指定15个端口
[!] --source-ports,--sports port[,port|,port:port]...
指定多个源端口
[!] --destination-ports,--dportsport[,port|,port:port]...
指定多个目标端口
[!] --ports port[,port|,port:port]...多个源或目标端口
示例:
iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.56 -p tcp -m multiport --dports 20:22,80,445 -j ACCEPT
12.二、iprange扩展: 指明连续的(但通常不是整个网络)ip地址范围 [!] --src-range from[-to]源IP地址范围 [!] --dst-range from[-to]目标IP地址范围 示例: iptables -A INPUT -d 192.168.137.56 -p tcp --dport 80 -m iprange --src-range 192.168.137.100-192.168.137.200 -j DROP 12.三、mac扩展 指明源MAC地址 适用于:PREROUTING, FORWARD,INPUT chains [!] --mac-source XX:XX:XX:XX:XX:XX 示例: iptables-A INPUT -s 192.168.137.56 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT iptables-A INPUT -s 192.168.137.56 -j REJECT 12.四、string扩展 对报文中的应用层数据作字符串模式匹配检测 --algo{bm|kmp}字符串匹配检测算法 bm:Boyer-Moore kmp:Knuth-Pratt-Morris --from offset 开始偏移 --to offset 结束偏移 [!] --string pattern要检测的字符串模式 [!] --hex-string pattern要检测字符串模式,16进制格式 示例: iptables -A OUTPUT -s 192.168.137.56 -d 0/0 -p tcp --sport 80 -m string --algobm --string “google" -j REJECT 12.五、time扩展 根据将报文到达的时间与指定的时间范围进行匹配 --datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 --datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestarthh:mm[:ss] 时间 --timestophh:mm[:ss] [!] --monthdaysday[,day...] 每月的几号 [!] --weekdays day[,day...] 星期几,1 –7 分别表示星期一到星期日 --kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC 注意:centos6 不支持kerneltz,--localtz指定本地时区(默认) 示例: iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.56 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP 12.六、connlimit扩展 根据每客户端IP作并发链接数数量匹配 可防止CC(Challenge Collapsar挑战黑洞)***--connlimit-upto#:链接的数量小于等于#时匹配 --connlimit-above #:链接的数量大于#时匹配 一般分别与默认的拒绝或容许策略配合使用 示例: iptables -A INPUT -d 192.168.137.56 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT 12.七、limit扩展 基于收发报文的速率作匹配 令牌桶过滤器 --limit #[/second|/minute|/hour|/day] --limit-burst number 示例: iptables -I INPUT -d 192.168.137.56 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT iptables -I INPUT 2 -p icmp -j REJECT 12.八、state扩展 根据”链接追踪机制“去检查链接的状态,较耗资源 conntrack机制: 追踪本机上的请求和响应之间的关系 状态有以下几种: NEW:新发出请求;链接追踪信息库中不存在此链接的相关信息条目,所以,将其识别为第一次发出的请求 ESTABLISHED:NEW状态以后,链接追踪信息库中为其创建的条目失效以前期间内所进行的通讯状态 RELATED:新发起的但与已有链接相关联的链接,如:ftp协议中的数据链接与命令链接之间的关系 INVALID:无效的链接,如flag标记不正确 UNTRACKED:未进行追踪的链接,如raw表中关闭追踪 [!] --state state 示例: iptables -A INPUT -d 192.168.137.56 -p tcp-m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.137.56 -p tcp-m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT 已经追踪到的并记录下来的链接信息库 /proc/net/nf_conntrack 调整链接追踪功能所可以容纳的最大链接数量 /proc/sys/net/nf_conntrack_max 不一样的协议的链接追踪时长 /proc/sys/net/netfilter/ 注意: CentOS7 须要加载模块:modprobenf_conntrack iptables的连接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各类状态的超时连接会从表中删除;当模板满载时,后续链接可能会超时 解决方法两个: (1) 加大nf_conntrack_max值 vi /etc/sysctl.conf net.nf_conntrack_max= 393216 net.netfilter.nf_conntrack_max= 393216 (2) 下降nf_conntracktimeout时间 vi /etc/sysctl.conf net.netfilter.nf_conntrack_tcp_timeout_established= 300 net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120 iptables-t nat-L -n iptables总体命令大致上归并成 iptables [-t table][subcommand][chain][rulenum][rule-specifiacation] 子命令当中简单归类: subcommand 规则管理: 增长:-A -I 修改:-R 查看:-L 删除:-D 链管理: 自定义:-N 删:-X 查:-L 清空:-F 置零:-Z 重命名: -E 设定链的默认策略:-P 对于不一样表来说,可用链不一样,究竟把规则放在哪一个表的哪一个链上,则取决咱们对报文请求如何响应发送方向的判别来决定,而后rulenum不一样的选项支持不同 规则编写时,定义rule-specifiacation时候是如何定义规则的 rule specifiacation 常见的两类: 基本匹配表达式: 匹配报文源地址:-s 匹配报文目标地址:-d 匹配报文四层协议类型:-p 匹配报文流入和流出的接口: -i, -o 扩展匹配表达式: 隐式扩展 显示扩展 target
tcp协议的扩展选项
示例:
--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_flagsALL NONE
[!] --syn:
用于匹配第一次握手
至关于:--tcp-flags SYN,ACK,FIN,RST SYN
iptables简单示例
如下实验的默认ACCEPT都被修改为DROP下进行的
白名单设置:
先把ssh远程链接容许链接的IP添加进去
[root@node7 ~]#iptables -A INPUT -s 192.168.137.0/24 -d 192.168.137.57 -p tcp --dport 22 -j ACCEPT
[root@node7 ~]#iptables -A OUTPUT -d 192.168.137.0/24 -p tcp --sport 22 -j ACCEPT
而后把默认容许改为拒绝
[root@node7 ~]#iptables -P OUTPUT DROP
删除规则用 -D 删除INPUT和OUTPUT中的第二条规则, [root@node7 ~]#iptables -D INPUT 2 [root@node7 ~]#iptables -D OUTPUT 2 只开放特定web80端口容许访问 [root@node7 ~]#iptables -A INPUT -d 192.168.137.57 -p tcp --dport 80 -j ACCEPT [root@node7 ~]#iptables -A OUTPUT -s 192.168.137.57 -p tcp --sport 80 -j ACCEPT 而后经过网页测试或者Linux客户端用curl来访问 [root@node6 ~]#curl http://192.168.137.57 welcome dklwj.com
修改规则 -R
修改只从指定接口出去
[root@node7 ~]#iptables -R INPUT 2 -p tcp --dport 80 -i ens33 -j ACCEPT
[root@node7 ~]#iptables -R OUTPUT 2 -p tcp --sport 80 -o ens33 -j ACCEPT
只容许本机ping别的主机,不容许别的主机ping本机
[root@node7 ~]#iptables -A OUTPUT -s 192.168.137.57 -o ens33 -p icmp --icmp-type 8 -j ACCEPT
[root@node7 ~]#iptables -A INPUT -d 192.168.137.57 -i ens33 -p icmp --icmp-type 0 -j ACCEPT
开放多个零散端口
[root@node7 ~]#iptables -I INPUT -d 192.168.137.57 -i ens33 -p tcp -m multiport --dports 21:22,80,139,445 -j ACCEPT
[root@node7 ~]#iptables -I OUTPUT -s 192.168.137.57 -o ens33 -p tcp -m multiport --sports 21,22,80,139,445 -j ACCEPT
只容许网段中的其中哪些IP段
[root@node7 ~]#iptables -I INPUT 2 -d 192.168.137.57 -i ens33 -p tcp --dport 23 -m iprange --src-range 192.168.137.50-192.168.137.60 -j ACCEPT
[root@node7 ~]#iptables -I OUTPUT 2 -s 192.168.137.57 -o ens33 -p tcp --sport 23 -m iprange --dst-range 192.168.137.50-192.168.137.60 -j ACCEPT
[root@node7 ~]#iptables -vnL
过滤网页中的某敏感字符
[root@node7 ~]#echo this is 1024 > /var/www/html/test.html
[root@node7 ~]#iptables -I OUTPUT -m string --string "1024" --algo kmp -j DROP
[root@node6 ~curl http://192.168.137.57 welcome dklwj.com [root@node6 ~]#curl http://192.168.137.57/test.html
基于时间控制访问:
[root@node7 ~iptables -I INPUT -d 192.168.137.57 -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP
不过这里的时区是为UTC时区,还得须要用其余模块来控制
[root@node7 ~]#iptables -R INPUT 1 -d 192.168.137.57 -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --kerneltz --weekdays Mon,Tue,Wed,The,Fri -j DROP
[root@node7 ~]#
设置ssh链接的并发数为2
[root@node7 ~]#iptables -I INPUT -d 192.168.137.57 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
链接追踪示例:
先把默认规则改为drop [root@node6 ~]#iptables -A INPUT -j DROP [root@node6 ~]#iptables -A OUTPUT -j DROP [root@node6 ~]#iptables -A INPUT -d 192.168.137.56 -p tcp -m multiport --dports 22,80,443,139,445 -m state --stete NEW,ESTABLISHED -j ACCEPT [root@node6 ~]#iptables -A OUTPUT -s 192.168.137.56 -p tcp -m multiport --sports 22,80,443,139,445 -j ACCEPT
修改除本地接口lo除外其它都拒绝
[root@node6 ~]#iptables -R INPUT 3 ! -i lo -j DROP
[root@node6 ~]#iptables -R OUTPUT 2 ! -o lo -j DROP
放行ftp服务
[root@node6 ~]#iptables -I INPUT 1 -d 192.168.137.56 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -I INPUT 2 -d 192.168.137.56 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
RELATED是个单独的模块,须要手动加载到内核中去 [root@node6 ~]#lsmod | grep conntrack nf_conntrack_ipv4 15053 5 nf_defrag_ipv4 12729 1 nf_conntrack_ipv4 xt_conntrack 12760 5 nf_conntrack 133053 2 xt_conntrack,nf_conntrack_ipv4 libcrc32c 12644 2 xfs,nf_conntrack [root@node6 ~]#modprobe nf_conntrack_ftp [root@node6 ~lsmod | grep conntracktp nf_conntrack_ftp 18638 0 nf_conntrack_ipv4 15053 5 nf_defrag_ipv4 12729 1 nf_conntrack_ipv4 xt_conntrack 12760 5 nf_conntrack 133053 3 xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4 libcrc32c 12644 2 xfs,nf_conntrack
客户端测试:
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> ls
drwxr-xr-x 2 0 0 19 Oct 22 12:26 pub
drwxr-xr-x 2 14 50 6 Oct 22 13:11 upload
lftp 192.168.137.56:/>
优化规则
[root@node6 ~]#iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@node6 ~]#iptables -R INPUT 2 -d 192.168.137.56 -p tcp -m multiport --dports 21:22,80,443,139,445 -m state --state N -j ACCEPT
[root@node6 ~]#iptables -D INPUT 3
[root@node6 ~]#iptables -D INPUT 3
放行本身出去请求别的服务器的80和443
[root@node6 ~iptables -R OUTPUT 2 -s 192.168.137.56 -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
保存和恢复规则:
先保存
[root@node6 ~]#iptables-save > /etc/sysconfig/iptables
而后清空规则
[root@node6 ~]#iptables -F
[root@node6 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 67 packets, 3568 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 53 packets, 3248 bytes)
pkts bytes target prot opt in out source destination
恢复以前保存的规则
[root@node6 ~]#iptables-restore < /etc/sysconfig/iptables
[root@node6 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
868 26292 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.137.56 multiport dports 21:22,80,443,139,445 state NEW
0 0 DROP all -- !lo * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 852 27188 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED 0 0 ACCEPT tcp -- * * 192.168.137.56 0.0.0.0/0 multiport dports 80,443 state NEW 0 0 DROP all -- * !lo 0.0.0.0/0 0.0.0.0/0 [root@node6 ~]#