iptables(四)iptables案例实战

一    整个以CURD的形式来展示

target能是一个"动作",target也能是一个"自定义链"

当target为一个动作时,表示'报文按照指定的动作'处理;当target为,自定义链,时,表示报文由自定义链中的'规则处理'

(1)查看

iptables [-t tables] [-L] [-nv]

-t :后面接'table',例如 nat 或 filter,若省略此项目,则使用'默认的 filter'
-L :列出-->'list''某个 table 的所有链'或某个'链的规则'
-n :不对'地址进行名称反解',直接'显示ip地址'
-v :列出'更多的信息-->verbose',包括通过该规则的'数据包总位数、相关的网络接口'等
--line-numbers :列出'规则的序号'
-S :命令可以查看'这些rules是如何建立的' -->'对应的命令'
'需求1' --> 列出: 'filter table' 'INPUT 链的规则'

注意: '表只有哪些链?'

iptables -t filter -L INPUT
'需求2' --> 列出 'nat表' table '三条链'的规则-->'域名以ip的形式展示'-->'某条链对应规则进行编号'

iptables -t nat -L -n --line-numbers 
显示:  '指定表'中对应'链'上的'规则'

 (2)增加

'注意点':添加规则时,'规则的顺序非常重要'

-dport 就是'目标端口',当数据从'外部进入'以服务器为'目标端口'

数据'从服务器出去',则为'数据源端口' 使用 '--sport'
'模拟'应用场景  --> 禁止'172.25.2.100'的ip来访问  --> '对于此ip的数据包进行丢弃'

环境说明: 起一个虚拟机,保证'环境纯净',关闭selinux和firewalld服务

 

设置规则前

设置规则后

 iptables -t filter -A INPUT -s 172.25.2.100 -j DROP

 不指定'-p 和--dport',默认是所有'all'

 区间: '--dport 700:800'

两个效果: 

  (1)'无法ping通'
 
  (2)由于是通过ssh连接的,所以此时ssh远程'连接断开'
(1) '-A尾部添加'

在'指定表'的'指定链'的'尾部'添加一条'规则',-A选项表示在'对应链的末尾'添加规则

'示例':iptables -t filter -A IPUT -s 1712.25.2.100 -j DROP

'语法':iptables -t 表名 -A 链名 匹配条件 -j 动作

'说明':不指定'-p',默认是'所有的'

------  '观察'  ------

'1':是否加入到'尾部'

'2':规则是否'生效'

 

(2) -I '头部'添加
在指定表的'指定链的首部'添加一条规则,-I选型表示在对应链的开头添加规则 
'示例':iptables -t filter -I IPUT -s 172.25.2.100 -j DROP
'语法':iptables -t 表名 -I 链名 匹配条件 -j 动作

-------------  '分割线'  -------------

(3) 指定'位置'添加
示例:iptables -t filter -I IPUT '3' -s 172.25.2.100 -j DROP
语法:iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作

'查看规则的编号':iptables [-t 表] [链条] -L -n --line-number 

-------------  '分割线'  -------------

(4) 设置指定表的'指定链的默认策略'(默认动作)  -->  '并非添加'规则,所以'没有规则序号'
示例: iptables -t filter -P FORWARD ACCEPT
语法:iptables -t 表名 -P 链名 动作

自定义链

'自定义的链特点':自定义链并'不能直接使用',而是需要'被默认链引用-->也即二者需要进行关联'才能够使用

链引用计数'references' --> 被任何'默认链所引用的次数'

在一个关卡设定,指定当'有数据的时候专门'去找某个'特定的链'来处理,当'那个链处理完'之后,'再返回',接着在特定的链中继续检查

后续: '补充一个图'

(3)删除

----------------  删除'指定规则'  ----------------

(1) 按照'规则序号'删除规则
iptables -t filter -D INPUT 3
语法: iptables -t 表名 -D 链名 规则序号

(2) 按照具体的'匹配条件与动作'删除规则-->'不常用'
iptables -t filter -D INPUT -s 192.168.1.146 -j DROP
语法: iptables -t 表名 -D 链名 匹配条件 -j 动作

----------------  删除'表中指定table指定chain的所有规则'  ----------------

(3) 删除指定表的指定链中的所有规则,'-F'选项表示'清空对应链中的规则'
iptables -t filter -F INPUT
语法: iptables -t 表名 -F 链名

----------------  删除'表中指定table的所有规则'  ----------------

(4) 删除指定表中的所有规则,'执行时需三思'
iptables -t filter -F
语法: iptables -t 表名 -F

----------------  删除'所有的防火墙规则'  ----------------

iptables -F  '了解即可'

(5) 使用"-X"选项可以删除'自定义链',但是删除自定义链时,需要'满足两个条件'

1、自定义链'有被任何默认链引用',即自定义链的'引用计数为0'

2、自定义链中'没有任何规则',即'自定义链为空'

(4)修改

'推荐方案':你想要'修改某条规则',还不如先'将这条规则删除',然后在'同样位置再插入一条新规则'  -->'动作比较大'

'修改动作':那么使用-R选项时,不要忘了'指明'规则'原本对应的匹配条件'

-R, --'replace' chain rulenum rule-specification

说明:规则'被取代后'并'不会改变顺序'

--------------------------  '案例'  --------------------------

iptables -R INPUT 1 -s 172.25.2.100 -j ACCEPT

-R INPUT 1表示修改INPUT链的第1条规则,使用-j REJECT表示将INPUT链中的'第一条规则的动作修改'为ACCEPT

注意:'-s选项以及对应的源地址'不可省略,因为'没有指定原本的源地址',当前规则的源地址'自动变为'0.0.0.0/0

(5)过滤无效的数据包

场景引入: 假设有人'进入了服务器',或者'有病毒木马程序',它可以通过22,80端口像服务器'外传送数据'

说明: 它的这种方式就和我们'正常访问22,80端口区别'-->它发向外发的数据'不是'我们通过'访问网页请求而回应'的数据包

下面我们要'禁止这些没有通过请求回应的数据包',统统把它们'堵住掉'

iptables 提供了一个参数 是'检查状态'的,下面我们来配置下' 22 和 80 '端口,防止'无效的数据包'

iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

状态检测

是一种'显式扩展',用于'检测会话之间的连接关系'的,有了检测我们可以实现'会话间功能的扩展'

   '什么是状态检测?'

    对于整个TCP协议来讲,它是一个'有连接的协议'

    三次握手中,'第一次握手',我们就叫NEW连接

    而从第二次握手以后的,'ack都为1',这是'正常的数据传输'

    和tcp的'第二次第三次握'手,叫做'已建立的连接'(ESTABLISHED)

    还有一种状态,比较诡异的:比如:SYN=1 ACK=1 RST=1,对于这种我们'无法识别'的,我们都称之为'INVALID无法识别'的

    还有第四种,'FTP这种古老的拥有的特征',每个端口都是'独立的',21号和20号端口都是一去一回,'他们之间是有关系的',这种关系我们称之为'RELATED'

    所以我们的状态一共有'四种':NEW、ESTABLISHED、RELATED、INVALID

常见的'反弹式木马': '进来的只允许状态'为NEW和ESTABLISHED的进来,'出去只允许'ESTABLISHED的状态出去
'已经建立的连接得让它进来'

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 (6)规则顺序思考

iptables执行规则时,是从规则表中'从上至下顺序执行的',如果没遇到'匹配'的规则,就'一条一条'往下执行,如果遇到'匹配的规则后',那么就'执行本规则',执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况

后续执行一般有'三种情况'

  1)一种是继续执行'当前规则队列内-->当前链条'的下一条规则,比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。

  2)一种是'中止当前规则队列的执行',转到'下一条规则队列-->下一条链',比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行

  3)一种是'中止所有规则队列'的执行
'iptables优化'

'优化的思路'是:请求'最频繁的放在最上面',请求频率较小的放在最后面
网络层的防火墙  -->  常见的'有3、4层的防火墙',7层的防火墙,其实是'代理层的网关'

------  '七层为什么比三层慢'  ------

TCP/IP的'七层模型'第三层是'网络层',三层的防火墙会在这层对'源地址和目标地址'进行'检测'。

七层的防火墙,不管你'源端口或者目标端口',源地址或者目标地址是什么,都将对你'所有的东西进行检查'

特点:七层防火墙'更加安全',但是这却带来了'效率更低'

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值