iptables命令及防火墙相关——rhel 6

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsut_rick/article/details/86607016

防火墙

防火墙:一道保护性的安全屏障,用于保护、隔离

防火墙的类别

• 根据载体区分:硬件防火墙

软件防火墙:应用层防火墙

网络层防火墙——Linux 包过滤 防火墙

• 根据保护对象区分:主机防火墙

网络防火墙

Linux包过滤防火墙

• netfilter:位于Linux内核中的包过滤功能体系

称为Linux防火墙的“内核态”

• iptables:位于/sbin/iptables,管理规则的工具

称为Linux防火墙的“用户态”

—— 两种称呼都可指Linux防火墙,用后者居多

 

iptables管理结构

iptables的表、链结构(4张表、5条链)

规则链解析-Chain

• 链的用途:存放一条条防火墙规则(Rule)

• 链的分类依据:处理数据包的不同时机

默认包括5种规则链

– INPUT:处理进入防火墙本机的数据包

– OUTPUT:处理从防火墙本机出去的数据包

– FORWARD:处理转发的数据包(即经过防火墙主机的IP包)

– POSTROUTING:路由选择之后处理

– PREROUTING:路由选择之前处理

规则表解析-Table

• 表的用途:存放不同的规则链

• 表的分类依据:防火墙规则的作用相似

• 包括4个规则表

– raw表:确定是否对数据包进行状态跟踪

– mangle表:为数据包设置标记

– nat表:修改数据包的源/目标地址或端口

– filter表:确定是否放行该数据包

防火墙的功能:对ip包做状态跟踪 raw表

  给IP包打标签     mangle表

  地址转换          nat表

  包过滤            filter表

规则匹配过程

防火墙上的数据包流向

包过滤匹配流程

• 规则表之间的顺序

–raw --->mangle --->nat --->filter

• 规则链之间的顺序

– 入站: PREROUTING --->INPUT

– 出站: OUTPUT --->POSTROUTING

– 转发: PREROUTING --->FORWARD --->POSTROUTING

• 规则链内的匹配顺序

– 顺序比对,匹配即停止(LOG除外)

– 若无任何匹配,则按该链的默认策略处理

 

iptables基本管理

iptables基本用法

• 管理程序位置:/sbin/iptables

• 指令组成:iptables [-t 表名] 选项 [链名] [匹配条件] [-j 目标操作]

• 注意事项/整体规律

– 可以不指定表,默认为filter表

– 可以不指定链,默认为对应表的所有链

– 除非设置默认策略,否则必须指定匹配条件

– 选项/链名/目标操作用大写字母,其余都小写

常用的管理选项

类别

选项

用途

添加规则

-A

在链的末尾追加一条规则

-I

在链的开头(或指定序号)插入一条规则

查看规则

 

-L

列出所有的规则条目

-n

以数字形式显示地址、端口等信息

--line-numbers

查看规则时,显示规则的序号

删除规则

 

-D

删除链内指定序号(或内容)的一条规则

-F

清空所有的规则

默认策略

-P

为指定的链设置默认规则

基本的匹配条件

• 通用匹配:可直接使用,不依赖于其他条件或扩展

包括网络协议、IP地址、网络接口等条件

• 隐含匹配:要求以特定的协议匹配作为前提

包括端口、TCP标记、ICMP类型等条件

类别

选项

用法

通用匹配

 

协议匹配

-p 协议名 如:tcp、udp、icmp

地址匹配

-s 源地址、-d 目标地址

接口匹配

-i 收数据的网卡

-o 发数据的网卡

隐含匹配

 

端口匹配

--sport 源端口

--dport 目标端口

ICMP类型匹配

--icmp-type ICMP类型

TCP标记匹配

--tcp-flags 检查哪些位 哪些位被设置

需要取反条件时,用叹号 !

基本的目标操作

• ACCEPT:允许通过/放行

• DROP:直接丢弃,不给出任何回应

• REJECT:拒绝通过,必要时会给出提示

• LOG:记录日志,然后传给下一条规则       //“匹配即停止”规律的唯一例外

[root@iptables50 ~]# cat /etc/sysconfig/iptables   //查看现有的防火墙规则

