iptables

配置与管理iptables防火墙

在这里插入图片描述

一、防火墙概述

1、什么是防火墙
防火墙通常具备以下几个特点。
1)位置权威性。
2)检测合法性。
3)性能稳定性。
2、防火墙的种类
1)包过滤防火墙
2)代理防火墙
3)状态检测技术

二、iptables简介 firewalld

早期的linux系统采用过ipfwadm作为防火墙,但在2.2.0核心中被ipchains所取代。linux 2.4版本发布后,netfilter/iptables信息包过滤系统正式使用。
netfilter/iptables IP数据包过滤系统实际由netfilter和iptables两个组件构成。Netfilter是集成在内核中的一部分,它的作用是定义、保存相应的规则。而iptables是一种工具,用以修改信息的过滤规则及其他配置。用户可以通过iptables来设置适合当前环境的规则,而这些规则会保存在内核空间中。
对于Linux服务器而言,采用netfilter/iptables数据包过滤系统,能够节约软件成本,并可以提供强大的数据包过滤控制功能,iptables是理想的防火墙解决方案。

1、工作原理:

1599563610782.png
在这里插入图片描述

默认的4个规则表

raw表:确定是否对该数据包进行状态跟踪;
mangel表:为数据包设置标记
nat表:修改数据包中的源、目标ip地址或端口
filter表:确定是否放行该数据包(过滤)

默认的5种规则链

INPUT:处理入站数据包;input
OUTPUT:处理出站数据包;output
FORWARD:处理转发数据包;forward
POSTROUTING:在进行路由选择后处理数据包;postrouting
PREROUTING:在进行路由选择前处理数据包;prerouting
其中input、output链主要用在“主机型防火墙”中,主要针对服务器本机进行保护;
而forward/postrouting/prerouting多用在“网络型防火墙”中,如使用Linux防火请作为网关服务器,在公司内网与Internet之间进行安全控制。

2、匹配顺序:

1)规则表之间的顺序:raw mangle nat filter
2) 规则链之间的顺序:不同链的处理时机比较固定,顺序取决于数据包的流向。
a、入站数据流:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后进行路由选择;如果数据包的目的地址是防火墙本机,交给INPUT链进行处理,通过以后再交给系统上层应用程序进行响应。
b、转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后进行路由选择;如果数据包的目的地址是其他外部地址,则交给FORWARD链进行处理,最后交给POSTROUTING链进行处理。
c、出站数据流向:防火墙本机向外部地址发送数据包,首先被OUTPUT链处理,然后进行路由选择,再交给POSTROUTING链进行处理。
3)规则链内部各条防火墙规则之间的顺序:从上往下,一旦匹配,立即终止。
4)Centos7中使用iptables
systemctl stop firewalld 关闭防火墙
yum install iptables-services 安装或更新服务
再使用systemctl enable iptables 启动iptables
最后 systemctl start iptables 打开iptables
再执行service iptables save 保存配置
重启iptables服务:
service iptables restart

三、iptables语法格式

3.1、iptables命令语法格式

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作]
举例:iptables -t filter -A INPUT -s 192.168.10.0/24 -d 192.168.230.135 -p tcp --dport 80 -j ACCEPT
service iptables save 保存设置的规则
service iptables restart 重启服务型规则生效

iptables -t 表名 管理选项 链名 条件匹配 -j 目标动作

注意:
不指定表名时,默认表示filter表
不指定链名时,默认表示该表内所有链
除非设置规则链的缺省策略,否则需要指定匹配条件

3.2、管理选项:

-A :在链尾追加一条新的规则
-I:在指定位置(或者链首)插入一条新的规则
-P:设置指定链的默认策略
-L:列表查看各条规则信息
-D:删除指定位置或内容的规则
-F:清空规则链内的所有规则
-h:查看iptables命令的使用帮助

3.3、举例:

iptables -L 没有-t指定表名,默认查看的是filter表中的信息
iptables -L --line-number 查看的是filter表中的信息,并显示行号
iptables -F 没有-t指定表名,默认清空filter表中的信息
iptables -t fileter -I INPUT -d 192.168.10.132 -p tcp --dport 22 -j REJECT 在链尾追加一条规则
iptables -I INPUT -s 192.168.10.1 -d 192.168.10.132 -p tcp --dport 22 -j ACCEPT 在第一个位置插入一条规则
iptables -I INPUT 2 -s 192.168.75.1 -d 127.0.0.1 -p tcp --dport 22 -j DROP 在第2条规则前插入一条规则
iptables -D INPUT 1 删除INPUT链中的第一条规则
iptables -P INPUT DROP 设置默认策略为拒绝所有连接
iptables -P INPUT ACCEPT 设置默认策略为允许已建立的规则进行连接
iptables -h 查看帮助信息
man iptables 查看iptables手册

四、规则的匹配条件

4.1、通用匹配

可以直接使用、不依赖于其他的条件或扩展模块
包括网络协议、IP地址、网络接口等匹配方式
协议匹配:
使用“-p 协议名” 的形式
协议名可以在“/etc/protocols”文件中定义的名称
常用的协议包括tcp、udp、icmp等
地址匹配:
使用“-s 源地址”、“-d 目的地址”的形式;
地址可以是单个ip地址,也可以是网络地址(带掩码长度)
接口配置:
使用“-i 网络接口名”、“-o 网络接口名”的形式、分别对应接收、发送数据包的网络接口
举例:iptables -t filter INPUT -s 192.168.0.0/24 -j REJECT

4.2、隐含条件匹配

一般需要以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等匹配方式
端口匹配:
使用”–sport 源端口“、”–dport目标端口" 的形式
采用”端口1:端口2“的形式可以指定一个端口范围
TCP标记匹配:
使用”–tcp-flags 检测范围 被设置的标记“的形式
如:”–tcp-flags SYN,RST,ACK SYN“表示检测SYN、RST、ACK这三个标记,只有在SYN为1时满足条件
ICMP类型匹配:
使用”–icmp-type ICMP类型“ 的形式
ICMP类型可以使用字符串或者对应的数值,例如Echo-Request、Echo-Reply

4.3、显示条件匹配

需要使用”-m扩展模块“的形式明确指出匹配方式
MAC地址匹配:
使用”-m mac“结合 ”–mac-source MAC地址“的形式
多端口匹配:
使用”-m multiport“结合”–sports 源端口列表“或者”–dports 目标端口列表“的形式
多个端口之间使用逗号”,“分隔,连续的端口也可以使用冒号”:“分隔;
IP地址范围匹配:
使用”-m iprange“结合”–src-range 源IP范围“ 或者”–dst-range 目标IP范围“ 的形式
以”-“符号连接起始IP地址、结束IP地址

4.4、目标动作:

常见的数据包处理方式:
ACCEPT:放行数据包
DROP:丢弃数据包
REJECT:拒绝数据包
SNAT:修改数据包的源地址信息
DNAT:修改数据包的目标地址信息

保存防火墙规则:
service iptables save

五、练习与作业

举例说明:
1.拒绝192.168.0.1访问web服务
iptables -A INPUT -s 192.168.0.1 -p tcp --dport 80 -j REJECT
2.拒绝192.168.0.0/24 ping通服务器
iptables -A INPUT -s 192.168.0.0/24 -p icmp -j REJECT
3.允许192.168.1.0/24访问服务器的21与80端口
iptables -A INPUT -s 192.168.1.0/24 -m multiport -p tcp --dports 21,80 -j ACCEPT

练习:

1、建立规则:
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p udp --sport 25 -j DROP
iptables -I INPUT -s 192.168.0.0/24 -j REJECT
2、删除规则:
iptables -D INPUT -p icmp -j DROP
iptables -D INPUT 1
3、基于TCP包的目的端口来匹配包
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
4、基于目标网络来匹配包
iptables -I OUTPUT -d 192.168.1.0/24 -j ACCEPT
5、以包离开本地所使用的网络来匹配包
iptables -A OUTPUT -o eth1 -j ACCEPT

作业:

1、查看nat表中所有链的规则
iptables -t nat -L OUTPUT
2、查看filter表中FORWARD链的规则
iptables -t filter -L FORWARD
3、为filter表的INPUT链添加一条规则,规则为拒绝所有使用ICMP协议的数据包
iptables -A INPUT -p icmp -j DROP将数据包丢弃,不回应
REJECT丢弃并回应
4、为filter表的INPUT链添加一条规则,规则为允许访问TCP协议的80端口的数据包通过
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
5、在filter表中INPUT链的第2条规则前插入一条新规则,规则为不允许访问TCP协议的53端口的数据包通过。
查看:iptables -L -n --line-number (显示规则的序号:num)
iptables -I INPUT 2 -p tcp --dport 53 -j DROP
6、在filter表中INPUT链的第1条规则前插入一条新规则,规则为允许源IP地址属于172.16.0.0/16网段的数据包通过。
iptables -I INPUT 1 -s 172.16.0.0/16 -j ACCEPT
7、删除filter表中的第2条规则。
iptables -D INPUT 2
8、清除filter表中INPUT链的所有规则。
iptables -t filter -F INPUT
9、禁止员工访问域名为www.xxxx.org 的网站(域名必须存在,且能被解析,否则会出错)
iptables -A FORWARD -d www.xxxx.org -j DROP
iptables -A INPUT -d www.xxxx.org -j DROP
10、禁止员工访问IP地址为212.1.2.3的网站。
iptables -A FORWARD -d 212.1.2.3 -p tcp --port 80 -j DROP

补充:
备份规则集:iptables-save > /etc/iptables-save
恢复规则集:iptables-restore < /etc/iptables-save
保存:service iptables save

综合案例:

NAT:网络地址转换
源地址转换:通常指私有地址转换成公有地址,内网访问互联网。
目标地址转换:公网地址转换成私有地址,互联网访问内网服务器。
假如某公司需要Internet接入,由ISP分配IP地址202.112.113.112。采用iptables作为NAT服务器接入网络,内部采用192.168.1.0/24地址,外部采用202.112.113地址。为确保案例需要配置防火墙功能,要求内部web服务器192.168.1.100通过端口映射方式对外提供服务。网络拓朴图如下:
SNAT:源地址转换,通常指私有地址转换为公有地址,(内部数据发往外网的数据)对应的链是postrouting(路由规则后的动作)
DNAT:目标地址转换,通常指公有地址转换为私有地址,(外网数据发往内网的数据)
对应的链是prerouting(路由规则前的动作)
在这里插入图片描述

局域网内的web服务器192.168.1.100
Linux网关服务器:eth0:202.112.113.112 eth1:192.168.1.1
Inetrnet中的客户机:202.113.111
推荐实现步骤:
1、 确认已开启网关的路由转发功能
vim /etc/sysctl.conf
sysctl -p
2、 添加使用DNAT策略的防火墙规则
iptables -t nat -A PREROUTING -i eth1 -d 10.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1

3、源地址转换

客户端的网关–》防火墙的内网地址–》防火墙开转发

防火墙SNAT规则的操作:

​ iptables -t nat -I POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 172.16.100.20

​ 开启转发:

​ sed -i ‘s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/’ /etc/sysctl.conf

​ sysctl -p

测试效果:

​ 在客户端ping 172.16.100.10能ping通 。

去互联网机器上查看访问的ip地址是防火墙的外网地址。172网段的。

DNAT目的地址转换,意为把外网地址转换成私网地址。

​ DNAT是destination network address translation的缩写

当互联网上的用户来访问公司内网的服务器的时候,把公网的ip地址转换成公司的内网ip地址,当在服务器查看的时候发现是内网地址来访问的,这就是DNAT的作用。

互联网客户端防火墙内网服务器
IP:172.168.100.2外网:172.168.100.1IP:192.168.1.2
GW:172.168.100.1内网:192.168.1.1GW:192.168.1.1

开启:转发

iptables -t nat -I PREROUTING -d 172.168.100.1 -j DNAT --to-destination 192.168.1.2

测试ping通了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值