iptables项目案例1:局域网共享上网

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables项目案例1:局域网共享上网相关的知识,希望对你有一定的参考价值。

参考技术A 准备:

1、内网172.16.1.51

ifdown eth0

route add default gw 172.16.1.51

测试:

ping www.baidu.com

ping 203.81.19.1

结果应该是不通。

2、网关服务器 172.16.1.8

eth0:10.0.0.8

eth1:172.16.1.8

gw: 10.0.0.254

修改内核转发:

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

在服务器网关B 172.16.1.8机器上开启路由转发功能。

编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward = 1,然后执行sysctl -p使修改生效。

[root@oldboy ~]# sysctl -p

net.ipv4.ip_forward = 1

测试:ping www.baidu.com 结果通。

调整iptables环境

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -F

3、生产案例:

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

局域网共享的两种方法:

方法1:适合于有固定外网地址的:

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

(1)-s 172.16.1.0/24 办公室或IDC内网网段。

(2)-o eth0 为网关的外网卡接口。

(3)-j SNAT --to-source 10.0.0.8 是网关外网卡IP地址。

方法2:适合变化外网地址(拨号上网):

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE    ##伪装。

老男孩教育iptables项目案例2:外网IP的端口映射到内网IP的端口

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

端口映射 10.0.0.8:9000 -->172.16.1.51:22

实现命令:

iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.51:22

(1)-d 10.0.0.8目标地址。

(2)-j DNAT 目的地址改写。

老男孩教育iptables项目案例3:IP一对一映射

辅助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 873(51上提前配好)

映射多个外网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

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

课外阅读:

(1)生产环境大于254台机器网段划分及路由解决方案详解01

http://v.youku.com/v_show/id_XNTAyMjAwMzI0.html

(2) linux route命令深入浅出与实战案例精讲

http://oldboy.blog.51cto.com/2561410/1119453

http://oldboy.blog.51cto.com/2561410/974194

必看3遍以上。

有关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

iptables做局域网网关(网络管理、NAT转发):

1、局域网有一个外网IP(包括动态)的前提下。

2、例:企业级路由器的配置

路由连接地址为10.1.34.81/24

默认路由:10.1.34.1

分配的公网ip地址:110.233.24.96/27 255.255.255.224

要求购买企业级路由器:

用zebra(quagga)替代企业级路由器:

Linux上配置zebra(quagga)路由:

client(config)#int eth0

client(config-if)#ip add 10.1.34.81 255.255.255.0

client(config-if)#int eth1

client(config-if)#ip add 110.233.24.96 255.255.255.224

client(config)#ip route 0.0.0.0 0.0.0.0 10.1.32.1

client(config)#ip route 110.233.24.96/27 eth1

重点:

1、老男孩教育iptables项目案例1:局域网共享上网:

2、老男孩教育iptables项目案例2:外网IP的端口映射到内网IP的端口

3、老男孩教育iptables项目案例3:IP一对一映射

4、有关iptables的内核优化

下节课:

1、mysql介绍

2、安装方式,安装

3、多实例安装。

4、常用管理命令。

防火墙iptables

Iptables防火墙

1.1Iptables是什么?

开源的基于数据包过滤的防火墙工具。

还可以做NAT映射:1)网关:局域网共享上网。2IP或端口映射。

Iptables主要工作在OSI七层的二三四层,若果重新编译内核。

Iptables也可以支持7层(squid代理+iptables).

1.2Iptables企业应用场景

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

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

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

1.3Iptables工作流程

前面介绍已经提到,iptable是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

 


1.3.1iptables工作流程小结:

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

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

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

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

1.4 商用防火墙

华为 深信服 思科 H3C Juniper天融信 飞塔 网康 绿盟科技 金盾

1.5 iptables(tables)和链(chains)

iptables==>4个表(tables)===>5个链=(chains)==>规则(policy)

4表

   filter(主机防火墙)

   nat(端口或IP映射或共享上网)

   mangle(配置路由标记 ttl tos mark)

   raw

表:

   filter:INPUT,OUTPUT,FORWARD

   NAT   :POSTROUTING,PREROUTING,OUTPUT

   mangle:INPUT,OUTPUT,FORWARD,POSTROUTING,PREROUTING

   raw

链:

   *INPUT:进入主机的数据包。主机防火墙(filter表的INPUT链)

   OUTPUT:流出主机的数据包。

   FORWARD:流经主机的数据包。

   *PREROUTING:进入服务器最先经过的链,NAT端口或IP映射。(nat表的PREROUTING链)

   *POSTROUTING:在流出服务器最后经过的链,NAT共享上网。局域网共享上网(nat表的POSTROUTING链)

   在默认情况下,Iptables术语后,相信大家对iptables的表和链有了初步的了解,默认情况下,Iptables根据功能和表的定义划分包含四个表,filter,nat,mangle,raw其每个表又包含不同的操作链(chains)

   下面的表格展示了表和链的对应关系

表(tables)

                       链(chains)


INPUT

FORWARD

OUTPUT

PREROUTING

POSTROUTING

Filter

  有

   有

  有

   无

   无

Nat

  无

   无

  有

   有

   有

Mangle

  有

   有

  有

   有

   有

 

Filter表:

Filter表是iptables默认使用的表,强调:主要和主机自身有关,真正负责主机防火墙功能的(过滤流入出主机的数据包)。这个表定义了三个链(chains);企业工作场景:主机访火墙功能。


INPUT

负责过滤所有目标是本机地址的数据包,通俗的讲,就是过滤进入主机的数据包


FORWARD

负责转发流经主机的数据包,起转发作用,和Nat关系很大,后面会详细介绍,LVS NAT模式 net.ipv4_forward=0


OUTPUT

处理所有源地址是本机地址的数据包,通俗的讲,就是处理从主机发出去的数据包。

1.6 iptables表和链

技术分享 

实战:

命令:          表上配置           链上      规则

Iptables          [-t   table]  -A     chain      rule-specification

Iptables          [-t   table]  -I      chain      rule-specification

Iptables          [-t   table]  -D     chain      rulenum

Iptables          [-t   table]  -D     chain      rule-specification

注释:

-t  指定表

-A 把规则添加到指定链上,默认插入到最后一行

-I  插入规则到第一行

-D 删除链上的规则

1.7启动iptables

1.7.1启动iptables

[[email protected] ~]# /etc/init.d/iptables start

iptables: Applying firewall rules:                         [  OK  ]

1.7.2查看启动状态命令:

iptables -nL --line-number

-n            #<==以数字的形式显示规则

-L            #<==列表链里的所有规则

--line-number #<==打印规则序号

-t 指定表(default: `filter‘)

[[email protected] ~]# iptables -nL

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     tcp  --  10.0.0.0/24          0.0.0.0/0           tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443

ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

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

 

Chain FORWARD (policy DROP)

target     prot opt source               destination         

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

 

-iptables -D INPUT 4 #<==4是规则号。

 

-F #<==清除一个链或所有链上的规则

-Z #<==链的记数器清零

-X #<==删除用户自定义的链。

 

实践:

[[email protected] ~]# iptables -Z

[[email protected] ~]# iptables -X

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -nL

1.7.3 22端口的方法

[[email protected] ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

规则注释:

-p       #<==指定过滤的协议-p(tcp,udp,icmp,all)

--dport  #<==指定目标端口(用户请求的端口)。

-j       #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)

--sport #<==指定源端口。

1.7.4 禁止10.0.0.253访问

[[email protected] ~]# iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP

[[email protected] ~]# iptables -A INPUT -p tcp ! -s 10.0.0.2 -i eth0 -j DROP

-s       #<==指定源地址。 ! 取反。

-d       #<==指定目的地址。

-i       #<==进入的网络接口(eth0,eth1)。

-o       #<==出去的网络接口(eth0,eth1)。

1.7.5匹配端口范围:

iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP

iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT

iptables -I INPUT -p tcp --dport 18:80 -j DROP  #<==最佳

1.7.3匹配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

 

 

1.7.4匹配网络状态

-m state --state

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

    ESTABLISHED:已建立的连接

    RELATED:正在启动的新连接

    INVALID:非法或无法识别的

1.7.5允许关联的状态包 ftp协议

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

 

 

1.7.6限制指定时间包的允许通过数量及并发数

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

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

iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP

 

--limit-burst [n]

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

iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT

http://blog.csdn.net/gnicky/article/details/51334793

部署一个最安全的企业级防火墙(案例

两种思想:针对默认规则而言。

  逛公园:

   1、默认规则默认是允许的状态。

  看电影:

   2、默认规则默认是不允许的状态。更安全。

 

看电影的思想更安全。

 

实战部署:

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -X

[[email protected] ~]# iptables -Z

[[email protected] ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT

 

 

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[[email protected] ~]# iptables -P INPUT DROP

[[email protected] ~]# iptables -P FORWARD DROP

[[email protected] ~]# iptables -P OUTPUT ACCEPT

[[email protected] ~]# iptables -nL

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

 

Chain FORWARD (policy DROP)

target     prot opt source               destination

 

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

 

 

[[email protected] ~]# iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

[[email protected] ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT

[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT

[[email protected] ~]# iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

 

命令都在内存中生效。

1.7.8扫描测试:使用云主机部署,用笔记本虚拟机扫描

[[email protected] ~]# nmap www.baidu.com

Starting Nmap 5.51 ( http://nmap.org ) at 2017-04-04 12:23 CST

Nmap scan report for www.baidu.com (119.75.217.109)

Host is up (0.020s latency).

Other addresses for www.baidu.com (not scanned): 119.75.218.70

Not shown: 998 filtered ports

PORT    STATE SERVICE

80/tcp  open  http

443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 13.60 seconds

 

 

 

 

永久生效:

[[email protected] ~]# /etc/init.d/iptables save

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

[[email protected] ~]# 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

1.7.9生产维护iptables

1、日常改/etc/sysconfig/iptables配置

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

 

生效:

1/etc/init.d/iptables reload

2iptables -I INPUT 3 -p tcp -m tcp --dport 3306 -j ACCEPT

  

2、临时封Ip-I

iptables -I INPUT -s 203.71.78.10 -j DROP

 

 

3、常用的规则放在前面生效

[[email protected] ~]# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Mon Apr 17 12:03:54 2017

*filter

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [371:25376]

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

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

-A INPUT -s 172.16.1.0/24 -j ACCEPT

-A INPUT -s 10.0.0.0/24 -j ACCEPT

-A INPUT -i lo -j ACCEPT

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

COMMIT

# Completed on Mon Apr 17 12:03:54 2017

 

 

写成脚本:

#!/bin/bash

#this is a server firewall created by  oldboy  17:03 2006-7-26

#updated by oldboy on 10:30 2009-6-23

#http://blog.etiantian.org

#qq:49000448

#define variable PATH

IPT=/sbin/iptables

 

#Remove any existing rules

$IPT -F

$IPT -X

$IPT -Z

 

#setting default firewall policy

$IPT --policy OUTPUT ACCEPT

$IPT --policy FORWARD DROP

$IPT -P INPUT DROP

 

#setting for loopback interface

$IPT -A INPUT -i lo -j ACCEPT

 

#setting access rules

#one,ip access rules,allow all the ips of

$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 202.81.18.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT

$IPT -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT

$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT

 

#icmp

$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

 

#others RELATED

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

 

/etc/init.d/iptables save

#iptables-save >/etc/sysconfig/iptables

生产案例:

1、局域网共享上网项目案例

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

 

2、端口映射 10.0.0.7:9000 -->172.16.1.51:22

实现命令:

iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.51:22

 

3IP一对一映射(DMZ)

ip addr add 10.0.0.81/24 dev eth0 label eth0:0

iptables  -t nat -I POSTROUTING -s 10.0.0.0/255.255.240.0 -d 10.0.0.81 -j SNAT --to-source 10.0.0.2

 

 

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

 

检查:

ping 10.0.0.81

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

telnet 10.0.0.81 873(51上提前配好)

1.7.9映射多个外网IP上网

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

 

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

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


本文出自 “11714322” 博客,谢绝转载!

以上是关于iptables项目案例1:局域网共享上网的主要内容,如果未能解决你的问题,请参考以下文章

iptables防火墙

iptables防火墙

局域网共享上网配置

iptables

iptables典型NAT上网

iptables简单了解