企业iptables Filter NAT表链功能及应用实例

Linux iptables简介

基于包过滤的防火墙工具,功能强大,使用灵活,可以对流入和流出服务器的数据包进行精细的控制

 


iptable 工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,然后根据我们预先设定好的规则进行过滤

wKiom1e4D36hHi9CAABvXHRh65w937.png

1)iptables对数据包的过滤是一层层过滤的,顺序从上到下,从左到右

2)如果在某一层匹配上规则(也就是明确表明对该数据包是拒绝还是通过),不再向下匹配,直接应用

3)如果所有规则中都没有匹配上,匹配默认规则,默认规则允许则允许,拒绝则拒绝

 


iptables中表、链工作原理

iptables中具体配置过滤规则的是其中的4表5链、各表链的功能和作用不同

4表:FILTER、NAT、MANGLE、RAW

5链:INTPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

wKioL1e4D4vAMKtDAACCT4B5pHY460.png

1)FILTER表(INPUT+OUTPUT+FORWARD)

FILTER表:主要负责流入主机的数据包过滤,是Linux主机真正的防火墙功能实现地方

a.INPUT链:负责过滤所有目标地址是本机地址的数据包

b.OUTPUT链:处理所有源地址是本机的数据包

c.FORWARD链:负责转发流经主机的数据包,起转发作用,和NAT关系很大,LVS负载均衡中也有涉及到

 

2)NAT表(OUTPUT+PREROUTING+POSTROUTING)

NAT表:负责网络地址的转换,即来源地址与目的地址或者port的转换

a.PREROUTINGA链:在数据包到达防火墙时进行路由判断之前的规则,作用是是否改变目的地址或者目的端口

b.POSTROUTING链:在数据包离开防火墙时进行路由判断,是否要改变源地址、源端口等

c.OUTPUT链:和主机发出去的数据包有关,改变主机发出去的数据包目的地址

 

3)Mangle表(主要负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等,企业较少用到)

4)Raw表(有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能)

 


iptables企业常见应用实例

1)Linux主机防火墙(基础过滤规则,在集群部署初期就可以应用,后期根据业务需要调整)(主要用FILTER表)

[root@web01 ~]# iptables -A INPUT -p tcp -s 10.0.0.0/24 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@web01 ~]# iptables -A OUTPUT -o lo -j ACCEPT
#前三条出于安全考虑,集群后端服务器大多没有外网IP,同样也不允许除了内网以外的IP访问
[root@web01 ~]# iptables -P INPUT DROP
[root@web01 ~]# iptables -P FORWARD DROP
[root@web01 ~]# iptables -P OUTPUT ACCEPT
#这种默认过滤规则,其中INPUT、FORWARD拒绝,OUTPUT允许
[root@web01 ~]# iptables -A INPUT -s 192.168.0.0/24 -p all -j ACCEPT
#允许内网不同网段之间通信
[root@web01 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#开通相应端口权限
[root@web01 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@web01 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许关联的状态包通过(已经有状态关联的数据包不需要再次过滤,如FTP服务)

 

2)局域网共享上网(利用NAT表PSOTROUTING链)

wKiom1e4D5nA_vBcAAAivj4d0jE483.png

首先开启内核转发功能

[root@m01 ~]# sysctl -p
net.ipv4.ip_forward = 1

方法一:

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth0 -j SNAT --to-source 10.0.0.101
#-t指定表 -A指定链 -s指定源地址 -o指定数据出口网卡 -j指定规则 --to-source更换目的地址

方法二

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth0 -j MASQUERADE
#适合不固定的外网IP地址,如ADSL拨号线路,让iptables自动选择外网出口地址

 

3)端口映射(利用PREROUTING链)

wKioL1e4D6WzOfdAAAAVyv_SxFw348.png

[root@m01 conf]# iptables -t nat -A PREROUTING -d 10.0.0.101 -p tcp --dport 9000 -j DNAT --to-destination 172.16.2.4:80

 

4)外网IP和内网IP一对一映射

[root@m01 ~]# iptables -t nat -A PERROUTING -d 116.226.241.37 -j DNAT --to-desination 10.0.0.101
#外网地址116.226.241.37映射到内网10.0.0.101
[root@m01 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.101 -o eth0 -j SNAT --to-source 116.226.241.37
#10.0.0.101的源地址地址变更116.226.241.37
[root@m01 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 116.226.241.37 -j SNAT --to-source 10.0.0.254
#为了防止内网访问116.226.241.37外网地址产生环路可以加这一条规则

 

5)多IP上网,防止外网IP被封

[root@m01 ~]# iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth0 -j SNAT --to-source 116.226.241.30-116.226.241.40

 

6)防SYN DDOS攻击

iptables -N syn-flood
iptables -A INPUT -i eth0 -syn -j syn-flood
iptables -A syn-flood -m limit -limit 10/s -limit-burst 100 -j RETURN
iptables -A syn-flood -j DROP
#-limit 10/s表示每秒允许通过的并发连接数 -limit-burst 100是连接数的初始阀值

 

7)检查iptables并保存

[root@m01 nginx]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.101          tcp dpt:9000 to:172.16.2.4:80 
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@m01 nginx]# /etc/init.d/iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]


iptables相关内核参数调优

centos5.8以前

net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 180

centos6.4

net.nf_conntrack_max = 25000000
net.netfilter.nf_contrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 180
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 180
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 180
net.ipv4.tcp_fin_timeout = 2
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_tw_reuse = 1
#表示开启重用,允许将TIME-WAIT sockets重新用于新的TCP链接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中的TIME-WAIT sockets的快速回收,默认为0,表示关闭
#以上三个参数是为了防止生产环境下,time_wati过多设置的
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理,可以防止少量的SYN攻击
net.ipv4.tcp_leepalive_time = 1200
#表示当keeplive起用的时候,TCP发送keeplive消息的频率,缺省是2个小时,改为20分钟
net.ipv4.ip_local_port_range = 4000 65000
表示用于外连接的端口范围,默认情况下很小
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认1024,加大队列长度为8192,可以容纳更多等待连续的网络连接数
net.ipv4.tcp_max_tw_buckets = 30000
#表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立即被清除并打印警告消息,默认为180000,对于Apache、Nginx等服务器来说可以调整为低一点。如5000-30000,不同业务的服务器也可以给大一点,比如LVS...

 

调整内核参数文件/etc/sysctl.conf后,需执行/sbin/sysctl -p 使得修改生效

 

关于iptables,如果并发比较大,或者日PV多的情况下,开启防火墙需要注意,很有可能会导致网站访问缓慢

大并发(并发1万、PV日3000W)要么购买硬件防火墙,要么关闭iptables...

 

 

本文出自 “改变从每一天开始” 博客,请务必保留此出处http://lilongzi.blog.51cto.com/5519072/1840595

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
Cobbler简介 运维自动化包括标准化、工具化、Web化、服务化、智能化等几个不同的层级,在一家规模稍大、拥有服务器上千台甚至是几万台的生产环境中,想要真正实现运维自动化,工具化系统安装流程、统一系统安装规范,是其中最不能忽略的重要环节。普通的自动化部署可以采用pxe+dhcp+tftp配合kickstart实现,但是面对多版本、多部署需求的情况下,这种普通的部署方式可能达不到我们的要求;这时候就需要借助cobbler开源自动化部署工具来实现。 Cobbler是一款快速的网络系统部署工具,其最大的特点是
PHP服务缓存优化原理 Nginx 根据扩展名或者过滤规则将PHP程序请求传递给解析PHP的FCGI,也就是php-fpm进程 缓存操作码(opcode) Opcode,PHP编译后的中间文件,缓存给用户访问 当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件,该文件是执行PHP代码后的一种二进制文件表现形式。默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃;而操作码缓存的原理就是将编译后的操作码保存下来,并放入到共享内存里,以便再下一次调用该PHP页
IP数据包经由路由转发的时候源IP,目的ip是否改变? 这是个搞网络的基础问题,答案是不能改变的 , 除非做了nat转换才能改变。否则,数据包在整个传输过程中,源IP和目的IP不会发生改变。 不过MAC地址是变化的,因为发送端开始不知道目的主机的MAC地址,所以每经过一个路由器,MAC地址都会发生变化。 目的MAC地址是如何得到的? TCP/IP里面是用的ARP协议。比如新建了一个内网,如果一台机器A找机器B,封装Fram时(OSI的第二层用的数据格式),要封装对方的MAC,开始时A不知道B的MAC,只知
1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx worker单个进程允许的客户端最大连接数 8、配置Nginx worker进程最大打开文件数 9、开启高效的文件传输模式 10、设置连接超时时间 11、上传文件大小设置(动态应用) 12、fastcgi调优(配合PHP引擎动态服务) 13、配置nginx gzip压缩功
收到通知公司断网,公司核心交换机是两台cisco4507做了VSS,但是由于出口线只有一个跟所以没有正常切换,进入机房发现主交换机办卡都是亮红灯,经过重启,恢复正常。 但是楼层网络依然不通,进入弱电间,查看交换机端口不亮。 console进入交换机,发现error-disable ZPBMC-F16-1# showetherchannelsummary Flags:D-downP-bundledinport-channel I-stand-alones-suspended H-Hot-standby(LA

