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/rc.local 中最好,开机就自动加载)

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

iptables服务器主机防火墙的更多相关文章

  1. 保存iptables的防火墙规则的方法【转载】

    转自: 保存iptables的防火墙规则的方法 - 51CTO.COMhttp://os.51cto.com/art/201103/249504.htm 保存iptables的防火墙规则的方法如下: ...

  2. centos7使用iptables作为防火墙方法

    centos7使用iptables作为防火墙方法查看firewalld状态: systemctl status firewalld将centos7默认的firewalld停止,并将iptables作为 ...

  3. Iptables&Firewalld防火墙

    一.IPtables 1.IPtables入门简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具, ...

  4. CentOS7中关闭firewall,并使用iptables管理防火墙

    背景描述 在使用Docker时,启用centos7默认的firewall,启动端口映射时,防火墙规则不生效.docker默认使用了iptables防火墙机制.所以需要关闭firewall使用iptab ...

  5. iptables、防火墙配置、NAT端口映射

    一,配置一个filter表放火墙 (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables -L -n Chain INPUT (policy ACCEPT) targ ...

  6. Iptables静态防火墙基础教程

    文章目录检查Iptables是否安装Iptables相关的文件配置Iptables规则自定义规则保存规则 Iptables对于刚入门Linux的新手都比较难理解和配置.但是如果你掌握了其中的诀窍,你就 ...

  7. iptables阐述防火墙

    一:前言   防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...

  8. 4.iptables 网络防火墙

    [1] #如果想要iptables作为网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文. [2] #使用如下命令查看当前主机是否已经开启了核心转发,0表示为开启,1表示已开启 c ...

  9. Ubuntu使用iptables配置防火墙提示:unrecognized service(Ubuntu配置iptables防火墙)

    Ubuntu默认安装是没有开启任何防火墙的. 当使用service iptables status时发现提示iptables:unrecoginzed service.意思是无法识别的服务. 以下方法 ...

随机推荐

  1. java通过word模板生成word文档

    介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱 ...

  2. Replacing the deprecated Java JPEG classes for Java 7

    [src: https://blog.idrsolutions.com/2012/05/replacing-the-deprecated-java-jpeg-classes-for-java-7/] ...

  3. angularjs路由菜单强制刷新

    在开发过程中遇到使用路由控制单页加载页面时,点击菜单页面不重新刷新的情况,angularjs认为路由没有变化,而不会去刷新页面,解决办法: angular.module('myApp').direct ...

  4. 测试必备之Java知识(二)—— Java高级的东西

    Java高级 类加载过程 加载(创建class对象) -> 连接(验证-准备-解析) -> 类初始化 类加载器类别 根类加载器:加载java核心类 扩展类加载器:加载JRE目录中的jar包 ...

  5. 自建CDN Xnign产品指标

    Xnign-X1 Xnign-X1 性能参数 参考值 L7 HTTP RPS (128并发请求) 250W QPS L7 HTTP CPS (128并发请求) 110W QPS L7 HTTP RPS ...

  6. Codeforces940掉分记

    掉分经过 难得这次时间比较好,下午17:35开始. 本来还很高兴,心想这回肯定不会犯困,没准排名能再上升一些呢,,可惜事与愿违-- 上来a题,光看懂题就花了一些时间. 然后开始写,结果第一遍CE,第二 ...

  7. 04-String

    动手动脑 请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? s0,s1,s2字符串的内容相同,实际占用的是同一空间,引用的是同一个对象,所 ...

  8. 使用C++进行声明式编程

            声明式编程(英语:Declarative programming)是一种编程范型,与命令式编程相对立.它描述目目标性质,让计算机明白目标,而非流程.声明式编程不用告诉电脑问题领域,从而 ...

  9. .net core之编辑json配置文件

    .net core之编辑json配置文件 引言 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standa ...

  10. 【WPF学习】第二十一章 特殊容器

    内容控件不仅包括基本控件,如标签.按钮以及工具提示:它们还包含特殊容器,这些容器可用于构造用户界面中比较大的部分区域. 首先介绍ScrollViewer控件,该控件直接继承自ContentContro ...