先来一句:好记性不如烂笔头!

1、iptables简介

iptables是基于包过滤的防火墙,它主要工作在osi模型的2,,4层,也可以工作在7层(iptables + squid)

2、原理

防火墙是一层一层过滤的。按照配置的规则的顺序从上到下,从前到后。
如果匹配上规则既明确表明是阻止还是通过,此时数据包就不再向下匹配新规则了。
如果所有规则都没有匹配上,就会一直向下匹配,直到匹配上默认规则得到明确的阻止还是通过

注释:规则表的先后顺序:raw→mangle→nat→filter

3、表和链

iptables有4张表filter nat mangle raw ,常用的是filter表和nat表

表(tables

链(chains

INPUT

OUTPUT

FORWARD

PREROUTING

POSTROUTING

Filter*

Nat*

Mangle

注:filter三个链,真正的防火墙功能;Nat三个链表 input和后边两个 负责数据包改写、端口映射

INPUT: 对进入主机的数据包进行过滤。
OUTPUT: 对流出的数据包进行过滤。
FORWARD: 对流经的数据包进行过滤。转发数据包的功能。
PREROUTING: 在数据包到达防火墙时,进行路由判断之前执行的规则。改变数据包的目的地址和端口等,映射端口或者是ip。
POSTROUTING: 在数据包离开防火墙时,进行路由判断之前的规则。改变数据包的源地址和源端口。局域网共享上网。

规则链的先后顺序

入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING

4、iptables的安装

Centos7开始已经没有iptables了,默认使用的是Firewalld

  4.1、关闭firewalld

systemctl status firewalld.service #检测是否开启了firewall
systemctl stop firewalld.service #关闭firewall
sytsemctl disable firewalld.service #禁止firewall开机自启

  4.2、安装iptables

yum install iptables-services -y
systemctl start iptables.service
systemctl enable iptables.service service iptables save #所有新加的规则要先保存后再重启,要不会丢配置

iptables-save

5、常用命令

   5.1、清空已有的规则

iptables -F  清除用户自定义的规则
iptables -X 清除用户自定义的链
iptables -Z 清除链的计数器

  5.2、查看所有的规则

iptables -nL

  5.3、查看版本

iptables -V

5.4 基本操作

CentOS 配置防火墙操作实例(启、停、开、闭端口):
查询防火墙状态    :   service   iptables status
停止防火墙   :    service   iptables stop
启动防火墙   :   service   iptables start
重启防火墙   :    service   iptables restart
永久关闭防火墙    :   chkconfig   iptables off
永久关闭后启用    :   chkconfig   iptables on

6、filter配置示例

  6.1、删除指定规则

[root@redis3 ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
DROP tcp -- 0.0.0.0/ 0.0.0.0/ tcp dpt: [root@redis3 ~]# iptables -D INPUT

注释:最好选ACCEPT和DROP 因为拒绝会给客户信息   -t filter 一般不添加,默认就是filter

  6.1、开放一个端口

iptables -A INPUT -p tcp -m tcp --dport  -j ACCEPT

  6.2、允许某个IP或段链接本机

iptables -A INPUT -s 10.100.0.158/ -p tcp -j ACCEPT
iptables -A INPUT -s 10.100.0.158/32 -p all -j ACCEPT(内网适合)

  6.3、允许某个IP连接某个端口

iptables -A INPUT -s 10.88.89.11/ -p tcp -m tcp --dport  -j ACCEPT

  6.4、插入一个规则

iptables -I INPUT  -p tcp --dport  -j DROP    # 在序号1后插入一条规则

  6.5、匹配端口范围

iptables -I INPUT -p tcp -m multiport --dport ,, -j ACCEPT
iptables -I INPUT -p tcp --dport : -j DROP

  6.6、取反

除网络是192.168.0./24的网络外 都允许访问。
[root@test ~]# iptables -t filter -I INPUT ! -s 192.168.0.0/ -j ACCEPT
只要主机不是10.0.0.1的都允许访问80端口
[root@test ~]# iptables -A INPUT ! -s 10.0.0.1 -p tcp --dport -j ACCEPT iptables -t filter -A INPUT -i etho ! -s 10.0.0.200 -j DROP

  6.7、匹配网络状态(不是必须的)

-m state --state

NEW: 已经或将启动的新连接

ESTBILISHED: 已建立的连接

RELATED: 正在启动的新连接

INVALID: 非法或无法识别的连接

# 允许关联的包(一般的包不需要,ftp比较特殊)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  6.8、允许ICMP类型协议通过

iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

ipttables -A INPUT -p icmp -s 10.0.0./24 -m icmp --icmp-type any -j ACCEPT

  6.9、封外部IP

iptables -I INPUT -S 10.0.0.200 -j DROP

iptables -I INPUT -p tcp -s 10.0.0.200 --dport -j DROP (细化拒绝) 

  6.10、一个防DDOS工具脚本(来自于老男孩)

#!/bin/bash
# name wangfei
# qq
# mail wangfei1000@yeah.net
# version 2.1 function CelIp(){
CleTime=""
NowTime=`date +%H%M`
YDenyIpFile="/tmp/deny_ip_`date +%F -d "-1days"`.log"
if [ "$CleTime" == "$NowTime" ] ;then
if [ -f "$YDenyIpFile" ];then
while read line
do
iptables -D INPUT -s $line -j DROP
done<$YDenyIpFile
mv $YDenyIpFile $YDenyIpFile.bak
sleep
fi
fi
} function DenyIp(){
IpList=($(awk -F "[ :/]+" '{ip[$3]=ip[$3]+1}END{for(k in ip) print k,ip[k]}' access.log_06|awk '$2>30{print $1}'))
for ip in ${IpList[@]}
do
if [ `iptables -nL|grep $ip|wc -l` -lt ];then
echo $ip>>/tmp/deny_ip_$(date +%F).log
iptables -I INPUT -s $ip -j DROP && echo "deny $ip success."
fi
done
} while :
do
CelIp
DenyIp
sleep
done

7、net配置示例

一定要在安装防火墙模块后重启iptables后再配置

modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

1、代理服务器设置

# 需要开启linux内核转发
[root@test ~]# sed -i 's@net.ipv4.ip_forward =.*@net.ipv4.ip_forward =1@g' /etc/sysctl.conf
[root@test ~]# sysctl -p
[root@test ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/ -o eth1 -j SNAT --to-source 10.0.0.55 #要代理的网段 指定外网IP地址
如果是映射到多个ip上,可这样
iptables -t nat -I POSTROUTING -s 172.16.1.0/ -j SNAT --to-source 10.0.0.99-10.0.0.155 # 适用于外网ip不固定的情况(ADSL)
[root@test ~]# iptables -t nat -A POSTROUTING -s 172.16.1.0/ -j MASQUERADE
多外网IP地址或没有固定的外网IP地址的时候可以自动选择合适的外网网卡使用
注意:
不仅需要nat设置,还需要将iptables的Forward设置为 ACCEPT

2、客户端

内网客户端需要将网关指向代理服务器的内网IP 

1、映射端口或IP

注意:
1、 代理端需要打开系统内核转发。
2、 客户端的内网网关需要指向代理服务器的内网IP。
3、 客户端如果是测试环境需要关闭外网网卡。
iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport  -j DNAT --to-destination 172.16.1.52:

实现外部10.0.0. 对映射到172.16.1.5上,如下操作即可。
iptables -t nat -A PREROUTING -d 10.0.0.99 -j DNAT --to-destination 172.16.1.5
iptables -t nat -A POSTROUTING -s 172.16.1.5 -j SNAT --to-source 10.0.0.99

写的很好的博客: https://blog.csdn.net/chengxuyuanyonghu/article/details/64441374

           https://www.cnblogs.com/alwu007/p/6693822.html

iptables简单规则记录的更多相关文章

  1. [转] Linux下防火墙iptables用法规则详及其防火墙配置

    from: http://www.cnblogs.com/yi-meng/p/3213925.html 备注: 排版还不错,建议看以上的链接. iptables规则 规则--顾名思义就是规矩和原则,和 ...

  2. Iptables防火墙规则使用梳理

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

  3. Iptables防火墙规则使用

    iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...

  4. Linux iptables:规则组成

    <Linux iptables:规则原理和基础>介绍了iptables的四表五链,简单说就是不同的网络层数据包会经过哪几个挂载点,在每个挂载点可以在哪张表进行规则定义. 本篇沿着这个思路, ...

  5. Linux iptables:规则原理和基础

    什么是iptables? iptables是Linux下功能强大的应用层防火墙工具,但了解其规则原理和基础后,配置起来也非常简单. 什么是Netfilter? 说到iptables必然提到Netfil ...

  6. Linux下防火墙iptables用法规则详及其防火墙配置

    转:http://www.linuxidc.com/Linux/2012-08/67952.htm iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国法,家有家规 ...

  7. iptables中规则的关系——以只允许某些IP段访问为例

    最近遇到一个问题:服务器被全球的IP频繁试图通过ssh登录. 于是想到通过iptables防火墙限制访问,达到:仅允许指定ip段访问ssh服务(22端口). 关于iptables添加规则的文章有很多, ...

  8. iptables简单配置

    iptables简单配置 分类: Linux 安全2010-10-20 16:56 4241人阅读 评论(0) 收藏 举报 input防火墙tcpfilterubuntuservice # iptab ...

  9. iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    iptables常用规则:屏蔽IP地址.禁用ping.协议设置.NAT与转发.负载平衡.自定义链 时间 -- :: IT社区推荐资讯 原文 http://itindex.net/detail/4772 ...

随机推荐

  1. lucene源码分析(6)Query分析

    查询的入口 /** Lower-level search API. * * <p>{@link LeafCollector#collect(int)} is called for ever ...

  2. funny alphabet

    1.A Boy Can Do Everything For Girl 2. He Is Just Kidding 3. Love Must Need Our Patience

  3. layui框架使用总结

    最近一个后台系统使用layui框架做的,遇到好多坑在这里总结一下. 1.layui的基本使用,下面的在他下面写,其他的事件也要在这个里面写     行内onclick事件是监听不到写在下面这种代码中的 ...

  4. vuex数据管理-数据适配

    由于接口在上线前,不可避免的会出现变动,小则属性名变,大则结构变化.如果处理不当,结构变化时,视图的代码也需要做相应的更改,然后就是容错方法的变动,接着重新自测等,这样,变化成本随着结构的复杂度大大加 ...

  5. Redis高可用升级

    前言: 缓存对应实时性要求比较高的业务需求可谓十分重要,但缓存中的实时数据一旦丢失,将直接影响整个业务功能.考虑到各场景的业务需求,redis推出了高可用的方案,即:主从+哨兵的HA机制. 准备 &q ...

  6. rpm包的rpmbuild spec文件详解

    http://machael.blog.51cto.com/829462/213477 上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包.最后部分还看到.src.rp ...

  7. [javaSE] 类型转换(1加1等于几)

    打印 ‘a’+1,输出98,解释:’a’是char类型占2个8bit,1是int类型占4个,’a’字符会被自动强制转换为int类型对应ascii码表97 打印’1’+1,输出 50,解释:’1’是ch ...

  8. iOS字体打印

    //打印所以字体    NSArray *familyNames = [UIFont familyNames];    for(NSString *familyName in familyNames) ...

  9. execl中设置的格式无法实现

    在一次项目中,需要导出execl表,并且要给表中的表格设置格式,因为每列的格式都不一样,需要单独设置设置这些格式,在后期使用中因为导入的数据过多,是的后面的单元格中设置的格式无法实现. 每次打开exe ...

  10. apicloud api.openwin

    简单介绍api.openWin: 打开window 若window已存在,则会把该window显示到最前面,同时若url有变化或者reload参数为true时,页面会重新加载.若当前正在进行openW ...