Linux用户与组之权限管理 - 2016-08-22 18:08:54

Linux用户与之权限组管理 权限(rwx、sst、umask) chown chmod ACL(见下篇) 试验环境:CentOS 7.2 与CentOS 6.8,具体会在应用场景明确指出 权限 Linux系统对用户与组的管理,其具体操作手段就是对于权限的分配,而常见的权限分配工具有 rwx, sst, umask, ACL. 跟用户与组有uid和gid一样,权限也有自己的数字标识,用八进制数表示。 我们先逐一作个简单认知,其具体的应用就在后面的实验中慢慢说明了! rwx 当我们在ls -l 时,会看见如
1、LVS环境组网 由于是使用的VM环境,自己PC当作客户机(即公网地址),调度器与服务器都是VM中虚拟机,所以客户和所有服务器之间都是物理直接相连网络,逻辑拓扑图如下: 2、ipvsadm安装前准备 外部IP地址 内部IP地址 角色 10.211.55.16/24 192.168.1.3/24 LVS调度器(虚拟机) 10.211.55.15/24 192.168.1.4/24 RS1(虚拟机) 10.211.55.14/24 192.168.1.5/24 RS2(虚拟机) 10.211.55.19/2

CentOS下搭建cacti监控 - 2016-08-22 17:08:13

一、cacti 监控软件简介 1. cacti 是用 php 语言实现的一个软件,它的主要功能是用 snmp 服务获取数据,然后用 rrdtool 储存和更新数据,当用户需要查看数据的时候用 rrdtool 生成图表呈现给用户。因此, snmp 和 rrdtool 是 cacti 的关键。 Snmp 关系着数据的收集, rrdtool 关系着数据存储和图表的生成。 2. Mysql 配合 PHP 程序存储一些变量数据并对变量数据进行调用,如:主机名、主机 ip 、 snmp 团体名、端口号、模板信息等变量

记一次服务器timewait事件 - 2016-08-22 17:08:07

之前一直没怎么关注过TCP,直到公司这次的事件,这才开始慢慢去研究,去学习TCP的相关知识,中间也尝试了很多方法,走了很多弯路,因此记下这篇文章,方便以后回顾 首先说下网络架构 Nginx和jetty都在同一个服务器,Nginx代理HTTP流量至多个jetty应用,基本情况就是这样 首先我们来看下,为什么会有TIMEWAIT的状态 客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间,进入CLOSED状态。 也就是说一般timewait只会出现在client
因为都知道安装linux软件包rpm 很好用;但是不能解决软件包的个别依赖关系;所以安装数据包时出现依赖时、yum到可以解决这类数据包依赖关系;而且还能便于管理大量数据包更新的问题;它的特点 、可以同时配置多个资源库(Repository) ,简洁的配置文件(/etc/yum.conf) ,自动解决增加或删除rpm包时遇到的倚赖性问题,保持与RPM数据库的一致性这也是它的优势。因此解决数据包的依赖关系;也是基于服务器和客户端的一种应用。 首先呢 介绍一下YUM 的简单指令: yum info // 查询详