iptables_应用心得

iptables 心得====
iptables。它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行。

防火墙的任务就是规划出:
1、切割被信任(如子网段)与不被信任(如internet) 的网段
2、划分出可提供给internet的服务与必须受保护的服务
3、分析出可接受与不可接受的数据包状态

linux系统上防火墙的主要类别
软件/硬件
按防火墙对数据包的获取方式来进行分类  :代理服务器(proxy)和ip filter
proxy_server : 仅是代理client端向internet请求数据
IP Filter :利用数据包的过滤的方式来实现防火墙功能

iptables的使用限制
1、不能有效阻止病毒或木马程序
2、对于来自LAN内部的攻击无能为力

iptables 利用的是数据包过滤机制,所以它会分析数据包的表头数据,根据表头的数据与定义的规则来决定该数据包是否可以进入主机;

开放规则:以全部禁止,在逐一开放的规则来管理iptables

IPTABLES中公分三种表格

1、filter 表格:主要跟Linux本机有关,是默认的table
 >INPUT:数据包的进入
 >OUTPUT:数据包的输出
 >FORWART:与Linux本机没有关系,它可将数据包转发到后端得计算机中,与NAT的table相关性很高

2、NAT 表格:用于来源和目的的IP或port转换,主要与Linux主机后的局域网内的计算机相关
 >PREROUTING: 在进行路由判断之前执行的规则(DNAT/REDIRECT)
 >POSTROUTING: 在进行路由判断之后执行的规则(SNAMT/MASQUERADE)
 >OUTPUT: 与发送出去的数据包有关
 
3、Mangel 标记表  环境特殊使用较少
 >PREROUTING:
 >OUTPUT:
 >INPUT:
 >FORWARD:

查看,iptables的规则
iptables [-t talbes] [-L] [-nv]
 > -L: 列出当前的table的规则
 > -n: 不进行IP与HOSTNAME的反查,显示信息速度会更快
 > -v: 列出更多信息,包括通过该规则的数据包总数、相关的网络接口
 
iptables -t nat -L -n (不指定-t 表名,默认是filter表)

清除规则:
iptables [-t tables] [-FXZ]
 >-F : 清楚所有的已定规则
 >-X : 除掉所有用户“自定义”的链(应该说的是tables)
 >-Z : 将所有链的计数与流量统计都归零
 
iptables [-t tables] [-AI 链] [-io 网络接口] [-p 协议] [-s 来源IP/网段] [-d 目标IP/网段] -j [ACCEPT | DROP]

 > -t 表名,上述模板一般用filter表
 > -A 新增加一条规则,默认加到最后
 > -I 插入一条规则,默认加到第一条
 > -i 进入的网络接口设备,eg,eth0 lo 与INPUT链配合
 > -o 输出的网络接口设备,与OUTPUT链配合
 > -p 指定协议类型 eg.tcp udp icmp和all
   >[-s 来源ip/网段] [--sport 端口范围]
   >[-d 目标ip/网段] [--dport 端口范围]
   >##如果使用--sport或--doprt 那么必须指定 -p 数据包格式(tcp or udp)
 > -s 来源IP/网段
 > -d 目的ip/网段
 > -j 后面接操作,主要的操作有  接受(ACCEPT)、丢弃(DROP)及记录(LOG)
 
 ===注意::没有设置的规定,则表示该规则完全接受
 eg. iptables -A INPUT -i lo -j ACCEPT
 没有 s 那么就是所有的ip都可以访问lo
 
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP


状态模块

iptables -A INPUT -m state --state
 > state :状态模块
 > mac : 网卡硬件地址(hardware address)

--state 数据包状态,主要有:
 > INVALID : 无效的数据包,例如数据破损的数据包
 > ESTABLISHED : 已经联机成功的联机状态
 > NEW : 想要新建立联机的数据包状态
 > RELATED : 最常用,表示数据包与我们主机发送出去的数据包有关
 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP

最简单的script
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
iptables -A INPUT -p icmp --icmp-type all -j ACCEPT



防火墙的记录、恢复与测试
iptables-save > filename   存储
iptables-restore < filename  恢复

将filename文件存成/etc/sysconfig/iptables 并且利用chkconfig将iptables在开机时默认启动,那么一开机系统就会主动加载防火墙规则

避免SYN Flooding
echo "1" > /proc/sys/net/ipv4/tcp_syncookies


打造一个适合自己的filter_iptables
[root@pica-3 ~]# mkdir -p /usr/local/iptables
[root@pica-3 ~]# cd /usr/local/iptables/
[root@pica-3 iptables]# vi iptables.rule
#!/bin/bash
#定义网络借口和LAN内IP
# lan
INIF="eth0" ; export INIF 
# public ip
EXTIF="eth1" ; export EXTIF
# lan ip
INNET="10.8.17.0/24" export INNET

 
#设置网络核心功能
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo "1" > $i
done
for i in /proc/sys/net/ipv4/conf/*/log_martians; do
        echo "1" > $i
done
for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
        echo "0" > $i
done
for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do
        echo "0" > $i
done
for i in /proc/sys/net/ipv4/conf/*/send_redirects; do
        echo "0" > $i
