1.Linux 实现原理 — netfilter/iptables 流量处理框架
2.Linux防火墙之-iptables
3.Linux下针对路由功能配置iptables的方法详解
4.Linux系统管理之iptables(踩坑经验)
5.一文看懂Linux内核iptables
Linux 实现原理 — netfilter/iptables 流量处理框架
Linux 的 Netfilter/iptables 流量处理框架,自年开发,年起成为Kernel v2.4版本的一部分,用于IP数据包的操控与过滤。这个框架通过在Kernel的L3-subsystem中设置多个Hook点,实现对所有IP数据包的期货策略代码源码检测、处理和拦截,其核心是5个Hook点和相关的处理函数。
5个Hook点对应5条Chains,每个Hook点都有相应的Handler处理数据包。数据包经过Hook点后,会根据预设的规则(Rules)执行判断或处理。规则由用户定义,包含在Chain的有序列表中,其执行顺序至关重要,严格规则通常排在前面。Netfilter提供了3个核心概念:规则、链和表,分别用于用户操作、控制流程和应用环境管理。
iptables作为用户空间工具,负责配置和管理这些规则。它支持IPv4和IPv6,而nftables则在Linux kernel v3.中被引入,作为未来的征途源码2017.02主要配置工具。iptables通常集成为服务,启动时应用防火墙规则,配置更改需手动保存并加载以生效。
在配置规则时,理解基本匹配与扩展匹配、SNAT(源地址转换)和DNAT(目的地址转换)等技术至关重要。例如,SNAT用于私网访问公网,MASQUERADE则支持动态IP地址的共享上网。iptables的命令行语法和应用示例,如本地端口映射,都是实际操作中的关键环节。
关注“云物互联”微信公众号,获取更多关于云计算和网络技术的最新资讯与实践分享。
Linux防火墙之-iptables
Linux防火墙的核心工具是iptables,它作为免费开源软件,能够替代商业防火墙,执行包过滤、重定向和网络地址转换(NAT)等任务。规则定义为满足特定条件的数据包处理方式,存储在内核的包过滤表中,涉及源地址、目的地址、协议和服务类型等因素。乐土online源码数据包通过匹配规则进行操作,如放行、拒绝或丢弃。iptables有四个内置表:filter、nat、mangle和raw,分别负责不同的功能,如包过滤、地址转换、包重构和数据跟踪。
在Linux系统中,iptables可能需要手动安装和配置,比如在CentOS 7中,它并非默认防火墙。通过使用`-L -n --line-numbers`参数,可以查看系统的防火墙配置规则。默认情况下,iptables可能会拒绝所有连接,但可以调整规则以允许特定功能,如开启ICMP回显测试,允许SSH远程连接,或只允许特定网段访问特定端口。
iptables还支持地址转换(SNAT和DNAT),用于隐藏内部网络的源码编程方法IP地址,限制每个IP的连接数,以及对特定IP或端口的访问进行精细化控制。例如,可以拒绝..1.访问端口,或限制-端口的连接。配置基本防火墙时,可以执行一些预设的脚本,而对于生产环境,通常会根据具体需求定制更详细的规则集。
Linux下针对路由功能配置iptables的方法详解
作为公司上网的路由器需要实现的功能有nat地址转换、dhcp、dns缓存、流量控制、应用程序控制,nat地址转换通过iptables可以直 接实现,dhcp服务需要安装dhcpd,dns缓存功能需要使用bind,流量控制可以使用tc,应用程序控制:例如对qq的封锁可以使用 netfilter-layer7-v2.+-protocols---.tar.gz来实现
1、网络规划
操作系统是centos5.8
2、安装dhcpd
代码如下:
yum install dhcp-3.0.5-.el5
vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet .0.0.0 netmask ...0 {
option routers .0.0.1;
option subnet-mask ...0;
option domain-name-servers .0.0.1;
range dynamic-bootp .0.0. .0.0.;
default-lease-time ;
max-lease-time ;
}
3、安装bind,实现dns缓存
代码如下:
yum install bind.i bind-libs.i bind-utils.i
vim /etc/named.conf
options {
directory "/var/named";
allow-recursion { .0.0.0/; };
recursion yes;
forward first; #将所有请求都进行转发
forwarders { ...; }; #定义转发服务器地址
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-transfer { none; };
};
zone "0.0..in-addr.arpa" IN {
type master;
file "named.loopback";
allow-transfer { none; };
};
创建根域文件,默认有
代码如下:
dig -t NS . /var/named/named.ca
chown :named /var/named/named.ca
创建本地正向解析文件,爱坤源码默认有
代码如下:
vim /var/named/named.localhost
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A .0.0.1
chown :named /var/named/named.localhost
创建本地反向解析文件,默认有
代码如下:
vim /var/named/named.loopback
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A .0.0.1
PTR localhost.
chown :named /var/named/named.loopback
检查主配置文件
代码如下:
named-checkconf
检查根区域配置文件
代码如下:
named-checkzone “.” /var/named/named.ca
检查区域文件
代码如下:
named-checkzone “localhost” /var/named/named.localhost
启动服务
代码如下:
service named start
4、重新编译编译内核和iptables以支持应用层过滤
由于实行防火墙功能的是netfilter内核模块,所以需要重新编译内核,需要下载新的内核源码,并使用netfilter-layer7-v2.作为内核的补丁一起编译到内核中。而控制netfiler的是iptables工具,因此iptables也必须重新编译安装,最后再安装应用程序过滤特征码库-protocols--.tar.gz
1、给内核打补丁,并重新编译内核
2、给iptables源码打补丁,并重新编译iptables
3、安装proto
备份iptables脚本和配置文件
代码如下:
cp /etc/rc.d/init.d/iptables /root/iptables.sysv
cp /etc/sysconfig/iptables-config /root/iptables-config
2.6内核下载地址
/l7-filter/
iptables源码下载地址
/l7-filter/
代码如下:
xz -d linux-2.6...tar.xz
tar -xvf linux-2.6...tar.gz -C /usr/src #新的内核源码,用于重新编译
tar -zxvf netfilter-layer7-v2..tar.gz -C /usr/src #内核补丁和iptables补丁 ,只支持到2.6.
#进入解压目录并创建软连接
pcd /usr/src
ln -sv linux-2.6.. linux
#进入内核目录
pcd /usr/src/linux
#为当前内核打补丁
ppatch -p1 ../netfilter-layer7-v2./kernel-2.6.-2.6.-layer7-2..path
#为了方便编译内核将系统上的内核配置文件复制过来
pcp /boot/config-2.6.-.el5 /usr/src/linux/.config
编译内核
代码如下:
make menuconfig
Networking support - Networking Options - Network packet filtering framework - Core Netfilter Configuration
Netfilter connection tracking support
"lawyer7" match support
"string" match support
"time" match support
"iprange" match support
"connlimit" match support
"state" match support
"conntrack" connection match support
"mac" address match support
"multiport" Multiple port match support
Networking support - Networign options - Network packet filtering framework - IP:Netfiltr Configuration
IPv4 connection tracking support (required for NAT)
Full NAT
MASQUERADE target support
NETMAP target support
REDIRECT target support
在Networking support中选择 Networking options
查找Network packet filtering framework(Netfilter)–Core Netfiler Configrationg–Netfilter connection tracking support(NEW),”layer7″ match support(NEW),”time” match support(NEW),”iprange”
查找IP:Netfilter Configuration–IPv4 connection tracking support,Full NAT(NEW)
代码如下:
make
make modules_install
make install
重启操作系统选择新内核登录
卸载旧的iptables
代码如下:
rpm -e iptables-1.3.5-9.1.el5 iptables-ipv6-1.3.5-9.1.el5 iptstate-1.4-2.el5 --nodeps
安装新的iptables,以支持新的netfiler模块
代码如下:
tar -jsvf iptables-1.4.6.tar.bz2 -C /usr/src
cd /usr/src/netfilter-layer7-v2.
cd iptables-1.4.3forward-for-kernel-2.6.forward
cp * /usr/src/iptables-1.4.6/extensions/
cd /usr/src/iptables-1.4.6/
./configure --prefix=/usr --with-ksource=/usr/src/linux
make
make install
查看安装后的iptables的文件
代码如下:
ls /usr/sbin |grep iptables
ls /usr/libexec/xtables
复制之前备份的配置文件和脚本
代码如下:
cp /root/iptables-config /etc/sysconfig/
cp /root/iptables.sysv /etc/rc.d/init.d/iptables
修改脚本中iptables的路径
代码如下:
vim /etc/rc.d/init.d/iptables
:.,$s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g
让iptables服务开机自动启动
代码如下:
chkconfig --add iptables
修改iptables 配置文件
将/etc/sysconfig/iptables-config中的
IPTABLES_MODULES=”ip_conntrack_netbios_ns” 注释掉
安装协议特征码
代码如下:
tar xvf -protocols--.tar.gz
make install
完成后在/etc/l7-protocols会生成文件
支持的协议/etc/l7-protocols/protocols
添加iptables策略,运行内部网络上网,禁止qq和视频
代码如下:
iptables -t nat -A POSTROUTING -s .0.0.0/ -j SNAT --to-soure ..6.
iptables -A FORWARD -m layer7 --l7proto qq -j DROP
iptables -A FORWARD -m layer7 --l7proto httpvideo -j DROP
iptables -A FORWARD -m layer7 --l7proto httpaudio -j DROP
指定8点到点无法上网
复制代码
代码如下:
iptables -A FORWARD -m time --timestart : --timestop : -j DROP
5、使用tc控制带宽
例如公司出口带宽是Mbps,个用户A分配KB的最大下载带宽,给用户B 分配分配的最大下载带宽是KB
A用户ip:.0.0.
B用户ip:.0.0.
代码如下:
#在eth0网卡上创建一个根队列规则,队列规则的算法使用htb,default 2表示指定一个默认类别编号,默认的流量控制策略,如果ip没有在后面的filter中被匹配到就都是有这个策略
tc qdisc add dev eth0 root handle 1:0 htb default 2
#在eth0网卡上定义一个类,prant 1:0中的1对应根队列规则中的handle 1:0,classid 1:2表示当前这个类的标识,用于应用在后面的得到filter中,rate kbsp表示带宽为KB/s,ceil kbps表示最大带宽也为KB/s,prio 2是优先级
tc class add dev eth0 parent 1:0 classid 1:2 htb rate kbps ceil kbps prio 2
tc class add dev eth0 parent 1:0 classid 1:3 htb rate kbps ceil kbps prio 2
#将两个类的默认的fifq队列规则改为sfq
tc qdisc add dev eth0 parent 1:2 handle sfq
tc qdisc add dev eth0 parent 1:3 handle sfq
#在网卡eth0上的1:0节点(对应qdisc中的handle 1:0)添加一个u过滤规则,优先级为1,凡是目标地址是.0.0.的数据包都使用1:2类(对应classid为1:2的类)
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u match ip dst .0.0. flowid 1:2
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u match ip dst .0.0. flowid 1:3
如果还有其他用户例如用户C和D的ip是、,要求的下载带宽也要求那么在加入
代码如下:
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u match ip dst .0.0. flowid 1:3
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u match ip dst .0.0. flowid 1:3
清除eth0上的规则
代码如下:
tc qdisc del dev eth1 root /dev/null
Linux系统管理之iptables(踩坑经验)
关键字:linux、iptables、防火墙
时间:年月
一、关于iptables
iptables是旧版的数据包过滤、转发工具,而nftables是新一代的数据包过滤、转发工具。尽管如此,当前许多服务器仍在使用iptables。在使用过程中遇到一些问题,因此在此重新总结iptables的使用方法。
⚠️注意:在使用iptables之前,必须对五元组(协议类别、源地址、源端口、目的地址、目的端口)有深入了解。
二、iptables用途
防火墙、NAT、端口映射
三、常用命令
1、iptables
2、iptables-save(保存规则)
iptables-save的作用是将所有规则打印出来,打印的格式可以用于iptables-restore恢复规则。保存命令如下:
3、iptables-restore(加载规则)
iptables-restore的作用是恢复规则,规则格式由iptables-save生成。恢复命令如下:
四、参数举例
iptables命令参数
五、命令举例
1、追加规则
允许本地数据包进入:
允许所有已经建立连接的数据包进入:
允许ping、route等数据包进入:
允许tcp协议目标端口的数据包进入:
允许tcp协议来自IP地址1.2.3.4的数据包进入:
禁止tcp协议目标端口的数据包进入:
禁止tcp协议来自IP地址1.2.3.4的数据包进入:
禁止允许规则以外的其他数据包进入(⚠️慎用):
2、删除规则
把-A改为-D即可,如下:
六、典型案例
1、HTTP服务器基础防火墙
允许ssh连接、允许http请求、允许https请求;阻止其他端口请求,例如:(MySQL)、(PostgreSQL)等。
第1步,清空所有规则
注意:远程服务慎用iptables -F,如果默认规则是DROP,执行iptables -F后,所有数据将被丢弃,造成无法和服务器通信,ssh也无法使用。
第2步,允许ssh访问、、端口,其他端口禁止
第3步、保存规则
2、NAT网关(待续)3、端口映射(待续)
七、踩坑
⚠️1、踩坑
远程登录到服务,添加配置,如下:
使用iptables-save保存配置,如下:
打算清空规则后,使用iptables-restore恢复rules.v4,如下:
ssh断开 ..............
2、分析
未添加任何规则时:
添加规则之后:
执行iptables -F之后:
问题就在
变成了
⚠️⚠️也就是说“iptables -F”不会改变“iptables -P INPUT DROP”产生的结果,但清除了所有规则,因此所有数据包都被拦截。
3、避坑
不使用:
采用如下规则代替:
完整配置如下:
一文看懂Linux内核iptables
Linux内核的iptables防火墙工具是一个强大的数据包过滤系统,主要用于网络安全控制。它采用数据包过滤机制,通过预先设定的规则对进入主机的数据包进行分析和决策。
iptables工作流程是逐层和顺序的。数据包首先按照配置规则的顺序从上到下,从前到后进行过滤。若匹配到明确阻止或通过的规则,不再继续匹配;如果没有匹配到规则,则按照默认策略处理。默认策略在所有规则执行完后才执行。
iptables主要包括四个表(filter、nat、mangle和raw)和五个链,filter和nat表尤为重要。filter表用于基本的过滤规则,nat表则负责地址转换,如端口映射。iptables允许用户自定义规则,但必须与特定的链相关联,规则的顺序至关重要。
在实际操作中,iptables提供了丰富的选项和参数,如添加、删除和查看规则,配置端口访问权限,以及实现端口映射、字符串匹配等功能。比如,可以设置只允许特定IP访问特定端口,或者阻止Windows蠕虫和SYN洪水攻击。
在使用iptables时,务必注意备份现有规则,谨慎操作以避免误操作。同时,可以使用定时任务进行测试后再正式启用规则。iptables在服务器安全和网络管理中扮演着关键角色,掌握其工作原理和常用操作是每个Linux管理员的必备技能。