iptables防火墙.docx

上传人:b****3 文档编号:24915828 上传时间:2023-06-02 格式:DOCX 页数:22 大小:27.93KB
下载 相关 举报
iptables防火墙.docx_第1页
第1页 / 共22页
iptables防火墙.docx_第2页
第2页 / 共22页
iptables防火墙.docx_第3页
第3页 / 共22页
iptables防火墙.docx_第4页
第4页 / 共22页
iptables防火墙.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

iptables防火墙.docx

《iptables防火墙.docx》由会员分享,可在线阅读,更多相关《iptables防火墙.docx(22页珍藏版)》请在冰豆网上搜索。

iptables防火墙.docx

iptables防火墙

Linux服务器上常用端口

ftp:

2021  ssh:

22  http:

80  telnet:

23  rsync:

873  svn:

3690

pop3:

110  smtp:

25  dns:

53  mysql:

3306  nfs:

111

如果你的IPTABLES基础知识还不了解,建议先去看看.

开始配置

我们来配置一个filter表的防火墙.

(1)查看本机关于IPTABLES的设置情况

[root@tp~]#iptables-L-n

可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.

如果你在安装linux时没有选择启动防火墙,是这样的

ChainINPUT(policyACCEPT)

target      protoptsource                destination         

ChainFORWARD(policyACCEPT)

target      protoptsource                destination         

ChainOUTPUT(policyACCEPT)

target      protoptsource                destination  

什么规则都没有.

(2)清除原有规则.

不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.

[root@tp~]#iptables-F       清除预设表filter中的所有规则链的规则

[root@tp~]#iptables-X       清除预设表filter中使用者自定链中的规则

我们在来看一下

[root@tp~]#iptables-L-n

ChainINPUT(policyACCEPT)

target      protoptsource                destination         

ChainFORWARD(policyACCEPT)

target      protoptsource                destination         

ChainOUTPUT(policyACCEPT)

target      protoptsource                destination      

什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.

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

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

[root@tp~]#serviceiptablesrestart

现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧

(3)设定预设规则

[root@tp~]#iptables-PINPUTDROP

[root@tp~]#iptables-POUTPUTACCEPT

[root@tp~]#iptables-PFORWARDDROP

上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包

而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.

可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.

这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.

注:

如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.

怎么办,去本机操作呗!

(4)添加规则.

首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链

为了能采用远程SSH登陆,我们要开启22端口.

[root@tp~]#iptables-AINPUT-ptcp--dport22-jACCEPT

[root@tp~]#iptables-AOUTPUT-ptcp--sport22-jACCEPT (注:

这个规则,如果你把OUTPUT设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.

其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:

[root@tp~]#iptables-AOUTPUT-ptcp--sport80-jACCEPT,其他同理.)

如果做了WEB服务器,开启80端口.

[root@tp~]#iptables-AINPUT-ptcp--dport80-jACCEPT

如果做了邮件服务器,开启25,110端口.

[root@tp~]#iptables-AINPUT-ptcp--dport110-jACCEPT

[root@tp~]#iptables-AINPUT-ptcp--dport25-jACCEPT

如果做了FTP服务器,开启21端口

[root@tp~]#iptables-AINPUT-ptcp--dport21-jACCEPT

[root@tp~]#iptables-AINPUT-ptcp--dport20-jACCEPT

如果做了DNS服务器,开启53端口

[root@tp~]#iptables-AINPUT-ptcp--dport53-jACCEPT

如果你还做了其他的服务器,需要开启哪个端口,照写就行了.

上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP

允许icmp包通过,也就是允许ping,

[root@tp~]#iptables-AOUTPUT-picmp-jACCEPT(OUTPUT设置成DROP的话)

[root@tp~]#iptables-AINPUT-picmp-jACCEPT   (INPUT设置成DROP的话)

允许loopback!

(不然会导致DNS无法正常关闭等问题)

iptables-AINPUT-ilo-pall-jACCEPT(如果是INPUTDROP)

iptables-AOUTPUT-olo-pall-jACCEPT(如果是OUTPUTDROP)

下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.

减少不安全的端口连接

[root@tp~]#iptables-AOUTPUT-ptcp--sport31337-jDROP

[root@tp~]#iptables-AOUTPUT-ptcp--dport31337-jDROP

有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的elite端口)上的服务。

既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会

还有其他端口也一样,像:

31335、27444、27665、20034NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.

当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加

允许SSH登陆一样.照着写就行了.

下面写一下更加细致的规则,就是限制到某台机器

如:

