Iptables

一、IPtables简介linux

Netfilter/Iptables是(linux/unix)自带的一款优秀开源代码的彻底自由的基于包过滤的防火墙工具。能够对流入和输出服务器的数据包进行很精细的控制。IPtables主要工做在OSI七层的2、3、四层。服务器

IPtables是linux内核集成的IP信息过滤系统。对于接入网络或者服务器,则该系统有利于在linux系统上控制IP信息包过滤和防火墙配置。网络

两大组件:netfilter iptables 。 tcp

netfilter 组件称为内核空间(kernelspace),是内核一部分,由信息包过滤表组成。这些表包含内核用来控制信息包过滤处理的规则集。工具

IPtables 组件是一种工具,称为用户空间(userspace),使插入、修改、除去信息包过滤表中的规则变得容易。网站

2 IPtables表与链功能spa

IPtables的规则链分为三种:输入、转发和输出unix

1)输入——用于过滤目的地址是本机的链接。日志

2)转发——用来过滤目的地址和原地址都不是本机的链接。如路由器收到大多数数据均须要转发给其余主机。code

3)输出——用来过滤地址是本机的链接。如ping baidu.com,iptables会检查输出链中与ping和baidu.com相关的规则,而后决定容许仍是拒绝你的链接请求。

3 IPtables数据包流程

数据包先通过PREOUTING,由该链肯定数据包走向:

1)  目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②;

2)  若知足PREROUTING的nat表上的转发规则,则发送给FORWARD,而后再通过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥;

3)  主机发送数据包时,流程则是⑤--->⑥;

4)  其中PREROUTING和POSTROUTING指的是数据包的流向,如上图所示POSTROUTING指的是发往公网的数据包,而PREROUTING指的是来自公网的数据包。

 

四、IPtables四张表、五条链。

IPtables具备Filter,、NAT、Mangle、Raw四个内建表。

五、linux下的IPtables下filter表

filter表示iptables的默认表,默认有三种内建表:

INPUT链:处理来自外部的数据

OUTPUT链:处理向外发送的数据

FORWARD链:将数据转发到本机或其余网卡设备上。

六、linux下IPtables下的NAT表

NAT表有三种内建链:

PREROUTING链:处理到达本机并在路由转发前的数据包,它会转发数据包中的目标IP地址(destination ip address),一般用于DNAT(destination NAT)

POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),一般用于SNAT(source NAT)

OUTPUT链:处理本机产生的数据包

七、linux下IPtables命令

1.命令:
-A 顺序添加,添加一条新规则
-I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行
-R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行
-D 删除,删除一条新规则 -D 后面加一数字表示删除哪行
-N   新建一个链
-X   删除一个自定义链,删除以前要保证次链是空的,并且没有被引用
-L 查看
 @1.iptables -L -n 以数字的方式显示
 @2. iptables -L -v显示详细信息
 @3. iptables -L -x 显示精确信息
-E   重命名链
-F 清空链中的全部规则
-Z   清除链中使用的规则
-P 设置默认规则
2.匹配条件:
隐含匹配:
   -p  tcp udp icmp
   --sport指定源端口
   --dport指定目标端
   -s 源地址
   -d 目的地址
-i 数据包进入的网卡
-o 数据包出口的网卡
扩展匹配:
-m state --state   匹配状态的
-m mutiport --source-port   端口匹配 ,指定一组端口
-m limit --limit 3/minute   每三分种一次
-m limit --limit-burst  5   只匹配5个数据包
-m string --string --algo bm|kmp --string"xxxx"  匹配字符串
-mtime--timestart 8:00 --timestop 12:00  表示从哪一个时间到哪一个时间段
-mtime--days    表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配腾讯qq的 固然也支持不少协议,这个默认是没有的,须要咱们给内核打补丁并从新编译内核及iptables才可使用 -m layer7 这个显示扩展匹配
3.动做:
-j
DROP 直接丢掉
ACCEPT 容许经过
REJECT 丢掉,可是回复信息
LOG --log-prefix"说明信息,本身随便定义" ,记录日志
SNAT       源地址转换
DNAT       目标地址转换
REDIRECT   重定向
MASQUERAED  地址假装
保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start
WEB服务器,开启80端口:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
邮件服务器,开启25,110端口
iptables -A INPUT -P tcp --dport 110 -j ACCEPT
iptables -A INPUT -P tcp --dport 25 -j ACCEPT
FTP服务器,开启21端口
iptables -A INPUT -P tcp --dport 20 -j ACCEPT
iptables -A INPUT -P tcp --dport 21 -j ACCEPT
DNS服务器开启53号端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
容许icmp包经过,也就是容许ping
iptables -A OUTPUT -p icmp -j ACCEPT(DROP)
iptables -A INPUT -p icmp -j ACCEPT(DROP)
将本机的8080端口转发至其余主机,主机IP:192.168.0.111 ,目标主机和端口:192.168.0.112:80
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.111 --dport 8080 -j DNAT --to-destination 192.168.0.112:80
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.111:8080
echo 1>/proc/sys/net/ipv4/ip_forward
同时开启iptables forward
用 iptables 将 192.168.0.10080 端口映射到 192.168.0.1118080 端口
iptables -t nat -A PREROUTING -p tcp -d 192.168.0.100 --dport 80 -j DNAT -to-destination 192.168.0.111:8080
本机的80端口转到8080端口
iptables -t nat -A PREROUTING -p tcp --dport -j REDIRECT --to-ports 8080

门户网站iptables规则策略以下

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [602:39593]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.0.111 -j DROP
-A INPUT -s 192.168.0.112 -j ACCEPT

-A INPUT -p icmp -j ACCEPT
-A INPUT -P tcp -m state --state NEW -M tcp --dport  22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -s 116.243.139.7 -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8801 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
####
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
相关文章
相关标签/搜索