防火墙概念与iptables命令详解

防火墙的相关概念

从逻辑上分类:
主机防火墙:为单个主机进行防护
网络防火墙:对网络入口进行防护。服务防火墙背后的本地局域网
主机防火墙:(个人)和网络防火墙(集体)相辅相成
从物理上分类:
硬件防火墙:硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台上的防火墙,性能低,成本低。

小面试题:iptables和netfilter什么关系?
iptables是客户端工具,其设置的所有规则都会在netfilter里面生效,netfilter是底层的安全框架。
工作原理:IPtables根据它的rule匹配而对数据包进行:放行(accept),拒绝(reject)和丢弃(drop)等动作rule存储在内核空间的信息过滤表中,这些规则指定:源地址、目的地址、传输协议(TCP、UDP、ICMP等)和服务类型(Http、FTP和SMTP)等
IPTABLES:一个客户端代理,将用户的安全设定执行到对于的“安全框架—netfilter”中
netfilter:才是防火墙真正的安全框架(framework)位于内核空间
netfilter—内核空间
iptables—用户空间的客户端代理

五链四表

在这里插入图片描述

五链

iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链。
规则链则依据数据包的位置不同分类
PREROUTING(路由之前匹配
在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT
处理入站的数据包
OUTPUT
处理出站的数据包
POSTROUTING(路由后
在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
FORWARD(不经过系统内核,转发
处理转发的数据包

不同数据包经过的链的情况

  • 如果我们需要报文转发,则不经过input链,output链。只需要:PREROUTING(路由前),转发(forward),路由后(postrouting)
  • 常用应用场景,报文流向:
    到本地某个进程的报文:PREROUTING‐‐> INPUT‐‐>OUTPUT ‐‐>POSTROUTING
    由本机转发的报文:PREROUTING ‐‐> FORWARD ‐‐> POSTROUTING
    由本机的某个进程发出报文(通常为响应报文): OUTPUT ‐‐> POSTROUTING

四表

iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
raw表:
关闭nat上启用的连接追踪机制
mangle表:
拆解报文、修改报文、重新封装报文
nat表:
网络地址转换
filter表
负责过滤功能,防火墙。
规则表的先后顺序:raw→mangle→nat→filter在这里插入图片描述

表链关系

相同规则的集合叫做表,多张表的集合叫做链,不是每条链上都有四张表。
PREROUTING:raw/mangle/nat
INPUT:mangle/filter/nat
OUTPUT:raw/mangle/nat/filter
POSTROUTING:mangle/nat
FORWARD:mangle/filter
实际上在操作过程中,是通过表作为入口进行操作,通过表查询定义的规则,操作规则

iptables规则是由匹配条件和处理动作两部分组成。
链的规则和默认规则的设置一般有白名单和黑名单的两种方式
如果默认规则的设置为DROP的话就是白名单模式,我们需要将想要放行的数据添加的规则中
如果默认规则的设置为ACCEPT的话就是黑名单模式,我们需要将想要拒绝的数据包添加到规则中

规则概念:

规则:根据指定的匹配条件来尝试匹配每个经流“关卡”的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。
匹配条件:
基本匹配条件:sip、dip
扩展匹配条件:sport、dport
扩展条件也是条件的一部分,只不过使用的时候需要用-m参数声明对应的模块
处理动作:
常用动作:

accept:接受
drop:丢弃
reject:拒绝
snat:源地址转换,解决内网用户同一个公网地址上网的问题。
masquerade:是snat的一种特殊形式,使用动态的、临时会变的ip上
dnat:目标地址转换
redirect:在本机作端口映射
log:记录日志,/var/log/messages文件记录日志信息,然后将数据包传递给下一条规则

iptables用法

常用格式:
iptables[-t表名]选项[链名][条件][-j控制类型]
iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]
iptables -t指定表名
在这里插入图片描述在这里插入图片描述每个字段的解释
policy:当前链的默认策略,当所有规则都没有匹配成功时执行的策略
packets:当前链默认策略匹配到的包的数量
bytes:当前链默认策略匹配到的包的大小
pkts:对应规则匹配到的包数量
bytes:对应规则匹配到的包大小
target:对应规则执行的动作
prot:对应的协议,是否针对某些协议应用此规则
opt:规则对应的选项
in:数据包由哪个接口流入
out:数据包由哪个接口流出
source:源ip地址
distination:目的ip地址

查看规则:iptables -t filter -vxL或者iptables -save 将规则保存下来,会以命令的方式保存下来。

操作规则:
清除所有规则:iptables -t filter -F INPUT(慎用)
增加规则:iptable -A INPUT -s 192.168
删除规则:
删除规则
方法1,根据规则的编号进行删除规则
#iptables -t filter -vxl INPUT --line-number显示编号
#iptables -t filter -D 1
方法2,根据具体的匹配条件去删除规则
iptables -t filter -D INPUT [匹配条件] [处理动作]
例如:#iptables -t filter -D INPUT -s 192.168.120.100 -j DROP
-D只是删除某一条规则,-F是清除整条链上的规则

修改单个规则:
#iptables -t filter -R INPUT 1 -s 192.168.120.100 -j ACCEPT
修改链的默认规则:(默认规则不能是DROP)默认规则与放行规则相反
#iptables -t filter -P INPUT [处理动作]
保存与恢复:
#iptables-save /etc/sysconfig/iptables
#iptables-restore < /etc/sysconfig/iptables
转发本地端口:
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRECT --to-port 22
自定义链
当默认链的规则非常多的时候,不方便管理。比如有五十条针对http的规则,有两条针对ssh规则的,有一条针对icmp为了方便管理可以将五十条的http规则重新写到一个自定义链中,以后就可以在这个自定义链中增加有关http协议的规则。
使用自定义链:先创建再引用最后创建规则

创建自定义链	-N自定义链
iptables -t filter -N http_chain
引用自定义链	-I:引用自定义链 -p:指定协议 --deport:指定端口 
iptables -I INPUT -p tcp --dport 80 -j http_chain
创建规则(和五链使用方法一样)
iptables -t filter -A http_chain -s 192.168.80.1 -j REJECT
iptables -t filter -A http_chain -s 10.1.0.0/16 -j REJECT

删除自定义链
先删除引用,后删除链上的规则,最后删除链

删除引用
[root@localhost ~]# iptables -t filter -D INPUT -p tcp --dport 80 -j
http_chain
删除链上所有规则
[root@localhost ~]# iptables -F http_chain
删除链
[root@localhost ~]# iptables -X http_chain

匹配条件

基本匹配条件:
-s:指定源ip地址
-d:指定目的ip地址
-p:指定协议类型
-i:指定网卡流入,PREROUTING/INPUT/FORWARD
-o:指定网卡流出,OUTPUT/POSTROUTING
扩展条件:
-m 扩展模块
tcp/udp
–dport:指定目的端口
–sport:指定源端口
iprange:匹配报文的源/目的地址所在范围
–src-range
–dst-range
string:指定匹配报文中的字符串
–algo:指定匹配算法,可以是bm/kmp
–string:指定需要匹配的字符串
time:指定匹配报文的时间
–timestart
–timestop
–weekdays
–mouthdays
–datestart
–datestop
connlimit:限制每个ip连接到server端的数量,不需要指定ip默认就是针对每个ip地址
–connlimit-above:最大连接数
limit:对报文到达的速率继续限制,限制包数量
10/second
10/minute
10/hour
10/day
–limit-burst:空闲时可放行的包数量,默认为5
state模块:用于针对tcp连接进行限制
–state NEW:连接中的第一个包的状态是NEW
ESTABLISHED:NEW状态后面的包是ESTABLISHED
RELATED:与命令连接中的报文有关系,比如ftp服务有连个进程,一个是命令进程一个是数据
进程
INVALID:如果一个包没有办法被识别,或者这个包没有任何装填,我们是能够主动屏蔽状态为
INVALID的报文
UNTRACKED:表示报文为未被追踪状态

例子:
1.允许所有的SSH的请求
解:分为两个命令,一个处理入站的命令,一个处理出站的命令。
-A 添加规则 -i:指定从哪个网卡进来 -p:指定协议 --deport :指定端口 -m:指定模块
入站# iptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
出站# iptables -A OUTPUT -o ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
出站没有NEW表示自己不能连接其他机器,只能别人连接自己。

2.仅允许来自指定网络的SSH连接请求

#iptables -A INPUT -i ens33 -p tcp -s 192.168.120.100/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -i ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

NAT案例:

  1. 先经过 NAT table 的 PREROUTING 链;
  2. 经由路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
  3. 再经过 Filter table 的 FORWARD 链;
  4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。
    NAT 主机的重点就在于上面流程的第 1,4 步骤,也就是 NAT table 的两条重要的链:PREROUTING 与POSTROUTING。 那这两条链重要功能在于修改IP,而这两条链修改的IP又是不一样的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。由于修改的 IP 不一样,所以就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。
    在这里插入图片描述
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/50-default.conf
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT --to-source 10.1.0.59
# 下面这条是PAT
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j MASQUERADE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值