我们只允许192.168.0.3的机器进行SSH连接

[root@tp~]#iptables-AINPUT-s192.168.0.3-ptcp--dport22-jACCEPT

如果要允许,或限制一段IP地址可用192.168.0.0/24表示192.168.0.1-255端的所有IP.

24表示子网掩码数.但要记得把/etc/sysconfig/iptables里的这一行删了.

-AINPUT-ptcp-mtcp--dport22-jACCEPT因为它表示所有地址都可以登陆.

或采用命令方式:

[root@tp~]#iptables-DINPUT-ptcp--dport22-jACCEPT

然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.

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

这样写!

192.168.0.3表示除了192.168.0.3的ip地址

其他的规则连接也一样这么设置.

在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.

开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)

[root@tp~]#iptables-AFORWARD-ieth0-oeth1-mstate--stateRELATED,ESTABLISHED-jACCEPT

[root@tp~]#iptables-AFORWARD-ieth1-oeh0-jACCEPT

丢弃坏的TCP包

[root@tp~]#iptables-AFORWARD-pTCP!

--syn-mstate--stateNEW-jDROP

处理IP碎片数量,防止攻击,允许每秒100个

[root@tp~]#iptables-AFORWARD-f-mlimit--limit100/s--limit-burst100-jACCEPT

设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.

[root@tp~]#iptables-AFORWARD-picmp-mlimit--limit1/s--limit-burst10-jACCEPT

我在前面只所以允许ICMP包通过,就是因为我在这里有限制.

二,配置一个NAT表放火墙

1,查看本机关于NAT的设置情况

[root@tprc.d]#iptables-tnat-L

ChainPREROUTING(policyACCEPT)

target      protoptsource                destination         

ChainPOSTROUTING(policyACCEPT)

target      protoptsource                destination         

SNAT        all   --   192.168.0.0/24        anywhere             to:

211.101.46.235

ChainOUTPUT(policyACCEPT)

target      protoptsource                destination    

我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章

当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的

如果你想清除,命令是

[root@tp~]#iptables-F-tnat

[root@tp~]#iptables-X-tnat

[root@tp~]#iptables-Z -tnat

2,添加规则

添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),

添加规则,我们只添加DROP链.因为默认链全是ACCEPT.

防止外网用内网IP欺骗

[root@tpsysconfig]#iptables-tnat-APREROUTING-ieth0-s10.0.0.0/8-jDROP

[root@tpsysconfig]#iptables-tnat-APREROUTING-ieth0-s172.16.0.0/12-jDROP

[root@tpsysconfig]#iptables-tnat-APREROUTING-ieth0-s192.168.0.0/16-jDROP

如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)

例:

禁止与211.101.46.253的所有连接

[root@tp~]#iptables -tnat-APREROUTING   -d211.101.46.253-jDROP

禁用FTP(21)端口

[root@tp~]#iptables -tnat-APREROUTING-ptcp--dport21-jDROP

这样写范围太大了,我们可以更精确的定义.

[root@tp~]#iptables -tnat-APREROUTING   -ptcp--dport21-d211.101.46.253-jDROP

这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.

按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.

最后:

drop非法连接

[root@tp~]#iptables-AINPUT    -mstate--stateINVALID-jDROP

[root@tp~]#iptables-AOUTPUT   -mstate--stateINVALID-jDROP

[root@tp~]#iptables-AFORWARD-mstate--stateINVALID-jDROP

允许所有已经建立的和相关的连接

[root@tp~]#iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

[root@tp~]#iptables-AOUTPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

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

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

[root@tp~]#serviceiptablesrestart

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

上面的所有规则我都试过,没有问题.ccc

安全第一”对于linux管理界乃至计算机也都是一个首要考虑的问题。

加密的安全性依赖于密码本身而非算法!

而且,此处说到的安全是指数据的完整性,由此,数据的认证安全和完整性高于数据的私密安全,也就是说数据发送者的不确定性以及数据的完整性得不到保证的话,数据的私密性当无从谈起!

1.禁止系统响应任何从外部/内部来的ping请求攻击者一般首先通过ping命令检测此主机或者IP是否处于活动状态 ,如果能够ping通某个主机或者IP,那么攻击者就认为此系统处于活动状态,继而进行攻击或破坏。

如果没有人能ping通机器并收到响应,那么就可以大大增强服务器的安全性,linux下可以执行如下设置,禁止ping请求:

  [root@localhost~]#echo“1”>/proc/sys/net/ipv4/icmp_echo_ignore_all默认情况下“icmp_echo_ignore_all”的值为“0”,表示响应ping操作。

  可以加上面的一行命令到/etc/rc.d/rc.local文件中,以使每次系统重启后自动运行。

