1.Netfileter/iptables(以下简称iptables)防火墙简介 3
4.3拒绝转发来自192.168.1.10主机信息,允许转发来自192.168.0.0/24网段的数据 7
4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包 8
4.5封堵网段172.16.0.0/12 2分钟后候解封 8
4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机 9
4.7允许本机开放的端口从TCP端口20-1024提供的应用服务 9
4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包 10
4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机 10
4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280 11
4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包 11
4.13禁止转发与正常TCP连接无关的非--syn请求的数据包 12
4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包 12
4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理 13
5.1添加允许防火墙转发除icmp协议以外的所有数据包 13
1.Netfileter/iptables(以下简称iptables)防火墙简介
- unix/linux自带的开源,且基于包过滤的防火墙工具
- 可对流入和流出服务器的数据包进行控制
- 可在低配的硬件上运行
- 是Linux2.4及2.6内核中集成的服务
- 在OSI七层的二、三、四层上工作
- iptables是防火墙的管理工具,位于/sbin/iptables,真正实现功能的是netfilter,他是Linux内核中实现包过滤的内部结构
- iptables包含四个表5个链,其中表是按照对应数据包的操作区分的,链是按照不同的HOOK点来区分的,表和链实际上是neifilter的两个维度
表(table)
iptables是表的容器,iptables包含的各个表
链(chains)
Iptables表是链的容器
INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
规则(Policy)
链是规则的容器
1.filter表(是iptables默认使用的表)
作用:过滤流经主机的数据包
内核模块:Iptables_filter
规则链
- INPUT
- FORWARD
- OUTPUT
2.nat表
作用:
- 负责网络地址转换,即来源与目的IP地址和port的转换;
- 和主机本身没有关系,一般用于局域网或者特殊的端口转换服务相关;
- nat功能相当于网络的ACL控制,和网络交换机的ACL类似.
内核模块:iptables_nat
规则链:
- OUTPUT
- PREROUTING
- POSTROUTING
3.Mangle表(基本用不倒)
作用:
- 修改数据包的服务类型、TTL;
- 可以配置路由实现QOS内核模块
内核模块:iptables_mangle
规则链:
- PERROUTING
- POSTROUTING
- INPUT
- OUTPUT
- FORWARD
4.Raw表(RHEL4没有此表)
作用:决定数据包是否被状态处理机制处理
内核模块:iptables_raw
规则链:
- OUTPUT
- PREROUTING
注意:表的处理优先级:Raw>mangle>nat>filter
INPUT:用来过滤目标地址是主机地址的数据包
OUTPUT:处理源地址是本机地址的数据包
PREROUTING:数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址和目的端口等
POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包源地址,源端口,例如:我们现在的笔记本和虚拟机都是192.168.30.0/24,在出网的时候被我们的企业路由器把源地址改为了公网地址,主要应用在局域网共享上网
FORWARD:负责转发主机数据包,和NAT关系很大。LVS NAT模式,net.ipv4_forward=1
2.4.1第一种情况
入站数据流向
- 从外界达到防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址);
- 之后进行路由选择(判断数据包应该发往何处),如果数据包的目标主机是防火墙本机(例如Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其转给INPUT链进行处理(决定那个是否能够通过);
- 通过以后再交给系统上层的应用程序(例如Apache服务器)进行响应
2.4.2第二种情况
转发数据流向
- 来自外界的数据包到达防火墙之后,先被PREROUTING规则连处理;
- 之后进行路由选择,如果数据包的目标地址是其他外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理,(是否转发或拦截);
- 然后再交给POSTROUTING规则链(是否修改数据包的地址)进行处理
2.4.3第三种情况
出站数据流向
- 防火墙本机想外部地址发送数据包(比如说在防火墙本机中测试公网DNS服务器时),首先被OUTPUT规格链处理;
- 之后进行路由选择,然后在传递给POSTROUTING规则连(是否修改数据包源地址等)进行处理
Iptables[-t 表名] 命令选项 [链名] [条件匹配] [ -j 目标动作和跳转]
说明:
- 表名,链名用于指定iptables命令所操作的表和链
- 命令选项:用于指定管理iptables规则的方式(如:插入、增加、删除、查看)
- 目标动作和跳转:用于指定数据包的处理方式(如:通过、拒绝、丢弃、跳转给其他的链处理)
-A(append):在指定的链的末尾添加一条新的规则
-D(delete):指定链中的某一条规则,可以按规则序号和内容删除
-I(insert):在指定链中插入一条新的规则,默认在第一行添加
-R(replace):修改、替换指定链中的某一条规则,可以按照序号和内容进行替换
-L(list):指定链中所有的规则进行查看
-F(flush):清空所有的规则
-N(new-chain):一条用户自己定义的规则链
-X(delete-chain):删除指定表中用户自定义的规则链
-P(policy):设置指定链的默认策略
-N(numeric):使用数字显示输出结果
-V(version):查看版本
-h(help):获取帮助
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给任何回应消息
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息
LOG在/var/log/message文件中记录日志信息,然后将数据包传递给下条规则
3.4.1原理:
Iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
3.4.2保存规则的方法
第一种
使用Iptables-save来保存
Iptables-save > /etc/sysconfig/iptables //来生成保存规则的文件
第二种:
使用service iptables save //他能把规则自动保存在/etc/sysconfig/iptables中
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则
a)规则从上往下匹配,只要匹配到就不往下匹配,如果没有匹配上就走默认规则
b)防火墙是层层过滤的,实际上是按照配置规则的顺序从上到下,从前到后进行匹配的
c)如果匹配上规则,则明确表明是阻止还是通过,数据包就不在匹配新的规则
d)如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配默认得到明确的阻止还是通过
e)防火墙默认规则是对应链的所有规则执行完成后才会执行的
命令:[root@localhost sysconfig]# iptables -I INPUT -p icmp -j REJECT
[root@localhost sysconfig]# iptables -A FORWARD ! -p icmp -j ACCEPT
4.3拒绝转发来自192.168.1.10主机信息,允许转发来自192.168.0.0/24网段的数据
-s:指定源地址
命令:[root@localhost sysconfig]# iptables -I FORWARD -s 192.168.1.10 -j REJECT
命令:[root@localhost ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包
-i:指定网卡
命令:
[root@localhost ~]# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i eht0 -s 172.16.0.0/12 -j DROP
命令:
[root@localhost Desktop]# iptables -A INPUT -s 172.16.0.0/12 -j DROP //禁止172.16.0.0/12的网段
[root@localhost Desktop]# at now +2 minutes //增加一次性任务2分钟后删除此规则
at> iptables -D INPUT 1
at> <EOT>
job 5 at 2018-10-03 12:58
4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机
命令:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -s 172.16.0.0/12 -j ACCEPT //只允许源172.16.0.0/12的地址的22端口的tcp协议进入
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP //丢弃端口22的TCP协议
4.7允许本机开放的端口从TCP端口20-1024提供的应用服务
命令:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT //在入站链中添加本机允许TCP20-1024端口进入的
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT //在出站链中添加的本机允许TCP20-1024端口出去
!!!此处特别注意:
对于INPUT链dsport指的是本地的端口
对于OUTPUT链sport指的是本地的端口
4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包
命令:
[root@localhost ~]# iptables -A FORWARD -s 172.16.1.20 -p udp --sport 53 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -d 172.16.1.20 -p udp --dport 53 -j ACCEPT
4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机
命令:
[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
命令:
[root@localhost ~]# iptables -I INPUT -m mac --mac-source 80:18:44:DF:F6:81 -j DROP
说明:iptables中使用‘-m 模块关键字’的形式调用显示匹配。咱们这里用‘-m mac -mac-source’来表示数据包的源MAC地址
4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
命令:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
说明:这里使用‘ -m multiport --dport ’来指定目的端口及范围
4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包
命令:
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
说明:此处用‘ -m iprange --src-range’来指定IP地址的范围
4.13禁止转发与正常TCP连接无关的非--syn请求的数据包
命令:
[root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
说明:‘-m state’表明数据包的连接状态,‘NEW’表示与任何连接无关的
4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包
命令:
[root@localhost ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP //丢弃新建的TCP连接
[root@localhost ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT //接受已经建立的连接
说明:
‘ ESTABLISHED’表示已经响应或者已经建立连接的数据包,‘RELATED’表示与建立连接有相关性的连接
4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理
命令:
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT //允许接受20.21.80端口
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT //允许接受20450到20480端口
[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT //接受已响应连接和已建立连接
[root@localhost ~]# iptables -P INPUT DROP //为INPUT链建立默认规则,入站数据包全部丢弃
解决:虽然会报错但是添加规则的命令还是会被执行,报错信息显示”Using intrapositioned negation is deprecated (` --option ! this`)”使用内部缺陷,属于BUG问题,”in favor of extrapositioned (` ! --option this`)”表是支持的方式为 ! --option this 这样就可以解决此报错问题
Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).
Intrapositioned 内陷的
Negation 否定
Deprecated 贬低
Extrapositioned 外置 外部转换