centos防火墙iptables不求人
  q1aWAeXI3uNc 2023年11月02日 44 0


文章目录

  • ​​概念介绍​​
  • ​​防火墙和netfilter/iptables​​
  • ​​iptables的表与链​​
  • ​​iptables规则​​
  • ​​iptables 服务管理​​
  • ​​iptables配置命令​​
  • ​​链的操作​​
  • ​​规则操作​​
  • ​​规则匹配条件​​
  • ​​通用匹配​​
  • ​​扩展匹配​​
  • ​​iptables动作总结​​
  • ​​常用规则示例配置​​
  • ​​网络防火墙​​

概念介绍

防火墙和netfilter/iptables

从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。
主机防火墙:针对于单个主机进行防护
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网
网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

netfilter和iptables/ip6tables
iptables其实不是真正的防火墙,我们可以把它理解成防火墙的管理工具,通过这个工具将用户的安全策略设定到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,在centos中这个框架的名字叫netfilter。netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
netfilter/iptables组成Linux平台下的包过滤防火墙,免费且可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables的规则结构:iptables -> Tables -> Chains -> Rules. 简单地讲,tables由chains组成,而chains又由rules组成。

iptables的表与链

表(tables) 是链的容器,每个表包含规则链来实现特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

链(chains) 是规则的容器,属于某一张表,iptables内置了5个链,这是处理网络请求的钩子,包含很多指定的规则,用来实现特定的功能。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

iptables 的内建表 和 每个表内建的链 如下:(不用配置 ,安装启动iptables后就具有的表和链 )

1. Filter表

Filter是iptables的默认表,用来实现包过滤功能,它具有以下三种内建链:

INPUT链 – 处理来自外部的请求数据。

OUTPUT链 – 处理向外发送的数据。

FORWARD链 – 将数据转发到本机的其他网卡设备上。

2. NAT表

NAT表用来实现网络地址转换功能,有三种内建链:

PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。

POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。

OUTPUT链 – 处理本机产生的数据包。

3. Mangle表

Mangle表用于实现包重构(修改)。具有5个内建链:

PREROUTING

OUTPUT

FORWARD

INPUT

POSTROUTING

4. Raw表

Raw 用于实现数据跟踪处理,它具有2个内建链:

PREROUTING chain

OUTPUT chain

以上简称四表五链,以下是表五链的数据处理流程

centos防火墙iptables不求人_limit

iptables规则

规则会归属到某一个规则链中,用于实现具体的处理策略。如 来自某个ip的数据包直接拒绝等。

Rules包括一个条件和一个目标(target)

如果满足条件,就执行目标(target)中的规则或者特定值。

如果不满足条件,就判断下一条Rules。目标值(Target Values)

如下 input chain 中包含了很多的规则 每条规则 都有一个 target 和 条件

centos防火墙iptables不求人_iptables_02

iptables 服务管理

服务的安装启动
在centos7中默认采用firewalld 作为防火墙服务,可以通过如下命令 安装、启用 iptables 服务

[root@host~]# systemctl stop firewalld
[root@host~]# systemctl disable firewalld
[root@host~]# yum install iptables-services
[root@host~]# systemctl start iptables
[root@host~]# systemctl enable iptables

服务规则列表的查看

Iptables –L –n 或者 iptables –L –n –t filter 或者 iptables –L –n –x –v 
中文说明:
-L :列出一个或所有链的规则
-v:显示详细信息、包括每条规则匹配包数量和匹配字节数 可以多个v v越多显示越详细 如 -vvv
-x:在v的基础上、进制自动单位换算(K,M)
-n: 只显示IP地址和端口号码。不显示域名和服务名称
-t : 接表名、如果不加-t,默认就是 –t filter

示例:

[root@localhost ~]# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 52 packets, 7508 bytes)
pkts bytes target prot opt in out source destination
52 7508 PREROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0
52 7508 PREROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
52 7508 PREROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
Iptables –F  ###清除所有规则   同Iptables –flush
Iptables –X ####删除用户自定义的链
Iptables –Z ####链的计数器清零
所有的操作都是针对表的 默认操作 filter表 ,如果要操作其他表 使用 -t 参数

