防火墙 iptables的使用

目录

什么是防火墙

原理

代理

防火墙的工具

4表5列

五链:控制流量的时机

四个表:如何控制流量

​编辑

iptables 软件

格式

选项

跳转

查iptables  的规则

添加规则   A  I

删除规则   

清空规则

替换规则  R

修改默认规则(默认是允许通过 黑名单) P

设置黑名单

设置白名单

通用匹配   没有   指明模块

端口匹配: --sport 源端口、--dport 目的端口

ICMP 

192.168.17.55 可以ping通192.168.17.25   

192.168.17.25不能ping通192.168.17.55

​编辑

iprange

mac地址

格式

实例

string 字符串

time模块

connlimit  

stat

故障案例:启用了iptables state模块  用户访问有问题  查看日志 table full drop  pket


什么是防火墙

防火墙是一种技术,它通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性。防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验

waf   web网页   防火墙

原理

数据包

mac头部  ip头部  协议/端口  七层协议(http)真实数据  校验位

收包   拆包  检查没问题   装包

收包   拆包   检查有问题   隔离或者丢弃

4层原理    传输协议     端口号     开发者

7层原理      控制真实数据     http      dns

四层防火墙  通过  协议   端口号   ip   mac    控制流量

七层防火墙   可以控制真实数据

代理

正向代理: fq    代理的是(客户端)       

作用: 绕开防火墙限制   加快访问速度

反向代理:代理的是(服务器 ) 

作用:负载均衡 (负担分担)  

防火墙的工具

iptable  firewalld  nft  防火墙工具

[root@localhost~] # iptables --version
iptables v1.4.21

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统

netfilter  中的五个勾子函数

4表5列

表中有链,链中有规则

网卡------内核(netfilter)

五链:控制流量的时机

input:  进入本机的流量      

output:出本机的流量

forward:转发数据包(流量)

pre-routing: 路由选择前      

post-routing:  路由选择后

流量:发给你的   需要你转发的

选择合理的  链   做规则

表的作用是  存放链

链决定了在什么地方控制流量

表中链  链中有规则

四个表:如何控制流量

raw表:确定是否对该数据包进行状态跟踪  (跟踪)

mangle表:为数据包设置标记优先级                        (标记)

nat表:修改数据包中的源,目标ip地址或端口    (地址转换)

filter表:确定是否放行该数据包(过滤)     (是否允许流量通过)  

iptables 软件

格式

iptables  -t  指定表   子命令  指定链    规则  -j   跳转

iptablestableconmmandchain

parameter

target
-t filter 

-A

-D

-I

-R

-L

-F

-Z

-N

-X

-P

INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

-p

-s

-d

-i

-o

--sport

--dport

......

.......

-j ACCECT

-j DROP

-j REJECT

选项

管理选项用法示例
-A在指定链末尾追加一条 iptables -A INPUT  (操作)
-I

在指定链中插入一条新的,未指定序号默认作为第一条  iptables -I

INPUT  (操作)

-P指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D

删除 iptables -t nat -D INPUT  2(操作)

-p服务名称 icmp  tcp
-R修改,替换某一条规则 iptables -t nat -R INPUT  (操作)
-L查看 iptables -t nat -L   (查看)
-n所有字段以数字形式显示 (比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL(查看)
-v查看时显示更详细信息,常跟 -L 一起使用   (查看)
--line -number规则带编号 iptables -t nat -L -n --line-number/iptables -t nat -L --line-number
-F

清除链中的所有规则 iptables -F   (操作)

-N新加自定义链
-X清空自定义链的规则,不影响其他链   iptables -X
-Z清空链的计数器 (匹配到的数据包的大小和总和)iptables -Z
-S看链的所有规则或者某个链的规则/某个具体规则后面跟编号

[root@localhost/] # iptables -A INPUT  -s 192.168.17.25 -j REJECT 

跳转

DROP 跳转    (属于已读不回)

REJECT  拒绝     (有回应告诉你,拒绝)

ACCEPT   允许

LOG    日志

SNAT   源地址转换

DNAT   目的地址转换

查iptables  的规则

iptables -vnL [ -t 表名]

[root@localhost/] # iptables -vnL  #[-t 表名]   不加默认filter

如果查看不是  filter 表需要指明表

iptables  -vnL  -t  nat

[root@localhost/] # iptables -vnL -t nat

给规则加上序号:iptables -vnL  --line-num

[root@localhost/] # iptables -vnL --line-num

添加规则   A  I

iptables -A    INPUT   -s 192.168.17.0/24  -j  ACCEPT 或DROP 或REJECT

A 在末尾追加

[root@localhost/] # iptables -A INPUT  -s 192.168.17.25 -j REJECT #禁止192.168.17.25访问我

-I 需要指明序号    -I  INPUT  1 在 INPUT 链的规则第一条前添加,我就变成第一条了

iptables   -I  INPUT 2  -s  192.168.17.0/24  -j  ACCEPT

iptables -I INPUT 1 -s 192.168.17.0 -j ACCEPT #将该条命令变为第一条优先执行

删除规则   

iptables  -D  链  规则序号  iptables  -t  filter -D  INPUT 1  //删除 filter  表中 INPUT 链 中的第2条规则

清空规则

iptables  [-t  表名]  -F

[root@localhost/] # iptables -F  #清空所有规则
[root@localhost/] # iptables -vnL --line-num  #查看规则
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 424 bytes)
num   pkts bytes target     prot opt in     out     source               destination    

