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
下一篇 2017-11-12

相关推荐

  • 文件、目录——Linux基本命令(7)

    1.     文件名规则 (1)文件名最长255个字节          (2)包括路径在内文件名称最长4095个字节 (3)文件颜色          蓝色-…

    2017-07-17
  • shell脚本练习

    习题1:打印99乘法表 #!/bin/bash # for ((j=1;j<=9;j++)) do for ((i=1;i<=j;i++)) do echo -e -n “${i}x${j}=$[${i}*${j}]\t” done echo done 习题2:写一个脚本(1)创建目录/tmp/dir-当前日期时间;例如/tmp/dir-2015…

    Linux干货 2017-05-22
  • RPM及YUM工具介绍及使用(下)

    YUM工具 YUM工作原理 YUM工具的出现就是为了解决rpm工具不能够自动解决软件包之间的依赖关系这一难题的。它的工作原理大致如下:YUM透过分析RPM的标头资料,根据各软件的相关性找出软件所依赖的软件列表,然后去下载速度最快的yum仓库中下载所有相关RPM软件包,然后完成相应软件的安装。同时yum工具和rpm工具一样,也可以提供对软件包的查询,安装、升级…

    Linux干货 2016-12-26
  • HAProxy服务配置

    HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件。 相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。 四层和七层负载均衡的区别: 四层: 通过分析IP层及TCP/UDP层的流量实现的基于“IP+端口”的负载均衡。 七层: …

    Linux干货 2017-05-19
  • 探索这个“男人”

    一、前言 正所谓了解一个命令就得了解他的用法,正好是要了解一个人就得了解他的兴趣爱好,处事态度以及为人是怎么样的。 二、man是什么 man – an interface to the on-line reference manuals Man是manual(手册)的缩写,使用权限是所有用户,man命令提供为linux系统在线提供了很好的帮助手册…

    Linux干货 2016-05-03
  • 网络班N22期第五周博客作业

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@bogon ~]# cat /etc/passwd | grep -E "^(root|fedora|user1)\>" | cut -d:&nb…

    Linux干货 2016-09-15