iptables防火墙规则的持久化与恢复
iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载
使用命令iptables-save来保存规则。一般用
iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
生成保存规则的文件 /etc/sysconfig/iptables
也可以使用 service iptables save 它能把规则自动保存在/etc/sysconfig/iptables中
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则

iptables配置命令

iptables的规则基本语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

centos防火墙iptables不求人_limit_03

iptables命令的管理控制选项
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

防火墙处理数据包的四种方式(target)
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

链的操作

iptables -P INPUT DROP – 设置input链默认策略为丢弃
iptables -t nat -F PREROUTING --清空nat 表 PREROUTING 链的规则
iptables -t nat -F 清空nat表的所有链
iptables -t nat -N inbound_tcp_web 新建链inbound_tcp_web
iptables -t nat -E oldname newname 重命名链
iptables -t nat -X 删除用户自定义链
iptables -t nat -Z 清空计数器

自定义链
当规则太多不容易管理的时候 我们可以通过自定义链,将不同功能的规则放到指定的自定义链中,以方便管理。如:创建一个链来专门处理针对80端口的数据包。

[root@host~]#iptables -t filter -N IN_WEB   新建自定义链
[root@192 ~]# iptables -nvL IN_WEB --查看链中规则清单
Chain IN_WEB (0 references)
pkts bytes target prot opt in out source destination
[root@192 ~]# iptables -t filter -A IN_WEB -p tcp --dport 80 -j ACCEPT  自定义链中添加规则
[root@192 ~]# iptables -t filter -A IN_WEB -p tcp --dport 443 -j ACCEPT 自定义链中添加规则
[root@192 ~]# iptables -t filter -A INPUT -s 192.168.122.103 -j IN_WEB 使用自定义链处理 来自192.168.122.103 的请求
[root@192 ~]# iptables -nvL IN_WEB
Chain IN_WEB (0 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443

使用"-X"选项可以删除自定义链,但是删除自定义链时,需要满足两个条件:
1、自定义链没有被任何默认链引用,即自定义链的引用计数为0。
2、自定义链中没有任何规则,即自定义链为空

规则操作

-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。 -I 3 :插入为第三条
-R num:Replays替换/修改第几条规则 , 格式:iptables -R 3 …………
-D num:删除,明确指定删除第几条规则

规则匹配条件

通用匹配

当一条规则中有多个匹配条件时,这多个匹配条件之间,默认存在"与"的关系
目标IP地址
通过-s选项指定源地址作为匹配条件,也可以使用-d选项指定"目标地址"作为匹配条件,二者都可以使用"叹号"进行取反,也能够同时指定多个IP地址,使用"逗号"隔开。但是取反操作与指定多个IP的操作不能同时使用。
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP 拒绝来自192.168.1.146的请求

协议类型
-p选项,可以指定需要匹配的报文的协议类型
示例:iptables -t filter -A INPUT -p tcp -j REJECT 拒绝tcp连接
centos6中,-p选项支持如下协议类型:tcp,udp,udplite,icpm,esp,ah,sctp
当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同
示例:iptables -t filter -A INPUT -p tcp -j REJECT //拒绝所有的tcp协议连接

网卡接口
当本机有多个网卡时,我们可以使用 -i 选项去匹配报文是通过哪块网卡流入本机的
iptables -t filter -A INPUT -i eth1 -p icmp -j REJECT 拒绝 网卡eth1 来的流量
-o选项用于匹配报文将从哪个网卡流出。-i选项只能用于PREROUTING链、INPUT链、FORWARD链,那么-o选项只能用于FORWARD链、OUTPUT链、POSTROUTING链。
示例:iptables -t filter -A INPUT -i eth1 -p icmp -j REJECT \拒绝eth1进来的icmp协议

扩展匹配

扩展匹配必须和指定协议一起使用。当使用扩展匹配条件时,如果未指定扩展模块,iptables会默认调用与"-p"对应的协议名称相同的模块
如\\\
扩展匹配条件-s/dport
-m tcp --s\dport 来匹配源端口和目标端口。与之前的选项不同,–dport前有两条"横杠",而且,使用–dport选项时,必须事先指定了使用哪种协议,即必须先使用-p选项。
-p tcp -m tcp --sport 用于匹配tcp协议报文的源端口,可以使用冒号指定一个连续的端口范围
-p tcp -m tcp --dport 用于匹配tcp协议报文的目标端口,可以使用冒号指定一个连续的端口范围
-p tcp与 -m tcp并不冲突,-p用于匹配报文的协议,-m 用于指定扩展模块的名称,正好,这个扩展模块也叫tcp
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT

**扩展匹配条件multiport **
-p tcp -m multiport --sports 用于匹配报文的源端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
-p udp -m multiport --dports 用于匹配报文的目标端口,可以指定离散的多个端口号,端口之间用"逗号"隔开
iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT

扩展匹配条件iprange
iprange扩展模块可以指定"一段连续的IP地址范围",用于匹配报文的源地址或者目标地址。
iprange扩展模块中有两个扩展匹配条件可以使用
–src-range:指定连续的源地址范围
–dst-range:指定连续的目标地址范围
iptables -t filter -A INPUT -m iprange --src-range 192.168.122.200-192.168.122.254 -j DROP
扩展匹配条件string
使用string扩展模块,可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。比如:如果报文中包含字符"OOXX",我们就丢弃当前报文。
iptables -t filter -A INPUT -m string --algo bm --string “OOXX” -j REJECT
’-m string’表示使用string模块,’–algo bm’表示使用bm算法去匹配指定的字符串,’ --string “OOXX” '则表示我们想要匹配的字符串为"OOXX"
–algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但是我们必须指定一个。
–string:用于指定需要匹配的字符串。
扩展匹配条件time
可以通过time扩展模块,根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件,如下:5点到8点31,80和443端口禁止访问
iptables -t filter -A OUTPUT -p tcp -m multiport --dports 80,443 -m time --timestart 05:00:00 --timestop 08:31:00 -j REJECT
–timestart:用于指定时间范围的开始时间,不可取反
–timestop:用于指定时间范围的结束时间,不可取反
–weekdays:用于指定"星期几",可取反
–monthdays:用于指定"几号",可取反
–datestart:用于指定日期范围的开始日期,不可取反
–datestop:用于指定日期范围的结束时间,不可取反

扩展匹配条件connlimit
使用connlimit扩展模块,可以限制每个IP地址同时链接到server端的链接数量,注意:我们不用指定IP,其默认就是针对"每个客户端IP",即对单IP的并发连接数限制
比如:我们想要限制,每个IP地址最多只能占用两个ssh链接远程到server端,我们则可以进行如下限制
iptables -t filter -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
使用"–connlimit-above 2"表示限制每个IP的链接数量上限为2,再配合-p tcp --dport 22,即表示限制每个客户端IP的ssh并发链接数量不能高于2
–connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。
–connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对"某类IP段内的一定数量的IP"进行连接数量的限制
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT

该扩展实测对ipv6 不起作用

扩展匹配条件limit
limit模块是对"报文到达速率"进行限制的,限制单位时间内流入的包的数量。限制每秒中最多流入3个包,或者限制每分钟最多流入30个包,都可以。
root@node-101 ~]#iptables -t filter -A INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
[root@node-101 ~]#iptables -t filter -A INPUT -p icmp -j REJECT
因为该规则是只能匹配ACCEPT,即允许放行。所以要在此规则后紧跟默认的拒绝规则

