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
echo
1 &
gt
; /proc/sys/net/ipv4/icmp_echo_igore_all
#开启
echo
0 &
gt
; /proc/sys/net/ipv4/icmp_echo_igore_all
#关闭
二、利用iptables规则禁ping
iptables -A INPUT -p icmp --icmp-
type
8 -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链上做。
下面我们来实现源地址的功能:我们假设这样一种场景:
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
实现目标地址转换功能:
场景:假设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服务器的访问日志:
结:最要紧的是我们要记住PREROUTING是数据从网卡流入“路由规则”之前的动作,POSTROUTING是数据从网卡流出“路由规则”之后的动作!
iptables NAT
源地址转换SNAT Source NAT:就是普通路由器实现代理上网的功能。
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的链和表结构
如上图可以看出,iptable总体结构.
2.2. 5个链(chain)
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. 详细的数据包流程
从上图可以看出,数据包流环节和表的配合使用方法.
3. iptable应用场景
上图是应用场景的简单拓扑描述,下面的应用场景举例,都以上图为参考.
系统启动的时候所有的默认策略都是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
转载于:https://blog.51cto.com/hao360/1381408