`
yaasshole
  • 浏览: 664650 次
文章分类
社区版块
存档分类
最新评论

linux下IPTABLES配置详解

 
阅读更多

IPTABLES简单应用说明:

iptables -A INPUT -p tcp -s 10.1.2.187 -j ACCEPT

将10.1.2.187加入允许范围

iptables -t nat -A POSTROUTING -j SNAT --to-source 10.1.2.1

参数——

-A: 添加 (跟链)

-I: 插入
-p: 跟协议
-s: 源IP
-d: 目标IP
-j: 操作行为
-t: 加表
--to-source:SNAT用,表示改成的SNAT源地址
--to-destination:DNAT用,表示改成的DANT目标地址


IPTABLE 分INPUT OUTPUT FORWORD PREROUTING POSTROUTING (链)

具体可在网上查阅。

查看当前iptable列表:

iptables -L
iptables -t nat -L (nat表里内容)
iptables -L -n 显示IP,不自动解析为域名
iptables -L --line-numbers 显示编号iptables -F 删除filter表内容iptables -F -t nat 删除nat表内容

SNAT一般用于到外网,出去

DNAT用于从外面进来的

SNAT eg:

iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5
将内网10.1网段映射为192.168.0.5出去
也可以这样:
iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.0.5-192.168.0.245
将本地映射到一段IP地址上(可以做攻击用^^)
上述例子的同样功能:iptables -t nat -I POSTROUTING -s 10.1.0.0/24 -j NETMAP --to 192.168.0.0/24

DNAT eg:

iptables -t nat -A PREROUTING -d ROUTEIP -p tcp --dport 80 -j DNAT --to-destination WEBIP
ROUTEIP表示防火墙(路由器)的公网IP
WEBIP 表示内网WEB服务器IP
这条规则表示当外网访问本地的HTTP80端口时,自动转到内网的WEB服务器上。等于是把web服务器做了个映射到公网上。当仅仅需要从外网访问内网 时,这样是足够了,但是如果需要从内网机器,通过WEB服务器的外网IP访问WEB服务器的话,还需要加条SNAT规则:iptables -t nat -A POSTROUTING -p tcp -d WEBIP --dport 80 -j SNAT --to ROUTEIP将访问WEB服务器的数据包的源IP地址强制改为网关IP。否则会出现无法访问的问题。简单分析下原因:假设内网 192.168.0.10->需要从外部IP访问WEB的主机 192.168.0.254->WEB服务器内部IP地址 192.168.0.1->网关 (外部IP为202.96.22.22)当192.168.0.10访问202.96.22.22的WEB服务时,根据网关上的DNAT,数据包的目的 IP由202.96.22.22被转为192.168.0.254。254收到数据包后,发现是10发送过来的,那么他会直接回数据包给 192.168.0.10,但是10收到包后发现包的来源不是自己想要的202.96.22.22,那这个包就会被直接丢弃。解决办法就是在254不要直 接发包给10,而是返回给网关,让网关原路返回给10机器。这样,只要将发往254请求WEB服务的数据包的源IP都改为网关的 IP,192.168.0.1,就可以解决这个问题。即 iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.254 --dport 80 -j SNAT --to 192.168.0.1还有个更好的解决办法,独立出一个网段,也就是常说的DMZ区,放置各SERVER服务器。linux下IPTABLES配置详 解:如果你的IPTABLES基础知识还不了解,建议先去看看.开始配置我们来配置一个filter表的防火墙.(1)查看本机关于IPTABLES的设 置情况[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.如果你在安装linux时没有选择启动防火墙,是这样的[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination 什么规则都没有.(2)清除原有规则.不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则. [root@tp ~]# iptables -F 清除预设表filter中的所有规则链的规则
[root@tp ~]# iptables -X 清除预设表filter中使用者自定链中的规则我们在来看一下[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination 什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存. [root@tp ~]# /etc/rc.d/init.d/iptables save这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.[root@tp ~]# service iptables restart现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧(3)设定预设规则[root@tp ~]# iptables -p INPUT DROP[root@tp ~]# iptables -p OUTPUT ACCEPT[root@tp ~]# iptables -p FORWARD DROP
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是 DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也 就是说,不在着个规则里的包怎么办呢,那就是通过.可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什 么包通过.这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则 是,如只做WEB服务器.还是推荐三个链都是DROP.注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规 则.怎么办,去本机操作呗!(4)添加规则.首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链为了能 采用远程SSH登陆,我们要开启22端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.其他的端口也一样,如果开启了web服务 器,OUTPUT设置成DROP的话,同样也要添加一条链:[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)如果做了WEB服务器,开启80端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
如果做了邮件服务器,开启25,110端口.[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT如果做了DNS服务器,开启53端口[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT如果你还做了其他的服务器,需要开启哪个端口,照写就行了.上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP允许icmp 包通过,也就是允许ping,[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
允许loopback!(不然会导致DNS无法正常关闭等问题)IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.减少不安全的端口连接[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的 机会还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.当然出入 更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加允许SSH登陆一样.照着写就行了.下面写一下更加细致的规 则,就是限制到某台机器如:我们只允许192.168.0.3的机器进行SSH连接[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.或采用命令方式:[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig /iptables文件里.[root@tp ~]# /etc/rc.d/init.d/iptables save这样写 !192.168.0.3 表示除了192.168.0.3的ip地址其他的规则连接也一样这么设置.在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们 就写需要ACCETP(通过)的链,对正在转发链的监控.开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT丢弃坏的TCP包[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP处理IP碎片数量,防止攻击,允许每秒100个[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包. [root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT我在前面只所以允许ICMP包通过,就是因为我在这里有限制.
二,配置一个NAT表放火墙1,查看本机关于NAT的设置情况[root@tp rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235 Chain OUTPUT (policy ACCEPT)
target prot opt source destination 我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章当然你如果还没有配置NAT 的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的如果你想清除,命令是[root@tp ~]# iptables -F -t nat[root@tp ~]# iptables -X -t nat[root@tp ~]# iptables -Z -t nat2,添加规则添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),添加规则,我们只添加DROP链.因为默认链全是 ACCEPT.防止外网用内网IP欺骗[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)例:禁止与211.101.46.253的所 有连接[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP禁用FTP(21)端口 [root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP这样写范围太大了,我们可以更精确的定义.[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP 这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.按照我写的,你只要找到QQ,MSN等其他软件的 IP地址,和端口,以及基于什么协议,只要照着写就行了.最后:drop非法连接
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

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


这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.


[root@tp ~]# service iptables restart



别忘了保存,不行就写一部保存一次.你可以一边保存,一边做实验,看看是否达到你的要求,


上面的所有规则我都试过,没有问题.写这篇文章,用了我将近1个月的时间.查找资料,自己做实验,希望对大家有所帮助.如有不全及不完善的地方还请提出. 因为本篇文章以配置为主.关于IPTABLES的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的.

分享到:
评论

相关推荐

    linux下IPTABLES配置详解.docx

    linux下IPTABLES配置详解.docx

    Linux下IPTABLES配置详解

    不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.[root@tp~]#iptables-F清除预设表filter中的所有规则链的规则[root@tp~]#iptables-X清除预设表filter中使用者自定...

    Linux操作系统下IPTables配置方法详解

    Linux操作系统下IPTables配置方法详解.doc

    linux iptables 防火墙快速入门教程

    该演示ppt详细讲解了如何正确配置linux中iptables防火墙及附有一有实例讲解.让初学者更易掌握iptables的应用.

    iptables详解及举例

    iptables详解及举例,可以充分的了解linux防火墙的配置和维护。

    iptables相关配置详情.docx

    关于linux系统的iptables详解,介绍了关于linux里的防火墙配置详解,包括防火墙的查看,清除,以及预设添加防火墙规则。

    详解Linux iptables常用防火墙规则

    如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。 防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些...

    2-linux系统笔记之Iptables防火墙篇

    该文档是linux系统详细...2-linux系统笔记之Iptables防火墙篇.doc 3-linux系统笔记之lamp网站环境搭建.doc 4linux系统笔记之lNMP网站环境搭建.doc 5linux系统笔记之apache高级服务篇.doc 6linux系统笔记之服务器篇.doc

    iptables详解

    iptables是Linux下强大的防火墙,但是配置有些麻烦,本次元详细讲解iptables的配置,能让你快速入门iptables

    iptables详解.doc

    iptable防火墙,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙...

    iptables相关打包下载

    iptables详解 使用Iptables构建Linux防火墙.ppt 2 小时玩转 iptables 企业版 v1.5.4.pdf

    Iptables 中文指南

    2.1. 哪里能取得iptables 2.2. 内核配置 2.3. 编译与安装 2.3.1. 编译 2.3.2. 在Red Hat 7.1上安装 3. 表和链 3.1. 概述 3.2. mangle 表 3.3. nat 表 3.4. Filter 表 4. 状态机制 4.1. 概述 4.2. ...

    企业级Linux服务攻略

    10.4 客户端配置Linux客户端的使用 10.5 NFS排错 10.6 本章练习 10.7 字段汇总 第11章 NIS 11.1 NIS原理 11.1.1 NIS简介 11.1.2 NIS工作原理 11.1.3 NIS工作模式 11.2 NIS的安装 11.2.1 NIS所需软件 11.2.2 安装...

    Python转运维课程视频.zip

    网盘文件永久链接 01_Linux系统安装和认识 02_Linux基本命令1 03_Linux基本命令2 04_vim编辑器 05_用户、组和权限管理 06_软件管理和计划任务 ...29keepalived 配置详解1 30keepalived 配置详解2 ........

    linux上传并配置jdk和tomcat的教程详解

    mkdir app 在opt下创建app目录(压缩包解压到这儿) mkdir software在opt下创建software目录(上传的压缩包放在这儿) mkdir war 在opt下创建war 目录(上传的项目放在这儿) 关闭linux防火墙 防火墙相关设置 查看...

    linux rsync安装 配置 实例详解

    Redhat中安装rsync 1、 首先在服务端和客户端都安装rsync,我的RHEL5默认已经安装好了。在安装RedHat5的时候,可以在软件定制中的“基本系统”——》“基本”的“可选的软件包”中看见:rsync-2.6.8是...配置rsync服

Global site tag (gtag.js) - Google Analytics