首页 > 代码库 > 十六、SELINUX、netfilter防火墙以及其iptables工具

十六、SELINUX、netfilter防火墙以及其iptables工具

SELINUX

关闭selinux有两种方法:暂时关闭selinux防火墙,下次重启后selinux还会开启。#setenforce 0 #getenforce                    

#查看临时关闭selinux的状态命令永久关闭selinux       

#vi /etc/selinux/config       

#修改selinux的配置文件

更改“SELINUX=enforcing”为 SELINUX=disabled  保存退出。

此处需要重启。方能改成disabled.

[root@localhost ~]# /usr/sbin/sestatus -v   或者 #sestatus     

#查看selinux的状态命令SELinux status:   disabled


2,netfliter 防火墙,以及其工具iptables

# iptables -nvL

nvL 就是查看规则,-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息。

#iptables -F 表示把所有规则全部删除;

#iptables -Z表示把包以及流量计数器置零

-F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则,通过上边的命令输出我们也可以看到,防火墙规则保存在了/etc/sysconfig/iptables 你可以查看一下这个文件。

-A/-D :增加删除一条规则;

-I :插入一条规则,其实跟-A的效果一样;

-p :指定协议,可以是tcp,udp或者icmp;

--dport :跟-p一起使用,指定目标端口;

--sport :跟-p一起使用,指定源端口;

-s :指定源IP(可以是一个ip段);

-d :指定目的IP(可以是一个ip段);

-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;

-i :指定网卡(不常用,但有时候能用到);

-P(大写)后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。

注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。

这个策略一旦设定后,只能使用 iptables -P INPUT ACCEPT 才能恢复成原始状态,而不能使用-F参数。


例子:

# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP

这就是增加了一条规则,省略-t所以针对的是filter表。-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp, udp, icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。


[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP

上例表示:插入一条规则,把来自1.1.1.1的所有数据包丢掉。

[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP

删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。

[root@localhost ~]# iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

上例表示把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。这里要说的是,--dport/--sport 必须要和-p选项一起使用,否则会出错。

[root@localhost ~]# iptables -p tc

这条规则表示,把发送到10.0.2.34的22端口的数据包丢掉。


iptables规则脚本设定

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。脚本内容如下:

# cat /usr/local/sbin/iptables.sh

#! /bin/bashipt="/sbin/iptables"

$ipt -F

$ipt -P INPUT DROP

$ipt -P OUTPUT ACCEPT

$ipt -P FORWARD ACCEPT

$ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

完成脚本的编写后,直接运行 

/bin/sh  /usr/local/sbin/iptables.sh 即可。如果想开机启动时初始化防火墙规则,则需要在 /etc/rc.d/rc.local 中添加一行 

“/bin/sh /usr/local/sbin/iptables.sh”

保存以及备份iptalbes规则

设定的防火墙规则只是保存在内存中,并没有保存到某一个文件中,也就说当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下。

[root@localhost ~]# service iptables save

iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]

它会提示防火墙规则保存在了/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件了。所以日后,如果你遇到备份防火墙规则的任务,其实就是要拷贝一份这个文件的副本。

有时,我们会需要把防火墙所有规则都清除,使用 iptables -F 命令虽然可以,但是最好的办法是把防火墙服务停止:

[root@localhost ~]# service iptables stop

iptables:清除防火墙规则:              [确定]

iptables:将链设置为政策 ACCEPT:nat filter   [确定]

iptables:正在卸载模块:               [确定]

这样防火墙就失效了,但是一旦重新设定规则后(哪怕只有一条),防火墙服务会自动开启。下面阿铭介绍给你一个用来备份防火墙规则的命令:

[root@localhost ~]# sh /usr/local/sbin/iptables.sh

[root@localhost ~]# iptables-save > myipt.rule

先执行一下刚才我们写的iptables脚本,使用 iptables-save 命令重定向到一个文件里。要想恢复这些规则使用下面的命令即可:

[root@localhost ~]# iptables-restore < myipt.rule


http://blog.chinaunix.net/uid-X125X ... htmlX102X

参考资料


十六、SELINUX、netfilter防火墙以及其iptables工具