2.禁止Control-Alt-Delete组合键重启系统

  在linux的默认设置下,同时按下Control-Alt-Delete键,系统将自动重启,这是很不安全的,因此要禁止Control-Alt-Delete组合键重启系统,只需修改/etc/inittab文件:

  代码如下:

  [root@localhost~]#vi/etc/inittab

  找到此行:

ca:

:

ctrlaltdel:

/sbin/shutdown-t3-rnow在之前加上“#”

  然后执行:

  代码如下:

  [root@localhost~]#telinitq

3.限制Shell记录历史命令大小

  默认情况下,bashshell会在文件$HOME/.bash_history中存放多达1000条命令记录(根据系统不同,默认记录条数不同)。

系统中每个用户的主目录下都有一个这样的文件。

  这么多的历史命令记录,肯定是不安全的,因此必须限制该文件的大小。

  可以编辑/etc/profile文件,修改其中的选项如下:

  HISTSIZE=30

  表示在文件$HOME/.bash_history中记录最近的30条历史命令。

如果将“HISTSIZE”设置为0,则表示不记录历史命令,那么也就不能用键盘的上下键查找历史命令了。

 4.删除系统默认的不必要用户和组

  Linux提供了各种系统账户,在系统安装完毕,如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,越容易受到攻击。

  删除系统不必要的用户用下面命令

  代码如下:

  [root@localhost~]#userdelusername

  删除系统不必要的组用如下命令:

  代码如下:

  [root@localhost~]#groupdelgroupname

  Linux系统中可以删除的默认用户和组有:

  删除的用户,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。

  删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等。

5.关闭selinux

  SELinux是Security-EnhancedLinux的简称,是一种内核强制访问控制安全系统,目前SELinux已经集成到Linux2.6内核的主线和大多数Linux发行版上,由于SELinux与现有Linux应用程序和Linux内核模块兼容性还存在一些问题,因此建议初学者先关闭selinux,等到对linux有了深入的认识后,再对selinux深入研究不迟!

  查看linux系统selinux是否启用,可以使用getenforce命令:

  代码如下:

  [root@localhost~]#getenforce

  Disabled

  关闭selinux,在redhat系列发行版中,可以直接修改如下文件:

  代码如下:

  [root@localhost~]#vi/etc/sysconfig/selinux#ThisfilecontrolsthestateofSELinuxonthesystem.

  #SELINUX=cantakeoneofthesethreevalues:

  #enforcing-SELinuxsecuritypolicyisenforced.

  #permissive-SELinuxprintswarningsinsteadofenforcing.

  #disabled-SELinuxisfullydisabled.

  SELINUX=enforcing

  #SELINUXTYPE=typeofpolicyinuse.Possiblevaluesare:

  #targeted-Onlytargetednetworkdaemonsareprotected.

  #strict-FullSELinuxprotection.

  SELINUXTYPE=targeted

  将SELINUX=enforcing修改为SELINUX=disabled,重启系统后将会停止SElinux。

6.设定tcp_wrappers防火墙

  Tcp_Wrappers是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables,linux默认都安装了此软件,作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护,iptables防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行,免遭攻击和破坏。

关于iptables的实现,将在下个章节详细讲述。

如果通过了第一层防护,那么下一层防护就是tcp_wrappers了,通过Tcp_Wrappers可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行。

  Tcp_Wrappers的使用很简单,仅仅两个配置文件:

/etc/hosts.allow和/etc/hosts.deny

(1)查看系统是否安装了Tcp_Wrappers

  [root@localhost~]#rpm-qtcp_wrappers或者[root@localhost~]#rpm-qa|greptcp

  tcp_wrappers-7.6-37.2

  tcpdump-3.8.2-10.RHEL4

  如果有上面的类似输出,表示系统已经安装了tcp_wrappers模块。

如果没有显示,可能是没有安装,可以从linux系统安装盘找到对应RPM包进行安装。

  

(2)tcp_wrappers防火墙的局限性

  系统中的某个服务是否可以使用tcp_wrappers防火墙,取决于该服务是否应用了libwrapped库文件,如果应用了就可以使用tcp_wrappers防火墙,系统中默认的一些服务如:

sshd、portmap、sendmail、xinetd、vsftpd、tcpd等都可以使用tcp_wrappers防火墙。

  (3)tcp_wrappers设定的规则

  tcp_wrappers防火墙的实现是通过/etc/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1