done
#清除规则、设置默认策略及开放lo与相关设置
PATH=/sbin:/bin:/usr/sbin:/usr/bin; export PATH
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED -j ACCEPT

#启动其它额外的防火墙script模块

if [ -f /usr/local/iptables/iptables.deny ] ; then
        /usr/local/iptables/iptables.deny
fi
if [ -f /usr/local/iptables/iptables.allow ] ; then
        /usr/local/iptables/iptables.allow
fi
iptables -A INPUT -i eth0 -m state --state ESTABLISHED -j ACCEPT

#允许某类型的ICMP数据包进入
AICMP="0 3 3/4 4 11 12 14 16 18"
for typeicmp in $AICMP
do
   iptables -A INPUT -i $EXTIF -p icmp --icmp-type $typeicmp -j ACCEPT
done

#允许某些服务进入,依照自己的环境设置
iptables -A INPUT -p tcp -i $EXTIF --dport 22 -j ACCEPT #SSH
iptables -A INPUT -p tcp -i $EXTIF --dport 25 -j ACCEPT #SMTP
iptables -A INPUT -p tcp -i $EXTIF --dport 80 -j ACCEPT #WWW
iptables -A INPUT -p tcp -i $EXTIF --dport 110 -j ACCEPT #POP3
iptables -A INPUT -p tcp -i $EXTIF --dport 443 -j ACCEPT #HTTPS


[root@pica-3 iptables]# vi iptables.deny
#!/bin/bash
#填写你要组织的Ip或网段
iptables -A INPUT -i $EXTIF -s 140.116.44.254 -j DROP

[root@pica-3 iptables]# vi iptables.allow
#!/bin/bash
#填写你允许访问的IP或网段
iptables -A INPUT -i $EXTIF -s 140.116.44.0/24 -j ACCEPT

修改权限,只有root(或当前用户)有权限
[root@pica-3 iptables]# chmod 700 iptables.*

[root@pica-3 iptables]# iptables-save > /etc/sysconfig/iptables

[root@pica-3 iptables]# less /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Tue Dec  1 15:06:03 2009
*filter
:INPUT DROP [883:90434]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -s 10.8.18.170 -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
COMMIT
# Completed on Tue Dec  1 15:06:03 2009

如果没有加入开机启动,那么一定要加入开机启动

 
NAT_表 主要设置
NAT_简单的说NAT是内部LAN主机的IP共享器

NAT主机要有两个网络接口既:一个Public IP接口, 一个连内部LAN的Private IP接口

内网IP---->SNAT---->POSTROUTING---->外网IP       修改源IP--IP伪装
外部公网IP---->DNAT---->PREROUTING---->内部IP    修改目标IP

SNAT 要点:
eg.eth0-内网IP-连接内网    eth1-公网IP-连公网
1、NAT主机要接受所有来自内网的IP
2、NAT主机要打开路由转发功能
3、做成地址隐藏,任何内网IP上外网时,都只显示NAT机器上的公网IP
iptables -A INPUT -i eth0 -j ACCEPT
echo "1" >  /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.8.18.0/24 -o eth1 -j MASQUERADE

MASQUERADE  :地址隐藏 内网IP_通过NAT服务器_访问公网IP时使用

DNAT 要点:
eg.将连接到eth1接口的port 80传送到内部的10.8.18.170
 iptables -t nat -A PREROUTING -i eht1 -p tcp --dport 80 -j DNAT --to 10.8.18.170:80

特殊用法
-j REDIRECT --to-ports <port number>
基本上就是进行本机上的PORT转换
需注意:这个操作仅能够在NAT ”表“ 的PREROUTING链以及OUTPUT链上执行
eg.将要求与端口80联机的数据包转发到8080这个端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

打造基本的NAT表
# Generated by iptables-save v1.3.5 on Tue Dec  1 15:53:40 2009
*nat
:PREROUTING ACCEPT [71:8571]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE
-A POSTROUTING -j MASQUERADE
-A PREROUTING -p tcp -d 10.8.17.5 --dport 21 -j DNAT --to-destination 10.8.4.21
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT



切记====在nat表内做映射的端口一定要在filter表中开放 一定切记
-A PREROUTING -p tcp -d 10.8.17.5 --dport 8090 -j DNAT --to-destination 10.8.17.86
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT

第一条是在nat表中   第二条一定会是在filter表中



IPTABLES书写格式:列表====
iptables -t table    参数     chain(链)                          匹配选项      -j 目标           
                        filter    -L     INPUT/OUTPUT/FORWART                                        -s                    DROP
                        nat                -A         PREROUTING/POSTROUTING/OUTPUT                    -d                    REJECT
                        mangel        -D     PREROUTING/INPUT/OUTPUT/FORWART                -p                    ACCEPT
                                            -F                                                                                        -i                    SNAT
                                            -P                                                                                        -o                    DNAT
                                            -I                                                                                        -m                    REDIRECT
                                                                                                                                        --dport            MASQUERAD
                                                                                                                                        --sport

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值