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. JavaScript对UNIX时间戳的转换

    <script type="text/javascript"> var timestamp = '1479886513'; var d = new Date(times ...

  2. java的三元运算符

    1.三元运算符语法:判断表达式?表达式1:表达式2: (1)三元运算符适合于判断2个值到底使用哪一个! public static void mian(String[] args){ int sex= ...

  3. Asp.net使用代码修改配置文件的节点值

    使用代码修改配置文件的方法: 1.打开配置文件写入的权限 2.先按节点名称长到要修改的节点,然后删除,紧接着将有新值的节点添加回去 3.关闭配置文件写入的权限 修改Appsetting节点的值,修改其 ...

  4. Restore Oracle database to another server

    1. Copy or remotely mount the backupset folder from the source server to the target server 2. On the ...

  5. 由XML解析学习工厂模式

    代码段1: startupData = new StartupData(); /* 设定自定义的MyHandler给XMLReader */ StartupXMLHandler startupData ...

  6. 00.PHP学习建议

    各位师弟师妹,大家好~PHP不是我们专业的本该有的方向.我不知道大家为什么来学习这门语言,也许是自己了解之后喜欢这门语言(我想这种可能在我们专业是挺少的),也许是听守中哥说这门语言简单好学,为了躲避学 ...

  7. mysql 按时间段统计(年,季度,月,天,时)

    按年汇总,统计: select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col ...

  8. Linux学习进阶路线图

    摘自:http://blog.csdn.net/zdwzzu2006/article/details/4334791 Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 L ...

  9. i18n国际化

    <%  request.setAttribute("date", new Date());  request.setAttribute("salary", ...

  10. storysnail的Windows串口编程笔记

    storysnail的Windows串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据 ...