iptables基础命令详解
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基础命令详解的更多相关文章
- iptables基础知识详解
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...
- Linux基础命令详解-3
本篇详解的命令有以下15个 1.chown 更改文件和文件夹的用户和组所有权 2.useradd 创建一个新用户 3.userdel 删除一个用户 4.usermod 修改用户帐户 5.echo 打印 ...
- Linux基础命令详解-2
本篇详解的命令有以下30个 1.rmdir 功能:删除一个空目录 2.telnet 功能:使用telnet协议连接到主机的指定端口 3.vim 功能:编辑器之神 vim三种模式的功能及其转换 ...
- Linux基础命令详解-1
本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表 2.ls 功能:查看目录里的内容 参数列表 3.mv 功能: 移动或重命名文件和目录 参数列表 4.pwd ...
- docker基础命令详解
Commands: attach Attach to a running container build Build an image from a Dockerfile commit ...
- Linux基础命令详解
1 遍历目录 cd:change dicrectory的缩写 .或者./代表当前目录,..或../代表上一级目录,cd -代表进入上一次的目录. 2 文件和目录列表 ls:list的缩写,会显示目录下 ...
- linux之sed基础命令详解
sed (Stream EDitor)是一个强大的字符流编辑器,输入一般是来自文件,默认情况下不编辑原文件,仅对模式空间中的数据作处理;而后,将模式空间打印到屏幕显示 sed基础用法 sed [op ...
- git基础命令详解
一些必须要知道的概念 git的三个工作区域:工作目录.暂存区.git仓库. 工作目录:其实就是本地文件磁盘上的文件或目录: 暂存区:是一个文件,保存了下次提交的文件列表信息,一般在git仓库目录中: ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
随机推荐
- [fortify] 变量覆盖漏洞
一.全局变量覆盖当register_global=ON时,变量来源可能是各个不同的地方,比如页面的表单,Cookie等. <?php echo "Register_globals: & ...
- 数据契约(DataContract)
原文地址:http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务 ...
- Spring学习笔记 1. 尚硅谷_佟刚_Spring_HelloWorld
1,准备工作 (1)安装spring插件 搜索https://spring.io/tools/sts/all就可以下载最新的版本 下载之后不用解压,使用Eclipse进行安装.在菜单栏最右面的Help ...
- GitHub开源项目总结
SwipeRefreshLayout 地址:https://github.com/hanks-zyh/SwipeRefreshLayout 首页轮播的Tab样式,PagerSlidingTab 地址: ...
- CentOS 6 中安装Node.js 4.0 版本或以上
如果想在CentOS 6 中安装Node.js >4.0,如果通过以往的方式安装: wget http://nodejs.org/dist/v4.0.0/node-v4.0.0.tar.gz t ...
- MongoDB学习笔记-05 聚合
MongoDB除了基本查询功能之外,还有强大的聚合工具,其中包括:count().distinct().group().mapreduce. 计数函数count count是最简单的聚合工具,用于返回 ...
- Android JIT实时编译器的设置
在Android JIT实时编译是在Android 2.2之后才引入的,JIT编译器可以显著的提高机器的性能,经过测试,android 2.2的性能较android 2.1提高了 2-5倍.JIT提 ...
- 如何获得DataGrid中某行某列的对象
假如某行是 Xm_struct x = this.Brow.SelectedItem as Xm_struct;则下面分别是第5和第七列的对象 TextBlock Ddjs = this.Brow.C ...
- Redis中Value使用hash类型的效率是普通String的两倍
什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...
- WPF快速入门系列(7)——深入解析WPF模板
一.引言 模板从字面意思理解是“具有一定规格的样板".在现实生活中,砖块都是方方正正的,那是因为制作砖块的模板是方方正正的,如果我们使模板为圆形的话,则制作出来的砖块就是圆形的,此时我们并不 ...