Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1329230
  • 博文数量: 464
  • 博客积分: 9399
  • 博客等级: 中将
  • 技术积分: 6364
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-19 09:15
文章分类

全部博文(464)

文章存档

2014年(12)

2013年(123)

2012年(173)

2011年(156)

我的朋友

分类: 系统运维

2011-11-08 15:30:15

是Linux上常用的软件,下面vps侦探给大家说一下的安装、清除iptables规则、iptables只开 放指定端口、iptables屏蔽指定ip、ip段及解封、删除已添加的iptables规则等iptables的应用。

/etc/init.d/iptables

vi /etc/sysconfig/iptables

 

1、安装iptables防火墙



如果没有安装iptables需要先安装,CentOS执行:


yum install iptables



Debian/Ubuntu执行:


apt-get install iptables




2、清除已有iptables规则



iptables -F


iptables -X


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

iptables -A FORWARD -j REJECT




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




4、查看已添加的iptables规则



iptables -L -n



v:显示详细信息,包括每条规则的匹配包数量和匹配字节数


x:在 v 的基础上,禁止自动单位换算(K、M) vps侦探


n:只显示IP地址和端口号,不将ip解析为域名




5、删除已添加的iptables规则



将所有iptables以序号标记显示,执行:


iptables -L -n --line-numbers



比如要删除INPUT里序号为8的规则,执行:



iptables -D INPUT 8




6、iptables的开机启动及规则保存



CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:



chkconfig --level 345 iptables on



将其加入开机启动。



CentOS上可以执行:service iptables save保存规则。



另外更需要注意的是Debian/Ubuntu上iptables是不会保存规则的。



需要按如下步骤进行,让网卡关闭是保存iptables规则,启动时加载iptables规则:



创建/etc/network/if-post-down.d/iptables 文件,添加如下内容:


#!/bin/bash


iptables-save > /etc/iptables.rules



执行:chmod +x /etc/network/if-post-down.d/iptables 添加执行权限。



创建/etc/network/if-pre-up.d/iptables 文件,添加如下内容:


#!/bin/bash


iptables-restore < /etc/iptables.rules



执行:chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限。



关于更多的iptables的使用方法可以执行:iptables --help或网上搜索一下iptables参数的说明。

 

7.禁止ping
iptables -I INPUT -p icmp  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -i eth0 -p icmp -j DROP

见配置文件内容/etc/sysconfig/iptables
-A INPUT -i eth0 -p icmp -j DROP
-A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT

开启ping
iptables -D INPUT  -p icmp  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -D INPUT  -i eth0 -p icmp -j DROP

删除此句即没有了上面的配置了

查找禁ping语句直接用这条命令可以了 iptables -nL INPUT |  awk '{print NR-2 " " $0}' |sed -ne '/icmp/{/DROP/p}'

查序列号iptables -nL |grep AC |awk '{print NR-1 " " $0}'

 

举些例子,自己学习
iptables 使用时的样板
在设定 iptables 的封包过滤规则时,有几个样板的动作,若先熟悉它们,往后就可自行套用,依此类推,很快地,您就可以进入这个天地之中。

观察目前的设定
作法如下∶

iptables -L -n
iptablse -t nat -L -n



定义变数
FW_IP="163.26.197.8"


打开核心 forward 功能
作法如下∶

###-----------------------------------------------------###
# 打开 forward 功能
###-----------------------------------------------------###

echo "1" >; /proc/sys/net/ipv4/ip_forward



清除所有的规则
一开始要先清除所有的规则,重新开始,以免旧有的规则影响新的设定。作法如下∶

###-----------------------------------------------------###
# 清除先前的设定
###-----------------------------------------------------###
# 清除预设表 filter 中,所有规则链中的规则
iptables -F
# 清除预设表 filter 中,使用者自订链中的规则
iptables -X

# 清除mangle表中,所有规则链中的规则
iptables -F -t mangle
# 清除mangle表中,使用者自订链中的规则
iptables -t mangle -X

# 清除nat表中,所有规则链中的规则
iptables -F -t nat
# 清除nat表中,使用者自订链中的规则
iptables -t nat -X



选定预设的政策
接着,要选定各个不同的规则链,预设的政策为何。作法如下∶

预设全部丢弃∶

###-----------------------------------------------------###
# 设定 filter table 的预设政策
###-----------------------------------------------------###
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP



或者预设全部接受∶

###-----------------------------------------------------###
# 设定 filter table 的预设政策
###-----------------------------------------------------###
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT



各个规则链的预设政策可独立自主的设定,不必受其它链的影响。

以下练习,若目标为 DROP,则 policy 请设为 ACCEPT;若目标为 ACCEPT,则 policy 请设为 DROP,如此方可看出效果。

开放某一个介面
作法如下∶

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

注∶IPFW 或 Netfilter 的封包流向,local process 不会经过 FORWARD Chain,
因此 lo 只在 INPUT 及 OUTPUT 二个 chain 作用。

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT



IP 伪装
使内部网路的封包经过伪装之后,使用对外的 eth0 网卡当作代表号,对外连线。作法如下∶

###-----------------------------------------------------###
# 启动内部对外转址
###-----------------------------------------------------###

iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP



上述指令意指∶把 172.16.0.0/16 这个网段,伪装成 $FW_IP 出去。

虚拟主机
利用转址、转 port 的方式,使外部网路的封包,可以到达内部网路中的伺服主机,俗称虚拟主机。这种方式可保护伺服主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性甚高。

作法如下∶

###-----------------------------------------------------###
# 启动外部对内部转址
###-----------------------------------------------------###
# 凡对 $FW_IP:80 连线者, 则转址至 172.16.255.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80



开放内部主机可以 telnet 至外部的主机
开放内部网路,可以 telnet 至外部主机。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open 外部主机 telnet port 23
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT



开放邮包转递通道
开放任意的邮件主机送信包给你的 Mail Server,而你的 Mail Server 也可以送信包过去。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open SMTP port 25
###-----------------------------------------------------###

# 以下是∶别人可以送信给你
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT

# 以下是∶你可以送信给别人
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT



开放对外离线下载信件的通道
开放内部网路可以对外部网路的 POP3 server 取信件。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open 对外部主机的 POP3 port 110
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT



开放观看网页的通道
开放内部网路可以观看外部网路的网站。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open 对外部主机的 HTTP port 80
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT



开放查询外部网路的 DNS 主机
开放内部网路,可以查询外部网路任何一台 DNS 主机。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open DNS port 53
###-----------------------------------------------------###

# 第一次会用 udp 封包来查询
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 若有错误,会改用 tcp 封包来查询
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 udp
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 tcp
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT



开放内部主机可以 ssh 至外部的主机
开放内部网路,可以 ssh 至外部主机。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open 外部主机 ssh port 22
###-----------------------------------------------------###

iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 以下是 ssh protocol 比较不同的地方
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT



开放内部主机可以 ftp 至外部的主机
开放内部网路,可以 ftp 至外部主机。

作法如下∶(预设 policy 为 DROP)

###-----------------------------------------------------###
# open 对外部主机 ftp port 21
###-----------------------------------------------------###

# 以下是打开命令 channel 21
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT

# 以下是打开资料 channel 20
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT

# 以下是打开 passive mode FTP 资料通道
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT

开放 ping
可以对外 ping 任何一台主机。

作法如下∶(预设 policy 为 DROP)

iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPT
iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d $FW_IP -j ACCEPT



CCIE Security 2009 IOS防火墙合集


阅读(624) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~