http://www.cnblogs.com/gao241/p/3522143.html

echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_all
这下是别人不能ping你,你也不能ping别人
将其值改为1后为禁止PING
将其值改为0后为解除禁止PING
其实使用iptable最简单
iptables -A INPUT -p icmp –icmp-type 8 -s 0/0 -j DROP
iptables -A INPUT -p icmp –icmp-type 0 -s 0/0 -j ACCEPT
iptables -A OUTPUT -p icmp –icmp-type 0 -s 192.168.29.1 -j DROP

iptables -A OUTPUT -p icmp –icmp-type 8 -s 192.168.29.1 -j ACCEPT


如何让别人ping不到自己,而自己又能ping别人,问题其实很简单,用如下脚本

#/bin/bash
iptables -F
iptables -F -t nat
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 80,22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 80,22 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT


iptables应用之禁ping和防ddos向外发包

主要讲2个基本的实际应用,主要涉及到禁ping(ipv4)以及禁止udp,即禁止有***利用服务器向外发包ddos***方面的内容。

一、如果没有iptables禁止ping

echo1 > /proc/sys/net/ipv4/icmp_echo_igore_all #开启

echo0 > /proc/sys/net/ipv4/icmp_echo_igore_all #关闭

二、利用iptables规则禁ping

iptables -A INPUT -p icmp --icmp-type8 -s 0/0 -j DROP

三、利用iptables规则,禁止服务器向外发包,防止DDOS向外***

iptables -I OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT #允许UDP服务IP

iptables -A OUTPUT -p udp -j DROP #禁止udp服务

上述53端口和8888是DNS服务必须有的,如果不清楚本机的DNS设置,可执行以下命令得到IP:

cat/etc/resolv.conf



关于PREROUTING链和POSTROUTING链简单关系

源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据

PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)

POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)

源地址转换必须在POSTROUTING链上做。

目标地址转换必须在PREROUTING链上做。

下面我们来实现源地址的功能:我们假设这样一种场景:

wps_clip_p_w_picpath-31021

192.168.0.254是工作在外网的一台WEB服务器,中间的那台是企业里的NAT服务器,我们在上面添加iptables的规则,使其实现地址转换的功能,PC机是工作在企业内部。我们的最终目的是192.168.80.30这台计算机通过NAT服务器可以访问到192.168.0.254的WEB服务。

为PC机设置网关:

[root@station39 ~]# route add default gw 192.168.80.129

下面开始来配置NAT服务器:

首先要开启NAT服务器的内核路由功能:

[root@server27 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

设置规则:

[root@server27 ~]# iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -d 192.168.0.0/24 -j SNAT --to-source 192.168.0.127

[root@server27 ~]# iptables -t nat -L -n

我们用192.168.80.130这台主机访问一下192.168.0.254的web服务,发现可以了!

PS:如果我们使用路由功能来访问254这台主机的话,WEB服务器的访问日志将记录的访问地址是192.168.80.130,而如果我们使用地址转换的功能来访问的话,访问日志记录的访问地址则是192.168.0.127。.

一般我们上网的时候,所获得的IP都是动态的,怎么办?

做源地址转换的时候,还有一个小功能MASQUERADE(地址伪装),使用这个功能,我们不需要

指定目标地址,它会自动探测能够上互联网的地址,并自动将内网地址转换过来。缺陷:比较耗费资源。

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


实现目标地址转换功能:

wps_clip_p_w_picpath-1256

场景:假设192.168.80网段为一个提供WEB服务的网站的内网,中间的为网站的NAT服务器,远端的客户端192.168.0.26想通过中间的NAT服务器来访问内部的192.168.80.130提供的WEB服务,这里就要用到目标地址转换了。

设置192.168.80.130的网关:

[root@station39 ~]# route add default gw 192.168.80.129

开始在NAT服务器上设置规则:

这里依然要打开内核的路由功能

[root@server27 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

开始写规则:

[root@server27 ~]# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.127 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.130

[root@server27 ~]# iptables -t nat -L -n

规则已经写好了,我们使用192.168.0.26来访问一下192.168.0.127试试,已经可以访问了,其实提供WEB服务的是192.168..80.130这台主机,这就是目标地址转换的功能。

我们再查看一下192.168.80.130这台WEB服务器的访问日志:

wps_clip_p_w_picpath-24338

结:最要紧的是我们要记住PREROUTING是数据从网卡流入“路由规则”之前的动作,POSTROUTING是数据从网卡流出“路由规则”之后的动作!



iptables NAT

源地址转换SNAT Source NAT:就是普通路由器实现代理上网的功能。

wKiom1P1o0zRko_mAADEu46M4gg338.jpg

192.168.10.0/24网段内计算机网关都指向192.168.10.1,S1通过eth1与互联网相连,PC1的数据报文发往S1时就把源IP改为12.34.56.78,这样出去到互联网的报文才能够回来,回来后S1会把目标地址改为PC1的IP。S1的内核会维护一个地址转换表,自动修改相应源和目的地址。


包出去的时候修改源IP所以工作在POSTROUING链上

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 12.34.56.78


当使用ADSL通过DHCP获得公网IP时,需要用到MASQUERADE(地址伪装),可以自动把source IP改为当时获取到的。

iptables -t nat -A POSTROUTING -s 192.16.10.0/24 -j MASQUERADE


DNAT 目标地址转换:

  • 适用于没有足够的公网IP而对外提供服务场景,相当于端口映射

  • 也可以起到保护真实主机的作用


所有请求12.34.56.78web服务都转发给后端192.168.10.10的8080端口

iptables -t nat -A PREROUTING -d 12.34.56.78 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.10:8080

数据报文一进来未路由之前就要决定转发给谁,所以工作在PREROUTING链上



iptables端口映射

# 内网通过有外网IP的机器映射端口
echo 1 > /proc/sys/net/ipv4/ip_forward       # 在内核里打开ip转发功能
route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111     # 内网需要添加默认网关,并且网关开启转发
iptables -t nat -A PREROUTING -d 192.168.10.158  -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22
iptables -t nat -nL                # 查看转发

iptables -t nat -A PREROUTING -d 地址1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 地址2:81
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1
本机80端口定向到81端口
iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp --dport 80 -j DNAT --to-dest 127.0.0.1:81
将访问219.239.11.22端口8080的请求转发到192.168.0.21端口80上:
iptables -t nat -A PREROUTING -d 219.239.11.22 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.21:80
iptables -t nat -A POSTROUTING -d 192.168.0.21 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.29




linux iptable 使用指南

linux系统中,防火墙(Firewall),网址转换(NAT),数据包(package)记录,流量统计,这些功能是由Netfilter子系统所提供的,而iptables是控制Netfilter的工具.iptables将许多复杂的规则组织成成容易控制的方式,以便管理员可以进行分组测试,或关闭、启动某组规则。

1. 术语解释

  • DNAT

  • Destination Network Address Translation 目标网络地址转换。 DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器共享一个ip地址连入Internet,并且继续服务。通过对同一个ip地址分配不同端口,来决定数据的流向。


  • SNAT

  • Source Network Address Translation源网络地址转换。这是一种改变数据包源ip地址的技术, 经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解 决这个问题。



2. iptable 概述

2.1. iptable的链和表结构

ip_flow.PNG

如上图可以看出,iptable总体结构.

2.2. 5个链(chain)

iptable_chain.png

  • PREROUTING

  • 在数据包进入防火墙之后、路由判断之前对数据包进行修改


  • INPUT

  • 在数据包被路由到本地之后,但在用户空间程序看到它之前对数据包进行修改


  • OUTPUT

  • 用户空间程序处理数据包后,由本地发出,再次被路由之前更改数据包


  • FORWARD

  • 在最初的路由判断之后、最后一次更改包的源地址之前对数据包进行修改


  • POSTROUTING

  • 在所有路由判断之后,对数据包进行修改

注意: 链 是每个数据包流需要经过的不同环节,你可以在不同的环节根据需要设置不同的过滤策略,每个链的默认策略都是Accept

2.3. 4个表(table)

  • Mangle表

  • 这个表主要用来mangle包,你可以使用mangle匹配来改变包的一些属性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(后续流量控制TC等)


  • Nat表

  • 此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个 包会被这个链匹配,其后的包会自动被做相同的处理(DNAT,SNAT,MASQUERADE)


  • Filter表

  • 此表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的.
    iptalbe中,要用 -t 参数指定要操作哪个表,如果没有 -t 参数,就默认对filter表操作.


  • Raw表

  • 优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

注意: 表 是规则的集合组,每个表中的规则条目是按顺序匹配的,你可以在数据包经过的不同环节设置规则,表的处理优先级:raw > mangle > nat > filter

2.4. 详细的数据包流程

packet_flow.png

从上图可以看出,数据包流环节和表的配合使用方法.


3. iptable应用场景

iptable_example.gif

上图是应用场景的简单拓扑描述,下面的应用场景举例,都以上图为参考.
系统启动的时候所有的默认策略都是ACCEPT,在下面的场景举例中,我们都是在这种前提下设定iptable的
下面每个场景举例都是独立的,没有相关联性的

3.1. 网关服务器安全策略

目标 : 网关服务器系统自生安全策略,只对内网用户开放22端口(sshd服务)

  #清空 filter table
  [root@localhost]# iptables -F -t filter
  [root@localhost]# iptables -X -t filter
  [root@localhost]# iptables -Z -t filter
  
  #清空 nat table
  [root@localhost]# iptables -F -t nat
  [root@localhost]# iptables -X -t nat
  [root@localhost]# iptables -Z -t nat
  
  #设置默认策略(INPUT链默认为DROP)
  [root@localhost]# iptables -t filter -P INPUT DROP
  [root@localhost]# iptables -t filter -P OUTPUT ACCEPT
  [root@localhost]# iptables -t filter -P FORWARD ACCEPT
  
  #回环接口(lo),默认accept
  [root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT
  
  #只对内网用户开放sshd服务
  [root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

说明: 防火墙的策略顺序一般都是 从 非信任 ==> 信任,默认关闭所有访问权限,然后按照需要逐条开放访问权限.

3.2. 共享上网(nat)

目标:使局域网的用户都可以访问外网的服务器

 [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
 [root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

说明: SNAT 和 MASQUERADE 区别

SNAT : 不管是几个地址,必须明确的指定要SNAT的ip,适合网关服务器有固定地址或者是固定地址范围. MASQUERADE : 是针对ADSL动态拨号这种场景而设计,从服务器的网络接口上,自动获取当前ip地址来做NAT,这样就实现了动态SNAT地址转换

3.3. 内网的服务器对外服务(端口映射)

目标:使外网用户可以访问到局域网192.168.138.21这台HTTP服务

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

3.4. 在网关服务器进行透明代理

目标: 使局域网用户,访问外网web服务时,自动使用squid作web透明代理服务器。

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.138.1
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128 
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE