第四十三章 防火墙实战

一、Iptables基础概念

1、一般使用情况
(1)seLinux关闭(生产系统也是关闭的)
(2)使用硬件ids(入侵检测)
(3)iptables在生产环境中一般是内网关闭,外网打开。在大并发的情况下,不能开iptables,影响性能,这时可以使用硬件防火墙。
2、安全优化
(1)尽可能不给服务器配置外网ip。可以通过代理转发。
(2)并发不是特别大的情况下,在外网环境中,开启防火墙。
3、iptables防火墙简介

netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

(1)名词和术语

a、容器

包含或者说属于的关系

b、Netfilter/iptables是表的容器

iptables包含的4张表:filter(默认,常用),NAT(常用),MANGLE(不常用),RAW(不用管),分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

c、iptables的表tables又是链(chains)的容器

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。

链(chains)有5种:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING。

注意:链名要大写

表跟链的关系

d、链chains是规则容器

INPUT——进来的数据包应用此规则链中的策略

OUTPUT——外出的数据包应用此规则链中的策略

FORWARD——转发数据包时应用此规则链中的策略

PREROUTING——对数据包作路由选择前应用此链中的规则(记住!所有的数据包进来的时侯都先由这个链处理)

POSTROUTING——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

e、规则Policy:一条条过滤的语句。

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

(2)filter表

a、filter表的作用

filter表,主要是和主机自身有关的配置,是真正负责主机防火墙功能的表(过滤流入和流出主机的数据包)。filter表是iptables默认使用的表(没有用-t参数指定表名的情况下,默认为filter表,如iptable -L -n).

filter表的控制是实现本机防火墙功能的重要手段,特别是对INPUT链的控制。

b、filter表包含的链

filter表定义了如下3个链:

INPUT:负责过滤所有目标地址是本机地址的数据包(也就是过滤进入主机的数据包)。

FORWARD:负责转发流经主机的数据包。起转发的作用,和NAT关系很大。LVS NAT模式设置:net.ipv4.ip_forward=0

OUTPUT:负责过滤所有源地址是本机地址的数据包(也就是过滤从主机发出去的数据包)。

(3)nat表

a、nat表的作用

nat表主要是负责网络地址转换,将来源与目的ip地址和port进行转换。和主机本身无关。一般用于局域网共享上网或者特殊端口转换服务相关。相当于网络的acl控制。和网络交换机acl类似。

b、一般企业工作场景

(i)用于做企业路由(zebra)或网关(iptables),共享上网(POSTROUTING)

(ii)做内部外部IP地址一对一映射(DMZ),硬件防火墙映射IP到内部服务器,FTP服务。(PREROUTING)

(iii)Web,单个端口的映射,如直接映射到80端口(PREROUTING)

c、nat表包含的链

OUTPUT:和主机发出去的数据包有关。改变主机发出数据包的目标地址。

PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则。作用是改变数据包的目的地址、目的端口等。

POSTROUTING:在数据包离开防火墙进,进行路由判断之后执行的规则。作用是改变数据包的源地址、源端口等。

(4)mangle表

主要是负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等。共定义了5个链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING。

4、规则表之间的优先顺序:

Raw——mangle——nat——filter。规则链之间的优先顺序(分三种情况):

(1)第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。

(2)第二冲情况:转发数据流向

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

(3)第三种情况:出站数据流向

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

5、iptables的工作流程

iptables防火墙规则的执行顺序默认从前到后(从上到下)依次执行,遇到匹配的规则就不在继续向下检查,只有遇到不匹配的规则才会继续向下进行匹配。

(1)防火墙是层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

(2)如果匹配规则成功,即明确表明是阻止还是通过,数据包就不在向下匹配新规则了。

(3)如查所有规则中没有明确表明是阻止还是通过,也就是没有匹配成功,向下进行匹配,直到匹配默认规则得到明确的阻止或通过。

(4)防火墙默认规则应放在最后,是所有规则执行完后才会执行的。

5)匹配上了拒绝规则也是匹配。

6、iptables表和链的工作流程

7、iptables的基本语法格式

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

完全格式:iptables -t 表名 -A/I/D/R 规则链名 [规则号] -i/o 网卡名-p 协议名 -s 源IP/源子网 –sport 源端口-d 目标IP/目标子网 –dport 目标端口 -j 动作

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

8、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)

-p:指定要匹配的数据包协议类型;

-s:指定要匹配的数据包源ip地址;

-j目标:指定要跳转的目标;

