您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

Linux设置iptables防火墙的详细步骤

添加时间:2019-3-1 20:32:42  添加: 思海网络 
iptables是Linux内核中内置的防火墙,可以允许管理员通过设置table, chain以及相关的规则来进行数据包过滤和NAT。 一般来讲,iptables防火墙已经内置于CentOS 6及其他Linux版本中,而且iptables服务默认都是启动的。  iptables应用于IPv4, 如果要用IPv6,需要使用ip6tables.

iptables的命令格式:


iptables[-ttable]command[chain][rules][-jtarget]
[-ttable]:用来指明使用的表,有三种选项:filter,nat和mangle,如果未指定,则使用filter作为缺省表。事实上,对于单个服务器的防火墙配置,一般来讲,我们只需要对filter表进行配件就OK了。filter表包括INPUT,OUTPUT,和FORWARD三个chain.

command表明iptables命名要做什么,比如

-A(–append):该命令会把一条规则附件到chain的末尾。

-D(–delete)用来删除某个规则。

-F(–flush)如果指定了chain,删除该chain中的所有规则,如果未指定chain,则删除所有chain中的所有规则。

target:是由规则指定的操作。包括下面几种:

ACCEPT:接收信息包(允许它前往目的地),并且将停止遍历chain.

DROP:拒绝,

此外还有REJECT,RETURN,LOG,REDIRECT,MARK,MIRROR,MAQUERADE等。

具体的iptables的语法和概念就不再多说了,请参照iptablesmanpage官方文档.

简单来说,iptables防火墙是由一系列的规则(rule)组成,一个数据请求进来,会依次和这些规则进行比较,如果正好符合规则的定义,那这个数据请求要么会被接收ACCEPT,要么被拒绝DRIP。如果不符合任何规则的定义,最后缺省的规则会被应用。

开始操作之前:

注意:一定要把你在DigitalOcean/Linode/阿里云上的服务器做一下快照备份,否则一旦你iptables的配置出了问题,极有可能把你自己挡在门外,你自己都无法连接到服务器了!!出现这种情况可是会欲哭无泪呀,除了重新做系统好像没有更好的办法了。(DigitalOcean提供了一个webconsole的界面,有时候会给你反悔和擦除iptables设置的机会,但阿里云没有)

决定哪些端口需要开放

首先,SSH的端口22自然是需要开放的,否则我们就无法登录服务器了。

一般来讲,CentOS的VPS经常作为用LAMP搭建的Web服务器,FTP服务器,Mail服务器等。

对于Web服务来说,需要开放80端口,如果是HTTPS/SSL协议的话,还需用开放443端口

对于Mail服务来说,由于涉及SMTP,POP3,IMAP协议,需要开放的端口如下:

SMTP:25SecureSMTP:465POP3:110SecurePOP3:995IMAP:143IMAPoverSSL:993

对于FTP服务来说,需要开放20,21两个端口

第一步:屏蔽最常见的攻击

缺省情况下,CentOS的iptables的设置是允许任何数据通过的。

我们首先要清空iptables中的所有的规则:


iptables-F
然后我们加上阻止简单扫描和攻击的规则


iptables-AINPUT-ptcp--tcp-flagsALLNONE-jDROP#NONE包(所有标识bit都没有设置)主要是扫描类的数据包
iptables-AINPUT-ptcp!--syn-mstate--stateNEW-jDROP#防止sync-flood攻击
iptables-AINPUT-ptcp--tcp-flagsALLALL-jDROP#ALL包(所有的标注bit都被设置了)也是网络扫描的数据包
关于sync-flood,请参照wikipedia的解释。

第二步:为相应的服务开放对应的端口

首先我们应该接受本机localhost的任何请求,否则,数据库连接等将无法工作

iptables-AINPUT-ilo-jACCEPT
对于不同的服务需要开放不同的端口


iptables-AINPUT-ptcp--dport22-jACCEPT#SSH
iptables-AINPUT-ptcp--dport80-jACCEPT#HTTP
iptables-AINPUT-ptcp--dport443-jACCEPT#HTTPS
iptables-AINPUT-ptcp--dport25-jACCEPT#SMTP
iptables-AINPUT-ptcp--dport465-jACCEPT#SecureSMTP
iptables-AINPUT-ptcp--dport110-jACCEPT#POP3
iptables-AINPUT-ptcp--dport995-jACCEPT#SecurePOP3
iptables-AINPUT-ptcp--dport143-jACCEPT#IMAP
iptables-AINPUT-ptcp--dport993-jACCEPT#SecureIMAP
第三步:加上通用的规则

首先要允许所有从服务器端发起的连接,由此返回的响应数据应该是允许的!比如VPS发起的yumupdate,必须要允许外部的update数据进来


iptables-IINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT
最后,设置缺省的策略:屏蔽任何进入的数据请求,允许所有从Server发出的请求


iptables-POUTPUTACCEPT</p> <p>iptables-PINPUTDROP
至此,规则设置完毕

第四步:保存设置

首先通过下面的命令查看一下我们的设置是否正确!


iptable-L-n
确认没有问题后,执行下面的命令



serviceiptablessave
执行上述命令后,相应的规则会写入/etc/sysconfig/iptables这个文件,你可以检查一下看看。

最后执行


serviceiptablesrestart.
重新启动iptables防火墙,以使上述设置生效。


为了更方便的修改和维护自己的iptables的设置,我一般是把所有的iptables的设置先写到一个单独文件中,测试没有问题后。然后再保存到iptable的配置文件中。

下面是我自己的iptables文件~//firewall.sh



代码如下:

#!/bin/bash
#Asimpleiptablesfirewallconfiguration</p> <p>PATH=/sbin:/bin:/usr/sbin:/usr/bin;exportPATH</p> <p>#flush/eraseoriginalrules
iptables-F#清除所有已制定的rule
iptables-X#清除用户自定义的chain/table
iptables-Z#将所有的chain的计数和流量统计归零</p> <p>#Acceptlocalhostconnetting,nomatterwhatitis
iptables-AINPUT-ilo-jACCEPT</p> <p>#Acceptanyresponsepackagewhichisinitiatedfrominside
iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT</p> <p>#blockmostcommonnetworkattacks(reconpacketsandsyn-floodattack)
iptables-AINPUT-ptcp--tcp-flagsALLNONE-jDROP
iptables-AINPUT-ptcp!--syn-mstate--stateNEW-jDROP
iptables-AINPUT-ptcp--tcp-flagsALLALL-jDROP</p> <p>#openportsfordifferentservices
iptables-AINPUT-ptcp--dport22-jACCEPT#SSH
iptables-AINPUT-ptcp--dport80-jACCEPT#HTTP
#iptables-AINPUT-ptcp--dport443-jACCEPT#HTTPS
#iptables-AINPUT-ptcp--dport25-jACCEPT#SMTP
#iptables-AINPUT-ptcp--dport465-jACCEPT#SecureSMTP
#iptables-AINPUT-ptcp--dport110-jACCEPT#POP3
#iptables-AINPUT-ptcp--dport995-jACCEPT#SecurePOP</p> <p>#ICMPconfiguration
#TopreventICMPDDOS,wedonotallowICMPtype8(echo-request)orlimitthisrequestwith1/second
#someICMPrequestsareallowed.
icmp_type="0341112141618"
forticmpin$icmp_type
do
iptables-AINPUT-picmp--icmp-type$ticmp-jACCEPT
done
#iptables-AINPUT-picmp--icmp-type8-mlimit--limit1/second-jACCEPT</p> <p>#defaultpolicies
iptables-POUTPUTACCEPT
iptables-PINPUTDROP</p> <p>#saveto/etc/sysconfig/iptables
/etc/init.d/iptablessave
你可以根据你的需要进行相应的修改。

关键字:Linux、iptables、防火墙
分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2019 All Rights Reserved.
联系电话:(0757)22630313、22633833
公司地址: 广东省佛山市顺德区大良国际商业城A区4座3楼106号   邮编:528300
机房7x24小时服务热线:(0757)23628508、23628509
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站