linux之Iptables主机防火墙规则(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux之Iptables主机防⽕墙规则(⼀)
Iptables 主机防⽕墙规则
1.概述内外⽹防⽕墙软硬件分类
Firewall:防⽕墙,⼯作在主机或⽹络的边缘。

进出本主机或⽹络段的数据报⽂,根据规则做匹配,根据匹配的结果做处理。

⼀种隔离技术,实现内⽹以及外⽹传输控制,最⼤限度阻⽌⿊客破坏企业⽹络,加强企业⽹络安全。

基于本机内核中的TCP/IP协议栈内核
防⽕墙根据作⽤对象分类
主机型防⽕墙:单台主机上设置防⽕墙,保护主机数据安全。

控制的是⽹络⽤户对服务器数据的访问
⽹络型防⽕墙:管理整个企业的⽹络安全,内部主机也要设置防⽕墙内⽹外⽹沟通是⼀定经过防⽕墙
防⽕墙根据软硬件分类
硬件防⽕墙:通过硬件的⽅式实现防⽕墙
软件防⽕墙:通过软件的形式实现防⽕墙
2.分为两部分iptables Netfilter 四表五链匹配规则
iptables分为两部分为iptables/netfilter
1.iptables是属于应⽤程序,完成规则设置命令⾏⼯具,是⼀个防⽕墙的设置命令,/sbin/iptables,⽤于管理防⽕墙规则。

filter:位于内核中的包过滤功能体系,是实现防⽕墙的功能模块。

3.iptables ⼯作在⽹络层,通过规则对数据“包”进⾏过滤
注意:
CentOS 7之前,默认启动的防⽕墙是iptables,CentOS 7之后默认启动的是firewalld,firewall是iptables的外壳,是基于iptables⼯作
1.)iptables规则链规则定义:设置条件,进⾏数据包的匹配,依据匹配进⾏处理规则的集合体 --规则链
对数据包进⾏过滤或处理。

--规则的作⽤
容纳各种防⽕墙的规则--链的作⽤
处理数据包的不同时机--链的分类依据:
默认的5种规则链(分类依据按照时机来划分的)对数据包处理的不同时间
1、在进⾏路由选择前处理数据包--PRE ROUTING 路由选择前执⾏的规则判别路由之前(NAT)
2、处理⼊站数据包--IN PUT 处理发给本机的数据包
3:处理出站数据包 --OU TPUT 本机发出去的数据包
4、处理转发数据包--FORW ORD 本机相当于转发路由,
5、在进⾏路由选择后处理数据包--POST ROUTING 路由判断选择之后,处理数据包
2.)规则表:容纳各种规则链
(表是链的分类) 根据链对数据不同的操作,分为表
4个功能表:
filter对数据包进⾏过滤,确认是否放⾏该数据包。

nat network address translation ⽹络地址转换(修改数据包中的源、⽬标IP地址或端⼝。

)Mangle拆解报⽂,做出修改,封装报⽂,主要为数据包设置标记
raw关闭nat表上启⽤的连接追踪机制,确定是否对该数据包进⾏状态跟踪
各个链的包含的功能、实现的位置:数据包从左往右⼀个表⼀个表流动
3.)总结:iptables 四表五链规则匹配编写顺序
1.四表:Raw(跟踪)、mangle(标记)、nat(修改)、fliter(过滤)
2.五链:PREROUTING、INPUT、OUTPUT、FORWORD、POSTROUTING
3.规则链之间的顺序
流⼊:PREROUTING---> INPUT
流出:OUTPUT ---> POSTROUTING
转发:PREROUTING ---> FORWARD ---> POSTROUTING
优先级次序:Raw(跟踪)>mangle(标记)>nat(修改)>fliter(过滤)
4.规则匹配:
按顺序从上往下依次检查,匹配即停⽌。

若找不到匹配规则,按照该链的默认策略处理。

5.链上规则编写次序注意事项:
1.规则编写的时候,同类(同⼀应⽤)规则,匹配范围⼩的放在上⾯。

2.不同类规则,访问频率较⼤的放最上⾯
3.设置默认策略
4.尽量将可以由⼀条规则描述的多个规则合并为⼀条规则
4.)iptables命令的使⽤启动安装
rpm -qa | grep iptables检查是否安装:
yum -y install iptables iptables-services --安装软件安装:
从firewall转为iptables:
systemctl unmask iptables---解覆盖,即显现iptables
systemctl mask firewalld ---覆盖firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl restart iptables
systemctl enable iptables
iptables -v -L -n --line-numbers --查看默认filter表上的所有链的信息1.)iptables格式规则:
Iptbales [-t表名] 选项 [链名] [条件] [-j控制类型]
在什么表的什么链的哪个地⽅(选项) 添加⼀条防⽕墙规则(条件) 满⾜条件后执⾏ J 注意!
1.不指定表名时,默认指定filter表
2.不指定链名时,默认指定表内的所有链
3.除⾮设置链的默认策略,否则必须指定匹配条件
4.选项、链名、控制类型使⽤⼤写字母其余均为⼩写
2.) 4个功能表:过滤,地址转换,标记,跟踪
filter对数据包进⾏过滤,确认是否放⾏该数据包。

nat(network address translation) ⽹络地址转换(修改数据包中的源、⽬标IP地址或端⼝。

)Mangle拆解报⽂,做出修改,封装报⽂,主要为数据包设置标记
raw关闭nat表上启⽤的连接追踪机制,确定是否对该数据包进⾏状态跟踪
3.) 5种规则链 (默认) 分类依据对数据包处理的不同时间
1、在进⾏路由选择前处理数据包--PRE ROUTING 路由选择前执⾏的规则判别路由之前(NAT)
2、处理⼊站数据包--IN PUT 处理发给本机的数据包
3:处理出站数据包 --OU TPUT 本机发出去的数据包
4、处理转发数据包--FORW ORD 本机相当于转发路由,
5、在进⾏路由选择后处理数据包--POST ROUTING 路由判断选择之后,处理数据包
5.)查看表规则 -L -n -v --line-numbers
查看规则
-L:列出指定链上的所有规则,后⾯紧跟要查看的链
-n:以数字格式显⽰地址和端⼝号(不反解)
-v:显⽰详细信息 -vv:更加详细信息
--line-numbers ⾏号
iptables -v -L -n --line-numbers --查看默认filter表上的所有链的信息
iptables -t nat -n -L PREROUTING --查看 nat表上的 PREROUTING链信息
因为没有配置,所有为空
列表中的内容chain
police ACCEPT默认允许的意思
target控制类型
port端⼝类型
source源地址
destination⽬的地址
6.)链管理设置远程登录 -F清除规则 -Z 重新计数-P链默认规则
-F清除所有规则
-P(⼤写)为指定的链设置默认规则,
-Z 栈内流量数据,重新计数
iptables -t filter -P INPUT DROP -- -P设置默认类型为DROP直接丢弃
iptables -L -n -v --line-numbers --查看所有防⽕墙
iptables -P INPUT ACCEPT --设置可以远程登录
7..)链规则管理 -A末尾追加 -I 开头插⼊ -D删除 -R替换
-A 在链的末尾追加⼀条规则
-I 在链的开头或指定⾏插⼊⼀条规则
(在链名后⾯(例如INPUT)可以添⼊数字代表把写⼊的规则插⼊第⼏⾏。

省略默认为第⼀⾏)-D删除指定链上的指定规则
-R修改或替换指定链上的指定规则
1.在末尾增加⼀条规则 -A
iptables -A INPUT -s 192.168.10.100 -d 192.168.10.200 -j ACCEPT
在末尾增加规则收到来⾃10.100的数据包发到10.200 做ACCEPT接受的动作
在增加⼀个不接受DROP
iptables -A INPUT -s 192.168.10.111 -d 192.168.10.200 -j DROP
2.删除⼀条规则 -D
iptables -D INPUT 2 删除INPUT的第⼆条规则
3.更改⼀条规则
iptables -R INPUT 1 -s 192.168.10.0/24 -d 192.168.10.200 -j ACCEPT
更改什么链第⼏条
iptables -t filter -P FORWARD DROP(要把转发关掉保证安全)
iptables -t filter -n -L --line-numbers(查看filter表的相关规则内容)
iptables -L FORWARD -n -v(查看指定规则链的内容)
iptables -P OUTPUT ACCEPT(⼀般默认出站不过滤)
iptables -D INPUT 1(删除INPUT链的第⼀条规则)
⼀般情况下设置默认规则INPUT和FORWARD要设置成DROP,OUTPUT⼀般设置为ACCEPT 8.)数据包的常见控制类型
ACCEPT:允许通过
DROP直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提⽰
REDIRECT端⼝重定向
LOG记录⽇志信息,然后传给下条规则继续匹配
DNAT:⽬标地址转换
SNAT:源地址转换
MASQUERADE地址伪装
例如:
iptables -t filter -I INPUT -d 192.168.22.13 -p icmp -j DROP
设置规则来⾃filter表的 input链到⽬的地址22.13 -p端⼝协议为icmp DROP不通过
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
设置规则来⾃filter表的 input链端⼝为22的则通过
iptables -A INPUT -p tcp --sport 22 -j ACCEPT
设置规则在filter表的 input链插⼊⼀个规则端⼝协议为tcp 来源地址端⼝为22的包通过9.)匹配条件 ! -s d p i o 取⾮ ping
-s IP|NETADDR 数据包的来源地址ip或⽹段检查报⽂中源IP是否属于此处指定的地址范围
-d IP|NETADDR到⽬标ip或⽹段检查报⽂中⽬标IP是否属于此处指定的地址范围
-p {tcp|udp|icmp}⽀持三种协议检查报⽂中的协议,即IP⾸部中protocols所标识的协议
-i {eth0/eth1/ens33}从那个⽹卡进来仅⽤于PREROUTING,INTPUT,FORWARD链
-o {eth0/eth1/ens33}从那个⽹卡出去仅⽤于FORWARD,OUTPUT,POSTROUTING链
例如:
1.使客户能连接22端⼝ input连接22 output回复
iptables -I INPUT -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -j ACCEPT I插⼊filter表的input链来⾃10.1 到10.200 的ip 协议为tcp ⽬的端⼝为22 则通过
iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -j ACCEPT
-I插⼊ filter表的output链来⾃10.200 到10.1 的ip 协议为tcp ⽬的端⼝为22 则通过
2. 10.100 和10.150 可ping
iptables -A INPUT -s 192.168.10.100 -d 192.168.10.150 -p icmp -j ACCEPT
在input表最后插⼊规则来源10.100 ⽬的10.150 协议为icmp 通过进
iptables -A OUTPUT -s 192.168.10.150 -d 192.168.10.100 -p icmp -j ACCEPT
在input表最后插⼊规则来源10.150 ⽬的10.100 协议为icmp 通过出
3. -R 修改第⼀个
iptables -R INPUT 1 -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -i ens33 -j ACCEPT R修改filter表的input链来⾃10.1 到10.200 的ip 协议为tcp ⽬的端⼝为22 从ens33进来的则通过
iptables -R OUTPUT 1 -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -o ens33 -j ACCEPT R修改filter表的output链来⾃10.200 到10.1 的ip 协议为tcp ⽬的端⼝为22 从ens33进来的则通过
4. 可以 ping
iptables -A INPUT -p icmp -s 192.168.10.0/24 -d 192.168.10.20 -j ACCEPT
在input链最后加⼊来源10.0/24⽹段⽬的ip 10.20 icmp的协议即可ping 通进
iptables -A OUTPUT -p icmp -s 192.168.10.20 -d 192.168.10.0/24 -j ACCEPT
在output链最后加⼊来源10.20 ⽬的ip10.0/24 icmp协议可通出
iptables -L -查看
iptables -A INPUT -p icmp -s 192.168.10.20 -j ACCEPT
(允许192.168.10.20主机能Ping本机)
iptables -I INPUT -p tcp -d 192.168.22.13 -j ACCEPT
(允许所有主机能基于TCP访问192.168.22.13)
10.针对⽹卡接⼝流⼊限制匹配⽹卡-i ens33 进⼊ -o出去
-i ens33:流⼊ens33⽹卡的数据流 -o ens33:流出ens33⽹卡的数据流
例如:
iptables -A INPUT -d 192.168.10.0/24 -i ens33 -j ACCEPT
在最后插⼊从ens33进来的⽬标⽹段使10.0⽹段的通过
(所有22⽹段主机数据流⼊本机ens33⽹卡数据流允许)
iptables -A OUTPUT -s 192.168.10.0/24 -o ens33 -j ACCEPT
(响应22⽹段主机数据流出本机ens33⽹卡数据流允许)
11.)扩展匹配
iptables⽀持的扩展模块
Centos7:/usr/lib64/xtables/模块xxx.so
centos-6 :/lib64/xtable/xxx.so
显⽰扩展
必须指明扩展模块
获取扩展帮助⽂档的⽅式:①centos-6 man iptables
②Centos-7 man iptables-extensions
1.例如 --d /s port PORT⽬标端⼝源端⼝
--dport PORT ⽬标端⼝,可以单个端⼝,可以是连续的端⼝(不能离散)
--sport PORT 源端⼝,
例如:
iptables -I OUTPUT -s 192.168.10.20 -d 192.168.10.0/24 -p tcp --sport 22 -j ACCEPT 出
在output链第⼀条前增加当数据包来源ip10.20 ⽬的10.0⽹段协议为tcp 端⼝22 则通过
iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.20 -p tcp --dport 22 -j ACCEPT 进
在input链第⼀条前增加当数据包来源ip10.0⽹段⽬的10.20 协议为tcp 端⼝22 则通过
iptables -L 查看 22端⼝为ssh协议
2.三次握⼿--tcp-flags LIST1 LIST2
--tcp-flags LIST1 LIST2(较少使⽤):SYN 连接请求 ACK 应答 RST 重置 PSH数据传输例如:
iptables -I INPUT -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
--syn:检查TCP握⼿的第⼀次(其中只有SYN是1)
在filter表 input链中在第⼀⾏插⼊如果有数据包从 eth0 接⼝来协议为tcp 启动隐式模块
检查tcp三次握⼿的这些标志SYN,RST,ACK 如果只要SYN=1 其他为0 则不通过
3.Ping -p icmp --icmp-type 0/8
-p icmp --icmp-type 0/8
0:ping响应
8:请求应答, Ping请求
例如:
iptables -A INPUT -s 192.168.10.0/24 -p icmp --icmp-type 8 -j ACCEPT 请求
在input链最后加⼊来源⽹段10.0 ping请求为8 则通过
iptables -A OUTPUT -s 192.168.10.10 -d 192.168.10.0/24 -p icmp --icmp-type 0 -j ACCEPT
在input链最后加⼊来源10.10 ⽬的⽹段10.0 ping请求为0 则通过回应
12.)显⽰扩展隐式扩展 -m(注意:如指明了协议可以省略-m)
1.)multiport 端⼝扩展:-m multiport --sports s源端⼝ d⽬的端⼝
使⽤离散⽅式指明多个端⼝(最多15个)
多端⼝匹配: -m multiport --sports 源端⼝列表
-m multiport --dports ⽬的端⼝列表
例如:
iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.50 -m multiport -p tcp --dport 22,23,80 -j ACCEPT
Input链源⽹段10.0 ⽬的⽹段10.50 tcp协议访问⽬的端⼝22.23.80 则通过进
iptables -I OUTPUT -s 192.168.10.50 -d 192.168.10.0/24 -m multiport -p tcp --sport 22,23,80 -j ACCEPT
Output链源⽹段10.50 ⽬的⽹段10.0 tcp协议访问源端⼝22.23.80 则通过出
2.)iprange 连续ip扩展:指明连续的IP地址 -m iprange --src-range
-m iprange --src-range 指明连续的源IP地址范围
-m iprange --dst-range 指明连续的⽬的IP地址范围
例如:
iptables -I INPUT -d 192.168.30.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.30.11-192.168.30.30 -j ACCEPT Input链⽬的地址30.10 协议为tcp 源端⼝为22.25.80.514 来源地址范围30.11-30满⾜则通过
iptables -I OUTPUT -s 192.168.30.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.30.11-192.168.30.30 -j ACCEPT Output链⽬的地址30.10 协议为tcp ⽬标端⼝为22.25.80.514 ⽬的地址范围30.11-30满⾜则通过
iptables -I INPUT -d 192.168.10.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.10.11-192.168.10.254 -j ACCEPT
iptables -I OUTPUT -d 192.168.10.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.10.11-192.168.10.254 -j ACCEPT
3.)time ⽇期时间扩展:根据时间进⾏匹配 -m time --timestart
--datestart⽇期开始
--datestop ⽇期结束
--timestart时间开始时分
--timestop时间结束时分
iptables -I INPUT -s 192.168.10.100 -d 192.168.10.200 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --dport 22,23,80 -j ACCEP 来源于10.100 ⽬的ip10.200 数据包在15.30-50发过来协议tcp ⽬的端⼝22.23.80 则通过
iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.100 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --sport 22,23,80 -j ACCEPT 来源于10.200 ⽬的ip10.100 数据包在15.30-50发过来协议tcp 源端⼝22.23.80 则通过
iptables -L -n -v
4.)string 字符串模块扩展:只能对明⽂编码协议⽣效根据7层字符进⾏匹配
--algo {bm|kmp}:指定字符串匹配的算法
[!] --string 参数
[!] --hex-string 参数
例如:
iptables -I INPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --dport 80 -j ACCEPT
Input链⽬的ip10.20 启动multiport模块⽬的端⼝80 启动匹配字符串模块匹配kkk通过
iptables -I OUTPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --sport 80 -j ACCEPT
Input链⽬的ip 10.20 启动multiport模块源端⼝80 启动匹配字符串模块匹配kkk通过
Iptables -L -v -n --查看信息
5.)connlimit 限制请求数量扩展:限制单个IP并发请求数量进⾏匹配过滤
--connlimit-upto :请求数⼩于等于阈值时执⾏操作(centos-6不⽀持)
--connlimit-above:请求数⼤于3时执⾏操作
例如:
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
(限制ssh并发连接最多3个)
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-upto 3 -j ACCEPT
(限制ssh并发连接最多3个)
6.)limit 速率模块扩展:对响应速率进⾏过滤匹配
--limit-burst:空闲峰值数量
--limit #/minute:单位时间的速率
例如:
iptables -I INPUT -d 192.168.10.20 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT input链⽬的ip10.20 ping模块 8进启动limit 速率模块空闲峰值为5 ⼀分钟30的频率允许通过
iptables -I OUTPUT -s 192.168.10.20 -p icmp --icmp-type 0 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT Output链源ip10.20 ping模块 0出启动limit 速率模块空闲峰值为5 ⼀分钟30的频率允许通过
7.)state 连接状态扩展:检查连接的状态-m state --state ESTABLISHED,RELATED
所有的可追踪的连接状态:
NEW:与任何连接⽆关的(新来的)
ESTABLISHD:响应请求或已建⽴连接的
RELATED:与已有连接有相关性的
INVALID:不被允许的类型
UNTRACKED:没有被跟踪的(不常⽤的)
例如:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
13.) iptables规则保存和重载
iptables的配置⽂件:/etc/sysconfig/iptables-config
1.保存在某个⽂本中,在需要的时候进⾏重载规则
iptables-save > /root/iptabls-rule 将规则保存⾄/root/iptabls-rule
cat /root/iptabls-rule
iptables -F
iptables -L
iptables-restore < /root/iptabls-rule 重新加载
2.永久修改和保存
service iptables save(centos-6)(相当于iptables-save > /etc/sysconfig/iptables)
service iptables save
service iptables restart⽣效。

相关文档
最新文档