TCP/IP基本概念:

TCP/IP将网络分为四层:应用层,传输层,网络层,链路层。

传输层:定义了两种通信协议,分别为TCP协议和UDP协议。
TCP协议:TCP协议在传输 数据过程中会检查数据的完整性,因此传输的数据是不会丢失的。
UDP协议:当选择UDP协议作为数据传输方法时,其目的通常在于满足效率方面的要求,而非数据正确性方面的要求。

防火墙的分类:数据包过滤防火墙&应用层防火墙

NETfilter的四个表:

filter:filter是NETfilter中最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用

nat:比较通俗的 方式说,其功能就是IP分享器,只不过其所能执行的 功能,比一般市场上的IP分享器功能强大得多

mangle:可以通过mangle机制来修改经过防火墙内数据包的内容

raw:负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能

	iptables中所有链的默认规则有DROP和ACCEPT两个值,默认的值为ACCEPT.

	1.修改FORWARD链的默认策略设置为DROP:
#iptables -t filter -p FORWARD DROP #-t指定所要操作的表,如果没有指定,则默认的表为filter. iptables的-F参数不会影响到默认的策略状态,要改变默认策略的状态,一定要使用-P的参数来设置。 2.将规则添加到filter表的INPUT链:
#iptables -t filter -A INPUT -p icmp -j ACCEPT 3.在INPUT链中插入新的规则:
#iptables -t filter -I INPUT 2 -p tcp -j ACCEPT #插入到第二条规则的位置,iptables规则的优先级别为:由上而下. 4.取代INPUT链内已经存在的规则:
#iptables -t filter -R INPUT -p tcp -j ACCEPT 5.删除INPUT链中已经存在的规则:
#iptables -t filter -D INPUT 2 #删除原来的第二条规则 iptables规则语法:
基本语法:iptables -t filter -A INPUT -p icmp -j DROP
高级语法:iptables -t filter -A INPUT -m mac --mac-source 00:E0:18:00:7C:A4 -j DROP 1.将192.168.0.83进入本机的icmp协议包都丢弃
#iptables -t filter -A INPUT -p icmp -s 192.168.0.83 -j DROP 2.不允许192.168.0.83主机通过本机的DNS服务来执行名称解析
#iptables -A INPUT -p udp -s 192.168.0.83 --dport 53 -j REJECT 3.允许192.168.0.83主机连接到本机的TELNET服务
#iptables -A INPUT -p tcp -s 192.168.0.83 --dport 23 -j ACCEPT 4.允许192.168.1.0/24网段的主机向本机192.168.0.1提出任何服务请求
#iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPTT 5.只允许客户端主机从eth1这个接口访问本机的SSH服务
#iptables -A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT 6.不允许本机的应用程序从eth0接口发送数据包去访问edu.uuu.com.tw以外的网站
#iptables -A OUTPUT -o eth0 -p tcp -d !edu.uuu.com.tw --dport 80 -j REJECT 7.不允许本企业内部的主机访问企业以外的任何网站
#iptables -A FORWARD -i eht1 -o eth0 -p tcp --dport 80 -j DROP

简单的单机防火墙:

1.网络上的任何主机都能正常访问192.168.0.1主机上的SSH和TENNET服务

2.网络上只有192.168.0.200这台主机可正常访问192.168.0.1上的所有服务

iptables -P INPUT DROP

iptables -A INPUT -p tcp -d 192.168.0.1 --dport 22 -j ACCEPT

iptables -A INPUT -p tcp -d 192.168.0.1 --dport 23 -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.0.200 -d 192.168.0.1 --dport 80 -j ACCEPT

解决应用程序无法从防火墙主机上对外建立新连接的问题:

iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

本规则使用state模块--ESTABLISHED、NEW、RELATED、INVALID

iptables -A INPUT -p all -m state --state INVALID -j DROP

管理防火墙规则数据库的方法:

1.在修改完netfilter的会泽之后,可以使用service iptables save将所有的命令存储到/etc/sysconfig/iptables文件中,接着使用chkconfig iptables on,设置iptables开机自动启动.但是在修改的时候并不方便.

2.使用shell脚本管理规则数据库

优点:提升管理防火墙规则的简便性

可以在shell脚本中使用变量

防火墙规则容易阅读

备份防火墙规则数据库极为方便

缺点:无法在开机后自动载入规则数据库

该shell文件的属主和属组,需要修改为root,权限为700.

使用filter构建网关式防火墙:

1.192.168.0.200这台主机只能访问10.0.1.100主机的SMTP和POP3服务

2.192.168.0.0/24网段上的其他主机只可以访问因特网上的DNS、SMTP、HTTP、HTTPS服务

3.因特网上的主机不得访问企业内任何的主机

iptables -t filter -P INPUT DROP

iptables -t filter -P FORWARD DROP

