Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19468
  • 博文数量: 10
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-05 00:26
文章分类
文章存档

2011年(2)

2010年(8)

我的朋友
最近访客

分类: 网络与安全

2010-10-06 09:48:04

 
 
INPUT:对进入本机的数据包进行过滤
OUTPUT:对从本机出去的数据包进行过滤
FORWARD:对目标主机非本机,而从该接点通过的数据包进行过滤通常用在保护一个内部网络中。


包过滤:
#iptables -A INPUT -p icmp -j DROP    丢弃
                              ACCEPT  接受
                              REJECT  弹回
                              LOG     日志
包处理方法通常有以上几种:Drop,ACCEPT,REJECT,LOG等方式
手动添加
-A     添加
INPUT  添加到INPUT 规则里
-p     协议类型匹配后面指定协议的
-j     对匹配条件的包做后面的处理或跳转到相关规则上

已经配置好的防火墙规则可以通过
iptables -L -n命令来查看
具体可参考 # iptables --help

具体的一一条规则
iptables -A INPUT -p tcp -d 192.168.0.200 --dport 21 -j DROP
关闭本地的FTP对外服务

# iptables -F

在配置服务器规则时通常把默认的规则全部设置为REJECT即全部拒绝,在根据需要开放部分端口
为了不在定义规则后SSH服务被拒绝而断开了服务器连接,在设置默认规则为REJECT之前先设置好SSH规则为ACCEPT
分别为
[root@happyboy root]#  iptables -A INPUT -p tcp -d 192.168.0.200 --dport 22 -j ACCEPT
[root@happyboy root]#  iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 22 -j ACCEPT

然后再改变发防火墙的默认配置由
Chain INPUT (policy ACCEPT)更改为
Chain INPUT (policy DROP)
其中更改为的Drop或者为REJECT也可以
命令为
[root@happyboy root]#  iptables -P INPUT DROP
[root@happyboy root]#  iptables -P OUTPUT DROP
[root@happyboy root]#  iptables -P FORWARD DROP

做好规则后要记得保存
# service iptablles save          //保存文件为/etc/sysconfig/iptables

再添加web方式的访问
[root@happyboy root]# iptables -A INPUT -p tcp -d 192.168.0.200 --dport 80 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 80 -j ACCEPT
在INPUT 的目标主机是自己和OUTPUT 中的源主机是自己时可以省略,如上面的-d 192.168.0.200和-s 192.168.0.200

[root@happyboy root]# iptables -A INPUT -p tcp -d 192.168.0.200 --dport 21 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp -s 192.168.0.200 --sport 21 -j ACCEPT
指定端口范围:如果我们在vsftp中开启pasv模式,则需要允许pasv模式的端口范围
[root@happyboy root]# iptables -A INPUT -p tcp --dport 9000:9045 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 9000:9045 -j ACCEPT

[root@happyboy root]# iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
[root@happyboy root]# iptables -A INPUT -p udp --sport 53 -j ACCEPT
允许DNS查询,注意:如果自身是既是客户机也是服务器,那也要添加对应规则。比如本身也是自己的DNS服务
[root@happyboy root]# iptables -A INPUT -p udp --dport 53 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

注意netstat -tnl 可以看到很多服务守护在127.0.0.1上,对本机提供服务,如果本机无法正常访问本机的某些资源会影响本机内部的正常运行,打开本地对本机的访问
[root@happyboy root]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
[root@happyboy root]# ^INPUT^OUTPUT                   //这里直接将上一条命令中的INPUT替换为OUTPUT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT



为了防止机器漏洞被利用造成的从本地主动发出的连接请求,比如ssh的22。我们可以利用iptables防火墙的状态检查功能
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-m表示扩展条件,state表示匹配状态检查,添加成功后将原来规则删除
ACCEPT     tcp  --  192.168.0.200        0.0.0.0/0          tcp spt:22
[root@happyboy root]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

如果是客户机也可以做响应规则来保护自己,只有自己一主动发出过的连接请求才接收:eg
[root@happyboy root]# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
[root@happyboy root]# iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
当然很少有在客户机上做防火墙规则:当时如果既做为服务器也做为客户机时就需要了!

[root@happyboy root]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT   //这两条针对80服务

[root@happyboy root]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT  
[root@happyboy root]# iptables -A INPUT -p tcp --dport 9000:9045 -j ACCEPT
[root@happyboy root]# iptables -A OUTPUT -p tcp --sport 9000:9045 -m state --state ESTABLISHED -j ACCEPT    //这四条针对FTP服务
DNS服务以及守护在127.0.0.1 不变

[root@happyboy root]# iptables -L -n --line-numbers   //以编号形式显示每个链中的规则
--delete  -D chain rulenum  Delete rule rulenum (1 = first) from chain  该帮助说明可以编号形式删除某条链中的规则
[root@happyboy root]# iptables -D OUTPUT 1               //这里的1为看到的对应规则的编号

=================================================================================

LOG目标,将已经设置规则可以通过的信息记录到日志中。
1.
[root@happyboy root]# iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "IPTABLES:"
日志级别5 可以参考syslog帮助 man syslog,
#define KERN_NOTICE   "<5>"  /* normal but significant condition */  定义级别5日志类型。
--log-prefix指定日志文件前缀,以便查看。
2.
编译日志配置文件
[root@happyboy root]# vi /etc/syslog.conf
kern.=notice                                            /var/log/firewall.log
增加上述一行,这里配置要与iptables中级别一致。
[root@happyboy root]# service syslog restart

由于在input中同样对22端口的判断有两条,日志的在后面不起作用,
[root@happyboy root]# iptables -D INPUT 9            //删除刚刚添加的LOG那条规则
[root@happyboy root]# iptables -I INPUT 1 -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "iptables"
即将该规则插入到最前面,即序号为1。原来规则编号自动递增。
[root@happyboy root]# tail -f /var/log/firewall.log //可以看到相关数据包已经记录入日志文件了
阅读(369) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~