–limit-burst:类比"令牌桶"算法,此选项用于指定令牌桶中令牌的最大数量,上文中已经详细的描述了"令牌桶"的概念,方便回顾。
–limit:类比"令牌桶"算法,此选项用于指定令牌桶中生成新令牌的频率,可用时间单位有second、minute 、hour、day。
示例:iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT

扩展匹配条件–tcp-flags
“–tcp-flags"指的就是tcp头中的标志位,看来,在使用iptables时,我们可以通过此扩展匹配条件,去匹配tcp报文的头部的标识位,然后根据标识位的实际情况实现访问控制的功能。
我们需要匹配报文tcp头中的6个标志位,这6个标志位分别为为"SYN、ACK、FIN、RST、URG、PSH”,我们可以把这一部分理解成需要匹配的标志位列表。
–tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0 则匹配
–tcp-flags ALL ALL //全部位1
–tcp_flags ALL NONE //全部位0 .这两种其实是错误,正常情况没有这两种情况,所有这两种表示错误。
tcp扩展模块还为我们专门提供了一个选项,可以匹配上文中提到的"第一次握手”,那就是–syn选项
使用"–syn"选项相当于使用"–tcp-flags SYN,RST,ACK,FIN SYN",也就是说,可以使用"–syn"选项去匹配tcp新建连接的请求报文
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT 拒绝标识为为syn 的请求

扩展匹配条件 udp
这个扩展模块中能用的匹配条件比较少,只有两个,就是–sport与–dport,即匹配报文的源端口与目标端口。tcp模块中也有这两个选项,名称都一模一样。只不过udp扩展模块的–sport与–dport是用于匹配UDP协议报文的源端口与目标端口
当使用扩展匹配条件时,如果未指定扩展模块,iptables会默认调用与"-p"对应的协议名称相同的模块,所以,当使用"-p udp"时,可以省略"-m udp"
–sport与–dport同样支持指定一个连续的端口范围,但是不能一次性指定多个离散的端,如果要指定离散多个端口可以使用 multiport 模块
示例:iptables -t filter -I INPUT -p udp -m udp --dport 137:157 -j ACCEPT

扩展匹配条件 icmp
ICMP协议的全称为Internet Control Message Protocol,它主要用于探测网络上的主机是否可用,目标是否可达,网络是否通畅,路由是否可用等.我们发出ping请求,对方回应ping请求,虽然ping请求报文与ping回应报文都属于ICMP类型的报文,但是如果在概念上细分的话,它们所属的类型还是不同的,我们发出的ping请求属于类型8的icmp报文,而对方主机的ping回应报文则属于类型0的icmp报文(code也为0).
iptables -t filter -A INPUT -p icmp --icmp-type 8/0 -j REJECT 中 –icmp-type 8/0" 表示icmp报文的type为8,code为0才会被匹配到,因为type为8的类型下只有一个code为0的类型,所以我们可以省略对应的code
我们还能用icmp报文的描述名称去匹配对应类型的报文使用的 --icmp-type "echo-request"与 --icmp-type 8/0的效果完全相同.
示例:
iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECT
iptables -t filter -I INPUT -p icmp --icmp-type “echo-request” -j REJECT

