IPtables/NetFilter
前提知识
任何主机若要与非同网络中的主机通信,则必须将报文发送到默认网关;
对Linux而言,IP地址是属于主机(内核中)的,不属于网卡,只要属于当前主机的IP地址间,都可直接响应,不称为转发
私有地址在路由器上是不允许被路由的
防火墙的类型与作用的链
主机防火墙:一般使用INPUT,OUTPUT链来过滤进入和发出的报文
网络防火墙:一般使用PREROUTING,FORWARD,POSTROUTING链来转发经过的报文
命令参数 :
iptables [-t 表] -命令 匹配 操作
说明
(1) -t 表
表选项用于指定命令应用于哪个iptables内置表。
(2)命令
命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,如下表所示
命令 说明
| -P |
--policy 链名> | 定义默认策略 |
| -L |
--list 链名> |
查看iptables规则列表 |
| -A |
--append 链名> | 在规则列表的最后增加1条规则 |
| -I |
--insert 链名> | 在指定的位置插入1条规则 |
| -D | --delete 链名> |
从规则列表中删除1条规则 |
| -R |
--replace 链名> |
替换规则列表中的某条规则 |
| -F | --flush 链名> |
删除表中所有规则 |
| -Z | --zero 链名> |
将表中数据包计数器和流量计数器归零 |
| -X | --delete-chain 链名> |
删除自定义链 |
| -v |
--verbose 链名> | 与-L它命令一起使用显示更多更详细的信息 |
(3) 匹配规则
匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
匹配 说明
-i --in-interface 网络接口名> 指定数据包从哪个网络接口进入,
-o --out-interface 网络接口名> 指定数据包从哪个网络接口输出
-p ---proto协议类型 指定数据包匹配的协议,如TCP、UDP和ICMP等
-s --source 源地址或子网> 指定数据包匹配的源地址
--sport 源端口号> 指定数据包匹配的源端口号
--dport 目的端口号> 指定数据包匹配的目的端口号
-m --match 匹配的模块 指定数据包
规则所使用的过滤模块
不同网络间主机通信的方式
路由:
对于Linux主机,设定/proc/sys/net/ipv4/ip_forward的值为1,即开启了路由功能,可以作为模拟路由器使用

注:但真实的路由器还应该存在生成路由表的机制,一般是基于路由协议(如RIP2,OSPF)动态学习的,在此不作讨论
NAT:
工作于网络层和传输层,也可分为静态NAT和动态NAT
Basic NAT:静态NAT;NAT服务器上有一个外网地址池,内网连接时直接分配一个外网IP使用,很不灵活
NAPT:动态NAT,Network Address Port Translation,即网络端口地址转换,也可分为SNAT和DNAT
SNAT:源地址转换;适用于内网主机访问互联网,原理图如下:

DNAT:目标地址转换;适用于让互联网主机访问本地内网中的某主机上的服务,原理图如下:

iptables/netfilter基于SNAT和DNAT原理实现报文转发
-j SNAT --to-source SIP
规则添加:在POSTROUTING链上
-j MASQUERADE
用于外网IP是ADSL拨号上网时生成的动态IP,MASQUERADE模式能自行查找能访问互联网的外网IP,并完成SNAT
-j DNAT --to-destination DIP[:Port]
支持端口映射
规则添加:在PREROUTING链上
实例:
# 将外网对172.16.100.:22022的访问转发至内网的192.168.20.12.22
iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport -j DNAT --to-destination 192.168.20.12.
iptables/netfilter实战解析
需求分析

架构设计

