Linux防火墙iptables介绍
iptables是建立在netfilter 架构基础上的一个包过滤管理工具,最主要的作用是用来做防火墙或透明代理。Iptables从ipchains发展而来,它的功能更为强大。
关闭和打开SELinux服务 :打开配置文件vim /etc/selinux/config。修改SELINUX选项的值,值为disabled表示关闭,值为enforcing表示开启,修改以后需要重启系统使selinux配置生效
Iptables提供以下三种功能:包过滤、NAT(网络地址转换)和通用的 pre-route packet mangling。
包过滤:用来过滤包,但是不修改包的内容。
NAT:NAT可以分为源地址 NAT 和目的地址 NAT。
Iptables可以追加、插入或删除包过滤规则。实际上真正执行这些过虑规则的是netfilter 及其相关模块(如 iptables 模块和 nat 模块)。
Netfilter是Linux核心中一个通用架构,它提供了一系列的 “表”(tables),每个表由若干 “链”(chains)组成,而每条链中可以有一条或数条 “规则”(rule)组成。
系统缺省的表为 “filter”,该表中包含了INPUT、FORWARD和OUTPUT 3个链。
每一条链中可以有一条或数条规则,每一条规则都是这样定义的:如果数据包头符合这样的条件,就这样处理这个数据包。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件:如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包。
iptables可以操纵3个表:filter表,nat表,mangle表。
iptables语法可以简化为下面的形式:
iptables [-t table] [操作选项] [chain] [rule-matcher] [-j target]
[-t table]:-t参数指定要操作哪个表。filter是默认的表,省略就默认对filter表操作。
操作选项:常用操作命令:
-A 或 -append 在所选链尾加入一条或多条规则
-D 或 -delete 在所选链尾部删除一条或者多条规则
-R 或 -replace 在所选链中替换一条匹配规则
-I 或 -insert 以给出的规则号在所选链中插入一条或者多条规则. 如果规则号为1,即在链头部.
-L 或 -list 列出指定链中的所有规则,如果没有指定链,将列出链中的所有规则.
-F 或 -flush 清除指定链和表中的所由规则, 假如不指定链,那么所有链都将被清空.
-N 或 -new-chain 以指定名创建一条新的用户自定义链,不能与已有链名相同.
-X 或 -delete-chain 删除指定的用户定义链,必需保证链中的规则都不在使用时才能删除,若没有指定链,则删除所有用户链.
-P 或 -policy 为永久帘指定默认规则(内置链策略),用户定义帘没有缺省规则,缺省规则也使规则链中的最后一条规则,用-L显示时它在第一行显示.
-C 或 -check 检查给定的包是否与指定链的规则相匹配.
-Z 或 -zero 将指定帘中所由的规则包字节(BYTE)计数器清零.
-h 显示帮助信息.
chain:规则链:由一系列规则组成,每个包顺序经过chain中的每一条规则。chain又分为系统chain和用户自定义创建的chain。
filter 表的系统 chain: INPUT,FORWAD,OUTPUT
nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT
mangle 表的系统 chain: PREROUTING,OUTPUT
每条系统chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。
rule-matcher:规则匹配器:可以指定各种规则匹配,如IP地址、端口、包类型等。
常用匹配规则器:
-p , [!] protocol指出要匹配的协议,可以是tcp, udp, icmp, all, 前缀!为逻辑非,表示除该协议外的所有协议.
-s, [!] address[/mask] 指定源地址或者地址范围.
-sport, [!] port[:port] 指定源端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-d, [!] address[/mask] 指定目的地址或者地址范围.
-dport ,[!] port[:port] 指定目的端口号或范围,可以用端口号也可以用/ETC/SERVICES文件中的名子.
-icmp-type, [!] typename 指定匹配规则的ICMP信息类型(可以使用 iptables -p icmp -h 查看有效的ICMP类型名)
-i, [!] interface name[+] 匹配单独或某种类型的接口,此参数忽略时,默认符合所有接口,接口可以使用"!"来匹配捕食指定接口来的包.参数interface是接口名,如 eth0, eht1, ppp0等,指定一个目前不存在的接口是完全合法的,规则直到接口工作时才起作用,折中指定对于PPP等类似连接是非常有用的."+"表示匹配所有此类型接口.该选项只针对于INPUT,FORWARD和PREROUTING链是合法的.
-o ,[!] interface name[+] 匹配规则的对外网络接口,该选项只针对于OUTPUT,FORWARD,POSTROUTING链是合法的.
target:目标动作:当规则匹配一个包时,真正要执行的任务,常用的有:
ACCEPT 允许包通过
DROP 丢弃包
一些扩展的目标还有:
REJECT 拒绝包,丢弃包同时给发送者发送没有接受的通知
LOG 包有关信息记录到日志
TOS 改写包的TOS值
所有的 table 和 chain 开机时都为空,设置 iptables 的方法就是在合适的 table 和系统 chain 中添相应的规则。
例如:禁止任何机器 ping 我们的服务器,可以在服务器上设置一条规则:
iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP
从 –s 开始即是一条规则,-j 前面是规则的条件,-j 开始是规则的行为(目的)。整条命令解释为,在filter表中的INPUT 规则链中插入一条规则:所有源地址不为 127.0.0.1 的icmp包都被抛弃。
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
在filter表中的INPUT 规则链中插入一条规则:所有经过8080端口的tcp协议的包都被允许。
制定永久规则集:
iptables命令重启之后就会恢复,所以:
[root@rhlinux root]# service iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
令一种方法是 /etc/rc.d/init.d/iptables 是IPTABLES的启动脚本,所以:
[root@rhlinux root]# /etc/rc.d/init.d/iptables save
将当前规则储存到 /etc/sysconfig/iptables: [ 确定 ]
还有一种方法就是直接修改配置文件:/etc/sysconfig/iptables 文件是 iptables 守护进程调用的默认规则集文件.使用命令的最终结果也是在该配置文件中写入了规则。
在修改玩配置文件以后使用命令service iptables restart,来使配置生效。