重庆小潘seo博客

当前位置:首页 > 重庆网站建设 >

重庆网站建设

Linux中iptables基础命令

时间:2016-08-15 08:18:16 作者:采集侠 来源:网络整理
防火墙(Firewalld)是一种隔离工具,防范与非授权的访问,使主机更安全。它主要工作与网络或主机的边缘,对于进出本网络或主机的通信报文根据事先定义好的规则进行匹配检测;对于能够被规则所匹配到的报文做出相应的处理。 防火墙的分类: 主机防火墙:工

查看连接追踪功能所能够容纳的最大连接数量:
--to-ports port[-port]:映射到某个端口上
## 此命令是把80的端口映射在8080上,虽然访问的是80,但正真提供服务的是8080

注意:添加规则时的考量点;


使用场景:让本地网络中的吴福气使用统一的地址想外提供服务,但隐藏了自己的真实地址
[root@linuxidc ~]# iptables -A INPUT -d 0/0 -s 10.0.1.2 -p tcp --sport 80 -j ACCEPT

请求:有外网主机发情,修改其目标地址,由管理员定义

CentOS 7.0关闭默认防火墙启用iptables防火墙 

[root@linuxidc ~]iptables -t nat -A POSTROUTING -s 0/0 -d 172.18.42.201 -j MASQUERADE

网络防火墙:工作范围是整个网络;网络防火墙中还可以包含主机防火墙
4表:filter、mangle、nat、raw
此时: syn必须为1

[root@linuxidc ~]#vim /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait
-E:重命名于未被引用的自定义链(引用计数为0,即references为0)

查看某表上的规则:
基本匹配:netfilter自带的匹配机制
由本机转发报文:报文流入-->prerouting-->forward-->postrouting-->postrouting
[root@linuxidc ~]# iptables -A INPUT -s 0/0 -d 10.0.1.2 -p tcp --dport 80 --tcp-flags SYN,ACK,FIN,RST SYN  -j ACCEPT
[!] --state state

(6)limit扩展:基于收发报文的速率做匹配;
缺点:如果连接模板超载,当有一个新的请求时,web网页会显示连接超时;同时conntrack所能够连接数量的最大值取决于/proc/sysnet/nf_conntrack_max的设定;已经追踪到的记录并记录在/prco/net/nf_conntrack文件中,但当模板满载时,后续的新连接可能会被超时,而连接超时的时长将会被删除;解决的办法有两个
[!] --dst-range from[-to]:目标IP地址;
INVALID:无法识别的连接(一般不会放行)
[root@linuxidc ~]#/sbin/sysctl -p      ##修改之后立即生效

type/code:

iptables [-t table] -R chain rulenum rule-specification
--limit-burst number
--timestart hh:mm[:ss]:起始时间
[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;

处理动作:基本处理动作、扩展处理动作、自定义处理动作
iptables [-t table] -D chain rulenum

扩展匹配:经由扩展模块引入的匹配机制;-m  matchname
iptables [-t table] -I chain [rulenum] rule-specification
(4)不同类的规则,匹配范围大的放在前面
--log-prefix  prefix:说明报文的日志信息是由谁产生的

iptables [-t table] -P chain target

(7)state扩展(conntrack的子集):用于对报文的根据”连接追踪机制“去检查连接的状态(但是对服务的连接数量会有很大的影响)
RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
主动:

raw:在限定的时间范围内,关闭在nat表上的启用的连接追踪机制;对应的链为:output、prerouting
-X:删除一条自定义链(删除时要确保链下没有规则)
[!] --tcp-flags  mask comp:检查报文中mask指明的tcp标志位,而要这些标志位comp必须为1
(5)connlimit扩展:根据每客户端IP做并发连接数数量匹配;即每客户端最大可同时发起的连接数量
[root@linuxidc ~]#iptables -A INPUT  -d 172.18.42.200 -p tcp -dport 80 -m iprange --src-range 172.18.42.1-172.18.42.100 -j ACCEPT
[!] -p{tcp|udp|icmp}:限制协议;指明用哪一种协议


kmp:Knuth-Pratt-Morris
软件防火墙:iptables

[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
当源地址为动态获取的地址时,MASQUERADE会自动判断要转换为的地址
[!] --destination-port,--dport  port [:port]:匹配报文中的tcp首部的目标端口;可以是端口范围

udp:

[root@linuxidc ~]#iptables -A INPUT  -m state --state ESTABLISHED -j ACCEPT

(1)multiport扩展:以离散方式定义多端口匹配;最多指定15个端口;
(2)REDIRECT:端口重定向(之后在报文流入本机前才有用:prerouting)

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

mangle:主要功能是拆解报文、做出修改、重新封装;对应的链为:prerouting、input、output、forward、postrouting
[root@linuxidc ~]#iptables  -A  OUTPUT -s  172.18.42.200  -d 172.18.0.0/16  -p  tcp  -j  ACCEPT

[!] --src-range from[-to]:源IP地址;
-N:新增一条自定义链
匹配条件:基本匹配、扩展匹配
--algo {bm|kmp}:字符串匹配检测算法;
[root@linuxidc  ~]#iptables -A OUTPUT -s 172.18.42.200 -p tcp --sport 21 -m state --state NEW -j ACCEPT

iptables的相关命令: 

[root@linuxidc ~]#iptables -A INPUT -s 0/0 -d 172.18.42.200 -p tcp -dport 80 -m limit --limit 20/second --limit-burst 5 -j ACCEPT

连接模板:占用内存空间中的一段空间(内核空间)

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

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

修改IP报文中的源IP地址
隐式扩展:           

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间
[root@linuxidc ~]#iptables  -A OUTPUT -s 172.18.42.200 -d 0/0 -p tcp -m multiport --sports 80,22 -A ACCEPT

--to-destination  [ipaddr[-ipaddr]] [:port[-port]]
(6)设置默认策略

(2)报文流经的位置;判断添加至那个链上
实现对链管理:管理一整条链
##真正提供服务的是172.18.42.202的8080端口

(1)LOG:匹配报文中的日志功能
修改IP报文中的目标IP

实现对规则管理:管理链上的某条规则
[!]--monthdays day[,day...]:匹配1-12月中的某些天


-D:删除某条规则

iptables的规则:根据规则匹配条件尝试匹配检查报文,对成功匹配的报文做出相应的处理
[root@linuxidc  ~]#modprobe nf_conntrack_ftp  ##内核加载nf_conntarck_ftp模块
-v:显示详细信息
[root@linuxidc ~]# vim /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait

-F:清空所有的规则
注意:报文是由本机处理,但是是否转发是由路由来决定的;在报文流入本机之后,路由1会判断报文的目标地址是否为本机,如果是,则流入input;如果不是,则流入forwrad,在报文离开本机之前路由2会判断报文经由那个接口送往下一个网关(下一跳),同时在转发之前,要确保转发功能是开启的;1表示开启,0表示关闭:
[root@linuxidc ~]# vim /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait
0/8:表示请求
-n:以数字格式显示地址个端口

更多iptables相关教程见以下内容

主机防火墙:工作范围是单个主机

[!] --hex-string pattern:要检测的字符串模式(16进制格式);
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间

tcp:隐含指明了“-m  tcp",有专用选项:
nat:主要功能是网络地址转换;对应的链为:prerouting、postrouting、output
[!] -i, --in-interface name:限制报文流入的接口(只能用于prerouting、input、forward这三个链)
[root@linuxidc ~]iptables -A FORWARD -s 0/0 -d172.18.42.200 -p tcp -m multiport --dports 80,21,23,22 -m state -state NEW -j LOG --log-prefix "(linuxidc's log)"

[root@linuxidc ~]iptables -t nat -A POSTROUTING -s 172.18.42.200 -d 172.18.42.201 -p tcp --dport 80 -j SNAT --to-source 172.18.42.202
[root@linuxidc ~]#iptables  -A INPUT  -s 0/0 -d 172.18.42.200 -p tcp -m multiport --dports 80,22 -j ACCEPT

保存编写好的规则并开机启动
[!] -d, --destination address[/mask][,...]:目标地址匹配
[!] --string pattern:要检测的字符串模式;
[root@linuxidc ~]#iptables  -A INPUT  -s 0/0 -d 172.18.42.200 -p icmp --icmp-type 8 -j ACCEPT


[root@linuxidc ~]#iptables  -A OUTPUT -s 172.18.42.200 -d 0/0 -p icmp --icmp-type 0 -j ACCEPT

例如:--tcp-flags  syn,fin,ack,rst  syn
##请求80端口的是172.18.42.202主机,但正在请求的却是172.18.42.200主机

[root@linuxidc ~]iptables -t nat -A PREROUTING -d 172.18.42.200 -p tcp 80 -j REDIRECT --to-ports 172.18.42.201:8080
组成部分:匹配条件、处理动作


filter:主要功能是过滤;对应的链为:input、output、forward
[!] -s, --source address[/mask][,...]:原地址匹配(!s是取反)
(5)将那些可由一条规则描述的多个规则合并为一个
[root@linuxidc ~]#iptables  -A  INPUT  -s  172.18.0.0/18  -d 172.18.42.200  -p  tcp  -j  ACCEPT
响应:修改目标IP,由nat自动根据会话表中追踪机制实现相应的修改


rule-specification = [matches...] [ -j target]

[root@linuxidc ~]#service  iptables  restart  ##会自动从系统默认的保存路径中重载规则

[root@linuxidc ~]iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
硬件防火墙:NetScreen、CheckPoint
--kerneltz:使用内核上的时区,而非默认的UTC;
[!] --icmp-type  {type[/code][typename]
使用场景:本地网络中的主机可使用统一地址与外部主机通信,从而实现地址伪装
-x:显示计数器的精确值

匹配条件:
[root@linuxidc  ~]#iptables  -A OUTPUT  -s 172.18.42.200 -d 0/0 -p tcp -sport 80 -m state --state NEW -j ACCEPT

(1)加大nf_conntrack_max的值
--limit rate[/second|/minute|/hour|/day]
隐式扩展:无需指明,可以不适用-m选项专门加载响应模块;前提要使用-p选项可匹配何种协议


同一链上的不同表的应用优先级:raw、mangle、nat、filter

--log-level  level:(emerg, alert, crit, error, warning, notice,info or debug.)

echo  Num  >  /proc/sys/net/nf_conntrack_max
(4)DNAT(远程主机请求本地服务器):目标地址转换;发生在prerouting

Linux中iptables基础命令

[root@linuxidc ~]#chkconfig  iptables on  ##设置为当前规则可开机启动