参考: http://blog.51yip.com/linux/1404.html

链和表



参考: https://aliang.org/Linux/iptables.html

配置

作为服务器

用途 链/表
过滤到本机的流量: input链 filter表
过滤到本地发出的流量: output链 filter表

作为路由器

用途 链/表
过滤转发的流量: forward链 filter表
过滤转发的数据的源/目标进行修改(NAT) pre-outing, post-routing

常见选项

iptables
-L --list
-t filter/nat
-n, --numeric
Numeric output. IP addresses and port numbers will be printed in numeric format.
-F, --flush-chain
-X, --delete-chain
-p, --protocol protocol
tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.93.0/24 -j SNAT --to-source 10.0.0.1 iptables -t filter -L
iptables -t nat -L -n sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
iptables -P FORWARD ACCEPT iptables -t nat -L -n --line-number iptables save #保存cli规则
iptables -F #清除所有iptables规则 iptables -F -t mat # 清空nat表 参考:
http://quenywell.com/10-usefull-iptables-rules-examples/
清除IPTables规则
允许SSH入站连接
设置IPTables默认策略
只允许从特定网段访问SSH服务器
允许访问Loopback
允许外网Ping服务器
允许HTTP和HTTPS入站连接
允许使用邮件服务
允许使用外网DNS解析
同一条规则设置多个端口 默认是accept:
一般情况下,INPUT、OUTPUT、FORWARD链的默认策略都是ACCEPT。如果想更改默认策略为DROP,可以用以下命令(注意大小写): #iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP

增删改查iptables

- 列出规则
iptables -L - 插入一个规则
iptables -I INPUT 3 -p tcp -dport 22 -j ACCEPT - 删除一个规则
iptables -D INPUT 3
iptables -D INPUT -s 192.168.1.2 -j DROP - 删除所有规则
iptables -F -s ‘!’ 192.168.1.x/24 加上!排除地址

匹配参数

- 基于ip地址
-s 192.168.1.1
-d 10.0.0.0/8 - 基于接口
-i eth0
-o eth1 -排除参数
-s '!'192.168.1.0/24

input output

控制到本机的网络流量

iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP
iptables -A INPUT -i eth0 -j ACCEPT 注意大小i,小i是指定接口。-I -D -A

forward

- 禁止192.168.1.0/24到10.1.1.0/24的流量
iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -j DROP iptables save # 报错cli规则
iptables -F #清除所有iptables规则

源地址转换

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 218.29.30.31

不加-t时默认是filter
语法参数:
-I:第一行插入
-A:最后追加
-i/o:指的是数据要进入或出去所要经过的端口,如eth1,eth0,pppoe等
-p:你所要指定的协议
-s:指定来源ip,可以是单个ip如192.168.109.131,也可以是一个网络 192.168.109.0/24,还可以是一个域名如163.com,如果你填写的是域名系统会自动解析出他的ip并在iptables里显示
--sport:来源端口
-d:指定目标ip
--dport:目标端口
-j:执行参数ACCEPT或DROP,REJECT一般不用
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help) 如果配置的是INPUT(进入),则来源ip是运程ip,目标端口就是本机;OUTPUT相反 iptables的执行优先级:
iptables的执行顺序是自上而下,当有配置产生冲突时,前面执行的生效。

INPUT OUTPUT FORWARD区分

参考:https://unix.stackexchange.com/questions/96548/what-is-the-difference-between-output-and-forward-chains-in-iptables

INPUT: dst IP is on the host, even it has multiple port with multiple subnet

OUTPUT: src IP is from the host, either port

FORWARD: Neither dst IP on the host nor src IP from the host

For example, to router A

INPUT is:
192.168.10.1 -> 192.168.10.199
192.168.10.1 -> 192.168.2.1 OUTPUT is:
192.168.10.199 -> x.x.x.x
192.168.2.1 -> x.x.x.x FORWARD is: 192.168.10.1 -> 192.168.2.199
192.168.10.1 -> 192.168.8.1
192.168.10.1 -> 192.168.8.199

常见配置

参考: http://blog.51cto.com/lustlost/943110

