iptables详解

iptables命令:

iptables [-t table] {-A|-C|-D} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

rule-specification = [matches…] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]

规则格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

-t table:
raw, mangle, nat, [filter]
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

COMMAND:
链管理:
-N:new, 自定义一条新的规则链;
-X:delete,删除自定义的规则链;
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除;
规则管理:
-A:append,追加;
-I:insert, 插入,要指明位置,省略时表示第一条;
-D:delete,删除;
(1) 指明规则序号;
(2) 指明规则本身;
-R:replace,替换指定链上的指定规则;

-F:flush,清空指定的规则链;
-Z:zero,置零;
iptables的每条规则都有两个计数器:
(1) 匹配到的报文的个数;
(2) 匹配到的所有报文的大小之和;
查看:
-L:list, 列出指定鏈上的所有规则;
-n:numberic,以数字格式显示地址和端口号;
-v:verbose,详细信息;
-vv, -vvv
-x:exactly,显示计数器结果的精确值;
–line-numbers:显示规则的序号;

匹配条件:
基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;
[!] -s, –source address[/mask][,…]:检查报文中的源IP地址是否符合此处指定的地址或范围;
[!] -d, –destination address[/mask][,…]:检查报文中的目标IP地址是否符合此处指定的地址或范围;
[!] -p, –protocol protocol
protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or “all”
{tcp|udp|icmp}
[!] -i, –in-interface name:数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT和FORWARD链;
[!] -o, –out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD、OUTPUT和POSTROUTING链;

隐式扩展:不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使用-p指明了协议,就表示已经指明了要扩展的模块;
tcp:
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;
[!] –tcp-flags mask comp
mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST
comp is a comma-separated list of flags which must be set,例如SYN
例如:“–tcp-flags SYN,ACK,FIN,RST SYN”表示,要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0;
[!] –syn:用于匹配第一次握手,相当于”–tcp-flags SYN,ACK,FIN,RST SYN“;
udp
[!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;
[!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;

icmp
[!] –icmp-type {type[/code]|typename}
echo-request:8
echo-reply:0

扩展匹配条件: 需要加载扩展模块,方可生效;
1、multiport扩展
以离散方式定义多端口匹配;最多指定15个端口;

[!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;
[!] –destination-ports,–dports port[,port|,port:port]…:指定多个目标端口;
[!] –ports port[,port|,port:port]…:指明多个端口;

~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -j ACCEPT

2、iprange扩展
指明连续的(但一般不脑整个网络)ip地址范围;

[!] –src-range from[-to]:源IP地址;
[!] –dst-range from[-to]:目标IP地址;

~]# iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP

3、string
–algo {bm|kmp}:字符串匹配检测算法;
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
[!] –string pattern:要检测的字符串模式;
[!] –hex-string pattern:要检测的字符串模式,16进制格式;

~]# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string “gay” -j REJECT
在入站请求上做检测意义不大

4、time 时间同步服务器 ntp 202.120.2.101
-m time
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–timestart hh:mm[:ss]
–timestop hh:mm[:ss]

[!] –monthdays day[,day…]
[!] –weekdays day[,day…]

[root@localhost ~]# iptables -A INPUT -p tcp -d 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp -s 192.168.68.134 -m time –timestart 1:00:00 –timestop 2:00:00 -j ACCEPT
限制时间段9:00-10:00访问
看网上说要加–kerneltz 否则默认是UTC时间 亲测发现加不加都是UTC时间 按照你的时间-8就行了

5、connlimit扩展
根据每客户端IP做并发连接数数量匹配;
–connlimit-upto n:连接的数量小于等于n时匹配;
–connlimit-above n:连接的数量大于n时匹配;
[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p tcp –dport 22 -m connlimit –connlimit-upto 2 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p tcp –sport 22 -j ACCEPT

6、limit扩展
基于收发报文的速率做匹配;

令牌桶过滤器;

–limit rate[/second|/minute|/hour|/day]
–limit-burst number

[root@localhost ~]# iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m limit –limit 3/min –limit-burst 5 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0
[root@localhost ~]# iptables -A OUTPUT -s 192.168.68.134 -p icmp –icmp-type 0 -j ACCEPT
防DOS攻击

7、state:是conntrack的子集
conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:
NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
INVALID:无效的连接;
UNTRACKED:未进行追踪的连接;

已经追踪到的链接可以在/proc/net/nf_conntrack中查看
最大追踪链接数 /proc/sys/net/nf_conntrack_max中查看
调整最大数~]# sysctl -w net.nf_conntrack_max=300000
或~]# echo 300001 > /proc/sys/net/nf_conntrack_max

超时的连接会被删除;当模板满载时,后续的新连接有可能会超时
1)加大nf_conntrack_max的值
2)降低nf_conntrack条目的超时时常
不同协议的连接追踪时长/proc/sys/net/netfilter/

iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除;当模板满载时,后续的连接可能会超时

解決方法一般有两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.nf_conntrack_max = 393216
net.ipv4.netfilter.nf_conntrack_max = 393216

