*********Linux 防火墙 ************Linix IPTables 的使用:
***
******iptables 概述:(类似windows 的 TCP/ IP 筛选。) Linux 内核2.4 中,实现了一个具有包过滤、数据包处理、网络地址转换等防火墙功能框架的 netfilter , 而iptables 则是基于netfilter 基础上的防火墙安全管理工具。
****
******netfilter 的主要安全功能有:1.包过滤(Packet Tracking )。2.网络地址转换。(network Address Translation )3.连接追踪(Connection Tracking )。4.包变换(Packet Tracking )。
***1.包过滤:通过检查每一个包的头部,如何决定如何处理包:丢弃、通过、转发。
***2.网络地址转换:netfilter 提供了两种不同的网络地址转换方式:NAT(SNAT ) 和 目标 NAT (DNAT ) 。SNAT 是指修改包的源地址(改变连接的源IP) 。DNAT 是指修改包的目的地址(改变连接的目的IP)。端口转发、负载均衡和透明代理 都属于DNAT 。地址伪装是SNAT 的一个特殊形式。
***3.连接追踪:通过对数据包的前后状态信息比较来控制数据包处理。
***4.包交换:netfilter 可以改变数据包的内容,如 TTL , 标志符。
******iptables 结构图:
******
Netfilter规则表―filter nat mangle
***
filter,用于路由网络数据包。是默认的,也就是说如果没有指定-t参数,当创建一条新规则时,它会默认存放到该表内。
INPUT 网络数据包流向服务器
OUTPUT 网络数据包从服务器流出
FORWARD 网络数据包经服务器路由
***
nat,用于NAT表.NAT(Net Address Translation )是一种IP地址转换方法。
PREROUTING 网络数据包到达服务器时可以被修改
OUTPUT 网络数据包由服务器流出
POSTROUTING 网络数据包在即将从服务器发出时可以被修改
***
mangle,用于修改网络数据包的表,如TOS(Type Of Service),TTL(Time To Live),等.
INPUT 网络数据包流向服务器
OUTPUT 网络数据包流出服务器
FORWARD 网络数据包经由服务器转发
PREROUTING 网络数据包到达服务器时可以被修改
POSTROUTING 网络数据包在即将从服务器发出时可以被修改
***
******iptables 配置命令:
建立规则
#iptables -A INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP
移除规则
#iptables -D INPUT -s xxx.xxx.xxx.xx -p tcp --dport 80 -j DROP
常用操作命令:
-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 显示帮助信息.
设置链的默认策略。一般有两种方法。
1)首先允许所有的包,然后再禁止有危险的包通过放火墙。
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
2)首先禁止所有的包,然后根据需要的服务允许特定的包通过防火墙。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
添加规则
# iptables -A INPUT -p tcp �Cdport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp �Csport 22 -j ACCEPT
开启22端口, 允许SSH登录
如开启80端口:
# iptables -A INPUT -p tcp �Cdport 80 -j ACCEPT
# iptables -A OUTPUT -p tcp �Csport 80 -j ACCEPT
禁止某个IP访问
# iptables -I INPUT -s x.x.x.x -j DROP
也可进行更细致的设置, 如只允许192.168.1.14的机器进行SSH连接:
# iptables -A INPUT -p tcp �Cdport 22 -s 192.168.1.14 -j ACCEPT
如果要允许或限制一段IP地址可用192.168.1.0/24 表示192.168.1.1-255端的所有IP.
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp �Csyn -m limit �Climit 1/s -j ACCEPT
防止各种端口扫描
# iptables -A FORWARD -p tcp �Ctcp-flags SYN,ACK,FIN,RST RST -m limit �Climit 1/s -j ACCEPT
Ping 洪水攻击(Ping of Death)
# iptables -A FORWARD -p icmp �Cicmp-type echo-request -m limit �Climit 1/s -j ACCEPT
重启防火墙:
service iptables restart
******************************************************iptables 详细********************************************************************
[root@tp ~]# /etc/rc.d/init.d/iptables save
这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.
[root@tp ~]# service iptables restart