#1 分类
对单一主机,主要有两种:数据包过滤Netfilter和依据服务软件分析的TCP Wrapper.
对区域型防火墙来说,即安装防火墙的主机充当路由器的角色。防火墙类型主要有两种:数据包过滤Netfilter和代理服务器。
对Netfilter(数据包过滤机制),Linux提供了iptables这个软件来进行管理。下文的重点就是整理iptables常用的命令。
对TCP wraper(程序管理),是针对特定的软件,如ssh,telnet等特定软件进行IP限制,MAC地址限制等(不可用于apache)。
代理服务器往往也是NAT服务器,以实现透明代理。
#2 iptables概念
iptables由多个table组成,每个table都有自己的策略和规则。默认的table为Filter,作用是过滤本地的数据包。除此之外,还有NAT table,功能是进行来源于目的地的IP或port转换,与Linux本机无关。还有其他的table,此处不提。
每个table都有自己的链(chain),盗图一张,具体如下:
对Filter来说,有三条链,分别为INPUT,OUTPUT,FORWARD。
一个数据包进入本机与从本机发出的过程,如下图所示,再次盗图一张:
#3 iptables语法
1. 规则查看
iptables [-t target(缺省为fliter)] [-L (查看当前table的规则)] [-v (更多信息)] 查看filter表规则 : iptables -L 查看NAT表规则 : iptables -t nat -L
2. 规则查看2
iptables-save [-t target]
会列出完整的防火墙规则
3. 清空规则
iptables -F 清除所有已制定规则 iptables -X 清除所有用户自定义的tables iptables -Z 将所有chain的计数和流量清空
4. 定义默认策略
iptables [-t target] -P [INPUT,OUTPUT...] [DROP,ACCEPT]
5. 设定规则:针对IP
iptables [-AI 链名(-A为新增,-I为插入)] [-io 网络接口(-i为数据包进入的接口)] [-p 协议(主要有:tcp udp icmp all)] [-s 来源IP/网络] [-d 目标IP/网络] -j [ACCEPT|DROP|REJECT|LOG (接收,悄悄丢弃,向来源地址发送拒绝数据包,日志记录)] LOG记录的数据储存在/var/log/message中,LOG并不影响后续的数据包对比。 例: 添加lo为信任设备: iptables -A INPUT -i lo -j ACCEPT 来自内网的所有数据都接收:iptables -A INPUT -i eth1 -s 192.168.1.0/24 -j ACCEPT(假设eth1连接LAN)
6. 设定规则:针对端口
iptables [-AI 链名] [-io 网络接口] [-p tcp,udp] [-s 来源] [--sport 端口范围] [-d 目的] [--dport 端口范围] -j [ACCEPT|DROP|REJECT] --sport表示来源IP/网络的端口范围,--dsport表示目的IP/网络的端口范围 因为仅有TCP、UDP数据包有端口,所以要想使用--sport或者--dport,都需要指定-p 例:拒绝进入本机的21号端口的数据包:iptables -A INPUT -i eth0 -p tcp --dport 21 -j REJECT
7. 设定规则:针对mac和state
iptables -A INPUT [-m 外挂模块名(state,mac等)] [--state 状态] 常见的数据包状态:INVALID(无效数据包) ESTABLISHED(连接成功的连接状态) NEW(新建连接的数据包) RELATED(与主机发出去的数据包有关) 例: 通过所有已建立连接或与发出请求相关的数据包,不合法数据包丢弃:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j DROP 放行mac地址为aa:bb:cc:dd:ee:ff的主机 iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT