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
iptables_应用心得
最新推荐文章于 2021-04-22 15:44:43 发布