当前位置:网站首页 > 技术博客 > 正文

Nftables代替iptables

null

== 防火墙简述 ==

新的防火墙子系统/包过滤引擎 Nftables 将在 Linux 3.13 中替代有十多年历史的iptables。iptables/netfilter在2001年加入到2.4内核中。诞生于2008年的 NFTables 设计替代 iptables, 它提供了一个更简单的kernel ABI,减少重复代码,改进错误报告,更有效的支持过滤规则。除了iptables,NFTables还将替代ip6tables、arptables和 ebtables。Linux内核的第一代包过滤机制是ipfwadm(1.2.1内核,1995年),之后是ipchains(1999年),Netfilter,Nftables是第四代。

== iptables基础 ==

Netfilter/IPTables的体系结构可以分为三个大部分:

  • Netfilter的HOOK机制 
    Netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这些HOOK函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及HOOK函数标号作为参数,传递给Netfilter框架。 
    对于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议的一个或多个HOOK进行注册,实现挂接。这样当某个数据报被传递给Netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块就有机会检查、修改、丢弃该数据报及指示Netfilter将该数据报传入用户空间的队列。 
    这样,HOOK提供了一种方便的机制:在数据报通过Linux内核的不同位置上截获和操作处理数据报。
  • IPTables基础模块 
    IPTables基础模块实现了三个表来筛选各种数据报,具体地讲,Linux2.4内核提供的这三种数据报的处理功能是相互间独立的模块,都基于Netfilter的HOOK函数和各种表、链实现。这三个表包括:filter表,nat表以及mangle表。
  • 具体功能模块 
    数据报过滤模块 
    连接跟踪模块(Conntrack) 
    网络地址转换模块(NAT) 
    数据报修改模块(mangle) 
    其它高级功能模块

== iptables 的启动停止 ==

ubuntu中启动及关闭iptables,在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令。

=== 启动iptables ===

modprobe ip_tables
 iptable-restore /etc/iptables.rule

=== 关闭iptables ===

iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
modprobe -r ip_tables
命令本身            条件准则            处置方式
iptables -A INPUT  -p tcp --dport 22   -j ACCEPT
  • 列出当前iptables的策略和规则 

    iptables -L # –list 列出当前所有table的配置规则
    iptables -L -n # -n: 用数字形式显示
    iptables -L -v # -v: 打印详细的信息

iptables -F # 清除规则 
iptables -X # 

  1. 允许已经建立的连接接收数据

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

  1. 开放端口22(SSH的默认端口),您要告诉iptables允许接受到的所有目标端口为22的TCP报文通过

iptables -A INPUT -p tcp -i eth0 –dport ssh -j ACCEPT

注:ssh代表22,可以在/etc/services中查到的服务都可以这样使用。

  1. 添加策略。策略也是一种规则,当所有规则都不匹配时,使用链的“策略”

链:INPUT, PREROUTING, FORWARD, POSTROUTING, OUTPUT

链策略的默认值是:ACCEPT。

表:filter (默认),nat,mangle。

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP


root@patrick :~# iptables -L -n

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0

ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy DROP)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp spt:22


  1. 启动包转发功能

将内网的FTP请求转发到外网的一个主机上。

iptables -t nat -A PREROUTING -p tcp -dport 21 -j DNAT –to-dest 10.25.1.7:21

查看:

iptables -L -t nat

要实现包转发,还需要编辑内核参数。

cat /proc/sys/net/ipv4/ip_forward

0

step 1) 保存当前iptables的规则到文件中。

iptables-save > /etc/iptables.up.rules

step 2) 开机恢复iptables的规则。方法是添加下面这行到文件‘/etc/network/interfaces/’ 的末尾。

pre-up iptables-restore < /etc/iptables.up.rules

(四)禁用防火墙

iptables -F

似乎Ubuntu中没有类似service iptables stop这样的命令来暂停iptables。只能使用这种方法来禁用iptables(防火墙)。

使用前,请保证规则已经备份在文件中。

==== ufw 的基本使用 ==== 
Ubuntu发行版中,默认没有iptabes服务脚本程序,但是附带一个基于iptables防火墙配置工具:ufw。 
ufw的好处是

sudo ufw enable       #启用ufw
sudo ufw disable      #禁用ufw

开启/关闭防火墙 (默认设置是’disable’)

  • ufw enable|disable 
    转换日志状态
  • ufw logging on|off 
    设置默认策略 (比如 “mostly open” vs “mostly closed”)
  • ufw default allow|deny 
    许 可或者屏蔽某些入埠的包 (可以在“status” 中查看到服务列表[见后文])。可以用“协议:端口”的方式指定一个存在于/etc/services中的服务名称,也可以通过包的meta-data。 ‘allow’ 参数将把条目加入 * 
    /etc/ufw/maps ,而 ‘deny’ 则相反。基本语法如下:
  • ufw allow|deny [service] 
    显示防火墙和端口的侦听状态,参见 /var/lib/ufw/maps。括号中的数字将不会被显示出来。
  • ufw status 
    UFW 使用范例: 
    允许 53 端口
  • sudo ufw allow 53 
    禁用 53 端口
  • sudo ufw delete allow 53 
    允许 80 端口
  • sudo ufw allow 80/tcp 
    禁用 80 端口
  • sudo ufw delete allow 80/tcp 
    允许 smtp 端口
  • sudo ufw allow smtp 
    删除 smtp 端口的许可
  • sudo ufw delete allow smtp 
    允许某特定 IP
  • sudo ufw allow from 192.168.254.254 
    删除上面的规则
  • sudo ufw delete allow from 192.168.254.254

问题跟踪记录

表象

ping notify.alipay.com
PING notify.alipaydns.com (110.75.146.45) 56(84) bytes of data.
64 bytes from host-45.alipay.com (110.75.146.45): icmp_req=1 ttl=246 time=24.8 ms
64 bytes from host-45.alipay.com (110.75.146.45): icmp_req=2 ttl=246 time=24.8 ms
64 bytes from host-45.alipay.com (110.75.146.45): icmp_req=3 ttl=246 time=24.8 ms
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

tail -f /var/log/syslog

69007 Feb 25 15:11:03 localhost kernel: [14435794.720444] nf_conntrack: table full, dropping packet
69008 Feb 25 15:11:03 localhost kernel: [14435794.720541] nf_conntrack: table full, dropping packet

调大如下参数,后来现象消失

  • /proc/sys/net/netfilter/nf_conntrack_max
  • /sys/module/nf_conntrack/parameters/hashsize

参考

  1. http://my.oschina.net/kisops/blog/150995
  2. http://www.2cto.com/Article/201206/136644.html
null

版权声明


相关文章:

  • js switch 多个选择条件2024-10-19 11:01:01
  • iptables规则生成2024-10-19 11:01:01
  • 前端计算器代码2024-10-19 11:01:01
  • 实践为什么是认识的基础2024-10-19 11:01:01
  • javascript中switch用法列题2024-10-19 11:01:01
  • js switch分支语句与注意事项break2024-10-19 11:01:01
  • Linux技术03-Netfilter、Iptables、Nftables、Firewalld2024-10-19 11:01:01
  • JS Switch2024-10-19 11:01:01
  • JS中switch case,多个case对于同一操作的写法2024-10-19 11:01:01
  • js switch语句的使用2024-10-19 11:01:01