规则管理示例

添加新的规则—— -A追加、-I插入

[root@iptables50 ~]# iptables -t filter -I INPUT -p icmp -j REJECT

[root@iptables50 ~]# iptables -A INPUT -p tcp -dport 80 -j DROP

[root@iptables50 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

[root@iptables50 ~]# iptables -I INPUT -p udp -j ACCEPT

[root@iptables50 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT  //添加新规则在序号为2的规则上面

查看规则列表—— -L查看

[root@iptables50 ~]# iptables -t 表名  -L  //以字符显示

[root@iptables50 ~]# iptables -nL INPUT          //以数字显示

[root@iptables50 ~]# iptables -L INPUT --line-numbers //带序号显示

删除、清空规则—— -D删除、-F清空

[root@iptables50 ~]# iptables -D INPUT 3   //删除序号为3 的规则

[root@iptables50 ~]# iptables -nL INPUT

//依次清空4个表的规则,需要保存才生效

[root@iptables50 ~]# iptables -F        //不写表名时,默认为filter表

[root@iptables50 ~]# iptables -t nat -F

[root@iptables50 ~]# iptables -t mangle -F

[root@iptables50 ~]# iptables -t raw -F

 

filter表控制

防护类型及条件

主机/网络型防护

• 根据保护对象(本机、其他主机)区分

开启内核的IP转发

• 作为网关、路由的必要条件:sysctl -w net.ipv4.ip_forward=1

                或者 echo 1 > /proc/sys/net/ipv4/ip_forward

示例:

[root@iptables50 ~]# yum -y install httpd

[root@iptables50 ~]# service httpd start

[root@iptables50 ~]# netstat -pantul |grep :80

[root@iptables50 ~]# echo aaa > /var/www/html/a.html  //可以访问

[root@pc207 桌面]# elinks --dump http://192.168.4.50/a.thml

[root@iptables50 ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j DROP

[root@iptables50 ~]# iptables -t filter -nL INPUT   

[root@iptables50 ~]# service iptables save    //保存防火墙规则

[root@pc207 桌面]# elinks --dump http://192.168.4.50/a.thml  //不可访问

[root@iptables50 ~]# iptables -t filter -A INPUT -s 192.168.4.254 -p tcp --dport 22 -j ACCEPT     //允许254访问本机

[root@iptables50 ~]# iptables -t filter -A INPUT -s 192.168.4.20 -p tcp --dport 22 -j REJECT         //拒绝20访问本机

 

过滤规则示例

封禁IP地址/网段:主机防护,针对入站访问的源地址

  网络防护,针对转发访问的源地址

[root@iptables50 ~]# iptables -A INPUT -s 192.168.4.120 -j DROP

[root@iptables50 ~]# iptables -A INPUT -s 10.0.10.0/24 -j DROP

[root@iptables50 ~]# iptables -A FORWARD -s 192.168.0.0/16 -i eth1 -j DROP

[root@iptables50 ~]# iptables -A FORWARD -s 172.16.0.0/16 -i eth1 -j DROP

保护特定网络服务:限制对指定服务端口的访问

[root@iptables50 ~]# iptables -A INPUT -s 192.168.168.0/24 -p tcp --dport 22 -j ACCEPT

[root@iptables50 ~]# iptables -A INPUT -s 220.181.78.0/24 -p tcp --dport 22 -j ACCEPT

[root@iptables50 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

[root@iptables50 ~]# iptables -A INPUT ! -s 192.168.168.0/24 -p tcp --dport 20:21 -j DROP //连续的端口范围以冒号分隔

禁ping相关策略处理:允许本机 ping 其他主机,但是,禁止其他主机 ping 本机

[root@iptables50 ~]# iptables -t filter -I INPUT 2 -p icmp --help   //查看此命令要跟哪些选项        //echo-replay回应包

[root@iptables50 ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

[root@iptables50 ~]# iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT

[root@iptables50 ~]# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

[root@iptables50 ~]# iptables -A OUTPUT -p icmp ! --icmp-type echo-request -j DROP

TCP标记细分控制:禁止入站的SYN请求包(第一次握手),检查4个标记位,其中SYN位被设置

  放行入站访问的其他数据包

[root@iptables50 ~]# iptables -A INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK,FIN SYN -j DROP

[root@iptables50 ~]# iptables -A INPUT -i eth1 -p tcp ! --syn -j ACCEPT

设置默认规则:所有链的初始默认规则均为ACCEPT

  通过 -P 选项可重置默认规则

生成环境中,一般将默认规则设为DROP,然后再放行需要的IP地址

[root@iptables50 ~]# iptables -t filter -P INPUT DROP

[root@iptables50 ~]# iptables -t filter -nL | head -1     

 //根据(policy XXX)可知INPUT链的默认策略为XXX

示例:

# iptables -t filter -P INPUT DROP

# iptables -t filter -A INPUT -p tcp --dport 80 -j DROP

# iptables -t filter -A INPUT -s 192.168.4.254 -p tcp --dport 22 -j ACCEPT

# iptables -t filter -A INPUT -s 192.168.4.20 -p tcp --dport 22 -j REJECT

 

 扩展匹配

扩展条件的方法:前提条件:有对应的防火墙模块支持

基本用法:-m 扩展模块 --扩展条件 条件值

示例: -m mac --mac-source 00:0C:29:74:BE:21

常见的扩展条件类型

类别

选项

用法

扩展匹配

 

状态匹配

-m state --state 状态值

MAC地址匹配

-m mac --mac-source MAC地址

多端口匹配

 

-m multiport --sports 源端口列表

-m multiport --dports 目标端口列表

IP范围匹配

 

-m iprange --src-range IP1-IP2

-m iprange --dst-range IP1-IP2

状态匹配

状态跟踪机制

网络连接的五种状态:NEW,请求建立连接的包、完全陌生的包

  ESTABLISHED,将要或已经建立连接的包

  RELATED,与已知某个连接相关联的包

  INVALID,无对应连接,以及连接无效的包

  UNTRACKED,未跟踪状态的包

丢弃陌生的TCP响应包:比如,防止反射/反弹式攻击

[root@iptables50 ~]# iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP

[root@iptables50 ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

识别FTP数据连接:针对FTP被动模式,数据端口未知

[root@gw1 ~]# iptables -A FORWARD -d 192.168.4.205 -p tcp --dport 20:21 -j ACCEPT

[root@gw1 ~]# iptables -A FORWARD -s 192.168.4.205 -p tcp --sport 20:21 -j ACCEPT

[root@gw1 ~]# iptables -A FORWARD -d 192.168.4.205 -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@gw1 ~]# iptables -A FORWARD -s 192.168.4.205 -m state --state ESTABLISHED,RELATED -j ACCEPT

保护内部网络的通信:允许从内网访问外网的服务

  禁止从外网访问内网

[root@gw1 ~]# iptables -A FORWARD -s 192.168.4.0/24 -o eth0 -j ACCEPT

[root@gw1 ~]# iptables -A FORWARD -d 192.168.4.0/24 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@gw1 ~]# iptables -A FORWARD -d 192.168.4.0/24 -i eth0 -m state --state NEW -j DROP

示例:

[root@iptables253 ~]# service iptables start

[root@iptables253 ~]# iptables -nL

[root@iptables253 ~]# iptables -F

[root@iptables253 ~]# service iptables save



[root@client22 ~]# service iptables stop

[root@web44 ~]# service iptables stop

[root@web55 ~]# service iptables stop



[root@web44 ~]# cat /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@web44 ~]# cat /proc/sys/net/ipv4/conf/lo/arp_announce

[root@web44 ~]# cat /proc/sys/net/ipv4/conf/all/arp_ignore

[root@web44 ~]# cat /proc/sys/net/ipv4/conf/all/arp_announce

[root@web44 ~]# yum -y install httpd; service httpd start

[root@client22 ~]#   ping 44、55不通

[root@web44 ~]# route add default gw 192.168.4.253

[root@web44 ~]# route -n

[root@web55 ~]# route add default gw 192.168.4.253

[root@web55 ~]# route -n

[root@client22 ~]# route add default gw 192.168.2.253

[root@client22 ~]# route -n



[root@iptables253 ~]# sysctl -p    //没有开启转发功能

[root@iptables253 ~]# vim  /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@iptables253 ~]# sysctl -p  

[root@iptables253 ~]# service network restart



[root@client22 ~]# service httpd start

[root@client22 ~]# echo web22 > /var/www/html/a.html

[root@web44 ~]# elinks --dump http://192.168.2.22/a.thml

[root@web44 ~]# echo web44 > /var/www/html/a.html

[root@client22 ~]# elinks --dump http://192.168.4.44/a.html



[root@iptables253 ~]# iptables -t filter -P FORWARD DROP

[root@iptables253 ~]# iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT

[root@iptables253 ~]# iptables -t filter -A FORWARD -p tcp --sport 80 -j ACCEPT

[root@iptables253 ~]# iptables -t filter -nL --line-numbers



[root@web44 ~]# elinks --dump http://192.168.2.22/a.thml

[root@client22 ~]# elinks --dump http://192.168.4.44/a.html

现在内外网互通

 

要实现4.55的禁止访问外网

[root@iptables253 ~]# iptables -t filter -I FORWARD -s 192.168.4.55 -p tcp --dport 80 -j REJECT

[root@web55 ~]# elinks --dump http://192.168.2.22/a.html

 

现在对4.0网段实现禁止访问外网,但外网能访问内网

[root@iptables253 ~]# iptables -t filter -D FORWARD 1

[root@iptables253 ~]# iptables -t filter -I FORWARD -s 192.168.4.0/24 -p tcp --dport 80 -j REJECT

[root@iptables253 ~]# iptables -t filter -nL --line-numbers

 

设置2.22上能远程4.4

[root@iptables253 ~]# iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT

[root@iptables253 ~]# iptables -t filter -A FORWARD -p tcp --sport 22 -j ACCEPT

 

 

其他扩展匹配

根据MAC地址封锁主机:适用于交换网络,针对源MAC地址——不管其IP地址变成多少

[root@iptables50 ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:74:BE:21 -j DROP

简化服务开启规则:一条规则开放多个端口——比如 Web、FTP、Mail、SSH 等等

[root@iptables50 ~]# iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,16501:16800 -j ACCEPT

根据IP范围封锁主机:SSH登录的IP范围控制

– 允许从 192.168.4.10-192.168.4.20 登录

– 禁止从 192.168.4.0/24 网段其他的主机登录

[root@iptables50 ~]# iptables -A INPUT -p tcp --dport 22 -m iprange  --src-range 192.168.4.10-192.168.4.20 -j ACCEPT

[root@iptables50 ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.4.0/24 -j DROP

 

Filter表

做主机型防火墙的配置 INPUT

做网络型防火墙的配置 FORWARD

 

 

NAT转换原理

私有地址的局限性

• 从局域网访问互联网的时候,比如看网页、收邮件、......

源地址为私有地址,服务器如何正确给出回应?

• 从互联网访问局域网的时候,比如远程管理内网的网站、文件服务器

目标地址为私有地址,请求包如何才能正确抵达?

 

SNAT(Source Network Address Translation)源地址转换

– 修改数据包的源地址,仅用于 nat 表的 POSTROUTING 链

• 不修改源地址的情况

• 修改源地址的情况

DNAT(Destination Network Address Translation)目标地址转换

– 修改数据包目标地址(IP、端口),仅用于 nat 表的 PREROUTING、OUTPUT 链

• 修改目标地址的情况

 

SNAT策略应用

案例环境:局域网共享公网IP上网

• 前期准备:局域网PC机正确设置IP地址/子网掩码、默认网关

– Linux网关服务器开启IP路由转发

– 本实验中,不要为Web服务器设置默认网关

 

配置SNAT共享上网

• 配置的关键策略:选择路由之后,针对来自局域网、即将从外网接口发出去的包,将源IP地址修改为网关的公网IP地址

[root@gw1 ~]# iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o eth1 -j SNAT --to-source 174.16.16.1

局域网网段地址:192.168.4.0/24

外网接口:eth1

外网接口的IP地址:174.16.16.1

• 验证SNAT访问结果

– 客户机上:PC机 192.168.4.5 能够访问外网的Web服务器 174.16.16.120

– 服务器上:查看Web主机 174.16.16.120 的访问日志,来访者应是Linux网关的外网IP地址 174.16.16.1

[root@www ~]# tail /var/log/httpd/access_log

.. ..

174.16.16.1 - - [12/Aug/2013:17:57:10 +0800] "GET / HTTP/1.1" 200

27 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

地址伪装策略

• 共享动态公网IP地址实现上网

– 主要针对外网接口的IP地址不固定的情况

– 将SNAT改为MASQUERADE即可

– 对于ADSL宽带拨号连接,网络接口可写为 ppp+

[root@gw1 ~]# iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o eth1 -j SNAT --to-source 174.16.16.1 ==>-j MASQUERADE

 

DNAT策略应用

案例环境:发布位于内网的服务器

• 前期准备:内网Web主机能够访问Internet,比如SNAT

Linux网关服务器开启IP路由转发

将Web域名解析为网关的外网IP地址

发布Web服务器

• 配置的关键策略:在路由选择之前,针对从外网接口收到的、访问本机公网地址TCP 80端口的数据包,将其目标地址修改为位于内网的Web主机的IP地址

[root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.4.5

外网接口的IP地址:174.16.16.1

内网Web主机的IP地址:192.168.4.5

• 验证DNAT访问结果

– 客户机上:通过访问 http://174.16.16.1/,能看到由主机192.168.4.5 提供的网页

– 服务器上:查看Web主机 192.168.4.5 的访问日志,记录了测试PC机的IP地址

[root@www ~]# tail /var/log/httpd/access_log

.. ..

174.16.16.120 - - [13/Aug/2013:11:55:57 +0800] "GET / HTTP/1.1"

200 24 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"

 

发布SSH服务器

• 执行 ssh -p 2345 174.16.16.1 时

– 实际SSH登录 192.168.4.5

[root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 2345 -j DNAT --to-destination 192.168.4.5:22

 

发布FTP服务器

• 注意事项:加载模块 nf_nat_ftp 、nf_conntrack_ftp

[root@gw1 ~]# modprobe -a nf_nat_ftp nf_conntrack_ftp

.. ..

[root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 20:21 -j DNAT --to-destination 192.168.4.5

 

 

NAT表可实现源地址转换、目标地址转换、端口转换

共享上网POSTROUTING 源地址转换

[root@iptables253 ~]# iptables -t filter -P FORWARD ACCEPT

[root@client22 ~]# route del default gw 192.168.2.253

[root@iptables253 ~]# iptables -t nat -A POSTROUTING -o eth1 -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.2.253    //4.44可以访问2.22,反之不行  o:出口 s:源地址

[root@iptables253 ~]# service iptables save

[root@client22 ~]# tail -1 /etc/httpd/logs/access_log

192.168.2.253 - - [11/Nov/2017:08:18:51 +0800] "GET /a.html HTTP/1.1" 200 6 "-" "ELinks/0.12pre5 (textmode; Linux; -)"

发布私网的服务器 PREROUTING 源地址转换

[root@web44 ~]# service iptables stop

[root@iptables253 ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.4.44:80

[root@iptables253 ~]# iptables -t nat -nL

[root@client22 ~]# elinks --dump http://192.168.2.253/test2.html

[root@web44 ~]# tail -1 /etc/httpd/logs/access_log

192.168.2.22 - - [11/Nov/2017:09:14:30 +0800] "GET /test2.html HTTP/1.1" 200 4 "-" "ELinks/0.12pre5 (textmode; Linux; -)"   //将2.22的访问轮换成4.44内容

[root@iptables253 ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 12345 -j DNAT --to-destination 192.168.4.55:22   //将目标地址的远程端口22转换成123456

[root@room1pc27 桌面]# ssh -X -p 12345 [email protected]   //密码是web55的,253只是做转换

[root@web55 ~]#

 

 

防火墙脚本

批量规则整理

规则整理的必要性

• 面临的问题:写了这么多规则,一重启就没了?

 封锁数百个恶意IP地址,怎么写规则啊?

 部署一台新防火墙时,能沿用之前的规则吗?导出/导入规则

• 使用 iptables-save 导出

[root@gw1 ~]# iptables-save

[root@gw1 ~]# iptables-save > /root/myfw.rule

• 使用 iptables-restore 导入

[root@gw1 ~]# service iptables stop

[root@gw1 ~]# iptables-restore < /root/myfw.rule

[root@gw1 ~]# service iptables status

使用iptables服务:开机后自动加载已保存的规则:/etc/sysconfig/iptables

[root@gw1 ~]# iptables-save > /etc/sysconfig/iptables

[root@gw1 ~]# service iptables stop

[root@gw1 ~]# service iptables start

[root@gw1 ~]# chkconfig iptables on

批量设置防火墙规则

• 方法1:编写规则 à 导出规则 à iptables服务

• 方法2:编写脚本文件 à 开机时调用 /etc/rc.local

使用防火墙脚本

防火墙规则的脚本化

• 定义基本变量

• 必要时,内核模块和运行参数调整

• 防火墙策略设计:各链的默认规则

  按表、链组织的具体规则

运行环境处理:

• 变量及模块整理:方便脚本的维护/重用/移植

  必要的功能模块预备

#!/bin/bash

INET_IF= "eth1"

INET_IP= "174.16.16.1"

LAN_NET="192.168.4.0/24"

LAN_WWW_IP="192.168.4.5"

IPT="/sbin/iptables"

/sbin/modprobe -a nf_nat_ftp nf_conntrack_ftp

 

“主机型”防火墙脚本——以 filter 表的 INPUT 链为主:OUTPUT 链次之

$IPT -P INPUT DROP

$IPT -P FORWARD DROP

$IPT -P OUTPUT ACCEPT

.. ..

$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

“网络型”防火墙脚本——以 filter 表的 FORWRD 链为主:网关上会用到 nat 表

$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP

$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp \

--dport 80 -j DNAT --to-destination $LAN_WWW_IP

.. ..

$IPT -A FORWARD -d $LAN_NET -i $INET_IF -m state \

--state ESTABLISHED,RELATED -j ACCEPT

.. ..

 

 

 

 

 

总结和答疑

表链结构及流程

默认的表、链构成

• 四个表:raw、mangle、nat、filter

• 五种规则链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING数据流向及匹配

• 规则链之间的顺序

– 入站: PREROUTING --->INPUT

– 出站: OUTPUT ---> POSTROUTING

– 转发: PREROUTING --->FORWARD --->POSTROUTING

 

 

 

 

 

 

 

DNAT发布策略

问题现象

• DNAT发布了FTP服务,但是功能不完整

– 通过访问网关的21端口能登录到内网的FTP服务器

– 却不能执行ls及下载操作,报错:

.. .. connect: 网络不可达

[root@svr5 ~]# ftp 174.16.16.1

.. ..

ftp> ls //获取目录列表失败

227 Entering Passive Mode (192,168,4,5,204,144).

ftp: connect: 网络不可达

.. ..

 

故障分析及排除

• 原因分析

– 完整的FTP通信是复合连接,需要将数据连接与控制连接关联起来

– 当通过防火墙的NAT策略时,需要模块 nf_nat_ftp 、nf_conntrack_ftp 的支持

• 解决办法

[root@gw1 ~]# modprobe -a nf_nat_ftp nf_conntrack_ftp

.. ..

 

防火墙规则整理

问题现象

• 执行 iptables -F 无法彻底清空规则

– 测试发现,所有的入站访问都不可用了

– 而且还能查到有SNAT相关规则

故障分析及排除

• 原因分析

– 若不指定表,iptables -F 默认只清空 filter表

– 而且,各链的默认规则(可能已设为DROP)不会处理

• 解决办法

– 改用 service iptables stop 停止防火墙

– 或者,分别清空 filter、nat、raw等多张表,并且将每条链的默认规则设置为 ACCEPT

 

猜你喜欢

转载自blog.csdn.net/jsut_rick/article/details/86607016