配置部署
DNS Server配置
网络配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.178
NETMASK=255.255.0.0
GATEWAY=172.16.251.236
DNS主配置文件:/etc/named.conf
# named.conf中需修改的部分
listen-on port { 127.0.0.1; 172.16.251.178;};
allow-query { any; };
recursion no;
#zone "." IN {
# type hint;
# file "named.ca";
#};
DNS辅助配置文件:/etc/named.rfc1912.zones
acl inter_net {
172.16.251.0/;
};
view inter_net {
match-clients { inter_net; };
zone "." IN {
type hint;
file "named.ca";
};
zone "jason.com" IN {
type master;
file "jason.com.inter_net";
};
};
view outer_net {
match-clients { any; };
zone "jason.com" IN {
type master;
file "jason.com.outer_net";
};
};
区域数据文件:
# vi /var/named/jason.com.inter_net
$TTL 1D
jason.com. IN SOA dns.jason.com. admin.jason.com (
; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns
dns A 172.16.251.178
www A 172.16.251.182
# vi /var/named/jason.com.outer_net
$TTL 1D
jason.com. IN SOA dns.jason.com. admin.jason.com (
; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS dns
dns A 172.16.251.178
www A 3.3.3.1
启动named服务
chown root.named jason.com.inter_net
chown root.named jason.com.outer_net
service named restart
配置一个虚拟主机,监听端口8080
在DocumentRoot目录下创建一简单的测试文件test.html,内容随意,如
“Hello Mageedu”
启动httpd服务即可
Firewall配置
网络配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.236
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=3.3.3.1
NETMASK=255.255.255.0
DNS1=3.3.3.1
注:因为3.3.3.1和3.3.3.3都是模拟的外网IP地址,故对应的网卡应处于同一信道内,且不能和内网的通信信道一致,故在用虚拟机测试时,可将对应内网IP的网卡的网络方式改为桥接,而对应外网IP的网卡的网络方式改为自定义,如vmnet2
添加iptables规则
iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p udp --dport 53 -j DNAT --to-destination 172.16.251.178iptables -t nat -A PREROUTING -d 3.3.3.1/32 -p tcp --dport 8080 -j DNAT --to-destination 172.16.251.182Inter Client配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=172.16.251.176
NETMASK=255.255.255.0
GATEWAY=172.16.251.236
DNS1=172.16.251.178
# vi /etc/resolv.conf
nameserver 172.16.251.178
Outer Client配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR=3.3.3.3
NETMASK=255.255.255.0
GATEWAY=3.3.3.1
DNS1=3.3.3.1
# vi /etc/resolv.conf
nameserver 3.3.3.1
DNS解析测试

HTTP访问测试

大功告成,哦也!
iptables实现7层访问过滤 :
1、实验所需要的相关包
l7-protocols协议包:l7-protocols-2009-05-28.tar.gz 下载地址
为了方便,我们把需要的包都放到/root/app下

1、要同步系统时间到当前日期
同步时间后,编译内核可能还会报错:warning: Clock skew detected. Your build may be incomplete.
此时需要执行:
find . -type f | xargs -n 5 touch
make clean
make
3、IPv4连接追踪功能要编译成模块,而非编入内核
3)进入~/rpmbuild/SOURCES目录,解压tar包

为解压后的目录创建软链接,方便以后使用

2、解压补丁包,拿到etfilter-layer7补丁

3、进入内核源码目录,为其打上layer7补丁

[root@nmshuishui linux]# cp /boot/config-2.6.-.el6.x86_64 .config
[root@nmshuishui linux]# make menuconfig
Networking support--->Networking options--->Network packet filtering framework(Netfilter)--->core Netfilter Configuration--->"layer7" match support



Enable loadable module support--->Module signature verification(EXPERIMENTAL)

Cryptographic API--->In-kernel signature checker(EXPERIMENTAL)

(6)保存退出

# make -j
# make modules_install
# make install




# tar xf iptables-1.4..tar.gz


rpm -e iptables iptables-ipv6 --nodeps
./configure --prefix=/usr --with-ksource=/usr/src/linux

编译时可能会出现这样一个界面,直接略过

# tar zxvf l7-protocols---.tar.gz
# cd l7-protocols---
# make install
# tar zxvf l7-protocols---.tar.gz
# cd l7-protocols---
# make install


|
1
|
vim /etc/rc.d/init.d/iptables |



|
1
|
# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action] |
内网客户端win7一台,处于VMnet5段中

服务器配置两块网卡,一块用于外网(eth0:172.16.251.93),一块用于外网(eth1:192.168.1.104)

为了使内网客户端能够通过此服务器上网,需开启转发功能

方法一:设置源地址转换

方法二:设置内网源地址伪装

(4)l7规则前,内网客户端可正常登录QQ

(5)基于iptables规则过滤QQ协议

(6)查看过滤结果

效果不言而喻,当然是完美的,不过要想结果完美,还要经过一段痛苦的折磨期!!!
IPtables/NetFilter的更多相关文章
- Linux数据包路由原理、Iptables/netfilter入门学习
相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...
- Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略
主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...
- Linux内核下包过滤框架——iptables&netfilter
iptables & netfilter 1.简介 netfilter/iptables(下文中简称为iptables)组成Linux内核下的包过滤防火墙,完成封包过滤.封包重定向和网络地址转 ...
- iptables/Netfilter 学习
开始学iptables,因为它是和路由器技术紧密结合在一起的. iptables的命令看起来眼花缭乱,随便找两个: iptables -A FORWARD -p tcp -s -d -j ACCEPT ...
- iptables/netfilter命令、实现及利用(转)
原文链接:http://blog.csdn.net/sealyao/article/details/5934268 一.Netfilter和Iptables概述 netfilter/iptables ...
- netfilter/iptables
参考:tcp/ip协议 1.Linux框架概念 1.1.工作流程图 1.2.功能: ①过滤(filter) ②修改源ip.目标ip(nat) ③拆解报文.修改报文标记.重新封装(mangle) ④关闭 ...
- iptables介绍iptables和netfilter
随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...
- netfilter/iptables 防火墙
目录 文章目录 目录 iptables 与 netfilter 工作机制 规则(Rules) 链(chain) 表(tables) 网络数据包通过 iptables 的过程 总结链.表和规则的关系 i ...
- Linux中级之netfilter防火墙(iptables)
一.什么是防火墙? 防火墙其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬 ...
随机推荐
- 用C#实现对MSSqlServer数据库的增删改查---DAL层
说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...
- 百度地图js lite api 支持点聚合
百度地图lite api 是专门为h5 绘制海量点设计的,但是偏偏忽略掉了点聚合的需求,所以需要自己动手,做一次二次改造. 我们知道点聚合需要引入开源库: MarkerClusterer: http ...
- 宝塔Linux面板新手安装教程【转】
一.使用远程连接软件 (如 Putty.XShell) 连接你的Linux服务器,本教程以 Putty 为例. 1.动 Putty.exe 程序,进入 Putty 主界面. 2.在 Host Name ...
- UVA题解二
UVA题解二 UVA 110 题目描述:输出一个Pascal程序,该程序能读入不多于\(8\)个数,并输出从小到大排好序后的数.注意:该程序只能用读入语句,输出语句,if语句. solution 模仿 ...
- 8.Python3标准库--数据持久存储与交换
''' 持久存储数据以便长期使用包括两个方面:在对象的内存中表示和存储格式之间来回转换数据,以及处理转换后数据的存储区. 标准库包含很多模块可以处理不同情况下的这两个方面 有两个模块可以将对象转换为一 ...
- ASP.NET Core 上传大文件无法接收的问题
解决办法:在API项目中配置 1. 在 web.config 文件中 <system.webServer>里加入 <security> <requestFiltering ...
- Synergy,一个软件团队质量改进之路之一 --- 规划
关于质量改进 ISO9001:2000的核心思想是持续改进 ISO关于质量管理有8项原则: 原则一: 以顾客为关注焦点 原则二: 领导作用 原则三: 全员参与 原则四: 过程方法 原则五:管理的系统方 ...
- 洛谷 P2871 [USACO07DEC]手链Charm Bracelet 题解
题目传送门 这道题明显就是个01背包.所以直接套模板就好啦. #include<bits/stdc++.h> #define MAXN 30000 using namespace std; ...
- 洛谷 P2369 EXCEEDED WARNING A 题解
题目传送门 直接用sort排序最后输出即可.但是数组要使用short int 类型.否则会超内存. #include<bits/stdc++.h> using namespace std; ...
- 想弄一弄tensorflow,先弄numpy
现在晚上凉快点了, 下班回家可以学会东东了.. 这次的书是一个印度人写的. 按着示例代码弄起先.. #!/usr/bin/env python # -*- coding: utf-8 -*- impo ...