一、netfilter/iptables
netfilter:Linux内核中的一个软件框架,用于处理网络数据包,提供的功能包括:网络地址转换NAT,数据包内容修改、过滤、转发等防火墙的功能
iptables:运行在用户空间的应用软件,命令行工具,通过其设置规则,来控制netfilter模块,从而实现网络数据包的管理,从而实现防火墙的配置。
二者组成Linux下的包过滤防火墙。
二、四表五链
1、规则表
- filter表:过滤数据包
- nat表:网络地址转换
- mangle表:管理mangle包
- raw表:关闭在nat表启用的连接追踪机制
2、规则链
- PREROUTING:对数据包作路由选择前应用此链中的规则
- INPUT:进来的数据包
- FORWARD:转发数据包
- OUTPUT:出去的数据包
- POSTROUTING:路由选择后
三、规则配置
1、命令格式
iptables [-t table] command chain parameter target
-
table:指定操作的表,默认filter表
-
command:操作的命令
-A:在指定链尾添加一条新的规则(append)
-D:删除指定链中的一条规则,可以根据序号或内容进行删除(delete)
-I:在指定链插入一条新的规则,默认在第一行(insert)
-L:列出所有规则(list)
-R:修改、替换指定链的某一条规则,可以根据序号和内容进行替换(replace)
-N:新建一条自定义规则链(new-chain)
-X:删除自定义的规则链
-E:重命名自定义链
-F:清空(flush)
…
-
chain:规则链(INPUT、OUTPUT、FORWARD…)
-
parameter:匹配规则
-s:匹配报文的源地址,可以同时指定多个,每个用逗号进行隔开
-d:匹配报文的目标地址,可以同时指定多个,每个用逗号进行隔开
-p:匹配报文的协议类型,如tcp、udp、icmp、sctp、udplite、esp等
-i:匹配报文从哪个网卡接口流入
-o:匹配报文将要从哪个网卡接口流出
…
–sport:匹配源端口,可以用冒号指定一个连续的端口范围
–dport:匹配目的端口,可以用冒号指定一个连续的端口范围
-m multiport --sports/dports:匹配多个离散的端口号,用逗号隔开
示例: iptables -t filter -I OUTPUT -s 192.168.1.111 -p tcp -m tcp --dports 22:25 -j DROP
-
target:处理数据包的方式
-j ACCEPT:允许数据包通过
-j DROP:丢弃数据包,不给回应信息
-j REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
…
四、常用规则示例
1、规则保存
service iptables save
若不保存,待服务器重启时会恢复原先状态。
2、查看规则(带编号)
iptables -L -n --line-number
3、删除OUTPUT第一条规则
iptables -D OUTPUT 1
4、拒绝进入防火墙的所有ICMP协议数据包
iptables -I INPUT -P icmp -j REJECT
5、限制udp53端口只进不出
iptables -I OUTPUT -p udp --dport 53 -j REJECT
6、获取域名服务端口号
grep domain /etc/services
五、注意点
1、规则顺序
若报文已被前面的规则匹配,则会直接执行对应的操作,即使后续规则也能匹配,但不会再执行。
2、匹配条件
若一条规则中有多个匹配条件,则需同时满足所有匹配条件,报文才能被匹配,即"与"的关系。
3、将更容易被匹配的规则放在前面
在没有顺序要求的情况下,不同类别的规则,被匹配次数多、匹配频率高的规则应放在前面。
4、当IPTABLES所在主机作为网络防火 墙时,在配置规则时,应着重考虑方向性,双向都要考虑,从外到内,从内到外。
5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。