2、iptables基本应用
iptables:规则管理工具
添加、修改、删除、显示等;
规则和链有计数器:
pkts: 由规则或链所匹配到的报文的个数;
bytes:由规则或链匹配到的所有报文大小之和;
iptables命令:
iptables [-t table] {-A|-D} chain rule-specification chain:链
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
-t table:filter, nat, mangle, raw
链管理:
-F:flush 清空规则链;省略链,表示清空指定表上的所有的链;
-N:new 创建新的自定义规则链;
-X:drop 删除用户自定义的空的规则链,如果有规则,先使用-F清空;
-Z:zero 清零,置零规则计数器;
-P:Policy 为指定链设置默认策略;对filter表中的链而言,默认策略通常有ACCEPT, DROP, REJECT;
-E: rEname 重命名自定义链;引用计数不为0的自定义链,无法改名,也无法删除;
链上的规则管理:
-A:append,将新规则追加于指定链的尾部;
-I:insert,将新规则插入至指定链的指定位置;
-D:delete,删除指定链上的指定规则;
有两种规则指定方式:
(1) 指定匹配条件;
(2) 指定规则编号;
-R:replace,替换指定链上的指定规则;
查看规则:
-L:list,列出指定链上的所有规则;
-n: numberic,以数字格式显示地址和端口号;
-v: verbose,显示详细信息;
-vv, -vvv,越多,显示越详细
--line-numbers:显示规则编号;
-x: exactly, 显示计数器计数结果的精确值;
示例
# iptables -t filter -N IN_PUBLIC //添加自定义规则连
# iptables -L -n //查看,默认是filter
Chain IN_PUBLIC (0 references) //此时的计数为空,没有引用,而且内部内有规则,可以修改名称
target prot opt source destination
# iptables -t filter -E IN_PUBLIC OUT_PUBLIC
Chain OUT_PUBLIC (0 references)
target prot opt source destination
# systemctl restart firewalld //如果重启firewalld的话,会自动生成很多规则
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLI
all:表示所有协议tcp、udp、icmp
ctstate:表示链接追踪状态,后面表示追踪的状态
RELATED:
ESTABLI target还可以是一个自定义链,自定义链放在内置链上,当报文被内置链检查时,一旦由自定义链所匹配,就由自定义链上的规则所检查
某个链被引用了,它不可以被删除;链不被引用,内部的规则是不会生效的
# systemctl restart firewalld
# iptables -L -n RETURN:返回调用者
匹配条件:
基本匹配:
[!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围; [!]:表示取反,可省
[!] -d, --dst, --destination IP|Netaddr:检查报文中源IP地址(目标地址转为源IP)是否符合此处指定的地址范围;
[!] -p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;
[!] -i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上;
[!] -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;
扩展匹配:-m macth_name --spec_options
例如:-m tcp --dport 22 检查tcp目标端口,如果已经使用-p指明协议,就不需要在使用-m指明了
隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项;
- -p tcp
- --dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口(必须是连续的);
- --sport PORT[-PORT]:匹配源端口
- --tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有LIST1中指明的,不作检查;
SYN, ACK, FIN, RST, PSH, URG
示例:--tcp-flags SYN,ACK,FIN,RST SYN //表示只检查SYN、ACK、FIN、RST这四个位,其他都不做检查,并且SYN必须为1,其他的都为0,
//因为这SYN在LIST2列表中,此示例表示第一次握手
--syn:相当于--tcp-flags SYN,ACK,FIN,RST SYN,两个功能相同
- -p udp
- --dport
- --sport
- -p icmp
--icmp-type //报文类型
可用数字表示其类型:
- 0:echo-reply 回显应答
- 8:echo-request 回显请求
显式扩展: 必须使用-m选项指定使用的扩展;
允许自己ping别的主机,不允许别的主机ping自己 //这里首先需要把INPUT/OUTPUT/FORWARD的默认规则改为DROP,但需要提前开放22号端口,否则无法使用ssh服务
# iptables -A OUTPUT -s 192.168.184.144 -p icmp --icmp-type 8 -j ACCEPT ping别的主机,先从本主机出去,目标地址不知道,ping请求是8
# iptables -A INPUT -d 192.168.184.144 -p icmp --icmp-type 0 -j ACCEPT ping别的主机,要接受ping后的报文,目标地址是本机,报文类型是回显应答 别的主机无法ping通,因为144只放行了响应报文,即从本机出去的报文
目标:
-j TARGET:jump至指定的TARGET
- ACCEPT: 接受
- DROP: 丢弃
- REJECT: 拒绝,有回应报文
- RETURN: 返回调用链
- REDIRECT:端口重定向
- LOG: 记录日志
- MARK:做防火墙标记
- DNAT:目标地址转换
- SNAT:源地址转换
- MASQUERADE:地址伪装
- ...
- 自定义链:由自定义链上的规则进行匹配检查;为什么要用自定义链:当链上的规则过多时,可以把功能相近的放在一个单独的链上,做单独管理;
示例
# iptables -t filter -A INPUT -s 0.0.0.0 -d 192.168.184.144 -p tcp -j ACCEPT //访问本机的属于TCP的报文,都放行,-s IP:表示全部主机,可省略
# iptables -t filter -A OUTPUT -s 192.168.184.144 -p tcp -j ACCEPT //TCP协议报文跟任何主机通信都允许出去 现在把filter表的所有规则改为drop,ssh链接还能保持?
# iptables -P INPUT DROP //一定要谨慎
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP 此时并没有断开,因为有之前定义的ACCEPT规则,这里只允许tcp协议的报文访问,如果icmp协议即ping命令的话,则报文无法进来,如果设置了INPUT能进来,也无法OUTPUT出去,所以报文要能进能出,当不希望某个IP访问服务器时,因该在INPUT上直接拒绝。
在测试iptables规则是,为了防止定义的DROP规则无法使ssh服务登录,可以利用&&
# iptables -t filter -A INPUT -d 192.168.184.144 -p tcp -j DROP //访问本机的报文且属于tcp协议的都拒绝,这是ssh服务就无法链接
# iptables -t filter -A INPUT -d 192.168.184.144 -p tcp -j DROP && sleep 5 && iptables -F
//拒绝后过5面直接清空iptables规则,执行后不会拒绝ssh服务
做报文流入接口限制,ping进来时限制流入,ping出去时限制流出
# iptables -A INPUT -d 192.168.184.144 -o eth0 -j ACCEPT //流入接口是不能做流出限制的
iptables v1.4.21: Can't use -o with INPUT
Try `iptables -h' or 'iptables --help' for more information.
# iptables -A INPUT -d 192.168.184.144 -i eth0 -j ACCEPT //如果有多块网卡,除了eth0允许报文流入,其他都是不被允许的
# iptables -A OUTPUT -s 192.168.184.144 -o eth0 -j ACCEPT //报文从eth0流出
如何只放行一个ssh端口,而非所有tcp端口(ssh端口属于tcp协议)?这里就是用到扩展匹配的隐式扩展
仅放行对本机ssh服务的访问。客户端端口是随机的,只能限定所放行的目标端口
# iptables -I INPUT -d 192.168.184.144 -p tcp --dport 22 -j ACCEPT //仅放行对本机访问的22端口,这里仅放行了入栈
# iptables -I OUTPUT -s 192.168.184.144 -p tcp --sport 22 -j ACCEPT //这里是服务器响应报文请求的内容,所以也用22号端口进行响应 此时访问没有问题 如果想让web服务访问,只需要开启80端口
# iptables -I INPUT -d 192.168.184.144 -p tcp --dport 80 -j ACCEPT //所有访问144主机且的端口是80的报文
# iptables -I OUTPUT -s 192.168.184.144 -p tcp --sport 80 -j ACCEPT //所有从144主机发出且是从80端口发出的 此时浏览器就可以访问80端口了
2、iptables基本应用的更多相关文章
- iptables
一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- Failed to stop iptables.service: Unit iptables.service not loaded.
redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...
- CentOS7安装iptables防火墙
CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...
- linux iptables常用命令之配置生产环境iptables及优化
在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...
- CentOS系统配置 iptables防火墙
阿里云CentOS系统配置iptables防火墙 虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...
- /etc/sysconfig/下找不到iptables文件解决方法
时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...
- docker通过iptables修改或新增镜像映射端口
443 8088 22 端口是初始映射端口 [root@SERVER ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...
- lnmp 预设iptables设置
「LNMP」iptables初始配置 首先使用命令iptables -P INPUT ACCEPT允许所有连接,否则容易把自己关在外边.然后使用iptables -F;iptables -X;ip ...
- 关闭SELinux和iptables防火墙
1.关闭SELinux: 编辑SELinux配置文件: [root@Redis selinux]# vim /etc/selinux/config 修改SELINUX配置项为disable SELIN ...
随机推荐
- Vuejs vm对象详解
Vuejs vm对象详解 vue数据是怎么驱动视图的?一堆数据放在那里是不会有任何作用的,它必须通过我们的View Model(视图模型)才能操控视图. 图中的model其实就是数据,一般我们写成js ...
- System.getSecurityManager()
https://www.cnblogs.com/yiwangzhibujian/p/6207212.html java安全管理器SecurityManager入门 一.文章的目的 这是一篇对Jav ...
- postgresql查询语句
//查询表名称SELECT tablename FROM pg_tablesWHERE tablename NOT LIKE 'pg%'AND tablename NOT LIKE 'sql_%' O ...
- python之字符串函数
1. endswith() startswith() # 以什么什么结尾 # 以什么什么开始 test = "alex" v = test.endswith('ex') v = ...
- win10系统jdk安装和环境变量配置
新换电脑的原因,要重新安装jdk,完整记录一下安装过程 jdk版本用的1.7(公司默认版本) 这是jdk安装目录 更改为D:\jdk\java\jdk1.7 安装jre目录 更改为D:\jdk\ ...
- 关于Eclipse新建Dynamic Web Projecj默认未创建web.xml的问题
当使用eclipse新建Dynamic Web Projecj时,由于J2EE技术规范的更新,当使用Dynamic web module version默认版本为3.0时,将默认不会创建web.xml ...
- springmvc的ajax返回406问题
在springmvc中ajax请求写为XXX.html,如果在controller的如:@RequestMapping(value="/login/doLogin.html",pr ...
- JavaWeb创建的文件夹默认在tomcat/bin中
系统项目中需要设置缓存目录,原本项目中的目录设置为D:/cache目录,这怎么成?于是手动改成了cache目录,原本想使用了相对路径,web项目能够把缓存路径设置到tomcat的webapp的具体项目 ...
- Forword(请求转发)与Redirect(重定向) 区别
1.从数据共享上 Forword是一个请求的延续,可以共享request的数据 Redirect开启一个新的请求,不可以共享request的数据 2.从地址栏 Forword转发地址栏不发生变化 Re ...
- Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定
Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...