#开启22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#关闭所有端口
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#开启80端口,HTTP服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
#开启3306端口,MYSQL服务
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
#开启53端口,DNS服务
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
#开启20,21端口,FTP服务
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
#由于FTP在上传下载中会使用到任意的端口,故先设置FTP使用的端口,再打开端口
vi /etc/vsftpd.conf
#在配置文件的最下面 加入
pasv_min_port=30001
pasv_max_port=31000
iptables -A INPUT -p tcp --dport 30001:31000 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT
#打开PING
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
#替换安全的22,80输出端口
iptables -R OUTPUT 1 -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -R OUTPUT 2 -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
#保存IPTABLES设置
service iptables save
#查看是否保存成功
cat /etc/sysconfig/iptables #出现以下内容代表设置成功:
# Generated by iptables-save v1.3.5 on Thu Sep 8 19:41:30 2011
*filter
:INPUT DROP [103:6135]
:FORWARD DROP [0:0]
:OUTPUT DROP [12:964]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 30001:31000 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 3306 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 21 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 30001:31000 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
COMMIT
# Completed on Thu Sep 8 19:41:30 2011 #另外,按编号查看规则使用以下命令
iptables -L -n --line-number

[svc]linux iptables实战的更多相关文章

  1. [svc]linux正则实战(grep/sed/awk)

    企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...

  2. Linux iptables:场景实战一

    <Linux iptables:规则原理和基础>和<Linux iptables:规则组成>介绍了iptables的基础及iptables规则的组成,本篇通过实际操作进行ipt ...

  3. Linux.NET实战手记—自己动手改泥鳅(上)

    各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...

  4. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  5. Linux iptables原理--数据包流向

    Iptable与Netfilter 在上一篇文章 linux iptables常用命令--配置一个生产环境的iptables 我们知道iptables有好几个表,如raw,mangle,nat,fil ...

  6. Linux系统实战项目——sudo日志审计

    Linux系统实战项目——sudo日志审计   由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...

  7. Linux iptables

    一.简介 http://liaoph.com/iptables/ 二.操作 1)查看规则 iptables -t filter -L -n iptables -t nat -L -n iptables ...

  8. Linux iptables 应用控制访问SSH服务

    Title:Linux iptables 应用控制访问SSH服务  --2012-02-23 17:51 今天用到了以前从来没有用到过的,iptables控制访问,只允许外部访问SSH服务(22号端口 ...

  9. Linux iptables 配置规则

    Linux iptables 防火墙配置规则 前言:把网上我感觉不错iptables的访问规则都统一在这里,以后做参考. modprobe ipt_MASQUERADE modprobe ip_con ...

随机推荐

  1. 【Java】 剑指offer(50-2) 字符流中第一个只出现一次的字符

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字 ...

  2. Mac电脑如何设置DHCP

    通过设置MAC电脑的DHCP服务器可以为局域网内的其它设备自动分配IP地址,还能把物理地址和IP地址绑定起来,限制IP地址的获取.   OS X 10.11或以上版本已内置DHCP服务器软件,即boo ...

  3. POJ 2446 Chessboard【二分图最大匹配】

    <题目链接> 题目大意: 给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次.问你除了洞口之外这个棋盘是否能被纸片填满. 解题分析: ...

  4. BZOJ.3667.Rabin-Miller算法(MillerRabin PollardRho)

    题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 #include<cstdio> #incl ...

  5. 使用TVTK库创建一个矩形视图

    from tvtk.api import tvtk # s=tvtk.ConeSource(height=,radius=) # print(s.center) #创建一个长方体数据源,并同时设置长宽 ...

  6. node+koa2获取请求参数

    1.get方式: http://localhost:3000/?user=000001&body=0002&age=26 const router = require('koa-rou ...

  7. android View的点击无效的原因

    点击事件不生效,原来是因为我在里面的 ImageView中添加了 android:clickable="true". 解决办法:删掉ImageView中的android:click ...

  8. mybatis批量插入数据

    Mybatis在执行批量插入时,如果使用的是for循环逐一插入,那么可以正确返回主键id.如果使用动态sql的foreach循环,那么返回的主键id列表,可能为null,这让很多人感到困惑:本文将分析 ...

  9. php传值和传引用的区别

    php传值和传引用的区别所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy:系统将为目标对象重新开辟一个完全相同的内存空间.所谓传引用,就是说将对象在内存中的地址传递给目标对象,就相当于使 ...

  10. C++泛型编程(2)--通过排序和查找元素理解迭代器

    许多C++开源库(stl,opencv,ros和blas等)都使用了大量的泛型编程的思想,如果不理解这些思想,将很难看懂代码,而<泛型编程与STL>一书对理解泛型编程思想非常的有帮助,这里 ...