热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

企业软件防火墙iptables

企业中安全优化配置原则推荐:尽可能不给内部服务器配置外网ip,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务.使用场景:大并发的情况,不能开ipta

企业中安全优化配置原则

推荐:尽可能不给内部服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务.

使用场景:

大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全

小并发的情况,选择软件防火墙:iptables(centos 6)、firewalld(centos 7)

firewalld 是最新的软件防火墙centos 7在使用

 生产中iptables的实际应用

主要应用方向

1、主机防火墙(filter表的INPUT链)。

2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。

3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。

4、IP一对一映射。

其他说明:

①iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好。

  注:iptables主要工作在OSI七层的2.3.4层。七层的控制可以使用squid代理+iptables。

②iptabes:生产中根据具体情况,一般,内网关闭,外网打开。大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,所以大并发的情况下,我们使用硬件防火墙的各方面做的很仔细。selinux:生产中也是关闭的。可以做ids的入侵检测。

③实际生产中尽可能不给服务器配置外网IP。可以通过代理转发。比如,nagios就不需要外网。

④并发不是很大的情况下,再外网的IP环境,开防火墙。

⑤第一次直接默认规则生成配置文件,以后就在配置文件中进行修改(编辑添加删除)。

⑥封掉IP:根据IP地址和网络连接数进行封杀。(定时任务,定时封掉,判断,存在就不再进行二次封杀)

企业常用案例功能小结:

1)linux主机防火墙,单机作为防火墙(表filter)。

2)局域网共享上网(表nat postrouting)。

3)外部地址映射为内部地址和端口(表nat prerouting)

 

iptables防火墙简介

Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,

可以对流入和流出服务器的数据包进行很精细的控制.特别是它可以在一台非常低的硬件配置服务器上跑的非常好

(赛扬500HZ cpu 64M 内存的惲况下部署网关防火墙,这说明硬件要求低),提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙。

 

iptables 表和链

四个表:

表(tables

链(chains

Filter

这是默认表,实现防火墙数据过滤功能。

INPUT

对于指定到本地套接字的包,即到达本地防火墙服务器的数据包。

FORWARD

路由穿过的数据包,即经过本地防火墙服务器的数据包。

OUTPUT

本地创建的数据包

NAT

当遇到新创建的数据包连接时将参考这个表

FREROUTING

一进来就对数据包进行改变

OUTPUT

本地创建的数据包在路由前进行改变

POSTROUTING

在数据包即将出去时改变数据包信息

Mangle

这个表专门用于改变数据包

INPUT

进入到设备本身的包

FORWARD

对路由后的数据包信息进行修改

FREROUTING

在路由之前更改传入的包

OUTPUT

本地创建的数据包在路由之前改变

POSTROUTING

在数据包即将离开时更改数据包信息

raw

此表用处较少,可以忽略不计。

This  table is used mainly for configuring exemptions from connection tracking in combination with the  NOTRACK  target.

PREROUTING

for packets arriving via any network interface

OUTPUT

for packets  generated by local processes

五个链

表(tables

链(chains

INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

Filter

×

×

NAT

×

×

Managle

raw

×

×

×

说明:√ 表示有,× 表示无。

 

filter表的详细介绍

filter

主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出主机的数据包)

filter表是iptables默认使用的表,这个表定义了三个链(chains)

企业工作场景:主机防火墙

INPUT

负责过滤所有目标是本机地址的数据包

通俗来说:就是过滤进入主机的数据包

FORWARD

负责转发流经主机的数据包。起到转发的作用,和NAT关系很大。

LVS NAT 模式,net.ipv4.ip_forward=0

OUTPUT

处理所有源地址是本机地址的数据包

通俗的讲:就是处理从主机发出的数据包

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

NAT表信息详细介绍

NAT表

负责网络地址转换的,即来源与目的的IP地址和port的转换。

应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换相关.

工作场景:

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

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

3、WEB,单个端口的映射,直接映射80端口(PREROUTING)

这个表定义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。

OUTPUT

和主机放出去的数据包有关,改变主机发出数据包的目的地址。

PREROUTING

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

就是收信时,根据规则重写收件人的地址

例如:把公网IP: xxx.xxx.xxx.xxx 映射到局域网的 x.x.x.x 服务器

如果是web服务,可以把80转换为局域网的服务器9000端口上。

POSTROUTING

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

写好收件人的地址,要让家人回信时能够有地址可回。

例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为公网地址。

生产应用:局域网共享上网。

iptables工作流程小结

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

2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。

3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。

iptables参数说明

参数

参数说明

显示相关参数

-n/--numeric

以数字的方式显示地址或端口信息

-L/ --list

列出一个链或所有链中的规则信息

--list-rules/-S

Print the rules in a chain or all chains

--line-number

当列出规则信息时,打印规则行号

-v

显示详细信息,可以叠加

-h

显示帮助信息

初始化相关参数

iptables -F

清除所有规则,不会处理默认的规则

iptables -X

删除用户自定义的链

iptables -Z

链的计数器清零(数据包计数器与数据包字节计数器)

配置常用参数

-t 表名称

指定配置哪个表,指定配置表名称。

--append/-A 链名称

附加或追加上相应规则策略,到指定链(链名称必须大写),默认将配置的规则插入到最后一条。

--check/-C

Check for the existence of a rule

--insert/-I 链名称

插入相应规则策略,到指定链上,默认将配置的规则插入到第一条(可以根据规则序号插入到指定位置)--封IP地址使用。

--delete/-D 链名称

删除指定的规则(可以根据规则序号进行删除)

--replace/-R

Replace rule rulenum (1 = first) in chain

-P(大写)链名称

改变链上的最终默认规则策略

--new/-N

创建新的用户定义链

-p 协议名称

[!] --proto

指定规则的协议名称 all tcp udp icmp

--dport

指定匹配的目标端口信息

--sport

指定匹配的源端口信息

-j 动作

匹配数据包后的动作    

ACCEPT

允许

DROP

丢弃(没有响应)

REJECT

拒绝(回应请求者明确的拒绝)

MASQUERADE

伪装上网时使用

SNAT

共享地址上网

DNAT

目的地址改写

-i

[!] --in-interface

在INPUT链配置规则中,指定从哪一个网卡接口进入的流量(只能配置在INPUT链上)

-o

[!] --out-interface

在OUTPUT链配置规则中,指定从哪一个网接口出去的流量(只能配置在OUTPUT链上)

-s

 [!] --source 

指定源IP地址或源网段信息

-d

[!] --destination

指定目标IP地址或目标网段信息

扩展参数

-m 模块

表示增加扩展,匹配功能扩展匹配(可以加载扩展参数)

multiport

实现不连续多端口扩展匹配

icmp

使用icmp的扩展

state

状态模块扩展

--icmp-type

只有类型8是真正会影响ping,或者也可以采用any;了解很多icmp类型iptables -p icmp -h

--limit n/{second/minute/hour}

指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时

--limit-burst [n]

在同一时间内允许通过的请求”n”为数字,不指定默认为5

--exact/-x

扩展数字(显示精确数值)

配置前准备

先备份当前防火墙配置    (在企业中不清楚其他人配置规则的作用之前先备份)

cp /etc/sysconfig/iptables{,.bak}

 

在配置防火墙首先要启动防火墙

[root@clsn ~]# /etc/init.d/iptables start

iptables: Applying firewall rules: [ OK ]

清除iptables所有规则

[root@clsn ~]# iptables -Z    #清空iptables计数器  (作用:清零后,用户在访问,就可排除哪条规则起                                                        作用了)

[root@clsn ~]# iptables -X    #清空iptables自定义链配置

[root@clsn ~]# iptables -F    #清空所有规则,保留默认规则

查看iptables的规则

方法一:/etc/init.d/iptables status

方法二:iptables -L

[root@clsn ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

查看其他的表配置(-t 参数)

[root@clsn ~]# iptables -nL -t raw Chain PREROUTING (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

查看配置规则的顺序号

[root@clsn ~]# iptables -nvL --number-list

--line-number # 显示规则的序号

iptables filter表配置实例

基础配置

配置实例一:配置22/ssh端口访问控制规则

iptables -A INPUT -p tcp --dprot 22 -j DROP # 禁止所有人访问22端口

iptables -I INPUT -p tcp --dprot 22 -j ACCEPT # 恢复连接方法

iptables -I INPUT 2 -p tcp --dprot 22 -j ACCEPT # 通过插入指定行号信息,指定将规则插入到第几行

iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 删除指定规则

iptables -D INPUT 2 # 根据规则行号,删除相应的规则

只允许10.0.0.1的ip通过ssh连接这台服务器

iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT

如果默认规则是允许所有,还需修改默认规则为丢弃所有:

iptables -P INPUT DROP

配置实例二:禁止网段连入(禁止172.16.1.0网段访问172.16.1.188)

iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -j DROP

配置实例三:禁止某个172.16.1.0网段访问服务器主机的22端口

iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -p tcp --dport 22 -j DROP

方向说明:

# 在入方向控制

iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

# 在出方向控制

iptables -I OUTPUT -o eth0 -p tcp --sport 22 -j DROP

配置实例四:除10.0.0.0网段可以进行连接服务器主机以外,其余网段都禁止

  第一种方式:

iptables -A INPUT -s 10.0.0.0/24 -d 172.16.1.8 -j ACCEPT

iptables -P INPUT DROP

   修改默认规则,将默认规则改为拒绝

第二种方式:

   !  --- 表示对规则信息进行取反

iptables -A INPUT ! -s 10.0.0.0/24 -d 172.16.1.8 -j DROP --- centos6用法

iptables -A INPUT -s ! 10.0.0.0/24 -d 172.16.1.8 -j DROP --- centos5用法

说明:只有iptables帮助手册中指定的参数可以用取反符号(iptables --help)

iptables配置的保存:

方法一:/etc/init.d/iptables save

方法二:iptables-save > /etc/sysconfig/iptables

配置实例五:测试匹配列举端口范围。

iptables -A INPUT -p tcp --dport 22:80 -j DROP # 设置连续多端口控制策略

iptables -A INPUT -p tcp -m multiport --dport 22,80 -j DROP # 设置不连续多端口控制策略

   -m 参数表示增加扩展匹配功能,multiport 实现不连续多端口扩展匹配

配置实例六:匹配ICMP类型

   禁止ping策略原则

   iptables服务器是ping命令发起者或是接受者

   发起者:

input链: 禁止icmp-type 0 

iptables -A INPUT -s 10.0.0.1 -p icmp --icmp-type 0 -j DROP

output链: 禁止icmp-type 8 

iptables -A OUTPUT -d 10.0.0.1 -p icmp --icmp-type 8 -j DROP

   接受者:

input链: 禁止icmp-type 8 

iptables -A INPUT -s 10.0.0.1 -p icmp --icmp-type 8 -j DROP

output链: 禁止icmp-type 0 

iptables -A OUTPUT -d 10.0.0.1 -p icmp --icmp-type 0 -j DROP

简化配置:

iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type any -j DROP #禁止所有类型的icmp

   指定类型禁止icmp

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

iptables -A INPUT -p icmp --icmp-type 8 -j DROP

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT

   说明:只有类型8是真正会影响ping,或者也可以采用any;了解很多icmp类型iptables -p icmp -h

ICMP类型的说明

TYPE

CODE

Description

Query

Error

0

0

Echo Reply——回显应答(Ping应答)

x

 

3

0

Network Unreachable——网络不可达

 

x

3

1

Host Unreachable——主机不可达

 

x

3

2

Protocol Unreachable——协议不可达

 

x

3

3

Port Unreachable——端口不可达

 

x

3

4

Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特

 

x

3

5

Source routing failed——源站选路失败

 

x

3

6

Destination network unknown——目的网络未知

 

x

3

7

Destination host unknown——目的主机未知

 

x

3

8

Source host isolated (obsolete)——源主机被隔离(作废不用)

 

x

3

9

Destination network administratively prohibited——目的网络被强制禁止

 

x

3

10

Destination host administratively prohibited——目的主机被强制禁止

 

x

3

11

Network unreachable for TOS——由于服务类型TOS,网络不可达

 

x

3

12

Host unreachable for TOS——由于服务类型TOS,主机不可达

 

x

3

13

Communication administratively prohibited by filtering——由于过滤,通信被强制禁止

 

x

3

14

Host precedence violation——主机越权

 

x

3

15

Precedence cutoff in effect——优先中止生效

 

x

4

0

Source quench——源端被关闭(基本流控制)

   

5

0

Redirect for network——对网络重定向

   

5

1

Redirect for host——对主机重定向

   

5

2

Redirect for TOS and network——对服务类型和网络重定向

   

5

3

Redirect for TOS and host——对服务类型和主机重定向

   

8

0

Echo request——回显请求(Ping请求)

x

 

9

0

Router advertisement——路由器通告

   

10

0

Route solicitation——路由器请求

   

11

0

TTL equals 0 during transit——传输期间生存时间为0

 

x

11

1

TTL equals 0 during reassembly——在数据报组装期间生存时间为0

 

x

12

0

IP header bad (catchall error)——坏的IP首部(包括各种差错)

 

x

12

1

Required options missing——缺少必需的选项

 

x

13

0

Timestamp request (obsolete)——时间戳请求(作废不用)

x

 

14

 

Timestamp reply (obsolete)——时间戳应答(作废不用)

x

 

15

0

Information request (obsolete)——信息请求(作废不用)

x

 

16

0

Information reply (obsolete)——信息应答(作废不用)

x

 

17

0

Address mask request——地址掩码请求

x

 

18

0

Address mask reply——地址掩码应答

 

防火墙状态机制配置

状态集简单说明:

状态集

说明

NEW

表示新建立连接的数据包状态

ESTABLISHED

表示新建立连接数据包发送之后,回复响应的数据包状态

RELATED

表示借助已经建立的链路,发送新的连接数据包

如:如果禁止了RELATED状态,FTP可以建立连接,但无法传输数据

INVALID

无效无法识别的数据包

注意:允许关联的状态包通过(web服务不要使用FTP服务)

防火墙服务配置在FTP服务器上时,需要配置以下策略

 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

实现发现sent_syn状态

iptables -A INPUT -m state --state NEW -j DROP # 防火墙所连接客户端上配置

实现发现sent_rcvd状态

iptables -I INPUT -i eth0 -s 10.0.0.201 -m state --state ESTABLISHED -j DROP # 防护墙上配置的

使用iptables实现限速功能

limit是iptables的一个匹配模块,用它结合iptables的其它命令可以实现限速的功能。

不过首先必须明确,limit本身只是一个“匹配”模块。我们知道,iptables的基本原理是“匹配--处理”,limit在这个工作过程中只能起到匹配的作用,它本身是无法对网络数据包进行任何处理的。我看到网上有些limit的例子里面说只 用一条包含limit匹配规则的iptables语句就可以实现限速,那是错误的。

实际上,利用imit来限速需要包括两个步骤:

1.对符合limit匹配规则包放行

2.丢弃/拒绝未放行的包

示例:

iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT

iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP

   语句含义:当来自10.0.0.7 的ping包超过5个时进行限速,限制为每10s一个。

参数说明:

参数

参数含义

--limit n/{second/minute/hour}

指定时间内的请求速率”n”为速率,后面为时间分别为:秒 分 时

--limit-burst [n]

在同一时间内允许通过的请求”n”为数字,不指定默认为5

limit模块具体是如何工作的。?

limit的匹配是基于令牌桶 (Token bucket)模型的。

令牌桶是一种网络通讯中常见的缓冲区工作原理,它有两个重要的参数,令牌桶容量n和令牌产生速率s。

我们可以把令牌当成是门票,而令牌桶则是负责制作和发放门票的管理员,它手里最多有n张令牌。一开始,管理员开始手里有n张令牌。每当一个数据包到达后,管理员就看看手里是否还有可用的令牌。如果有,就把令牌发给这个数据包,limit就告诉iptables,这个数据包被匹配了。而当管理员把手上所有的令牌都发完了,再来的数据包就拿不到令牌了。这时,limit模块就告诉iptables,这个数据包不能被匹配。除了发放令牌之外,只要令牌桶中的令牌数量少于n,它就会以速率s来产生新的令牌,直到令牌数量到达n为止。

通过令牌桶机制,即可以有效的控制单位时间内通过(匹配)的数据包数量,又可以容许短时间内突发的大量数据包的通过(只要数据包数量不超过令牌桶n)。

limit模块提供了两个参数--limit和--limit-burst,分别对应于令牌产生速率和令牌桶容量。除了令牌桶模型外,limit匹配的另外一个重要概念是匹配项。在limit中,每个匹配项拥有一个单独的令牌桶,执行独立的匹配计算。

 

企业级防火墙配置

清除防火墙规则

[root@clsn ~]# iptables -F

[root@clsn ~]# iptables -X

[root@clsn ~]# iptables -Z

修改默认规则为拒绝(修改前先放行22端口,保证自己能够连上主机)

[root@clsn ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@clsn ~]# iptables -P INPUT DROP

[root@clsn ~]# iptables -P FORWARD DROP

放行指定的端口

[root@clsn ~]# iptables -A INPUT -i lo -j ACCEPT

[root@clsn ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

[root@clsn ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT

[root@clsn ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

保存iptables配置

01. 第一种方式

[root@clsn ~]# /etc/init.d/iptables save

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

[root@clsn ~]# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Tue Apr 4 12:24:43 2017

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [159:10664]

-A INPUT -s 10.0.0.0/24 -j ACCEPT

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

-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

-A INPUT -s 172.16.1.0/24 -j ACCEPT

-A INPUT -i lo -j ACCEPT

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

COMMIT

# Completed on Tue Apr 4 12:24:43 2017

02. 第二种方式

iptables-save >/etc/sysconfig/iptables

 

iptables nat表配置实例

iptables实现共享上网

第一个里程碑:配置内网服务器,设置网关地址

/etc/init.d/iptables stop # 内网服务器停止防火墙服务

ifdown eth0 # 模拟关闭内网服务器外网网卡

setup # 修改内网网卡网关和DNS地址信息

也可以使用命令添加默认网关

route add default gw 172.16.1.188

查看默认的路由信息

[root@test ~]# route -nKernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1

0.0.0.0 172.16.1.188 0.0.0.0 UG 0 0 0 eth1

说明:内网服务器网关地址指定为共享上网服务器内网网卡地址

第二个里程碑:配置共享上网服务器,开启共享上网服务器路由转发功能

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

[root@clsn ~]# sysctl -p

~~~

net.ipv4.ip_forward = 1

~~~

第三个里程碑:配置共享上网服务器,实现内网访问外网的NAT映射

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.188

参数详解:

参数

参数说明

-s 172.16.1.0/24

指定将哪些内网网段进行映射转换

-o eth0

指定在共享上网哪个网卡接口上做NAT地址转换

-j SNAT

将源地址进行转换变更

-j DNAT

将目标地址进行转换变更

--to-source ip地址

将源地址映射为什么IP地址

--to-destination ip地址

将目标地址映射为什么IP地址

当filter表中的forward默认为drop策略时,如何配置forward链?

 配置示例

iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT

# iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT # 可以不进行配置

iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT

# iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT # 可以不进行配置

当外网ip不固定时如何配置?

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE # 伪装共享上网

说明:在企业中如何没有固定外网IP地址,可以采取以上伪装映射的方式进行共享上网

配置映射方法小结

 01. 指定哪些网段需要进行映射     -s 172.16.1.0/24

02. 指定在哪做映射               -o eth0

03. 用什么方法做映射             -j SNAT/DNAT MASQUERADE

04. 映射成什么地址               --to-source  ip地址/--to-destination ip地址

iptables实现外网IP的端口映射到内网IP的端口

实际需求:将网关的IP和9000端口映射到内网服务器的22端口

端口映射 10.0.0.188:9000 -->172.16.1.180:22

配置实例:

iptables -t nat -A PREROUTING -d 10.0.0.188 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.7:22

参数说明:

参数

参数说明

-d 10.0.0.188

目标地址。

-j DNAT

目的地址改写。

 

 IP一对一映射

实际需求:将ip 地址172.16.1.180 映射到10.0.0.188

通过辅助IP配置:

ip addr add 10.0.0.81/24 dev eth0 label eth0:0 # 添加辅助IP

iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51

iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81

适合内网的机器访问NAT外网的IP

iptables -t nat -I POSTROUTING -s 172.16.1.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 172.16.1.8

检查配置:

ping 10.0.0.81 -t

tcpdump|grep -i icmp(两台机器上分别监测)

telnet 10.0.0.81 22

映射多个外网IP上网

 方法1:

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16

      在三层交换机或路由器,划分VLAN。

   方法2:

iptables -t nat -A POSTROUTING -s 10.0.1.0/22 -o eth0 -j SNAT --to-source 124.42.60.11

iptables -t nat -A POSTROUTING -s 10.0.2.0/22 -o eth0 -j SNAT --to-source 124.42.60.12

      扩大子网,会增加广播风暴。

系统防火墙与网络内核优化标准参数

有关iptables的内核优化

调整内核参数文件/etc/sysctl.conf

以下是我的生产环境的某个服务器的配置:

解决time-wait过多的解决办法:

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_synCOOKIEs = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.ip_local_port_range = 4000 65000

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.route.gc_timeout = 100

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

在dmesg中显示  ip_conntrack: table full, dropping packet. 的错误提示,什么原因?

如何解决?

   #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


推荐阅读
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
author-avatar
韩铁衣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有