(2) 降低 nf_conntrack timeout时间
vi /etc/sysctl.conf
net.ipv4.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

实用规则
iptables -A INPUT -d 192.168.68.134 -p tcp -m mulitiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p tcp -m multiport –dports 22,23,80 -m state –state NEW -j ACCEPT
iptables -A INPUT -d 192.168.68.134 -p icmp –icmp-type 8 -m state –state NEW,ESTABLISHED -jACCEPT
iptables -A OUTPUT -m state –state ESTABLISHED -j ACCEPT

 

RELATED 如何放行被动的ftp服务
1)modprobe nf_conntrack_ftp #内核装载ftp模块
2)放行命令连接
iptables -A INPUT -d $sip -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

3)放行数据连接
iptables -A INPUT -s $sip -p tcp -m state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d $sip -p tcp -m state ESTABLISHED -j ACCEPT

规则的用效期限:
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限;

保存规则:
保存规则至指定的文件:
CentOS 6:
~]# service iptables save
将规则保存至/etc/sysconfig/iptables文件中;

~]# iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 7:
~]# iptables-save > /PATH/TO/SOME_RULES_FILE

重新载入预存规则文件中规则:
~]# iptables-restore < /PATH/FROM/SOME_RULES_FILE

CentOS 6:
~]# service iptables restart

自动生效规则文件中的规则:
(1) 用脚本保存各iptables命令;让此脚本开机后自动运行;
/etc/rc.d/rc.local文件中添加脚本路径;
/PATH/TO/SOME_SCRIPT_FILE

(2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则;
/etc/rc.d/rc.local文件添加:
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

centos6
service iptables save
chkconfig iptales on

处理动作
-j ACCEPT DROP REJECT
RETURN 返回调用的链
REDIRECT 端口重定向
LOG日志
MARK 防火墙标记
DNAT 目标地址转换
SNAT 源地址转换
MASQUERADE地址伪装 POSTROUTING

LOG
iptables -I FORWARD 2 -s 10.0.0.0/24 -p tcp –dport 80 -m state –state NEW -j LOG –log-prefix “new connect:”
在/var/log/messages下看到日志

REDIRECT 端口映射
[root@centos ~]# iptables -t nat -A PREROUTING -d 192.168.68.144 -p tcp –dport 80 -j REDIRECT –to-ports 8080
客户端访问的80端口 实际响应的是8080端口

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88317

(0)
N27_flypigN27_flypig
上一篇 2017-11-12 13:10
下一篇 2017-11-12 14:23

相关推荐

  • centos 6.9 安装步骤

    一:虚拟机VMware安装 windows下安装推荐使用 VMware Workstation Pro12.5版本       下载网址:http://www.vmware.com/products/workstation/workstation-evaluation.htm l 二: linux硬件资源分配         1:硬件分配       内存:…

    2017-05-21
  • Linux的各种发行版系列讲解

    Linux的各种发行版系列讲解 linux的发行版有数百种之多,在此只讲解最主流的一些分支 Debain (主流)Debian是主流三大分支中唯一一个以社区方式来发行的,没有商业公司运作 后期加进去的软件限制更少,所以使用难度比其他更高 Knoppix Debian的一个著名子分支,短小精悍 Ubuntu(乌班图) 基于Debian的二次发行版,是主流分支,…

    Linux干货 2018-02-22
  • Linux任务计划

        任务计划分类:    一次性任务计划:只执行一次就结束                at batch    周期性任务计划:每隔一定的周期去…

    Linux干货 2017-05-08
  • Web缓存核心技术点需知

    Edit Web缓存核心技术点需知 5.1 HTTP首部控制 5.2 基于新鲜度检测机制: 2.1 特征1:时间局部性 2.2 特征2:空间局部性 2.3 缓存的优点 2.4 哪类数据应该被缓存 2.5 哪类数据可缓存但不应该被缓存 2.6 缓存命中率决定缓存有效性 2.7 缓存数据生命周期 2.8 缓存处理步骤 2.9 缓存和普通数据读取的区别 1. 完整…

    Linux干货 2016-11-14
  • 文件查找工具locate和find的使用分析

    文件查找工具locate和find的使用分析 不管是在windows系统中还是在Linux系统中,我们经常会一些文件进行搜索查找,而在Linux系统中经常用到的搜索工具有locate和find,这两种搜索工具的工具原理和用法都不相同,一下将这对这两种搜索工具的使用进行分析。 1、locate工具的工作原理是对/var/lib/mlocate/mlocat.d…

    Linux干货 2016-08-18
  • 开学第一天

      今天是我来到马哥教育的第一天,来之前心情非常之忐忑,因为没有接触过linux系统,感觉是个新事物,来到教室里,一百多人的大集体,年龄的差异,使我感觉到压力。首先马哥和张sir的讲话,非常的帮,其中令我记忆最深刻的是那句话,取上者得中,取中者得下。一个人在奋斗的时候如果给自己的目标定的低,那就收获的还要低。所以要高标准的要求自己,一开始给自己定一…

    Linux干货 2018-03-26