扩展匹配条件state
state模块可以让iptables实现"连接追踪"机制,那么,既然是"连接追踪"。对于state模块而言的"连接"并不能与tcp的"连接"画等号,在TCP/IP协议簇中,UDP和ICMP是没有所谓的连接的,但是对于state模块来说,tcp报文、udp报文、icmp报文都是有连接状态的,我们可以这样认为,对于state模块而言,只要两台机器在"你来我往"的通信,就算建立起了连接对于state模块的连接而言,“连接"其中的报文可以分为5种状态,报文状态可以为NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED
NEW:连接中的第一个包,状态就是NEW,我们可以理解为新连接的第一个包的状态为NEW。
ESTABLISHED:我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立。
RELATED:从字面上理解RELATED译为关系,但是这样仍然不容易理解,我们举个例子。
比如FTP服务,FTP服务端会建立两个进程,一个命令进程,一个数据进程。命令进程负责服务端与客户端之间的命令传输(我们可以把这个传输过程理解成state中所谓的一个"连接”,暂称为"命令连接")。数据进程负责服务端与客户端之间的数据传输 ( 我们把这个过程暂称为"数据连接" )。但是具体传输哪些数据,是由命令去控制的,所以,"数据连接"中的报文与"命令连接"是有"关系"的。那么,"数据连接"中的报文可能就是RELATED状态,因为这些报文与"命令连接"中的报文有关系。如果想要对ftp进行连接追踪,需要单独加载对应的内核模块nf_conntrack_ftp,如果想要自动加载,可以配置/etc/sysconfig/iptables-config文件
INVALID:如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID,我们可以主动屏蔽状态为INVALID的报文
UNTRACKED:报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接。
刚才举例中的问题即可使用state扩展模块解决,我们只要放行状态为ESTABLISHED的报文即可,因为如果报文的状态为ESTABLISHED,那么报文肯定是之前发出的报文的回应,如果你还不放心,可以将状态为RELATED或ESTABLISHED的报文都放行,这样,就表示只有回应我们的报文能够通过防火墙,如果是别人主动发送过来的新的报文,则无法通过防火墙,
示例:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables动作总结

常用动作包括ACCEPT、DROP、REJECT等。"动作"与"匹配条件"一样,也有"基础"与"扩展"之分。使用扩展动作也需要借助扩展模块,但是,扩展动作可以直接使用,不用像使用"扩展匹配条件"那样指定特定的模块。
除了ACCEPT、DROP、REJECT、LOG等动作,还有一些其他的常用动作,比如DNAT、SNAT等
REJECT动作
REJECT动作的常用选项为–reject-with,–reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝,可用值如下:
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable,
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-pro-hibited
icmp-admin-prohibited
当没有明确设置–reject-with的值时,默认提示信息为icmp-port-unreachable,即端口不可达之意

LOG动作
使用LOG动作,可以将符合条件的报文的相关信息记录到日志中,但当前报文具体是被"接受",还是被"拒绝",都由后面的规则控制,换句话说,LOG动作只负责记录匹配到的报文的相关信息,不负责对报文的其他处理,如果想要对报文进行进一步的处理,可以在之后设置具体规则,进行进一步的处理.在使用LOG动作时,匹配条件应该尽量写的精确一些,匹配到的报文数量也会大幅度的减少,这样冗余的日志信息就会变少,同时日后分析日志时,日志中的信息可用程度更高.
LOG动作会将报文的相关信息记录在/var/log/message文件中,当然,我们也可以将相关信息记录在指定的文件中,以防止iptables的相关信息与其他日志信息相混淆,修改/etc/rsyslog.conf文件(或者/etc/syslog.conf),在rsyslog配置文件中添加如下配置即可。
#vi /etc/rsyslog.conf
kern.warning /var/log/iptables.log
重启rsyslog服务(或者syslogd)使配置生效
#service rsyslog restart
LOG动作也有自己的选项,常用选项如下
–log-level选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning,notice,info,debug。
–log-prefix选项可以给记录到的相关信息添加"标签"之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。
注:–log-prefix对应的值不能超过29个字符

除了ACCEPT、DROP、REJECT、LOG 之外还有其他动作,如:SNAT、DNAT、MASQUERADE、REDIRECT等,暂不讨论,后续补充

常用规则示例配置

iptables -I INPUT -p icmp -j REJECT 拒绝进入防火墙的所有ICMP协议数据包**
iptables -A FORWARD -p ! icmp -j ACCEPT 允许防火墙转发除ICMP协议以外的所有数据包
iptables -A FORWARD -s 192.168.1.11 -j REJECT 拒绝转发来自192.168.1.10主机的数据
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT 允许转发来自192.168.0.0/24网段的数据
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP 丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP 丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包
封堵网段
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP
只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机
iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
允许本机开放从TCP端口20-1024提供的应用服务
iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEP
禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEP

.禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包
iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP
说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-m mac –mac-source”来表示数据包的源MAC地址。

允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
说明:这里用“-m multiport –dport”来指定目的端口及范围

禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
说明:此处用“-m –iprange –src-range”指定IP范围

拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发住服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理
iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

网络防火墙

前文中iptables都是作为主机防火墙的角色出现的,iptables也可以作为网络防火墙。网络防火墙往往处于网络的入口或者边缘,那么,如果想要使用iptables充当网络防火墙,iptables所在的主机则需要处于网络入口处当外部网络中的主机与网络内部主机通讯时,不管是由外部主机发往内部主机的报文,还是由内部主机发往外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行"过滤并转发",所以,防火墙主机的主要工作就是"过滤并转发",iptables的角色变为"网络防火墙"时,规则只能定义在FORWARD链中。

iptables更多内容参见 :https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#HOWITWAS


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 安装CentOS 下一篇: centos 7 mini版无法上网
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
q1aWAeXI3uNc