iptables之企业服务器防火墙

iptables参数说明:

Commands:
Either long or short options are allowed.
  --append  -A chain                       链尾部追加一条规则
  --delete  -D chain                       从链中删除能匹配到的规则
  --delete  -D chain rulenum               从链中删除第几条链,从1开始计算
  --insert  -I chain [rulenum]             向链中插入一条规则使其成为第rulenum条规则,从1开始计算
  --replace -R chain rulenum               替换链中的地rulenum条规则,从1开始计算
  --list    -L [chain [rulenum]]           列出某条链或所有链中的规则
  --list-rules -S [chain [rulenum]]        打印出链中或所有链中的规则
  --flush   -F [chain]                     删除指定链或所有链中的所有规则
  --zero    -Z [chain [rulenum]]           置零指定链或所有链的规则计数器
  --new     -N chain                       创建一条用户自定义的链
  --delete-chain  -X [chain]               删除用户自定义的链
  --policy  -P chain target                设置指定链的默认策略(policy)为指定的target
  --rename-chain  -E old new               重命名链名称,从old到new

Options:
[!] --proto  -p proto                      指定要检查哪个协议的数据包:可以是协议代码也可以是协议名称,
                                           如tcp,udp,icmp等。协议名和代码对应关系存放在/etc/protocols中
                                           省略该选项时默认检查所有协议的数据包,等价于all和协议代码0
[!] --source -s address[/mask][...]        指定检查数据包的源地址,或者使用"--src"
[!] --destination -d address[/mask][...]   指定检查数据包的目标地址,或者使用"--dst"
[!] --in-interface  -i input name[+]       指定数据包流入接口,若接口名后加"+",表示匹配该接口开头的所有接口
[!] --out-interface -o output name[+]      指定数据包流出接口,若接口名后加"+",表示匹配该接口开头的所有接口
  --jump        -j target                  为规则指定要做的target动作,例如数据包匹配上规则时将要如何处理
  --goto        -g chain                   直接跳转到自定义链上
  --match       -m match                   指定扩展模块
  --numeric     -n                         输出数值格式的ip地址和端口号。默认会尝试反解为主机名和端口号对应的服务名
  --table       -t table                   指定要操作的table,默认table为filter
  --verbose     -v                         输出更详细的信息
  --line-numbers                           当list规则时,同时输出行号
  --exact       -x                         默认统计流量时是以1000为单位的,使用此选项则使用1024为单位

-p tcp 子选项
  子选项:
    [!] --source-port,--sport port[:port]
          指定源端口号或源端口范围。指定端口范围时格式为"range_start:range_end",最大范围为0:65535。
    [!] --destination-port,--dport port[:port]
          指定目标端口号或目标端口号范围。
    [!] --tcp-flags mask comp
          匹配已指定的tcp flags。mask指定的是需要检查的flag列表,comp指定的是必须设置的flag。
          有效的flag值为:SYN ACK FIN RST URG PSH ALL NONE。
          如果以0和1来表示,意味着mask中comp指定的flag必须为1其余的必须为0。
          例如:iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
          表示只匹配设置了SYN=1而ACK、FIN和RST都为0数据包,也即只匹配TCP三次握手的第一次握手。
    [!] --syn
         是"--tcp-flags SYN,ACK,FIN,RST SYN"的简写格式。

-p udp 子选项
  子选项:
    [!] --source-port,--sport port[:port]
          指定源端口号或源端口范围。指定端口范围时格式为"range_start:range_end",最大范围为0:65535。
    [!] --destination-port,--dport port[:port]
          指定目标端口号或目标端口号范围。

-p icmp 子选项
  子选项:
    [!] --icmp-type {type[/code]|typename}
          用于指定ICMP类型,可以是ICMP类型的数值代码或类型名称。有效的ICMP类型
          可由iptables -p icmp -h获取。常用的是"echo-request"和"echo-reply",分别
          表示ping和pong,数值代号分别是8和0
          ping时先请求后响应:ping别人先出去8后进来0;别人ping自己,先进来8后出去0

注意:

"-m"选项指定的是显式扩展。其实隐式扩展也是要指定扩展名的,只不过默认已经知道所使用的扩展,于是可以省略。例如:-p tcp --dport =  -p tcp -m tcp --dport。

常用的扩展和它们常用的选项如下:

(1).iprange:匹配给定的IP地址范围。

[!] --src-range from[-to]:匹配给定的源地址范围
[!] --dst-range from[-to]:匹配给定的目标地址范围

(2).multiport:离散的多端口匹配模块,如将212280三个端口的规则合并成一条。

最多支持写15个端口,其中"555:999"算2个端口。只有指定了-p tcp或-p udp时该选项才生效。

[!] --source-ports,--sports port[,port|,port:port]...
[!] --destination-ports,--dports port[,port|,port:port]...
[!] --ports port[,port|,port:port]... :不区分源和目标,只要是端口就行

(3).state:状态扩展。结合ip_conntrack追踪会话的状态。

[!] --state state

其中state有如下4种:

  INVALID:非法连接(如syn=1 fin=1)
  ESTABLISHED:数据包处于已建立的连接中,它和连接的两端都相关联
  NEW:新建连接请求的数据包,且该数据包没有和任何已有连接相关联
  RELATED:表示数据包正在新建连接, 但它和已有连接是相关联的(如被动模式的ftp的命令连接和数据连接)

例如:-m state --state NEW,ESTABLISHED -j ACCEPT

关于这4个状态,在下文还有更详细的描述。

(4).string:匹配报文中的字符串。

--algo {kmp|bm}:两种算法,随便指定一种
--string "string_pattern"

如:

iptables -A OUTPUT -m string --algo bm --sting "taobao.com" -j DROP

(5).mac:匹配MAC地址,格式必须为XX:XX:XX:XX:XX:XX

[!] --mac-source address

(6).limit:使用令牌桶(token bucket)来限制过滤连接请求数。

--limit RATE[/second/minute/hour/day]:允许的平均数量。如每分钟允许10次ping,即6秒一次ping。默认为3/hour。
--limit-burst:允许第一次涌进的并发数量。第一次涌进超出后就按RATE指定数来给出响应。默认值为5。

例如:允许每分钟6次ping,但第一次可以ping 10次。10次之后按照RATE计算。所以,前10个ping包每秒能正常返回,从第11个ping包开始,每10秒允许一次ping:iptables -A INPUT -d ServerIP -p icmp --icmp-type 8 -m limit --limit 6/minute --limit-burst 10 -j ACCEPT

(7).connlimit:限制每个客户端的连接上限。

--connlimit-above n:连接数量高于上限n个时就执行TARGET

如最多只允许某ssh客户端建立3个ssh连接,超出就拒绝。两种写法:

iptables -A INPUT -d ServerIP -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -A INPUT -d ServerIP -p tcp --dport 22 -m connlimit ! --connlimit-above 3 -j  ACCEPT

这个模块虽然限制能力不错,但要根据环境计算出网页正常访问时需要建立的连接数,另外还要考虑使用NAT转换地址时连接数会翻倍的问题。

"-j"是指定的target,target表示对匹配到的数据包要做什么处理,比如丢弃DROP、拒绝REJECT、接受ACCEPT等,除这3个target外,还支持很多种target。以下是其中几种:

DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装(其实也是源地址转换)
RETURN:用于自定义链,自定义链中匹配完毕后返回到自定义的前一个链中继续向下匹配

iptables命令实战:

企业服务器主机配置防火墙(filter表:INPUT,OUTPUT,FORWARD链步骤

1.置零所有规则和计数器:

iptables -F
iptables -X
iptables -Z

2.根据企业实际情况配置好允许规则,并允许回环接口 lo(-i/-o),如下:

iptables -t filter -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT  

3.设置默认的防火墙允许和禁止规则(使用-P或--policy参数设置默认规则):

 iptables -P INPUT DROP            #<== -P参数是添加默认规则至最后
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD DROP

4.使用 iptables-save命令将内存中配置写入配置文件(直接编辑配置文件/etc/sysconfig/iptables也可以)

iptables-save       #<==保存规则
/etc/init.d/iptables restart
iptables-restore    #<==恢复规则,后面可以用文件标准输入 <文件
iptables -L -n --line-number

提示:更好的方法是,第一次使用iptables时,将脚本所有需要用到的规则添加至文件 /etc/sysconfig/iptables,以后就直接编辑文件修改使用即可。

iptables脚本参考,生产环境根据实际调整使用(来自老男孩老师QQ49000448):

#!/bin/bash
#this is a server firewall created by oldboy 17:03 2006-7-26
#updated by oldboy on 10:30 2009-6-23
#http://blog.etiantian.org
#qq:49000448
#define variable PATH

IPT=/sbin/iptables

#Remove any existing rules
$IPT -F
$IPT -X
$IPT -Z
#setting default firewall policy
$IPT --policy OUTPUT ACCEPT
$IPT --policy FORWARD DROP
$IPT -P INPUT DROP

#setting for loopback interface
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Source Address Spoofing and Other Bad Addresses
$IPT -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
$IPT -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP
$IPT -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP
$IPT -A INPUT -i eth0 -s 192.0.2.0/24 -j DROP

# prevent all Stealth Scans and TCP State Flags
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# All of the bits are cleared
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
#SYN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# SYN and FIN are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# FIN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

#setting access rules
#one,ip access rules,allow all the ips of
$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p all -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT
$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT

#second,port access rules
#nagios
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT
$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 5666 -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p tcp --dport 5666 -j ACCEPT

#db
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3308 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT

#ssh difference from other servers here.>>
$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 52113 -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p tcp --dport 52113 -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p tcp --dport 52113 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 52113 -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
#ftp
#$IPT -A INPUT -p tcp --dport 21 -j ACCEPT

#http
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT
$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT

#snmp
$IPT -A INPUT -s 192.168.1.0/24 -p UDP --dport 161 -j ACCEPT
$IPT -A INPUT -s 202.81.17.0/24 -p UDP --dport 161 -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p UDP --dport 161 -j ACCEPT

#rsync
$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
$IPT -A INPUT -s 202.81.18.0/24 -p tcp -m tcp --dport 873 -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m tcp --dport 873 -j ACCEPT

#nfs 2049,portmap 111
$IPT -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT

#icmp
#$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
$IPT -A INPUT -s 124.43.62.96/27 -p icmp -m icmp --icmp-type any -j ACCEPT
$IPT -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
#others RELATED
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

注意:ftp服务器配置防火墙需允许关联的状态包通过.,并且需安装模块 nf_conntrack_ftp(写入配置文件 /etc/sysconfig/iptables-config 中最好)

/etc/sysconfig/iptables-config  作用:配置iptables开机加载的模块

modprobe nf_conntrack_ftp      #<==此模块与state状态相关
iptables -A INPUT -d 10.0.0.2 -p tcp --dport 21 -m state --state=NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 10.0.0.2 -m state --state=ESTABLISHED -j ACCEPT

更多iptables知识,原理以及TCP协议三次握手,四次挥手,如需深入了解,可参考博客

http://www.cnblogs.com/f-ck-need-u/p/7397146.html

https://www.cnblogs.com/kevingrace/p/6265113.html

原文地址:https://www.cnblogs.com/blog-tim/p/10274124.html

时间: 2024-10-30 03:34:56

iptables之企业服务器防火墙的相关文章

企业软件防火墙iptables

1.1 企业中安全优化配置原则 推荐:尽可能不给内部服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务. 使用场景: 大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全 小并发的情况,选择软件防火墙:iptables(centos 6).firewalld(centos 7) firewalld 是最新的软件防火墙centos 7在使用 1.1.1 生产中iptables的实际应用 主要应用方向 1.主机防火墙(fi

iptables基本应用--主机防火墙(服务器篇)

iptables四表:filter,nat,mangle,raw;五链:PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING. 通常查看的表:filter(默认),nat: 查看filter表: 查看nat表: 编写表(定义规则): 数据的流向分为源和目标两种类型: 源和目标都是相对于iptables而言,数据包经由iptables,数据的发送者是source,数据要达到的目标方为destination,不以设备所处的角色和作用来区分源和目标. 查看规则的其他参

保护企业服务器安全的方法介绍

企业服务器如何才能更安全的使用呢?小编归纳为一下几点. 一.增强网络整体安全 很多网管往往在维护网络安全方面存在这样的误区,认为只要将服务器单机打好补丁,安装好防护墙.操作系统定期升级就可以安枕无忧了.可实际上,很多黑客 和病毒并非直接攻击服务器,而是通过入侵其他计算机作为跳板来攻击整个网络的.目前很多网络都是通过域的方式来管理,一旦黑客或病毒成功入侵与服务器有信 任关系的一台计算机,那么从这台计算机攻击服务器将会变得非常简单.所以要办证整个网络的安全要从根本来考虑. 首先是安全管理,要从管理角

iptables linux下的防火墙

iptables: 查看防火墙信息: sudo iptables -L -v 设置防火墙(客户端 --> 服务器): sudo iptables -A INPUT -s ipaddress(客户端的ip) -p tcp --dport 61616 -j ACCEPT 设置防火墙(服务器-->客户端) sudo iptables -A OUTPUT -d ipaddress(客户端的ip) -p tcp --sport 61616 -j ACCEPT 版权声明:本文为博主原创文章,未经博主允许不

如何保护企业服务器安全

企业服务器如何才能更安全的使用呢?个人归纳为以下几点. 一.增强网络整体安全 很多网管往往在维护网络安全方面存在这样的误区,认为只要将服务器单机打好补丁,安装好防护墙.操作系统定期升级就可以安枕无忧了.可实际上,很多黑客和病毒并非直接攻击服务器,而是通过入侵其他计算机作为跳板来攻击整个网络的.目前很多网络都是通过域的方式来管理,一旦黑客或病毒成功入侵与服务器有信任关系的一台计算机,那么从这台计算机攻击服务器将会变得非常简单.所以要办证整个网络的安全要从根本来考虑. 首先是安全管理,要从管理角度出

Windows服务器防火墙配置规范

本文属于一篇内部规范文档,整理的初衷是为了规范.统一集团的Windows服务器(仅仅SQL Server数据库服务器)防火墙设置,仅仅供内部其它同事设置Windows防火墙时作为参考的文档资料.如有不足,敬请指正.后续将不断完善.整理该文档.文档里面部分内容直接摘抄自MSDN,敬请知晓!   文档类型 Windows服务器防火墙配置规范 创建日期 2017-02-06 版本变化 V1.0 修改记录 修改人 修改日期 版本 修改描述 孔令波 2017-02-06 V1.0 创建制定文档 注意事项:

Linux在iptables教程基本应用防火墙

iptables它是Linux防火墙软件经常使用,下面说一下iptables设备.删除iptables规则.iptables只要打开指定的port.iptables屏蔽指定ip.ip科和解锁.删除添加iptables规则iptables基本的应用程序. 1.安装iptables防火墙 假设没有安装iptables须要先安装.CentOS运行: yum install iptables Debian/Ubuntu运行: apt-get install iptables 2.清除已有iptables

企业服务器备份

服务器备份简单定义 所谓服务器备份是指针对于服务器所产生的数据信息进行相应的存储备份过程,从而保障数据的安全运行.公司服务器的备份应对当前和将来的信息使用方式进行评估,实施满足其全部需求的流程和技术. 公司服务器备份简单来说就是为了保证数据不丢失,在灾难来临能及时恢复数据并保证企业业务得以继续开展.备份是容灾的基础,当系统出现操作失误或系统故障.人为错误操作.病毒攻击.黑客攻击以及自然灾害导致数据丢失,而将备份的全部或部分数据进行恢复. 公司服务器传统备份方法 一.内置或外置的磁带机进行冷备份;

Linux入门及企业服务器知识学习笔记

1. Linux是类UNIX操作系统,是一个基于POSIX移植操作系统接口和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.2.用于企业服务器.WEB网站平台.大数据.虚拟化.Android.超级计算机.云计算.物联网.人工智能等领域.3.开源免费:迭代更新:性能稳定:安全性高:多任务,多用户:多线程:多CPU:耗资源少:内核小:应用广泛: 入门简单.4.企业服务器品牌及型号:DELL(大多数公司),HP,IBM,浪潮,联想2014年-2016年DELL:(1U)R420,R430,