在Linux中使用和核心内建的封包过滤机制Netfilter,Netfilter提供了iptables这个软件作为防火墙封包过滤的指令。
程序控管TCP Wrappers是另一种抵挡封包进入的方法,这种方法是通过服务器程序的外挂tcpd来处置的。与封包过滤不同的是,这种机制主要是分析谁对某程序进行存取,然后透过规则去分析该服务器程序谁能够联机、谁不能。TCP Wrappers是透过客户端想要链接的程序文件名,然后分析客户端的IP地址,看是否放行。
封包过滤式防火墙主要是分析OSI七层协议中的2/3/4层,可以进行的分析工作有:
- 拒绝让Internet的封包进入主机的某些端口
- 拒绝让某些来源IP的封包进入
- 拒绝让某些带有特殊标记Flag的封包进入
- 分析硬件地址MAC来决定是否允许进入
TCP Wrappers
TCP Wrappers是透过/etc/hosts.allow /etc/hosts.deny这2个文件来管理的,但是并不是所有的软件都可以用来管控,目前可以管控的程序有:
- 由super daemon(xinetd)所管理的服务;
- 配置文件在/etc/xinetd.d里面的服务就是xinetd管控
- 系统中需要安装xinetd程序,使用chkconfig –list查看xinetd管控的程序
- 有支持libwrap.so模块的服务;
规则执行的顺序是:先对比hosts.allow中的规则,再对比hosts.deny中的规则,如果2个文件中都不符合,则放行
iptables
预设iptables至少有3个表格:filter、nat、mangle
- filter主要与进入主机的封包有关
- INPUT与进入主机的封包有关
- OUTPUT与主机所要发送的封包有关
- FORWARD与传递封包到后段的主机中,与nattable相关
- nat主要在进行来源目的ip或port的转换,主要与主机后的局域网内的主机相关
- PREROUTING在进行路由判断之前所要进行的规则
- POSTROUTING在进行路由判断后所要进行的规则
- OUTPUT与发送的封包有关
- mangle与特殊封包的路由标记有关
iptable语法
规则查看
iptables [-t tables] [-L] [-nv] or iptables-save [-t table]
,后者会列出完整的防火墙规则
- -t 后接table,默认是filter
- -L 列出目前的table的规则
- -n 不进行ip与hostname的反查
- -v 显示详细信息
- 每个Chain代表1个链,括号内的policy就是预设政策
- target 代表进行的动作,ACCEPT放行,REJECT拒绝,DROP丢弃
- prot 代表使用的封包协议,主要有tcp\udp\icmp三种
- opt 额外的选项说明
- source 代表规则是针对哪个来源IP进行限制
- destination 代表规则针对哪个目标IP进行限制
- *开头的是表格
- : 开头的是链
规则清除
iptables [-t table] [-FXZ]
- -F 清除所有的已定的规则
- -X 杀掉所有使用者自定义的chain
- -Z 将所有的chain的计数与流量统计归零
- 定义预设政策
- 在重新定义防火墙时,需要先将规则清除,操作最好是在本机执行;
iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
- -P 定义政策,注意大写
规则定义
iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源ip] [--sport port][-d 目标ip] [--dport port] -j [ACCEPT|DROP|REJECT|LOG]
- -AI 链名针对某链进行规则的累加或插入,链名有3个:INPUT\OUTPUT\FORWARD
- -A 新增一条规则到原有规则的最后
- -I 插入一条规则,如未指定顺序,默认为第一条
- -io 网络接口,设定封包进出的接口规范
- -i 封包进入的网络接口
- -o 封包所传出的网络接口
- -p 协议
- 主要的封包格式有:tcp\udp\icmp\all
- -s 来源ip,设定规则生效的来源,可以是单个ip,也可以是网段,如果是不允许某个ip或网段,则在地址前面加!
- –sport 限制来源的端口号,端口号可以是连续的n1:n2,如果使用了–sport或–dport必须要加-p参数,否则会出错
- -d 目的ip或网段
- –dport 限制到目的的端口号
- -j 后面接动作,主要的动作有ACCEPT\DROP\REJECT\LOG
- 需要注意的是,网络接口lo需要设置为信任装置iptables -A INPUT -i lo -j ACCEPT
- 规则添加的顺序非常重要,例如我们利用iptables限制ssh的登陆
iptables -A INPUT -i eth0 -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT i eth0 -p tcp --dport 22 -j REJECT
- iptables还支持syn的处理方式,一般来说,client启用的端口号都是大于1024的,服务端启用的端口号都是小于1023的,我们使用iptables将从1:1023发起的主动连接到本机的请求全部拒绝
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j REJECT
- 使用iptables禁用主机的ping响应
iptables -A INPUT -i eht0 -p icmp --icmp-type 8 -j REJECT
# 禁用所有的主机pingiptables -I INPUT -i eht0 -s 192.168.0.100 -p icmp --icmp-type 8 -j ACCEPT
#允许ping的主机