iptables 规则策略设置

时间:2021-01-10 06:59:41

Iptables

一、防火墙基础知识

1、防火墙是什么

工作于主机或网络边缘,对于进出的定义的报文的规则做检查,进而对被规则匹配到的报文作为相应处理的

套件

2、防火墙的作用

防火墙的作用主要是防黑客,防恶意攻击,有点类似于acl机制。主要针对服务器或者保护局域网中的主机。

防火墙主要作用是不防病毒和木马的,但是有一定的防护作用。

3、防火墙的分类

主机防火墙:工作在主机上的软件防火

网络防火墙:工作在网络边缘保护局域网,在网络中检测 ip 首部 tcp首部 帧首部

应用层网关防火墙:让消息报文进入到防火墙检测应用层报文,过沥恶意,优点,比较安全,缺点效力较低

ids  入侵检测系统   监控系统、如果有攻击或者恶意的马上处理掉

ips  入侵防御系统   翁中捉鳖  根据防tcp/udp通信协议,可以让它进到防火墙中,但是他出不了防火墙,过

沥了它的响应报文

honeypot  蜜罐      诱捕  服务器伪装了它的真实端口,故意开放假的端口让来攻击的报文消息有去无回

4、Iptables  liunx 防火墙组件

   iptables  不是防火墙,是一套组件是工作在网络层的防火墙组件

5、防火墙报文工作原理图

iptables 规则策略设置

6、写规则时应该注意什么

流向:

与本机进程通信:

流入: -->PREROUTING-->INPUT
流出:  -->OUTPUT-->POSTROUTING
经由本机转发:
请求:-->PREROUTING-->FORWARD-->POSTROUTING
响应:-->PREROUTING-->FORWARD-->POSTROUIING

规则中如果限定原地址、目标地址、源端口、目标端口等与流向相关的设定

写规则时要注意:

服务端:先进后出

客户端:先出后进

客户端端口是随机的,因此大多数场景下无须限定

iptables --> 语法检查 --> netfilter(执行)

规则立即生效

7、表和链的概念

四表    raw   mangle   nat     filter

表是容器,表是由链组成的,表有优先级之分,优先级排列是  raw   mangle   nat     filter,

iptables在过沥报文是先由表到链匹配规则,一张表一张表的匹配,同一张表中的链的规则如果相似,或者

冲突,最后生效的是排在链上面靠前的那条规则。

五钩: 对报文检测的条件卡哨、报文来了、根据规则条件来判断报文允不允许通过。实际内置在linux内核中

的五个函数,也叫链,链上可以写规则。linux开机默认启动(kernel 2.2以上版本才有)

作用

Raw 目标是关闭nat表上启用的连接追踪功能

mangle 修改tcp/ip报文首部的某些信息 比如ttl

nat  地址转换,启用connection_track;

Filter  过滤,定义是否允许通过防火墙

PREROUTING:路由前

INPUT:到达本机内部的报文必经之路

FORWARD:由本机转发的报文必经之路

OUTPUT:由本机发出的报文的必经之路

POSTROUTING:路由后

8、表和链的关系图

filter:   INPUT,   FORWARD,   OUTPUTnat:   PREROUTING(SNAT),  POSTROUTING(DNAT),  OUTPUTmangle:    PREROUTING,    INPUT,   FORWARD,   OUTPUT,   POSTROUTINGraw:   PREROUTING,    OUTPUT

9、写规则的语法

iptables 规则策略设置

写规则:先确定功能(表),确定报文流向,确定要实现的目标,确定匹配条件

二、常见iptables规则的书写

方向Ssh服务白名单 安全先全部堵上,在发通行证     一般木马黑客可以堵截到,没发通行证给他反弹木马不能堵截,因为它已经在你的主机之中,要堵的话,只能在OUTPPUT链上堵截黑名单 不安全先全部放行,在拉黑部分写规则时的角度客户端时   要先出后进   比如  dns 解析服务端时   要先进后出   限制别人来访问自己

(一)、ssh的设置

全局是做白名单

本机ip地址是 192.168.1.146

要求只允许允许192.168.0.0的网段来连接ssh服务

Iptables  -A INPUT -s 192.168.0.0/24 -d 192.168.1.146 -p tcp -dport 22 -j ACCEPTIptables  -A OUTPUT -s 192.168.1.146 -d 192.168.0.0/24 -p tcp -sport 22 -j ACCEPTIptables  -P  INPUT  DORPIptables  -P  OUTPUT  DORPIptables  -P  FORWARD  DORP

1、做放行规则时是一定要有进有出,不然放行不成功

2、记住在做默认策略是一定要先放行ssh 服务,不然你没放行ssh,就先DORP,你连不上去

3、修改规则时,一定不能修改你的ssh为DORP,或者删除,不然,你连不上你的ssh,默认策略是DORP,

不允许任何人连接进来的

4、清除所有规则时一定要先放行ssh默认策略,不然你清除了你ssh连接的规则,策略却是拒绝的,你依然

连接不了

以上错误如果犯了的话

解决方法

1、虚拟机的话直接   service   iptables  restart2、真实环境中的话最好写一个任务计划Crontab -e  5 * * * * service iptables restart3、打电话给机房操作几个比较重要的操作命令Wath  -n  1 ‘Iptables -L -n  -v’ 刷新查看iptables数据包的情况查看规则排列   iptables -L -n -v --lines-number修改规则为第几条 iptables -t 表 -R  链   1-n  规则I 和 A 的区别I 默认不加序号为插入第一行A 默认为添加规则到链的最后一条

(二)、开启本机内网的icmp

Iptables -I INPUT -i lo -j ACCEPTIptables -I OUTPUT -i lo -j ACCEPT限制icmp的Iptables  -A INPUT -s 192.168.0.0/24 -d 192.168.1.146 -p icmp  -dport  -j ACCEPTIptables  -A OUTPUT -s 192.168.1.146 -d 192.168.0.0/24 -p icmp  -sport  -j ACCEPT

允许自己可以ping别人,别人不能ping自己

--icmp-type 8  请求--icmp-type 0  应答Iptables  -A OUTPUT -s 192.168.1.146 -p icmp --icmp-type 8 -j ACCEPTIptables  -A  INPUT -d 192.168.1.146 -p icmp --icmp-type 0 -j ACCEPTDNSIptables  -A OUTPUT -s 192.168.1.146 -p tcp -dport 53 -j ACCEPTIptables  -A INPUT -d 192.168.1.146 -p tcp -sport 53 -j ACCEPT

多端口规则 -m multiport

--dports

--sports

对用户开启ssh和web服务

# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport  --dports 22,80 -j ACCEPT# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport  --sports 22,80 -j ACCEPTIP地址范围规则 -m iprange--src-range--dst-range允许172.16.100.1-172.16.100.100的网段的用户来访问telnet# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
(三)、显示扩展模块字符串匹配string:字符串匹配,能够检测报文应用层中的字符串字符匹配检查高效算法kmp, bm专用选项:--algo {kmp|bm}  算法--string "STRING"   匹配到的子串--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串; 另一只格式的子串1、前提允许用户来访问web2、白名单中加黑名单要放在web前面,不然他不显示3、可以让用户来请求进来,但是防火墙不给以回应# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP拒绝用户访问有“sex”子串的服务基于时间做访问控制 time: 专用选项:--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]  起始时间--datestop  结束时间--timestart hh:mm[:ss] 一天的起始时间--timestop hh:mm[:ss] 一天的结束时间--weekdays day[,day] 一周的那几天Mon,  Tue,  Wed,Thu,  Fri,Sat,Sun# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40--weekdays Mon,Tue,Thu,Fri -j REJECT拒绝用户在一周的 Mon,Tue,Thu,Fri早上8点20 到晚上18点40访问服务器172.16.100.7的web服务  由于进来的已经拒绝了,出去的也就不用拒绝,再者默认策略是拒绝的连接数限制,对每IP所能够发起并发连接数做限制; connlimit:专用选项:[!] --connlimit-above [n]例子:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP 只允许用户连接ssh的数量最多为两个速率限制   limit: 专用选项:--limit n[/second|/minute|/hour|/day]--limit-burst n例子:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5-j ACCEPT只允许用户ping  icmp请求每分钟20个回应 ,如果从来没有ping过的用户允许加5个回应

三、基本命令解释

1、规则的工作机制和保存

iptables --> 语法检查 --> netfilter(执行)规则立即生效切记:先添加放行自己会话规则文件:/etc/sysconfig/iptables保存启用中的规则于规则文件中:# iptables-save > /etc/sysconfig/iptables# service iptables save生效规则文件中的规则:# iptables-restore < /etc/sysconfig/iptables# service iptables restart