替换规则  R

iptables  -R INPUT 1 -s 192.168.17.1 -j  ACCEPT

[root@localhost/] # iptables -R INPUT 1 -s 192.168.17.25 -j REJECT

修改默认规则(默认是允许通过 黑名单) P

iptables  -P  INPUT   DROP  #拒绝所有连接

iptables  -P  INPUT   ACCEPT  #允许所有连接

设置黑名单

[root@localhost~] # iptables -t filter -A INPUT ! -s 192.168.17.25 -j ACCEPT

设置白名单

iptables  -P  INPUT   DROP  #拒绝所有连接
iptables -A INPUT -s 192.168.91.1 -j ACCEPT 
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -j REJECT 

保存防火墙规则

[root@localhost/etc/rc.d] # iptables-save > iptables_rules  #保存规则
[root@localhost/etc/rc.d] # iptables-restore  < iptables_rules   #重新导入规则

iptables-save  > 保存规则的文件   //保存规则

iptables-restore < 保存的规则文件  //重新导入规则

全局配置

[root@localhost/etc/rc.d] # chmod +x rc.local #写完需要加x赋权

[root@localhost/etc/rc.d] # cd /etc/rc.d
[root@localhost/etc/rc.d] # ls
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local

自定义链  

类似函数 将类型

iptables -N    web         (自定义链)

iptables -E web  WEB  (重命名)

创建完之后将规则加入到一个ip上

删除自定义链

先清空自定义链 然后 iptables -x  自定义链名

通用匹配   没有   指明模块

模式匹配  -m   模块名  指定模块

不需要  -m时 -p的模块与-m重复  (iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块)

端口匹配: --sport 源端口、--dport 目的端口

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
[!] --tcp-flags mask comp
     mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
     comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项

--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手
iptables -A INPUT -p tcp  --sport 10000:30000 -j REJEC  #10000到30000 全部被拒

ICMP 

192.168.17.55 可以ping通192.168.17.25   

192.168.17.25不能ping通192.168.17.55

类型匹配: --icmp-type ICMP类型

#可以是字符串、数字代码

"Echo- Request" (代码为8)表示请求

"Echo- Reply" (代码为0)表示回复 "Dest ination-Unreachable" (代码为3)表示目标不可达

[root@localhost~] # iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost~] # iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 

iprange

指明连续的(但一般不是整个网络)ip地址范围

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

iptables -A INPUT  -m iprange --src-range 192.168.17.25-192.168.91.28 -j REJECT 
# 指定 源地址为192.168.91.25-192.168.17.28   3个地址无法访问 当前主机

mac地址

mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains

格式

-m   mac    [!] --mac-source XX:XX:XX:XX:XX:XX

实例

ip -a  #查看mac地址
iptables -A INPUT -m mac --mac-source 00:0c:29:00:e6:dd -j REJECT
#指定mac不可访问

string 字符串

[root@localhost ~]#echo "www.bilibili.com" > /var/www/html/index.html
#自建网页
[root@localhost ~]#echo "www.baidu.com" > /var/www/html/index1.html
#自建网页


[root@localhost ~]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bilibili" -j REJECT 
#注意  请求的包不带字符,回复的包带字符  所以要 output

time模块

根据将报文到达的时间与指定的时间范围进行匹配

[root@localhost ~]#date
#中国标准时间
2022年 08月 14日 星期日 22:26:07 CST
[root@localhost ~]#date -u
#美国标准时间
2022年 08月 14日 星期日 14:26:09 UTC

[root@localhost ~]#iptables -A INPUT  -m time --timestart 14:00 --time 16:00 -j REJECT 
#从14点到16点禁止访问本机
iptables v1.4.21: unknown option "--time"
Try `iptables -h' or 'iptables --help' for more information.
[root@localhost ~]#rpm -ql iptables|grep time
/usr/lib64/xtables/libxt_time.so

connlimit  

根据每客户端IP做并发连接数数量匹配

可防止Dos(Denial of Service,拒绝服务)攻击

--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配
模拟攻击
[root@localhost3 ~]# gcc flood_connect.c -o flood
#编译安装 黑客文件
[root@localhost3 ~]# ./flood 192.168.17.55    
#运行黑客脚本

[root@localhost 7-1]#ss 

[root@localhost1 ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT 

stat

故障案例:启用了iptables state模块  用户访问有问题  查看日志 table full drop  pket

后来研究发现 ,有一个内核选项的默认值 过低 netfilter/nf_conntrack_max  默认65536、

把这个值调大一点

ipatables  -A INPUT -m state --state   NEW #新发起            -j  REJECT
ipatables  -A INPUT  -m state --state  ESTABLISHED  #已经连接    -j   ACCEPT
                  
 新用户不可以访问  就用老的可以访问    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值