防火墙基本配置于介绍


Iptables防火墙配置简单使用

Linux的防护墙主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或者称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率。
在许多安全技术资料netfilter和iptables都用来指Linux防火墙,两者的区别如下:
Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙。(内核空间)
Iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于“用户态”的防火墙管理体系。(用户空间,管理工具)。
Iptables表、链结构
Iptables的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的的或具有某些协议特征的数据包应该如何处理。为了更加方便地组织和管理防火墙规则,iptables采用了“表”和“链”的分层结构。
其中,每个规则表相当于一个内核空间的一个容器,根据规则集的不同用途划分为默认的四个表;在每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链;而决定是否过滤或处理数据包的各种规则,按先后顺序放在各种规则链中。
规则表:
为了从规则集的功能上有所区别,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现。这四个表的名称、包含的链及各自的用途如下:
Filter表:filter表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。Filter表对应的内核模块为iptable_filter,表内包含三个链,即INPUT、FORWARD、OUTPUT。
nat 表:nat(Network address Trstion.网络地址转换)表主要用来修改数据包的ip地址、端口号等信息。Nat表对应的模块为iptable_nat,表内包含三个链,即PREROUTING、POSTROUTNG. OUTPUT. (作地址转换)
mangle表:mangle表用来修改数据包的TOS(服务类型)、TTL(生存周期),或者为数据包设置Mark标记,以实现流量整形、策略路由等高级应用。mangle表对应的内核模块为iptable_mangle,表内包含五个链,即PREROUTING、POSTROUTING、INPUT、 OUTPUT. FORWARD.
raw表:raw表是自1.2.9 以后版本的iptables新增的表,主要用来决定是否对数据包进
行状态跟踪,raw表对应的内核模块为iptable_raw.表内包含两个链, 即OUTPUT、PREROUTING.
在iptables的四个规则表中mangle 表和raw表的应用相对较少。 因此这里不多介绍。
规则链(容纳各种防火墙规则):
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables 默认划分为五种不同的规则数据链,这五种链的名称、各自的介入时机如下:
INPUT链:当收到访问防火墙本机地址的数据包(入站时),应用此链中的规则。
OUTPUT链 :当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。
PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。
POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。
其中,INPUT、OUTPUT链主要用在“主机型防火墙中”,即主要针对服务器进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙中”,如使用Linux防火墙作为网关服务器,在公司内网与Internet之间进行安全控制。
编写防火墙规则:
其主要说的是作为netfilter防火墙的管理工具----iptables命令的使用。
Iptables基本规则:

iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

其中表名、链名用来指定iptables命令所操作的表和链,未指定时默认使用filter表;管理选项表示iptables规则的操作方式,如插入、增加、删除、查看等;匹配条件用来指定要处理的数据包的特征、不符合指定条件的数据包不会处理;控制类型指的是数据包的处理方式,如:允许、拒绝、丢弃等。
对于防火墙、数据包的控制类型非常关键、直接关系到数据包的放行、封堵及做相应的日志记录等。在iptables防火墙体系中,最常用的几种控制类型如下:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应信息。
REJECT:拒绝数据包通过,必要时会给数据发送一个响应信息。
LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则。防火墙规则的“匹配即停止”对于LOG操作来说是一个特例。因为LOG只是一种辅助的动作,并没有处理数据包。
Iptables简单使用:

service iptables start|stop|restart|save

选项:
-A:在指定链的末尾添加一条新规则
-D:删除指定链中的某一条规则,可指定规则顺序号或具体内容
-I:在指定链中插入一条新的规则,未指定序号时默认作为第一条规则
-R:修改、替换指定链中的某一条规则,可指定规则序号或具体内容
-L:列出指定链中所有的规则,若未指定链名,则列出表中所有的链
-F:清空指定链中所有的规则,若未指定链名,则清空表中所有链
-P:设置指定链的默认策略
-n:使用数字形式显示输出结果,如显示IP地址而不是主机名
-v:查看规则列表时显示详细的信息
-h:查看命令帮助信息
–line-numbers:查看规则列表时,同时显示规则在链中的顺序号。

使用练习:
查看iptables防火墙策略:

  • iptables -L -n –v 默认是filter表的(结合使用时-L不要放在首位) 查看其它表的:

    iptables -t nat -n -v –L 如果你只希望查看特定的表,可以在 -t 参数后跟上要单独查看的表名。 屏蔽某个IP地址:

    iptables -A INPUT -s 192.168.152.199 -j DROP 如果你只想屏蔽 TCP 流量,可以使用 -p 参数的指定协议:

    iptables -A INPUT -p tcp -s 192.168.152.199 -j DROP 解封对IP地址的屏蔽:

    iptables -D INPUT -s 192.168.152.199 -j DROP IPtables 关闭特定端口,阻止特定的传出连接:

    iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT 阻止特定的传入连接:

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT 使用 multiport 我们可以一次性在单条规则中写入多个端口,例如:

    iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

    iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT 在 IPtables 中 IP 地址范围是可以直接使用 CIDR 进行表示的,例如:

    iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT 有时我们需要将 Linux 服务器的某个服务流量转发到另一端口,此时可以使用如下命令(上述命令会将所有到达 eth0 网卡 25

    端口的流量重定向转发到 2525 端口。 ):

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

对 Linux 禁 PING 可以使用如下规则屏蔽 ICMP 传入连接:

iptables -A INPUT -p icmp -i eth0 -j DROP

环回访问(127.0.0.1),建议大家都开放:

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

使用如下规则可以屏蔽指定的 MAC 地址:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

要清空 IPtables 链可以使用如下命令:

iptables -F

要清空特定的表可以使用 -t 参数进行指定,例如:

iptables -t nat –F

使用–line-number找出该条规则的行号,再通过行号删除规则。

iptables -nL --line-number

iptables -D INPUT 2

iptables -t filter -I INPUT -s 192.168.2.85 -d 192.168.2.93 -j DROP

例:拒绝来自85主机的tcp类型的请求

iptables -t filter -I INPUT -s 192.168.2.85 -d 192.168.2.93 -p tcp -j REJECT

匹配网卡接口:
当本机有多个网卡时,我们可以使用-i选项去匹配报文时通过哪块网卡流入本机的

iptables -t filter -I INPUT -i eth0 -p icmp -j DROP

除了icmp协议的数据包,别的协议的包都能转发

ptables -A FORWARD ! -p icmp -j ACCEPT

192.168.1.11是企业内部的web服务器,eth1是网关防火墙的外网网卡,意思是:源地址为192.168.1.11的这台服务器tcp80端口可以回应外网请求,因为eth1是外网网卡,FORWARD转发链也对其ACCEPT了。
#iptables -I FORWARD -s 192.168.1.11 -o eth1 -p tcp --sport 80 -j ACCEPT
关于匹配条件:
-i 指定网卡名称,上例表示丢弃由eth4网卡流入的icmp类型的报文
-o 指定报文时从哪个网卡流出的
-i 只能用于FORWARD、OUTPUT、POSTROUTING链
-o 只能用于FORWARD、OUTPUT、POSTROUTING链
-d 指定目标地址,也可与!连用,表示取
1、协议匹配:-p 协议名
2、地址匹配:-s 源地址、-d 目的地址
3、接口匹配:-i 入站网卡、-o 出站网卡
1、通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
2、隐含匹配:要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件
3、显式匹配:要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
一、常规匹配
1、协议匹配
-p协议名
例:若要丢弃通过icmp协议访问防火墙本机的数据包、允许转发经过防火墙的除icmp协议的数据包
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD -P ! icmp -j ACCEPT
2、地址匹配
例:拒绝转发源地址为192.168.1.11的数据、允许转发源地址位于192.168.7.0/24网段的数据
iptables -I FORWAED -s 192.168.1.11 -j REJECT
iptables -I FORWAED -s 192.168.7.0/24 -j ACCEPT
3、网络接口匹配
例: 丢弃从外网接口(eth1)访问防火墙本机且源地址为私有地址的数据包
iptables -I INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -I INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -I INPUT -i eth1 -s 192.168.0.0/16 -j DROP
二、隐含匹配
1、端口匹配
例:允许为网段192.168.4.0/24转发DNS查询数据包
iptables -A FORWAED -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWAED -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
例:构建Vsftpd服务器时,要开放20、21端口,以及用于被动模式的端口范围24500~24600
iptabels -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptabels -I INPUT -p tcp --dport 24500:24600 -j ACCEPT
2、ICMP类型匹配
代码8为请求 0为回显 3为目标不可达
例:禁止其他主机ping本机,但是允许本机ping其他主机
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
三、显示匹配
1、多端口匹配
使用“-m multiport --dports 端口列表”、“-m multiport --sports 端口列表”的形式,来检查数据包的源端口和目标端口,端口直接以逗号分隔。
例:允许本机开放25、80、110、143端口
iptables -I INPUT -p tcp -m multiport --dports 25,80,110,143 -j ACCEPT
2、ip范围匹配
使用“-m iprange --src-range IP范围”、“-m iprange --dst-range IP范围”的形式,用来检查数据包的源地址和目标地址。
例:禁止转发源地址位于192.168.4.21与192.168.4.28之间的tcp数据包
iptables -A FORWAED -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j DROP

猜你喜欢

转载自blog.csdn.net/weixin_54632015/article/details/112765767