http://tech.ccidnet.com/art/9513/20070601/1098119_1.html 实例
http://www.jb51.net/os/RedHat/68744.html 开启关闭设置
http://gehailong.blog.51cto.com/765312/263904 参数、原理 先看原理 再学设置 最后实例
http://tech.ccidnet.com/art/1099/20080429/1434761_1.html 如何用iptables来防止web服务器被CC攻击
http://linux.ccidnet.com/art/3067/20060714/630395_1.html 一句一句解说 iptables的详细中文手册
http://linux.ccidnet.com/art/737/20060705/596613_1.html iptables 入门
iptables限制同一IP链接数
LVM
查当前iptables状态/停用/启用 service iptables status/stop/start
防火墙类型
Command html |
-A, –append linux |
Example web |
iptables -A INPUT …shell |
Explanation centos |
在所选择的链末添加规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字能够被解析为多个地址,则这条规则会和全部可用的地址结合。安全 |
Command 服务器 |
-D, –delete 网络 |
Example app |
iptables -D INPUT –dport 80 -j DROP或iptables -D INPUT 1ssh |
Explanation |
从所选链中删除规则。有两种方法指定要删除的规则:一是把规则完完整整地写出来,再就是指定规则在所选链中的序号(每条链的规则都各自从1被编号)。 |
Command |
-R, –replace |
Example |
iptables -R INPUT 1 -s 192.168.0.1 -j DROP |
Explanation |
在所选中的链里指定的行上(每条链的规则都各自从1被编号)替换规则。它主要的用处是试验不一样的规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字能够被解析为多个地址,则这条command会失败。 |
Command |
-I, –insert |
Example |
iptables -I INPUT 1 –dport 80 -j ACCEPT |
Explanation |
根据给出的规则序号向所选链中插入规则。若是序号为1,规则会被插入链的头部,其实默认序号就是1。 |
Command |
-L, –list |
Example |
iptables -L INPUT |
Explanation |
显示所选链的全部规则。若是没有指定链,则显示指定表中的全部链。若是什么都没有指定,就显示默认表全部的链。精确输出受其它参数影响,如-n 和-v等参数,下面会介绍。 |
Command |
-F, –flush |
Example |
iptables -F INPUT |
Explanation |
清空所选的链。若是没有指定链,则清空指定表中的全部链。若是什么都没有指定,就清空默认表全部的链。固然,也能够一条一条地删,但用这个command会快些。 |
Command |
-Z, –zero |
Example |
iptables -Z INPUT |
Explanation |
把指定链(如未指定,则认为是全部链)的全部计数器归零。 |
Command |
-N, –new-chain |
Example |
iptables -N allowed |
Explanation |
根据用户指定的名字创建新的链。上面的例子创建了一个名为allowed的链。注意,所用的名字不能和已有的链、target同名。 |
Command |
-X, –delete-chain |
Example |
iptables -X allowed |
Explanation |
删除指定的用户自定义链。这个链必须没有被引用,若是被引用,在删除以前你必须删除或者替换与之有关的规则。若是没有给出参数,这条命令将会删除默认表全部非内建的链。 |
Command |
-P, –policy |
Example |
iptables -P INPUT DROP |
Explanation |
为链设置默认的target(可用的是DROP 和ACCEPT,若是还有其它的可用,请告诉我),这个target称做策略。全部不符合规则的包都被强制使用这个策略。只有内建的链才可使用规则。但内建的链和用户自定义链都不能被做为策略使用,也就是说不能象这样使用:iptables -P INPUT allowed(或者是内建的链)。 |
Command |
-E, –rename-chain |
Example |
iptables -E allowed disallowed |
Explanation |
对自定义的链进行重命名,原来的名字在前,新名字在后。如上,就是把allowed改成disallowed。这仅仅是改变链的名字,对整个表的结构、工做没有任何影响 |
防火墙策略通常分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必需要定义谁能进。堵策略则是,大门是洞开的,可是你必须有身份认证,不然不能进。因此咱们要定义,让进来的进来,让出去的出去,因此通,是要全通,而堵,则是要选择。当咱们定义的策略的时候,要分别定义多条功能,其中:定义数据包中容许或者不容许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工做,咱们制定出了“表”这个定义,来定义、区分各类不一样的工做功能和处理方式。
service iptables restart |start |stop |save #重启 打开 中止. 保存(临时生效的规则写入配置文件变成永久生效)
一.主要知识点:
本文出自 “龙哥” 博客,请务必保留此出处http://gehailong.blog.51cto.com/765312/611157
一、安装iptables防火墙
怎么知道系统是否安装了iptables?执行iptables -V,若是显示如:
iptables v1.3.5
说明已经安装了iptables。
若是没有安装iptables须要先安装,执行:
yum install iptables
在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件:
vi /etc/sysconfig/iptables
经过/etc/init.d/iptables status命令查询是否有打开80端口,若是没有可经过两种方式处理:
1.修改vi /etc/sysconfig/iptables命令添加使防火墙开放80端口
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
2.关闭/开启/重启防火墙
/etc/init.d/iptables stop #start 开启 #restart 重启
3.永久性关闭防火墙
chkconfig --level 35 iptables off /etc/init.d/iptables stop iptables -P INPUT DROP
4.打开主动模式21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
5.打开被动模式49152~65534之间的端口
iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
所有修改完以后重启iptables:
service iptables restart
你能够验证一下是否规则都已经生效:
iptables -L
经过文章的介绍,咱们清楚的知道了CentOS下配置iptables防火墙的过程,但愿你们都能掌握它!
二、清除已有iptables规则
iptables -F 清除预设表filter中的全部规则链的规则
iptables -X 清除预设表filter中使用者自定链中的规则
iptables -Z
三、开放指定的端口
#容许本地回环接口(即运行本机访问本机)
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
执行完后,这些配置就像用命令配置IP同样,重起就会失去做用。必须执行如下命令进行保存。
/etc/rc.d/init.d/iptables save
四、屏蔽IP
#若是只是想屏蔽IP的话“三、开放指定的端口”能够直接跳过。
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
五、查看已添加的iptables规则
iptables -L -n
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名
六、删除已添加的iptables规则
将全部iptables以序号标记显示,执行:
iptables -L -n --line-numbers
好比要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
七、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,能够执行一下:
chkconfig –level 345 iptables on
将其加入开机启动。
CentOS上能够执行:service iptables save保存规则。
注意:
必定要给本身留好后路,留VNC一个管理端口和SSh的管理端口
须要注意的是,你必须根据本身服务器的状况来修改这个文件。
一、查看本机关于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
什么规则都没有.
二、清除原有规则.
无论你在安装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配置表里什么配置都没有了,那咱们开始咱们的配置吧。
三、设定预设规则
[root@tp ~]# iptables -P INPUT DROP # pP
[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登录的话,当你输入第一个命令回车的时候就应该掉了.由于你没有设置任何规则.
怎么办,去本机操做呗!
四、添加规则.
首先添加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 端口)上的服务。既然合法服务都不使用这些非标准端口来通讯,阻塞这些端口可以有效地减小你的网络上可能被感染的机器和它们的远程主服务器进行独立通讯的机会
还有其余端口也同样,像:3133五、2744四、2766五、20034 NetBus、970四、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表放火墙
一、查看本机关于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 nat
二、添加规则
添加基本的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的基础知识及指令命令说明等我会尽快传上,固然你能够去网上搜索一下,仍是不少的。(责任编辑:凌云通)