== 防火墙简述 ==
新的防火墙子系统/包过滤引擎 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 #
- 允许已经建立的连接接收数据
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
- 开放端口22(SSH的默认端口),您要告诉iptables允许接受到的所有目标端口为22的TCP报文通过
iptables -A INPUT -p tcp -i eth0 –dport ssh -j ACCEPT
注:ssh代表22,可以在/etc/services中查到的服务都可以这样使用。
- 添加策略。策略也是一种规则,当所有规则都不匹配时,使用链的“策略”
链: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
- 启动包转发功能
将内网的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
参考
- http://my.oschina.net/kisops/blog/150995
- http://www.2cto.com/Article/201206/136644.html
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/552.html