-i网络接口:指定数据包进入本机的网络接口;

-o网络接口:指定数据包要离开本机所使用的网络接口。

-d:指定要匹配的数据包目标ip地址;

-sport:指定要匹配的数据包源端口;

-dport:指定要匹配的数据包目标端口;

 

9、防火墙处理数据包的四种方式

ACCEPT 允许数据包通过

DROP 直接丢弃数据包,不给任何回应信息(优于REJECT)

REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

10、iptables防火墙规则的保存与恢复

iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

使用命令iptables-save来保存规则。一般用iptables-save > /etc/sysconfig/iptables生成保存规则的文件 /etc/sysconfig/iptables。

也可以用service iptables save它能把规则自动保存在/etc/sysconfig/iptables中。当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

二、Iptables命令详解

1、查看iptables帮助

iptables -h

2、查看iptables版本

iptables -V

iptables v1.4.7

3、启动iptables
(1)启动命令

/etc/init.d/iptables start

(2)查看iptables是否启动(未启动成功)

service iptables status

iptables: Firewall is not running. 

(3)使用service命令启动(还是未启动成功)

service iptables status

iptables: Firewall is not running

(4)执行setup命令,设置安全级别

a、setup

b、选择Firewallconfiguration

c、用空格键将Firwall:[]Enabled选中,Firwall:[*]Enabled

d、保存退出

(5)再次启动

/etc/init.d/iptables start