iptables -A INPUT -p tcp -m state --state INVALID -j DROP

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

iptables -A FORWARD -i eth0 -o eth1 -m state --state INVALID -j DROP

iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -p tcp -s 192.168.0.200 -d 10.0.1.100 --dport 25:110 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -p all -d 192.168.0.200 -j DROP

iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 25,110 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth1 -p tcp --dport 80,443 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth1 -p udp --dport 53 -j ACCEPT

netfilter的NAT机制:

PREROUTING:当我们下发规则要去修改数据包的”Destination IP”时,该规则放在PREROUTING链中.

POSTROUTING:修改数据包内的来源IP.

OUTPUT:

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 10.0.1.200

内网的ip访问因特网时,将其数据包的sourceIP转换为其公网IP,即可实现内网对因特网的访问.

接口名称的问题:-o后面的“接口名称”务必设置为当前所使用的公网IP的地址.

如果公网IP不是固定的:#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE

netfilter的mangle机制:

修改IP包头的TTL值:可以修改Linux主机所发送的数据包,将这些数据包的TTL值改为128,让黑客误以为是Windows操作系统,也可以将所有Windows操作系统所发送的数据包的TTL值改为64,让黑客误以为是Linux系统.

修改IP包头的DSCP值或对特定的数据包设置特征:

通过IP包内的DSCP值来分类:

我们可以通过mangle机制来修改IP包内的DSCP值,例如:把DSCP值改为0000-01,接着在“带宽分配器”上设置,如果数据包内的DSCP值为0000-01,就给予64KB/s的带宽

使用mangle机制为数据包标示识别码;

mangle机制可以为特定的数据包来标示不同的识别码,例如:如果数据包内的source port为80,就标示该数据包的识别码为80,接着在“带宽分配器”上设置,如果数据包的识别码为80,就给予512KB/s的带宽

iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43

netfilter的raw机制:

Netfilter/iptables的高级技巧:

防火墙性能的最优化:

1.调整防火墙规则顺序:匹配命中次数越高者越靠前(设置防火墙一段时间后执行iptables -L -n -v来查看匹配的次数)

2.巧妙地使用multiport和iprange模块

iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,23,25,80,110 -j ACCEPT #这样不管哪个服务器所需的匹配次数都会是一样的

iptables -A INPUT -m iprange --src-range 192.168.1.12-192.168.1.16 -j ACCEPT

3.巧妙使用用户自定义的链

Netfilter连接处理能力与内存消耗:

1.计算最大连接数:(nf_conntrack: table full, dropping packet)

2.调整连接跟踪器:

3.连接跟踪数量与内存消耗:

    使用raw表:
nf_conntrack模块默认会自动跟踪所有链接,在raw表加入以下规则,即可不被nf_conntrack跟踪:
iptables -t raw -A PREROUTING -i eth2 -o eth1 -p tcp --dport 25 -j NOTRACK
iptables -t raw -A PREROUTING -i eth1 -o eht2 -p tcp --sport 25 -j NOTRACK
raw表的好处在于“加速”以及增加可跟踪的连接数量,因为raw表所定义的连接不会被跟踪,也就不会算作连接跟踪数量。
PREROUTING:如果是网关式防火墙,PREROUTING链可以用来处理防火墙两侧网络之间所建立的连接,另外,PREROUTING链也可以处理任何主动连接到防火墙本机的连接。
OUTPUT:用来处理本机对外建立的连接。 简单及复杂通信协议的处理:
1.简单通信协议:
2.复杂通信协议:
客户端与服务器端之间,需要多条连接才能完成应用的协议,就属于复杂通信协议。
FTP通信协议的两种工作模式:被动模式&主动模式 常见的网络攻击手段及防御方法:
1.PortScan攻击:PortScan是一种极常见的攻击行为,其目的是在探测特定主机上有哪些服务是开启的,接着,再从这些信息来分析可能有机会入侵的通道在哪里。因此,PortScan的攻击通常只是真正入侵之前的准备,而真正的攻击行动可能随之展开。
使用netfilter来防御portscan的攻击:
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -P all -m state --state NEW -m recent --name port_scan --update --seconds 1800 --hitcount 10 -j DROP
itables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 22,25,80,110 -j ACCEPT
iptables -A INPUT -p all -m recent --name port_scan --set
半个小时内客户端访问22,25,80,110端口的次数超过10次,就判定为portscan攻击 2.密码攻击:
a.未加密通信协议下的密码攻击防御:
iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m recent --name pop3 --ipdate --seconds 600 --hitcount 6 -j REJECT
iptables -A OUTPUT -p tcp --sport 110 -m string --algo bm --string “ERR Authentication failed” -m reecent --name pop3 --set
认证失败次数超过6次,则认为是密码攻击
b.加密通信协议下的密码攻击防御
a.改变SSH服务器所能接受的最大密码错误次数:
vi /etc/ssh/sshd_config
修改MaxAuthTries参数的值
b.将送至SSH服务器的SYN数据包数量作为匹配依据:
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --update --seconds 600 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name ssh --set 3.DOS和DDOS网络攻击:
DOS:严重消耗被攻击者的系统或网络资源,由此达到干扰需要访问该服务的正常使用者.

        DDOS:

        4.URL攻击防御:

        5.管理病毒感染时的连接消耗:

iptables基础命令详解的更多相关文章

  1. iptables基础知识详解

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...

  2. Linux基础命令详解-3

    本篇详解的命令有以下15个 1.chown 更改文件和文件夹的用户和组所有权 2.useradd 创建一个新用户 3.userdel 删除一个用户 4.usermod 修改用户帐户 5.echo 打印 ...

  3. Linux基础命令详解-2

    本篇详解的命令有以下30个 1.rmdir 功能:删除一个空目录   2.telnet 功能:使用telnet协议连接到主机的指定端口 3.vim 功能:编辑器之神 vim三种模式的功能及其转换   ...

  4. Linux基础命令详解-1

    本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表     2.ls 功能:查看目录里的内容 参数列表     3.mv 功能:  移动或重命名文件和目录 参数列表     4.pwd ...

  5. docker基础命令详解

    Commands: attach    Attach to a running container build     Build an image from a Dockerfile commit  ...

  6. Linux基础命令详解

    1 遍历目录 cd:change dicrectory的缩写 .或者./代表当前目录,..或../代表上一级目录,cd -代表进入上一次的目录. 2 文件和目录列表 ls:list的缩写,会显示目录下 ...

  7. linux之sed基础命令详解

    sed (Stream  EDitor)是一个强大的字符流编辑器,输入一般是来自文件,默认情况下不编辑原文件,仅对模式空间中的数据作处理;而后,将模式空间打印到屏幕显示 sed基础用法 sed [op ...

  8. git基础命令详解

    一些必须要知道的概念 git的三个工作区域:工作目录.暂存区.git仓库. 工作目录:其实就是本地文件磁盘上的文件或目录: 暂存区:是一个文件,保存了下次提交的文件列表信息,一般在git仓库目录中: ...

  9. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

随机推荐

  1. Web前端学习路线

    第一阶段: HTML+CSS:HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...

  2. Genymotion创建下载模拟器的时候出现Unable to create Genymotion virtual devices:Connection timeout错误

    如图,如果Genymotion创建下载模拟器的时候出现Unable to create Genymotion virtual devices:Connection timeout错误,具体解决方法如下 ...

  3. 无状态的web应用

    无意间看到这个话题,随便看了下 觉得有点意思.比较零散,记录一下. 1. http协议无状态. 简单的理解:每一个http请求都是独立的.不会因为前一个请求的失败就影响到下一个请求.既不会影响前面的, ...

  4. 【解题报告】BZOJ2550: [Ctsc2004]公式编辑器

    题意:给定一个可视化计算器的操作序列,包括插入数字.字母.运算符.分数.矩阵以及移动光标.矩阵插入行.插入列,输出操作序列结束后的屏显(数学输出). 解法:这题既可以用来提升OI/ACM写大代码模拟题 ...

  5. Mini projects #5 ---- Memory

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  6. 最新Ubuntu10.10 更新源

    Ubuntu10.10这个版本真的很老了,官方N多年前早已不再支持更新软件源了. 目前可用的有中科大镜像更新源. 中科大Ubuntu 10.10源列表: deb http://mirrors.ustc ...

  7. “设计之变”--从iPhone应用到iPad应用

    在做APP的iPad版本设计时,我们常常需要考虑:如何在延续iPhone版本设计特色和优点同时,充分利用iPad的特性更好地进行设计.本文从iPad和iPhone的差异性入手,试图总结这一设计过程中需 ...

  8. Android 把电话保存到现有联系人 已有联系人

    搜索了很长时间,想找个把电话保存到现有联系人的代码,就是打开选中的联系人编辑界面,然后自动添加电话,再手动保存,就跟手机上的一样,功夫不负有心人,终于给搜到了,很不容易啊,现分享如下, // 保存至现 ...

  9. 无鼠标Windows操作

    1.常用tab键,方便跳转 2.打开软件方式:  1.win+1,2,3...依序打开任务栏图标.常用软件可以放在这里: 2.创建quickStart文件夹,配置路径,将所有要用到的功能都放在这里.( ...

  10. 强类型DataSet的使用简明教程

    关于弱类型 DataSet的缺点: 无论何时从 DataSet检索值都是以Object类型返回,需要对它进行类型转换: 给其它开发者使用 时无法知道哪些列可用: 运行时才能知道所 有列名,数据绑定麻烦 ...