STOP IPTABLES

为什么会有这个 wiki 页面?

在 Linux 中,iptables 是一个防火墙控制工具,但并不是一个“服务”。

真正内核中负责防火墙工作的是 Netfilter,iptables 仅仅是一个控制内核防火墙如何去工作的工具而已。

Netfilter 分为两部分:规则、附加模块。

由于部分发行版的 /etc/init.d/iptables 脚本存在一定 BUG,在运行 service iptables stop 时只能停掉“规则”,而无法停掉“附加模块”。

Netfilter 的 conntrack 机制往往是导致“可用性低”、“无法正确建连”、“响应时间差”的罪魁祸首。

对于无需做地址转换(NAT)的设备而言,完全无需启用 Netfilter 的 conntrack 功能,因此我们要彻底停掉它。

为什么 conntrack 会导致“可用性低”、“无法正确建连”、“响应时间差”等现象?

如果启用了 conntrack,所有连接,无论是 tcp 还是 udp 还是 icmp 甚至其他传输层协议,连接信息都会占用 conntrack(连接追踪表)。

默认情况下,Linux 的 conntrack_max 只有 65535。

当网络中连接数很高时,conntrack 表很快被占满,系统无法响应新请求(包括 ssh),这样会导致“可用性低”和“无法正确建连”的现象。

通过 sysctl 可以设置更大的 conntrack_max 值,但因为默认情况下 conntrack 的 hashsize 很小,

大量的连接会导致 Linux 系统查找 hash 表效率低下,会导致“响应时间差”的现象。

为什么 service iptables status 看不到任何规则,但 iptables 仍是“工作状态”?

因为即使没有任何规则,但只要针对某个表的某个(些)链进行过 -L 操作,就会自动载入 iptables 模块,这是 iptables 的一个特性。

为什么 service iptables status 看不到任何信息,但 lsmod|grep conn 仍能看到信息?

因为曾经由于某些原因,Netfilter 的 conntrack 被启用过,后期虽然停止过规则。

但由于某些发行版的脚本 /etc/init.d/iptables 存在 BUG,无法在停掉规则的同时禁用 conntrack 机制,

导致“可用性低”、“无法正确建连”、“响应时间差”等现象。

在什么情况下系统会自动载入 iptables?

  • 启用了 iptables 服务,且 /etc/sysconfig/iptables 中有内容
  • 仅仅运行过 iptables -L 命令查看过某个表,此时 kernel 会自动载入 iptables 的相关模块

在什么情况下会自动启用 conntrack 机制?

  • /ets/sysconfig/iptables-config 中 IPTABLES_MODULES 变量不为空时
  • 做 NAT 时
  • 规则里使用了 state 模块时
  • 规则里使用了 connbytes 模块时
  • 规则里使用了 hashlimit 模块时
  • 规则里使用了 connmark 模块时
  • 规则里使用了 CONNMARK 动作时

如何知道 iptables 是何时、如何、被怎样启动的?

#! /bin/bash

PID=`echo $$`
DATE=`date`
echo "DATE: $DATE" >> /tmp/iptables.log
ps aufx|grep -rn15 $PID >> /tmp/iptables.log
echo "PID is $PID" >> /tmp/iptables.log
echo "$0 $*" >> /tmp/iptables.log
echo -e "\n\n\n\n\n" >> /tmp/iptables.log
  • 备份 /sbin/iptables 和 /sbin/iptables-restore
  • 用上面的脚本替换这两个文件
  • chmod a+x /sbin/iptables*
  • 静观其变,等待系统自动生成 /tmp/iptables.log(记得最后将两个文件恢复回来)

如何彻底停掉 iptables?

若要彻底停掉 iptables,不仅需要清除所有规则,还要移除所有 iptables、Netfilter 相关的内核模块

清除所有规则比较简单,可以使用 service iptables stop 完成

但移除内核模块则需要考虑内核模块的依赖关系

可以考虑使用下面的代码完成

wget -qO- http://61.135.208.20/download/baijin/release/iptables-stop | bash
#! /bin/bash

service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off

for((i=0;i<10;i++))
do
        for M in `lsmod|awk ‘/conn/||/xt_/||/ipt_/||/ip6t_/||/nf_/||/_tables/||/ip_vs/{print $1}‘`
        do
                rmmod $M &>/dev/null
        done
done

chkconfig --level 12345 iptables off
chkconfig --level 12345 ip6tables off

if [ "`lsmod |awk ‘/conn/‘`" == "" ]
then
        echo "iptables has been stopped completely."
else
        echo "WARNING: For some reasons, iptables can NOT be stopped, the device must be rebooted!"
fi

如果必须使用 conntrack,如何优化其性能?

  • 加大 hashsize
在确保 lsmod|grep conn 没有任何提示的情况下
modprobe nf_conntrack hashsize=200000
  • 加大 conntrack_max 值
sysctl -w net.netfilter.nf_conntrack_max=1024000
  • 缩短异常连接在 conntrack 表中的 timeout 时间
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7300

检查 iptables 是否是开机自启动

chkconfig --list iptables 如果有 on 就是开机自动启动

禁止 iptables 开机自动启动的方法是 chkconfig iptables off


必须使用 conntrack 的情况:CPIS WCCP 优化案例

增加 conntrack_max 数量

增加后可以存储更多的连接数据,不会造成 conntrack table full 的情况,提高可用性

增加 bucket 数量

增加 bucket 数量后,利用空间换时间的方法,将少量长链表换成多个短链表,单个链表检索速度会大幅度下降

降低 timeout 值

降低 timeout 值会让僵尸数据尽快从表中删除,提高效率,降低对 conntrack_max 的占用

降低 establish 值

原因同上,会提高效率,降低对 conntrack_max 的占用

时间: 2024-11-02 11:53:20

STOP IPTABLES的相关文章

CentOS7安装iptables防火墙

CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables yum update iptables #安装iptables-services yum install iptables-services 禁用/停止自带的firewalld服务 #停止fir

iptables端口转发

1. 确定forward开启 # cat /proc/sys/net/ipv4/ip_forward1 2. 转发进来的包 iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp -m tcp --dport 16922 -j DNAT --to-destination 192.168.0.169:22 这表示将目的地为111.111.111.111:16922的包发往 192.168.0.169:22 3. 设置回路 iptables -

Iptables防火墙(一)

一.Linux防火墙基础 Linux防火墙主要工作在网络层,属于典型的包过滤防火墙. netfilter和iptables都用来指Linux防火墙,主要区别是: netfilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"的防火墙功能体系. iptables:指的是用来管理linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于"用户态"的防火墙管理体系. 1.iptables的表.链结构 Ipt

防火墙iptables

防火墙 主配置文件:vim /etc/sysconfig/iptables 想要自定义防火墙,需要把这里的规则清空并且权限设置成DROP 防火墙名字:netfilter,工具:iptables 防火墙有三个表filter,nat,mangle 每个表下面还有链: filter表主要用于过滤包,系统预设的表.内建三个链INPUT.OUTPUT.FORWARD,INPUT作用于进入本机的包,OUTPUT作用于本机送出的包,FORWARD作用于跟本机无关的包. nat表主要用处是网络地址转换,PRER

【整理笔记-防火墙】实现iptables防火墙搭建

搭建防火墙,配置防火墙. - - 系统centos7 . centos7自带firewalld,由于看firewalld命令行没有接触过,所以安装iptables防火墙. 1:禁用firewalld firewall-cmd --state 查看系统自带防火墙状态. 用systemctl stop firewalld.service   禁止立即生效, systemctl disable firewalld.service  永久关闭firewalld.执行完再看一下防火墙状态, 显示为not

iptables man中文手册

名称        iptables - IP包过滤器管理 总览        iptables -ADC  指定链的规则  [-A  添加 -D 删除 -C 修改]        iptables - RI        iptables -D chain rule num[选项]        iptables -LFZ 链名 [选项]        iptables -[NX] 指定链        iptables -P chain target[选项集]        iptables

service iptables start 无反应的解决方法

[[email protected] ~]# service iptables start[[email protected] ~]# service iptables status防火墙已停解决方法:一.初始化iptables.iptables -Fservice iptables saveservice iptables restartvi /etc/sysconfig/iptables 二.把预置的iptables规则添加进去就可以了:# Firewall configuration wr

关闭系统不必要的服务;关闭selinux,关闭iptables

关闭系统不必要的服务:关闭selinux,关闭iptables:关闭ctrl+alt+del重启:设置ssh端口,关闭DNS解析:设置系统最大文件描述符:设置系统关键文件权限:配置安装ntp:安装vim:配置安装阿里云yum源和epel源: #!/bin/bash #written by [email protected] #system optimization script #The fllow apply to CentOS 6.x . /etc/init.d/functions func

针对Red Hat Enterprise Linux 6.5 的防火墙详细讲解,iptables(netfilter)规则的

防火墙基础 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或网络层防火墙).基于Linux内核编码实现,具有非常稳定的性能和高效率,因此获得广泛使用. 在Linux系统中,netfilter和iptables都用来指Linux防火墙. netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(Kernel Space,又称为内核空间)的防火墙功能体系. iptables:指的是

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址