iptables 防火墙

iptables防火墙工具;

iptables是一款优秀且完全免费的包过滤的防火墙工具,它的功能非常强大,且灵活;

netfilter/iptables网络过滤 ;

它是表的容器 ;

表是链的容器 ;

链是规则的容器 ;

规则就是iptables一系列过滤信息规范和具体操作方法;

iptables的过滤流程

client请求数据-------------->iptables filter-------------->获取主机 Service   

                          |                   |

     数据包能匹配上规则则通过               不能匹配则丢弃

匹配上了拒绝规则也是匹配,因此,不在继续向下进行;

例如:同时执行以下规则

[root@centos ~]# iptables -A INPUT -P tcp --dport 3306 -j DROP

[root@centos ~]# iptables -A INPUT -P tcp --dport 3306 -j ACCEPT

表:filter,nat,mangle ;

链:INPUT,FORWARD,OUTPUT, PREROUTING,POSTROUTING;

filter表:负责防火墙功能,过滤本机流入流出的数据包,是iptables默认使用的表,包含三个链:

INPUT:负责过滤所有目标地址是本机地址的数据包;

FORWARD:负责转发流经主机但不进入本机的数据包,起转发作用 ;

OUTPUT:处理所有原地址是本机地址的数据包,就是处理从主机发出去的数据包;

nat表:网络地址转换,负责来源与目的的ip地址和port的转换,和主机本身无关,一般用于局域网多人共享或内网映射外网ip及不同端口转换服务等功能,

包含三个链:

OUTPUT:同上 ;

PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则改变包的目的地址,端口等。

POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,改变包的原地址,端口等。

mangle表:主要负责修改数据包由特殊的路由标记,如:TTL,TOSMARK等,

这个表包含了5个链: INPUT,FORWARD,OUTPUT,PREROUTING,PSOTROUTING;

====================================================================================

查看帮助,如何使用iptables;

[root@centos ~]# iptables -h

实践iptables命令及规则:

启动iptables:

[root@centos ~]# /etc/init.d/iptables start

查看iptables状态:

[root@centos ~]# /etc/init.d/iptables status

列出所有的规则:默认是filter表;

[root@centos ~]# iptables -L -n

指定列出哪张表;

[root@centos ~]# iptables -L -n -t filter

[root@centos ~]# iptables -L -n -t nat

[root@centos ~]# iptables -L -n -t mangle

临时清除默认规则,

重启后失效  iptables -F

删除所有规则 iptables -X

删除用户自定义的链 iptables -Z 把所有规则的指针清零,就是计数器清零;

禁止ssh默认的22端口 ;

-D 删除;

-t 指定表,不加-t默认是filter表;

-I 插入到第一条进行生效,

-A是添加到最后一条进行生效 -A 添加 INPUT 链,

-p  协议 tcp、udp协议 --dport 端口 ;

-j  行为     行为参数 ACCEPT(接受), DROP(丢弃), REJECT(拒绝);

添加规则:

[root@centos-client ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

删除规则:

[root@centos-client ~]# iptables -D INPUT -p tcp --dport 22 -j DROP

显示规则号:

[root@centos-client ~]# iptables -L -n --line-num

显示行号,根据行号删除规则:

[root@centos-client ~]# iptables -L -n --line-num

[root@centos-client ~]# iptables -D INPUT 1

禁止某个网段连入: -i 指定哪张网卡,进 -o 指定哪张网卡, 出 -s 对原地址进行过滤;

[root@centos-client ~]# iptables -t filter -A INPUT -i eth0 -s 192.168.1.1/24 -j DROP

删除禁止网段联网规则;

[root@centos-client ~]# iptables -t filter -D INPUT -i eth0 -s 192.168.1.1/24 -j DROP

拒绝规则: ! 测试(非) ;

[root@centos-client ~]# iptables -t filter -D INPUT -i eth0 -s ! 192.168.1.0/24 -j DROP

[root@centos-client ~]# iptables -t filter -D INPUT -i eth0 -s ! 192.168.1.105 -j DROP

对网卡,端口的设置规则与上面方法相似 端口范围可以使用冒号隔开,如: 23:30

对指定多端口使用逗号隔开,如:23,24,25

安全保护: 防止洪水攻击的保护:限制1秒钟一次 ;

[root@centos-client ~]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s ACCEPT

端口扫描的一个保护;

[root@centos-client ~]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s ACCEPT

防止被ping死:

[root@centos-client ~]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s ACCEPT

===================================================================================== iptables 防火墙 filter 表生产实战例子:

清除当前的防火墙所有规则和计数器;

iptables -F //清除当前所有链(chain)的规则;

iptables -Z //清除当前链(chain)指针(计数器);

iptables -X //清除当前用户自定义的链;

配置允许SSH登入端口进入;

[root@centos-client ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@centos-client ~]# iptables -A INPUT -i lo -j ACCEPT

[root@centos-client ~]# iptables -A OUTPUT -o lo -j ACCEPT

[root@centos-client ~]# iptables -L -n

设置默认的防火墙和允许规则(电影院模式);

[root@centos-client ~]# iptables --policy OUTPUT ACCEPT

[root@centos-client ~]# iptables -P FORWARD DROP

[root@centos-client ~]# iptables -P INPUT DROP [root@centos-client ~]# iptables -L -n

开启信任的ip网段;

[root@centos-client ~]# iptables -A INPUT -s 192.168.1.100/24 -p all -j ACCEPT

允许http服务无条件通过     ;

#允许普通的外部服务80;

[root@centos-client ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT    

# 443 端口 HTTPS加密协议端口 ;

[root@centos-client ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT

允许icmp类型协议通过,(#以下如果不想开就不执行) ;

[root@centos-client ~]# iptables -A INPUT -p icmp --icmp-type any -j ACCEPT

[root@centos-client ~]# iptables -A INPUT -p icmp -s 192.168.1.1/24 -m icmp --icmp-type any -j ACCEPT

[root@centos-client ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT     #如果不想开就不执行;

允许关联的状态包通过 ;

[root@centos-client ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@centos-client ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@centos-client ~]# iptables -L -n --line-number

永久保存配置文件,更改配置文件之前一定要记得备份 ;

[root@centos-client ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.olboy.bak

[root@centos-client ~]# /etc/init.d/iptables save

查看更改后的配置文件 ;

[root@centos-client ~]# less /etc/sysconfig/iptables

===============================================================================

阻止某个ip进行攻击;

[root@centos-client ~]# iptables -I INPUT -s 27.168.22.24 -j DROP

==============================================================================

iptables防火墙nat表生产实战     ;

将linux服务器配置成上网网关或者路由器 DNAT全称目的网络地址转换,它是一种改变数据包ip地址的技术,

它可以使多台服务器共享一个ip地址连入Internet,并且继续提供服务 ;

例如: iptables -t nat -A PREROUTING -d 203.81.17.88 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.16:80

//将所有访问ip 203.81.17.88并且是80端口的请求,地址改写为内部web服务器10.0.0.16的80端口,从而实现内部ip对外提供服务的目的。

SNAT全称源网络地址转换,它是一种改变数据包源ip地址的技术,经常用来使多台计算机分享一个Internet地址访问互联网,

如办公室内部机器上网,IDC机房的内部机器上网等,

例如:

iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 203.81.17.88

//将源地址是10.0.0.0的数据包地址改写成为公司203.81.17.88出网,这是办公室或机房内部服务器共享上网的常用方法;

MASQUERADE 为动态源地址转换,即当外部ip非固定ip时的场合经常使用 ;

例如:ASDL拨号上网: iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

将源地址是192.168.0.0/24的数据包进行地址伪装,此命令可以实现ADSL线路多台计算机共享上网;

-------------------------------------------------------------------------

演示前期准备:

1)服务器网关B需具备如下条件;

1,B需要的物理条件是双网卡,建议eth0外网地址,eth1地址,并且内外处于联通状态 ;

2.确保服务器B自身可以上网,这样才能带动下面的机器上网,ping baidu.com ;

3.网关内核文件/etc/sysctl.conf里需要开启转发功能,在网关172.163.1.3机器上开启路由转发功能,

编辑/etc/sysctl.conf,将内容改为net.ipv4_forward = 1,然后执行sysctl -p使之生效。

[root@centos-client ~]# vim /etc/sysctl.conf

[root@centos-client ~]# sysctl -p

查看iptables的filter表的FORWARD链是否允许转发     ;

[root@centos-client ~]# iptables -L -n     Chain FORWARD (policy ACCEPT)     target     prot opt source               destination    

ipotables 是在内核中运行的,我们需要检查或载入如下基本内核模块;

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_nat_ftp

modprobe ipt_state

实例: 以下为网关B上操作 如果配不好,可以先关iptables;

----------------------------------------------------------------------------------

问题1:

实现C可经过B,通过A上网

# iptables -t -nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.3

#iptables -t -nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

-----------------------------------------------------------------------------------

问题2:

实现外部ip地址端口到内部服务器ip和端口映射;

#iptables -t -nat -A PRETOUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80

提示:以上方法仅仅是端口之间的映射,实际上也可以实现ip一对一的映射,即DMZ的功能,

方法:

-A PREROUTING -d 124.42.60.112 -j DNAT --to-destination 10.0.0.8 -A POSTROUING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.60.112

-------------------------------------------------------------------------------------

问题3:

实现172段机器和10段机器互访;

route add -net 172.16.1.0/24 gw 10.0.0.3

提示:对于办公室小流量的跨网段访问这样实现是可以的,但是如果是IDC机房大流量跨网段访问 ;

我们就需要使用三成交换机来实现了;

posted @ 2016-08-22 22:50  一干而尽  阅读(228)  评论(0编辑  收藏  举报