(6)查看iptables是否启动(启动成功

service iptables status

Table: filter

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

。。。

4、查看内核是否加载iptables

lsmod | egrep "nat|filter|ip"

ip6t_REJECT            3987  2

nf_conntrack_ipv6      7207  2

nf_defrag_ipv6         8897  1 nf_conntrack_ipv6

ip6table_filter         2245 1

ip6_tables            10867  1 ip6table_filter

ipt_REJECT             1867  2

nf_conntrack_ipv4      7694  2

nf_defrag_ipv4         1039  1 nf_conntrack_ipv4

nf_conntrack          65428  3nf_conntrack_ipv6,nf_conntrack_ipv4,xt_state

iptable_filter         2173  1

ip_tables              9567  1 iptable_filter

ipv6                 264059  36ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6,cnic

5、手动加载iptables模块到内核

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state

6、查看规则
(1)一般查看:-L -n

iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot optsource               destination        

ACCEPT     all  — 0.0.0.0/0           0.0.0.0/0           state RELATED,ESTABLISHED

ACCEPT     icmp —  0.0.0.0/0            0.0.0.0/0          

ACCEPT     all  — 0.0.0.0/0           0.0.0.0/0          

ACCEPT     tcp  — 0.0.0.0/0           0.0.0.0/0           state NEW tcpdpt:22

REJECT   all — 0.0.0.0/0           0.0.0.0/0    reject-with icmp-host-prohibited

 

Chain FORWARD (policy ACCEPT)

target     prot optsource               destination        

REJECT     all  — 0.0.0.0/0    0.0.0.0/0       reject-with icmp-host-prohibited

 

Chain OUTPUT (policy ACCEPT)

target     prot optsource               destination

(2)带序号查看:-L -n –line-numbers

iptables -L -n –line-numbers

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    DROP       tcp —  0.0.0.0/0            0.0.0.0/0           tcp dpt:35578

2    DROP       tcp —  0.0.0.0/0            0.0.0.0/0           tcp dpt:35579

3    DROP       tcp —  0.0.0.0/0            0.0.0.0/0           tcp dpt:35577

7、清除/删除规则
(1)清除所有规则:–flush -F(不处理默认规则)

iptables -F 或iptables –flush

(2)清除用户自定义的链:–delete-chain -X

ipbatles -X或iptables –delete-chain

(3)将链的记数器清零:–zero -Z

iptables -Z或iptables –zero

(4)删除指定规则:-D

iptables -t filter -D INPUT -p tcp –dport22 -j DROP

(5)删除指定序号的规则

#删除INPUT链的第一条规则:iptables -D链名 序号

iptables -D INPUT 1

8、增加规则
(1)在指定链的结尾增加(最后一条)

iptables -t filter -A INPUT -p tcp –dport22 -j DROP

(2)在指定链的开头增加(第一条)

iptables -t filter -I INPUT -p tcp –dport22 -j DROP

(3)在指定链的位置增加(如:在第3位置上)

iptables -t filter -I INPUT 3 -p tcp–dport 22 -j DROP

(4)-A和-I的区别

-A是在指定链的结尾处增加规则,是最后一条。

-I是在指定链的开始处增加规则,是第一条。

一般情况下,封IP,用-I来封,防止前面规则已放行。封端口,用-A来封。

9、保存规则
(1)命令行下执行的规则,仅仅在内存时临时生效。
(2)永久保存规则需iptables-save来保存规则

a、方法一

iptables-save > /etc/sysconfig/iptables

b、方法二

service iptables save

10、范围设置
(1)端口

a、用冒号":"来指定连接端口

iptables -A INPUT -p tcp –dport 20:1024 -jACCEPT 

b、用-m和逗号","来指定多个端口

iptables -A INPUT -p tcp -m multiport–dport 20,21,25,110,1250:1280 -j ACCEPT

(2)IP段

a、子网

iptables -A INPUT -i eth1 -s 192.168.0.0/16-j DROP 

b、-m iprange–src-range

iptables -A INPUT -p tcp -m iprange–src-range 192.168.1.20-192.168.1.99 -j DROP

(3)通过感叹号"!"取非

iptables -I INPUT -p !tcp -j DROP

iptables -A INPUT !–dport 22 -j DROP

iptables -I INPUT -s ! 192.168.1.111 -j DROP

11、示例
(1)示例1:禁用ssh的22端口

a、格式

iptables -t

-[AD] chainrule-specification [options]

b、命令

iptables -t filter -A INPUT -p tcp –dport22 -j DROP

iptables  -A INPUT -p tcp –dport 22 -j DROP

c、恢复ssh连接

(i)物理(或虚拟终端)重启系统

(ii)登陆服务器删除此禁止规则:

iptables -F

iptables -t filter -D INPUT -p tcp –dport22 -j DROP

/etc/init.d/iptables stop

d、说明

(i)iptables默认用的表是filter表,所以上面2条命令是等价的。

(ii)其中INPUT和DROP要大写

(iii)命令执行的规则,仅仅在内存时临时生效。

(2)示例2:禁用80端口

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

iptables  -A INPUT -p tcp –dport 80 -j DROP

(3)示例3:删除INPUT链的第一条规则

iptables -D INPUT 1

说明:这是通过序号来删除规则。序号可以通过–line-numbers参数来查看

iptables -L -n –line-numbers

(4)示例4:拒绝进入防火墙的所有ICMP协议数据包

iptables -I INPUT -p icmp -j REJECT

(5)示例5:允许防火墙转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p ! icmp -j ACCEPT

说明:使用"!"可以将条件取反。

(6)示例6:拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据

iptables -A FORWARD -s 192.168.1.11 -jREJECT 

iptables -A FORWARD -s 192.168.0.0/24-j ACCEPT

说明:注意要把拒绝的放在前面不然就不起作用了啊。

(7)示例7:丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包

iptables -A INPUT -i eth1 -s 192.168.0.0/16-j DROP 

iptables -A INPUT -i eth1 -s172.16.0.0/12 -j DROP 

iptables -A INPUT -i eth1 -s10.0.0.0/8 -j DROP

(8)示例8:封堵网段(192.168.1.0/24),两小时后解封。

iptables -I INPUT -s 10.20.30.0/24 -jDROP 

iptables -I FORWARD -s 10.20.30.0/24 -jDROP 

at now 2 hours at> iptables -DINPUT 1 at> iptables -D FORWARD 1

说明:这个策略咱们借助crond计划任务来完成,就再好不过了。

(9)示例9:只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp –dport 22 -s202.13.0.0/16 -j ACCEPT 

iptables -A INPUT -p tcp –dport 22 -jDROP

说明:这个用法比较适合对设备进行远程管理时使用,比如位于分公司中的SQL服务器需要被总公司的管理员管理时。

(10)示例10:允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp –dport 20:1024 -jACCEPT 

iptables -A OUTPUT -p tcp –sport20:1024 -j ACCEPT

(11)示例11:允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -pudp –dport 53 -j ACCEPT 

iptables -A FORWARD -d 192.168.0.0/24-p udp –sport 53 -j ACCEPT

(12)示例12:禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机

iptables -I INPUT -p icmp –icmp-typeEcho-Request -j DROP 

iptables -I INPUT -p icmp –icmp-typeEcho-Reply -j ACCEPT 

iptables -I INPUT -p icmp –icmp-typedestination-Unreachable -j ACCEPT

(13)示例13:禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包

iptables -A FORWARD -m mac –mac-source00:0c:29:27:55:3F -j DROP

说明:iptables中使用“-m 模块关键字”的形式调用显示匹配。咱们这里用“-mmac –mac-source”来表示数据包的源MAC地址。

(14)示例14:允许防火墙对外开放端口20、21、25、110以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport–dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里用“-mmultiport –dport”来指定目的端口及范围

(15)示例15:禁止转发源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范围。

(16)示例16:禁止转发与正常TCP连接无关的非—syn请求数据包。

iptables -A FORWARD -m state –state NEW -ptcp ! –syn -j DROP

说明:“-m state”表示数据包的连接状态,“NEW”表示与任何连接无关的,新的嘛!

(17)示例17:拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state –stateNEW -j DROP 

iptables -A INPUT -p tcp -m state–state ESTABLISHED,RELATED -j ACCEPT

说明:“ESTABLISHED”表示已经响应请求或者已经建立连接的数据包,“RELATED”表示与已建立的连接有相关性的,比如FTP数据连接等。

(18)示例18:只开放本机的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 –dport20450:20480 -j ACCEPT 

iptables -I INPUT -p tcp -m state–state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

(19)示例19:禁止IP是192.168.1.111主机的数据包从eth0网口进入本机(ping不通了)

iptables -t filter -A INPUT -i eth0 -s 192.168.1.111-j DROP

iptables -L -n –line-numbers

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination        

1    DROP       all —  192.168.1.111          0.0.0.0/0          

 

Chain FORWARD (policy ACCEPT)

num  target     prot opt source               destination        

 

Chain OUTPUT (policy ACCEPT)

num  target     prot opt source               destination

(20)示例20:只允许IP是192.168.1.111主机的数据包从eth0网口进入本机

a、CentOS5.8

iptables -t filter -A INPUT -i eth0 -s !192.168.1.111 -j DROP

b、CentOS6.4及以上

iptables -t filter -A INPUT -i eth0 ! -s192.168.1.111 -j DROP

(21)示例21:禁ping,但其它服务正常

iptables -t filter -A INPUT -p icmp–icmp-type 8 -j DROP

(22)示例22:匹配网络状态-m state–state

a、iptables的4种网络状态 

NEW:已经或将启动新的连接

ESTABLISHED:已建立的连接

RELATED:正在启动新连接

INVALID:非法或无法识别的

b、FTP服务是特殊的,需要配状态连接。

c、允许关联的状态包通过

iptables -A INPUT  -m state –state ESTABLISHED,RELATED -jACCEPT

iptables -A OUTPUT -m state –stateESTABLISHED,RELATED -j ACCEPT

(23)示例23:控制请求速率-m limit

a、参数说明

–limit n/{second/minute/hour}:指定时间内的请求速率"n"为速率,后面为时间分别为:秒、分、时   

–limit-burst [n]:在同一时间内允许通过的请求"n"为数字,不指定默认为5

b、允许172.16.0.0/16网络ping本机(172.16.14.1),限制每分钟请求不能超过20,并发不能超过6个

iptables -A INPUT -s 172.16.0.0/16 -d172.16.14.1 -p icmp –icmp-type 8 -m limit –limit 20/min –limit-burst 6 -jACCEPT

iptables -A OUTPUT -s 172.16.14.1 -d172.16.0.0/16 -p icmp –icmp-type 0 -j ACCEPT

三、生产场景1:企业服务器防火墙功能部署实战

1、生产环境主机防火墙配置的2种模式

(1)逛公园模式

默认随便进出,对非法分子进行拒绝。企业应用:企业配置上网网关路由。

(2)看电影模式

默认没授权进入。企业应用:服务器主机配置防火墙。该模式更严格、更安全一些。

2、实战操作
(1)清空原有所有规则

a、清空规则

iptables -F

b、清空自定义链

iptables -X

c、计数器清零

iptables -Z

(2)授权管理机IP段访问(防止自已也无法登陆)

iptables -A INPUT -p tcp –dport 22 -s 192.168.1.0/24-j ACCEPT

(3)授权本机回环接口访问

a、允许进入

iptables -A INPUT -i lo -j ACCEPT

b、允许输出

iptables -A OUTPUT -o lo -j ACCEPT

(4)设置防火墙默认规则

a、默认规则设置相关参数

-P 或 –policy

b、命令格式

iptables -P 链名动作

c、禁止所有输入

iptables -P INPUT DROP

d、允许所有输出

iptables –policy OUTPUT ACCEPT

e、禁止所有转发

iptables -P FORWARD DROP

(5)开启信任的IP网段

iptables -A INPUT -p tcp -s 192.168.10.0/24-p all -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.248.0/24-p all -j ACCEPT

(6)开启允许访问的端口

iptables -A INPUT -p tcp –dport 80 -j ACCEPT

(7)如果允许外部IP能ping通

iptables -A INPUT -p icmp –icmp-type 8 -jACCEPT

(8)如查有FTP服务,还需允许关联的状态包通过

iptables -A INPUT -m state –stateESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -m state –stateESTABLISHED,RELATED -j ACCEPT

(9)通过nmap命令检查开放的端口

nmap 192.168.1.111 -p 1-65535

Starting Nmap 5.51 ( http://nmap.org ) at 2017-05-10 13:44 CST

Nmap scan report for 192.168.1.111

Host is up (0.00053s latency).

Not shown: 65533 filtered ports

PORT   STATE  SERVICE

22/tcp open   ssh

80/tcp closed http

(10)保存规则

/etc/init.d/iptables save 或iptables-save > /etc/sysconfig/iptables

iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

(11)查看保存的规则文件

cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Wed May 10 13:07:10 2017

*filter

:INPUT DROP [86588:3976773]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [50:2332]

-A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT

。。。

COMMIT

# Completed on Wed May 10 13:07:10 2017

四、生产场景2:生产环境如何维护防火墙

1、第1次添加规则

使用命令行或脚本,一次性保存为配置文件。

/etc/init.d/iptables save 或iptables-save > /etc/sysconfig/iptables

2、第2次开始

通过配置文件进行管理。(修改配置文件后,reload)

vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Wed May 10 13:07:10 2017

*filter

:INPUT DROP [86588:3976773]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [50:2332]

-A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.16.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.25.0/24 -p tcp -j ACCEPT

-A INPUT -s 192.168.18.0/24 -p tcp -j ACCEPT

-A INPUT -p tcp -m tcp –dport 22 -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT-s 192.168.1.0/24 -p icmp -j ACCEPT

-A INPUT-s 192.168.18.0/24 -p icmp -j ACCEPT

-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT

-A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Wed May 10 13:07:10 2017

:wq

/etc/init.d/iptables reload

iptables -L -n

3、提示:企业硬件防火墙和IPTABLES防火墙是否要同时用?

可以同时用。企业硬件防火墙一般放在网关位置,相当于大门保安。服务器相当于房间,需要有人或锁门,iptables相当于锁门。所以IDC机房部署了硬件防火墙,服务器也必须打开iptables。

五、生产场景3:生产环境网关配置

1、服务器网关必需具备的条件
(1)物理条件

a、双网卡

b、外网网卡可以上网

(2)软件条件

a、内核文件/etc/sysctl.conf里开启了转发功能

b、iptables的filter表的FORWARD链允许转发

2、场景
(1)网关服务器

eth0:ip 192.168.1.111 gw 192.168.1.254

eth1:ip 192.168.128.18

(2)内部服务器

192.168.128.0/24

3、实战
(1)网关服务器配置

a、外网网卡eth0配置如下:

ip:192.168.1.111

mask:255.255.255.0

gw:192.168.1.254

DNS1:202.106.0.20

DNS2:8.8.8.8

b、外网网卡eth1配置如下:

ip:192.168.128.18

mask:255.255.255.0

gw:无

DNS:无

(2)内部服务器配置

ip:192.168.128.11

mask:255.255.255.0

gw:192.168.1.18

DNS1:202.106.0.20

DNS2:8.8.8.8

(3)查看路由表(内部服务器)

route -n

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

。。。

0.0.0.0         192.168.1.18     0.0.0.0         UG   0      0        0 eth0

(4)检查网关服务器是否能上网

ping www.baidu.com  

字节=32 时间<1ms TTL=123

(5)开启网关服务器的内核转发功能(内核级别)

a、修改配置文件/etc/sysctl.conf

修改前

# Controls IP packet forwarding

net.ipv4.ip_forward = 0

修改后

# Controls IP packet forwarding

net.ipv4.ip_forward= 1

b、生效

sysctl -p

(6)开启网关服务器的iptables转发功能(NAT表:iptables级别)

a、修改默认规则

iptables -P INPUT ACCEPT       #允许输入

iptables -P FORWARD ACCEPT     #允许转发

iptables -P OUTPUT ACCEPT     #允许输出

b、清空规则

iptables -F

c、检查内核是否加载nat模块

lsmod | grep nat

<–#为空,没有加载nat模块

d、加载nat模块

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state

e、再次检查内核是否加载nat模块

lsmod | grep nat

nf_nat_ftp             2602  0

nf_conntrack_ftp      10475  1 nf_nat_ftp

iptable_nat            5053  0

nf_nat                18765  2 nf_nat_ftp,iptable_nat

nf_conntrack_ipv4      7694  3 iptable_nat,nf_nat

nf_conntrack           65428  7  nf_nat_ftp,nf_conntrack_ftp,iptable_nat,。。。

ip_tables              9567  2 iptable_nat,iptable_filter

(7)检查网关服务器与内部服务器网络是否通畅

a、网关服务器ping内部服务器

ping 192.168.128.11

字节=32 时间<1ms TTL=123

b、内部服务器ping网关服务器内部IP

ping 192.168.128.18

字节=32 时间<1ms TTL=123

c、内部服务器ping网关服务器外部IP

ping 192.168.1.111

字节=32 时间<1ms TTL=123

d、内部服务器ping网关IP

ping 192.168.1.254

<–#为空,不通

e、内部服务器ping百度

ping www.baidu.com

<–#为空,不通

(8)在网关服务器配置NAT,实现局域网共享

a、方法一:适用于有固定外网地址的情况

(i)命令

iptables -t nat-A POSTROUTING -s 192.168.128.0/24 -o eth0 -j SNAT –to-source 192.168.1.111

(ii)说明

-s 192.168.128.0/24:内部网段

-o eth0:网关服务器外部网卡设备名

-j SNAT 针对源地址IP进行转换

–to-source 192.168.1.111:网关服务器外部网卡IP地址

b、方法二(伪装):适用于没有固定外网地址的情况(每次都变化的,如ADSL)

iptables -t nat -A POSTROUTING -s192.168.128.0/24 -j MASQUERADE

4、为什么用POSTROUTING?

OUTPUT:和主机发出去的数据包有关。改变主机发出数据包的目标地址。

PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则。作用是改变数据包的目的地址、目的端口等。

POSTROUTING:在数据包离开防火墙进,进行路由判断之后执行的规则。作用是改变数据包的源地址、源端口等。

六、生产场景4:把外部IP地址及端口映射到内部服务器地址及端口

1、要求

将访问网关服务器192.168.1.111:80,映射到192.168.128.20:9000上

2、命令

iptables -t nat-A PERROUTING -d 192.168.1.111 -p tcp –dport 80 -j DNAT –to-destination192.168.1.20:9000

3、说明

-j DNAT 针对目标地址IP进行转换

–to-destination:内部服务器网卡IP地址及端口

4、企业应用场景

(1)把访问外网IP及端口的请求映射到内网某个服务器及端口

(2)硬件防火墙,把外部LVS/nginx外网VIP及端口的请求映射到IDC负载均衡服务器内部IP及端口

七、生产场景5:外网IP与内网IP实现一对一映射(相当于全端口映射)

1、要求

将访问网关服务器124.42.34.112,映射到192.168.128.20

2、环境

网关服务器:

eth0:124.42.60.109

eht1:192.168.128.18

内部服务器:

eth0:192.168.128.20

3、命令

iptables -t nat-A PREROUTING -d 124.42.60.112 -j DNAT –to-destination 192.168.128.20

八、iptables常用企业应用场景

1、Linux主机防火墙(filter表)
2、局域网共享上网(nat表的POSTROUTING链)

iptables -t nat-A POSTROUTING -s 192.168.128.0/24 -o eth0 -j SNAT –to-source 192.168.1.111

iptables -t nat -A POSTROUTING -s192.168.128.0/24 -j MASQUERADE

3、外部地址和端口映射到内部地址和端口(nat表的PREROUTING链)

iptables -t nat-A PREROUTING -d 124.42.60.112 -j DNAT –to-destination 192.168.128.20

4、映射多个外网IP上网

iptables -t nat-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT –to-source124.42.60.11-124.42.60.16

iptables -t nat-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT –to-source124.42.60.103-124.42.60.106

九、iptables调优

1、配置文件:/etc/sysctl.conf
2、调优

######—iptables—########

 net.nf_conntrack_max =25000000

 net.netfilter.nf_conntrack_max = 25000000

 net.netfilter.nf_conntrack_tcp_timeout_established= 180

 net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120

 net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60

 net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120

3、重新生效

    sysctl-p