“浑水不摸鱼斯基”通过精心收集,向本站投稿了6篇linux中iptables中DNAT与SNAT的理解linux操作系统,下面是小编为大家整理后的linux中iptables中DNAT与SNAT的理解linux操作系统,仅供大家参考借鉴,希望大家喜欢!

篇1:linux中iptables中DNAT与SNAT的理解linux操作系统
本文章来给大家介绍关于linux中iptables中DNAT与SNAT的理解,DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映谢,而SNAT(Source Network Address Translation,源地址转换)通常被叫做源映谢。
这是我们在设置Linux网关或者防火墙时经常要用来的两种方式。以前对这两个都解释得不太清楚,现在我在这里解释一下。
首先,我们要了解一下IP包的结构,如下图所示:
在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables 的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。
然后,我们再看看数据包在iptables中要经过的链(chain):
图中正菱形的区域是对数据包进行判定转发的地方。在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发,
如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。
这也就是说,我们要做的DNAT要在进入这个菱形转发区域之前,也就是在PREROUTING链中做,比如我们要把访问202.103.96.112的访问转发到192.168.0.112上:
代码如下复制代码iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
这个转换过程当中,其实就是将已经达到这台Linux网关(防火墙)上的数据包上的destination ip address从202.103.96.112修改为192.168.0.112然后交给系统路由进行转发。
而SNAT自然是要在数据包流出这台机器之前的最后一个链也就是POSTROUTING链来进行操作
代码如下复制代码iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66
这个语句就是告诉系统把即将要流出本机的数据的source ip address修改成为58.20.51.66。这样,数据包在达到目的机器以后,目的机器会将包返回到58.20.51.66也就是本机。如果不做这个 操作,那么你的数据包在传递的过程中,reply的包肯定会丢失。
篇2:linux中iptables 防火墙简单设置linux操作系统
般装好的服务器都是没有设置防火墙的,现在我们假设就设置了ssh,开放20端口,其它的都没有设置,那我们到底应该怎么简单快速的做呢?怎么能够快速的设置好apache的访问呢?
用vim打开/etc/sysconfig/iptables,我们先来看一下最终设置好apache80端口访问是什么样:
代码如下复制代码1、:RH-Firewall-1-INPUT - [0:0]
这里可以理解为定义了一个链RH-Firewall-1-INPUT
代码如下复制代码2、-A INPUT -j RH-Firewall-1-INPUT和-A FORWARD -j RH-Firewall-1-INPUT这里是把INPUT和FORWARD的所有包都转发到RH-Firewall-1-INPUT,这是重点,也就意味着,只要定义好RH-Firewall-1-INPUT,就定义好了INPUT和FORWARD两个链
代码如下复制代码3、-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT允许80端口的数据包传输,这里的参数都很简单,去百度查一下就知道了
好了,就这么简单,一个80端口的防火墙设置就弄好了~~
那么如何屏蔽来自某个特定国家的 IP 呢?
方法很容易,先到 IPdeny 下载以国家代码编制好的 IP 地址列表,
比如下载 cn.zone:
# wget www.ipdeny.com/ipblocks/data/countries/cn.zone
有了国家的所有 IP 地址,要想屏蔽这些 IP 就很容易了,直接写个脚本逐行读取 cn.zone 文件并加入到 iptables 中:
代码如下复制代码#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com
COUNTRY = “cn”
IPTABLES = /sbin/iptables
EGREP = /bin/egrep
if [ “$(id -u)” != “0” ]; then
echo “you must be root” 1>&2
exit 1
fi
resetrules {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
}
resetrules
for c in $COUNTRY
do
country_file = $c.zone
IPS = $($EGREP -v “^#|^$” $country_file)
for ip in $IPS
do
echo “blocking $ip”
$IPTABLES -A INPUT -s $ip -j DROP
done
done
exit 0
篇3:Linux中iptables防火墙配置指南linux操作系统
iptables是linux系统中一个很重要的功能,它就windows防火墙了,但iptables比windows防火墙能力要强多了,下面我来给大家介绍一些iptables配置方法,
一、安装软件
我们购买的VPS,一般都已经预装iptables,可以先检查下iptables状态,确认是否安装。
service iptables status若提示为iptables:unrecognized service,则需要安装。yum install iptables #CentOS系统apt-get install iptables #Debian系统二、配置规则以下命令我们以CentOS为例,敬请留意。安装好的iptables配置文件在/etc/sysconfig/iptables,默认的iptables我们可以无视之,采用下面的命令,清除默认规则。iptables –Fiptables –Xiptables –Z接下来,添加我们自己的iptalbes规则,开放指定端口,关闭危险端口之类。,以下,是一个简单的规则:#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#允许FTP服务的21和20端口
iptables -A INPUT -p tcp –dport 21 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT
如果还有需要开启的端口,可以在上面添加,然后,保存规则并重启。
service iptables save #保存
或者/etc/rc.d/init.d/iptables save
service iptables restart #重启
在写到iptalbes规则的时候,我这里列出可能涉及的其他规则,譬如禁止单个IP:
-A INPUT -s 1.2.3.4 -j DROP三、查询修改及删除iptables -L –n #查询规则iptables -L -n --line-numbers #将规则按数字序号显示方便删除iptables -D INPUT 4 #删除第四条规则四、设定开机启动chkconfig iptables on五、其他规则以下部分规则,大家可以做些参考,
# 打开 syncookie (轻量级预防 DOS 攻击)
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
# 设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null
# 设置支持最大连接树为 30W(这个根据内存和 iptables 版本来,每个 connection 需要 300 多个字节)
sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null
# 防止SYN攻击 轻量
iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -A syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
# 对于不管来自哪里的ip碎片都进行控制,允许每秒通过100个碎片
iptables -A FORWARD -f -m limit –limit 100/s –limit-burst 100 -j ACCEPT
# icmp包通过的控制,防止icmp 攻击
iptables -A FORWARD -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT
# 丢弃坏的TCP包
iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j LOG –log-prefix “New not syn:”
iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j DROP
下面给大家推荐一款更详细的 linux/iptables.htm“>linux iptables配置教程 www.111cn.net/sys/linux/iptables.htm
篇4:linux中shell命令监控iptables是否运行linux操作系统
最近在调试服务器的iptables,自己做了个定时关iptables,但晚上回家很少开电脑,所以就没法去启动iptables,当然你可能会说,为什么不取消定时关闭iptables,我只能说个人的环境不一样,需求也就不一样
脚本内容:
代码如下复制代码vi iptables-reset.sh#!/bin/bash
#Powered by blog.slogra.com
port=`iptables -vL|grep ssh|awk '{split($NF,a,”:“);print a[2]}'|wc -l`
if [ $port = 1 ];then
echo ”ok!“
else
/etc/init.d/iptables start
sleep 2
port=`iptables -vL|grep ssh|awk '{split($NF,a,”:“);print a[2]}'|wc -l`
if [ $port = 1 ];then
echo ”ok!"
else
/etc/init.d/iptables restart
fi
fi
验证图:
大家可以先在虚拟机里测试下,再放到服务器上执行,当然如果你服务器性能好,也可以改成死循环去检测的
原文来自:blog.slogra.com
篇5:linux系统中查看己设置iptables规则linux操作系统
有时我们刚接手服务器以前网管做的iptables规则我们可能不知道,需要查看一下iptables规则怎么写以来了解机器了,下面我来介绍查看iptables规则实例,
iptables是一个强大的Linux防火墙,使用频率极高。本文介绍如何查看iptables规则设置。
1、iptables -L
查看filter表的iptables规则,包括所有的链。filter表包含INPUT、OUTPUT、FORWARD三个规则链。
说明:-L是--list的简写,作用是列出规则。
2、iptables -L [-t 表名]
只查看某个表的中的规则。
说明:表名一个有三个:filter,nat,mangle,如果没有指定表名,则默认查看filter表的规则列表(就相当于第一条命令)。
举例:iptables -L -t filter
3、iptables -L [-t 表名] [链名]
这里多了个链名,就是规则链的名称。
说明:iptables一共有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING五个规则链。
举例:iptables -L INPUT
注意:链名必须大写。在Linux系统上,命令的大小写很敏感。
4、iptables -n -L
说明:以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/0
5、iptables -nv -L
说明:你也可以使用“iptables -L -nv”来查看,这个列表看起来更详细,对技术人员更友好,呵呵。
如果想删除iptables规则我们可以如下操作
删除用-D参数
删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):
[root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则,
[root@test ~]# iptables -nv --line-number
iptables v1.4.7: no command specified
Try `iptables -h' or 'iptables --help' for more information.
[root@test ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 192.168.1.1 0.0.0.0/0
2 DROP all -- 192.168.1.2 0.0.0.0/0
3 DROP all -- 192.168.1.3 0.0.0.0/0
删除第二行规则
[root@test ~]# iptables -D INPUT 2
篇6:Linux中备份与恢复Linux系统linux操作系统
linux也查windows系统一相可以直接对系统进行备份以备系统出问题时我们进行还原了,下面我来给大家详细介绍Linux中备份与恢复Linux系统的方法,有需要学习的朋友可参考,
备份:
具体说来要这样做:
首先是要用root用户,必须的,然后是到/目录下,就是根目录下,然后就可以使用下面给出的命令一键备份了,easy:
代码如下复制代码tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found--exclude=/backup.tgz --
exclude=/mnt--exclude=/sys
这里稍微介绍一下代码,应该都认识的吧:
tar是Linux下的打包命令,就是类似于压缩的打包,加上参数‘cvpfz’用于表示创建一个打包文件,并且具有保存权限,后面的z表示使用gzip压缩,f参数后面就是街上名称了,这里的就是backup.tgz了。
后面加上的就是备份的目录,这里要备份所有的文件,自然就是根目录了:/。后面--exclude很明白吧,就是要排除的目录,这些目录下的文件我们不想备份,因为没有什么用,或者很大很大,严重影响备份的速度。当然了,不要笨到把自己想要备份的文件也排除了,那样结果会很怪异的。这里提醒一下,如果不想备份/mnt下,那就把它排除把,还有就是/media目录了,不要挂载东西,不然一起备份了,还是比较厉害的一个命令了。
可能在备份的最后会有一条信息,就是提示tar命令由于先前错误的耽搁存在错误之类的,不过这个不要紧,直接pass。
除此之外,还可以选择拥有较高压缩比率的Bzip来压缩文件,高压缩比意味着低压缩速度,那就需要很长的时间了,如果不是很着急,那就可以用下面的命令来做,其实也没什么,就是把上面的命令中的z参数替换成j参数,就可以了,这样的话命令就会变成这样:
代码如下复制代码tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found--exclude=/backup.tgz --
exclude=/mnt--exclude=/sys
恢复:
如果哪一天很不幸你的数据被毁掉了,你应该感到庆幸,因为你曾经备份过系统,但愿这个备份的时间不要太久了,
废话不多说,下面就是恢复。
我们已经将系统整个备份到了backup.tgz文件了
下面还是要确定你就是根用户,这样才能顺利进行,不然又得纠结的。
确定所拥有的备份文件在根目录下。这是必须的,不然会有意想不到的错误,你可以想象恢复到一般的时候恢复文件把自己给覆盖了的情况。
接下来我还是宣扬一下Linux的好处,就是不需要用光盘引导之类的,因为你就在操作的最底层,无需再次关开机什么的,额,这里除去你的系统已经被你搞得连shell都看不见了,还是老实点的引导吧,我们可以再Linux运行的时候还原文件,并且移除所有的其他文件,这是危险的。下面还是正题:
使用这个命令即可:
代码如下复制代码tar xvpfz backup.tgz -C /
如果使用了bz2:,就是用下面的命令:
代码如下复制代码tar xvpfj backup.tar.bz2 -C /
这回把分区里所有相同的文件用压缩文件里的文件代替,所有要三思而后行,除非你的系统的确需要还原。
下面的命令用于重新创建被排除的目录:
代码如下复制代码mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys
■/proc 权限:文件所有者:root群组:root所有者:读取 执行 群组:读取 执行 其它:读取 执行
■/lost+found 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
■/mnt 权限:文件所有者:root群组:root所有者:读取 写入 执行 群组:读取 执行其它:读取 执行
■/sys 权限:文件所有者:root群组:root所有者:读取 写入 执行 群组:读取 执行其它:读取 执行