2、执行的操作:清空现有规则,读取并生效规则文件中的规则

COMMAND:链:-F:flush, 清空规则链;-N:new, 自建一条链-X: delete, 删除一条自定义的空链-Z:zero,计数器归零-P:policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP;-E:重命名自定义链3、链中的规则:-A  添加一条规则-I   插入一条规则-D   删除一条规则-R   修改一条规则4、查询:-L:以列表方式显示-n: 数字格式显示主机地址和端口;-v: 详细格式,-vv, -vvv--line-numbers: 显示规则编号-x: exactly,不要对计数器的计数结果做单位换算,而显示其精确值

iptables 规则策略设置

iptables 规则策略设置

iptables [-t TABLE] -A 链名 匹配条件 -j 处理目标

5、匹配条件

1)通用匹配:-s 地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;--src, --source-d 地址:指定报文目标IP地址匹配的范围;--dst, --destination-p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;-i INTERFACE: 数据报文流入的接口;PREROUTING, INPUT, FORWARD-o INTERFACE: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING2)扩展匹配(1)隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;-p tcp: 指定tcp协议-p udp: 指定udp协议--sport PORT[-PORT]: 指定源端口--dport PORT[-PORT]: 指定目标端口--tcp-flag 要检查标志位列表(用逗号分隔)  必须为1的标志位列表(逗号分隔)例如:--tcp-flags syn,ack,rst,fin synall none--syn-p udp [-m udp]--sport--dport-p icmp [-m icmp]--icmp-type0: echo-reply, ping响应8: echo-request, ping请求(2)显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;-m 扩展模块名称模块:iptables,netfilter各拥有一部分代码multiport: 多端口匹配可用于匹配非连续或连续端口;最多指定15个端口;专用选项:state: 状态检查专用选项:

--state 的概念

连接追踪中的状态:是iptables的一个模块,有一个模板,能够记录用户来连接服务的基本状态。 他可以记录tcp、udp、icmp等多种协议的状态连接

NEW: 新建立一个会话ESTABLISHED:已建立的连接RELATED: 有关联关系的连接INVALID: 无法识别的连接

应用注意

进来的连接只允许的状态有  new  established 这两种状态

出去的连接状态只允许有   established

开启连接状态 时  应该注意  不能再服务器压力比较大的机子上开启

要开启的话要修改连接追踪的设置

好处优化防火墙的规则条目

实际应用 放行ssh  web  ping

Iptables -A INPUT -d 192.168.1.146 -m multiport --dports 22,21,80 -m  state --state NEW -j ACCEPTIptables -I INPUT -m state  --state   ESTABLISHED -j ACCEPTIptables -I OUTPUT -m state  --state  ESTABLISHED -j ACCEPTIptables  -P  OUTPUT  DORPIptables  -P  FORWARD  DORPIptables -A INPUT -d 192.168.1.146 -p --icmp-type 8 -j  ACCEPTModprobe  nf_conntrack-ftpIptables -A INPUT -d 192.168.1.146 -p tcp  -m state --state RELATED -j ACCEPTIptables -R OUTPUT 1 -s 192.168.1.146 -p tcp  -m state --state ESTABLISHED RELATED -jACCEPT

写规则的优化

优化规则:尽量减少规则条目,彼此不相关的匹配机会较多放在上面,属于同一功能匹配规更严格放在上面;

配置修改

调整连接追踪功能所能容纳的连接的最大数目:

/proc/sys/net/nf_conntrack_max当前追踪的所有连接/proc/net/nf_conntrack不同协议或连接类型追踪时的属性:/proc/sys/net/netfilter目录:

放行被动模式下的FTP服务:

1、装载模块/lib/modules/KERNEL_VERSION/kernel/net/netfilter/模块:nf_conntrack_ftp2、放行请求报文:(1)放行NEW状态对21端口请求的报文;(2) 放行ESTABLISHED以及RELATED状态的报文3、旅行响应报文:(1) 放行ESTABLISHED以及RELATED状态的报文
处理目标:内置目标:DROP 删除REJECT 丢弃返回信息ACCEPT  访问创建自定义链:iptables [-t table] -N chain删除自定义且0引用的空链iptables [-t table] -X chain重命名自定义链:
iptables [-t table] -E old_name new_nameIptables -t fitler -N http_inIptables -A http_in -d 192.168.1.7 -p tcp --dport 80 -m iprange --src-range  192.168.100.1-192.168.100.100 -j DORPIptables -A http_in -d  192.168.1.7 -p tcp --dport 80 -m state --state NEW -j ACCEPTIptables -A INPUT -m state  --state  ESTABLISHED -j ACCEPTIptables -t fitler -N ssh_inIptables -A ssh_in -d 192.168.1.146 -p tcp --dport 22 -m state NEW -j ACCEPTIptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

子链调用主链

Iptables -A INPUT -d 192.168.1.146 -p tcp --dport 80 -j http_in  实现跳转子链处理不了的返回给主链Iptables -A http_in -j RETURNIptables -A INPUT -d 192.168.1.146 -p tcp --dport 22 -j ssh_inIptables -P INPUT DORPIptables -P OUTPUT DORPIptables -P FORWARD DORP

便于管理的话,可以直接直接清除那条链

不过注意要先放行默认策略

也可以不清空,保存在某个地方

Iptables-save > /root/iptables

删除自定义的空链,且0引用

Iptables  -t -X chain

有引用的话,要删除规则

Iptables -t  tables  -D  chain   xx

以上的都是主机防火墙

四、网络防火墙

实际应用中是主机防火墙和网关防火墙配合使用

环境搭建好

Vmware1 :172.16.1.143/16  客户端

Vmware2 :eth0  192.168.1.146/25   eth1  172.16.1.140/16  网关防火墙

Vmware3 :eth0  192.168.1.149/25  web服务

准备环境的搭建

iptables 规则策略设置

Vmware1  设置ip和默认路由

iptables 规则策略设置

Vmware2

Ip设置

iptables 规则策略设置

网卡设置

iptables 规则策略设置

开启路由转发

Vim /etc/sysctl.conf

iptables 规则策略设置

重启生效

Sysctl -p

Vmware3

Ip设置

iptables 规则策略设置

网卡设置

iptables 规则策略设置

环境测试

iptables 规则策略设置

Vaware1 测试网页

iptables 规则策略设置

把iptables中的规则给删除避免对实验的影响

五、网关防火墙设置

1、[root@www ~]# iptables -P FORWARD DROP 防火墙关闭转发功能客户端访问不了[root@www ~]# iptables -A FORWARD -s 192.168.1.149 -j ACCEPT[root@www ~]# iptables -A FORWARD -d 192.168.1.149 -j ACCEPT


再用防火墙做规则就可以访问啦

开发远程web和ssh

清空上面两条

[root@www ~]# iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT[root@www ~]# iptables -A FORWARD -d 192.168.1.149 -p tcp --dport 80 -m state --state NEW -j ACCEPT[root@www ~]# iptables -A FORWARD -d 192.168.1.149 -p tcp --dport 20 -m state --state NEW -j ACCEPT

安全连接放开了可以打开了网页服务和ssh

开放远程ftp

[root@www ~]# iptables -A FORWARD -d 192.168.1.149 -p tcp --dport 21 -m state --state NEW -j ACCEPT[root@www ~]# Modprobe  nf_conntrack-ftp[root@www ~]#iptables -R FORWARD 1 -p tcp  -m state --state ESTABLISHED RELATED -j ACCEPT

自动装载模块

iptables 规则策略设置

网络防火墙SNAT及DNAT设置

SNAT

实验 工作示意图如上

环境搭建现在反过来

Vmware1 做web

Vmware2 做snat转发  开启转发

Vmware3 做客户端

Ip 还是原来的

Vmware3测试

iptables 规则策略设置

Vmware2 做snat

[root@www ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 172.16.1.140

来自192.168.1.0这个网络的源地址都把他的源地址改为172.1.16.140 适用 于静态ip转发

[root@www ~]# iptables -t nat -I POSTROUTING 1 -s 192.168.1.0/24 -j MASQUERADE 适用于静态自动转发

Vmware3 访问vmware1测试转发

iptables 规则策略设置

Vmware1查看转发结果

iptables 规则策略设置

DNAT 转发和上面环境一样不过把防火墙规则清除

防火墙上添加规则

Vmware2

[root@www ~]# iptables -t nat -A PREROUTING -d 172.16.1.140 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.149

Vmware1访问vmware3

Vmware3上日志测试结果

iptables 规则策略设置