iptables 学习

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连接数

常用到的iptables脚本


LVM

查当前iptables状态/停用/启用  service iptables status/stop/start

防火墙类型

49.IPTABLES参数代表什么?

Command 

-A, –append 

Example 

iptables -A INPUT …

Explanation 

在所选择的链末添加规则。当源地址或目的地址是以名字而不是ip地址的形式出现时,若这些名字可以被解析为多个地址,则这条规则会和所有可用的地址结合。

Command 

-D, –delete 

Example 

iptables -D INPUT –dport 80 -j DROP或iptables -D INPUT 1

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 #重启 打开 停止. 保存(临时生效的规则写入配置文件变成永久生效)
iptables  -F      //清空所有规则

iptables  -X     //清空所有自定义规则

iptables  -Z     //清空计数器


  配置文件:/etc/sysconfig/iptables  

#将所有iptables以序号标记显示
  iptables -L -n --line-numbers
#比如要删除INPUT里序号为8的规则,执行:
  iptables -D INPUT 8
#iptables的开机启动及规则保存        CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:
  chkconfig –level 345 iptables on


#禁ping
  iptables -I INPUT -i eth0 -p icmp -s 0/0 -d 0/0 -j DROP       
  iptables -A OUTPUT -j DROP   # 禁止所有访问   ssh也不能访问 ping也不行
#允许访问80端口   22端口也一样
  iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT (注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT
iptables -P INPUT DROP #禁止所有input         给ssh开后门iptables -A INPUT -p tcp --dport 22 -j ACCEPT   
 
 
 
 
 
上面三个文章   有些 -  ‘    等可能出现符号为中文

一.主要知识点:

1. Iptables表链结构
2. 数据包过滤流程
3. Iptables书写规则
4. Iptables条件匹配
5. Iptables数据包控制
6. Iptables七层过滤
7. Iptables脚本
二.具体的知识点介绍
1. Iptables表链结构
1)默认的4个规则表
*         raw表:确定是否对该数据包进行状态跟踪
*         mangle表:为数据包设置标记
*         nat表:修改数据包中的源、目标IP地址或端口
*         filter表:确定是否放行该数据包(过滤)
2)默认的5种规则链
*         INPUT:处理入站数据包
*         OUTPUT:处理出站数据包
*         FORWARD:处理转发数据包
*         POSTROUTING链:在进行路由选择后处理数据包
*         PREROUTING链:在进行路由选择前处理数据包
2. 数据包过滤流程
规则表间的优先顺序
*         依次为:raw à mangle à nat à filter
规则链间的匹配顺序
*         入站数据:PREROUTING à INPUT
*         出站数据:OUTPUT à POSTROUTING
*         转发数据:PREROUTING à FORWARD à POSTROUTING
如图:
 

3. Iptables书写规则
iptables命令的语法格式
*         iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
几个注意事项
*         不指定表名时,默认表示filter表
*         不指定链名时,默认表示该表内所有链
*         除非设置规则链的缺省策略,否则需要指定匹配条件
清除规则
*         -D:删除指定位置或内容的规则
*         -F:清空规则链内的所有规则
*         -Z:清空计数器
自定义规则链
*         -N:创建一条新的规则链
*         -X:删除自定义的规则链
其他
*         -h:查看iptables命令的使用帮助
例如:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy DROP)
num target     prot opt source               destination
1    ACCEPT     udp -- anywhere             anywhere
2    ACCEPT     icmp -- anywhere             anywhere
3    ACCEPT     tcp -- anywhere             anywhere
 
4. Iptables条件匹配
1)通用条件匹配
协议匹配
*         使用“-p 协议名”的形式
*         协议名可使用在“/etc/protocols”文件中定义的名称
*         常用的协议包括tcp、udp、icmp等
地址匹配
*         使用“-s 源地址”、 “-d 目标地址”的形式
*         地址可以是单个IP地址、网络地址(带掩码长度)
接口匹配
*         使用“-i 网络接口名”、 “-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口
例如:
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
2)Iptables隐含条件匹配
端口匹配
*         使用“--sport 源端口”、“--dport 目标端口”的形式
*         采用“端口1:端口2”的形式可以指定一个范围的端口
TCP标记匹配
*         使用“--tcp-flags 检查范围  被设置的标记”的形式
*         如“--tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件
ICMP类型匹配
*         使用“--icmp-type ICMP类型”的形式
*         ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply
例如:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
3)Iptables扩展条件匹配
MAC地址匹配
*         使用“-m mac”结合“--mac-source MAC地址”的形式
多端口匹配
*         使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列表”的形式
*         多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔
IP地址范围匹配
*         使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标IP范围” 的形式
*         以“-”符号连接起始IP地址、结束IP地址
例如:
[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
5. Iptables数据包控制
常见的数据包处理方式
*         ACCEPT:放行数据包
*         DROP:丢弃数据包
*         REJECT:拒绝数据包
*         LOG:记录日志信息,并传递给下一条规则处理
*         用户自定义链名:传递给自定义链内的规则进行处理
*         SNAT:修改数据包的源地址信息
*         DNAT:修改数据包的目标地址信息
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m limit --limit   3/minute --limit-burst 8 -j LOG
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT   --to-source 218.29.30.31
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6(:80)
6. Iptables七层过滤
1). 整体实现过程
*         添加内核补丁,重新编译内核,并以新内核引导系统
*         添加iptables补丁,重新编译安装iptables
*         安装l7-protocols协议定义包
*         使用iptables命令设置应用层过滤规则
2). 使用的软件包列表
*         Linux内核源码包:linux-2.6.28.8.tar.bz2
*         iptables源码包:iptables-1.4.2.tar.bz2
*         layer7补丁源码包:netfilter-layer7-v2.21.tar.gz
*         协议定义包:l7-protocols-2009-05-10.tar.gz
3). layer7应用层协议匹配
*         匹配格式:-m layer7 --l7proto 协议名
*         支持以下常见应用层协议的过滤
*          qq:腾讯公司QQ程序的通讯协议
*          msnmessenger:微软公司MSN程序的通讯协议
*          msn-filetransfer:MSN程序的文件传输协议
*          bittorrent:BT下载类软件使用的通讯协议
*          xunlei:迅雷下载工具使用的通讯协议
*          edonkey:电驴下载工具使用的通讯协议
*         其他各种应用层协议:ftp、http、dns、imap、pop3……
4). 规则示例:过滤使用qq协议的转发数据包
*          iptables -A FORWARD -m layer7 --l7proto qq -j DROP
 
7. Iptables脚本
防火墙脚本的一般结构
1).设置网段、网卡、IP地址等变量
2).加载包过滤相关的内核模块
*          FTP相关:ip_nat_ftp、ip_conntrack_ftp
3).确认开启路由转发功能
*          方法1:/sbin/sysctl -w net.ipv4.ip_forward=1
*          方法2:echo 1 > /proc/sys/net/ipv4/ip_forward
*          方法3:修改/etc/sysctl.conf,设置 net.ipv4.ip_forward = 1
4).用于添加的具体防火墙规则内容
*          清空原有规则,建立新的规则
例如:
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
iptables -F
iptables -X
iptables -Z
#------------------------default rule ------------------------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#------------------------limit packet per second------------------------------
/sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 2 -j DROP
#------------------------ssh rule -------------------------------------------
iptables -t filter -A   INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
#------------------------www-ftp-mail-dns rule --------------------------------
iptables -t filter -A   INPUT -i   eth0 -p tcp --dport 80     -j ACCEPT
iptables -t filter -A   OUTPUT -o eth0 -p tcp --sport 80     -j ACCEPT
#-------------------------ICMP rule ------------------------------------------
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

本文出自 “龙哥” 博客,请务必保留此出处http://gehailong.blog.51cto.com/765312/611157

 

 

1、安装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防火墙的过程,希望大家都能掌握它!

2、清除已有iptables规则
iptables -F 清除预设表filter中的所有规则链的规则
iptables -X 清除预设表filter中使用者自定链中的规则
iptables -Z
3、开放指定的端口
#允许本地回环接口(即运行本机访问本机)
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
4、屏蔽IP
#如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
#屏蔽单个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
5、查看已添加的iptables规则
iptables -L -n
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名
6、删除已添加的iptables规则
将所有iptables以序号标记显示,执行:
iptables -L -n --line-numbers
比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
7、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:
chkconfig –level 345 iptables on
将其加入开机启动。
CentOS上可以执行:service iptables save保存规则。

注意:
一定要给自己留好后路,留VNC一个管理端口和SSh的管理端口
需要注意的是,你必须根据自己服务器的情况来修改这个文件。

 

 

 

 

 

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                 #  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登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.

怎么办,去本机操作呗!

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 nat

 

2、添加规则

 

添加基本的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的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的。(责任编辑:凌云通)

 
posted on 2015-01-29 15:58  寒星12345678999  阅读(295)  评论(0编辑  收藏  举报