互联网安全之iptables/netfilter入门到进阶

随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击、黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视。网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络世界的保护伞。下面笔者介绍下Linux系统的守卫者——iptables/netfilter。

 一 兄弟齐心,其利断金

 iptables/netfilter就像一对兄弟,netfilter是大哥,善使长钩;iptables是小弟,擅长书记。这两兄弟一武一文,掌握着守城重任。

 netfilter大哥师承名门,身负五把长钩,每一个流经他的数据流都逃不过他的法眼,只见得五把长钩上下翻飞舞得水泄不通,将那不符合规则的数据包挑落马下。这五把长钩埋伏在城门的五个位置,分别是:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_POST_ROUTING、NF_IP_LOCAL_OUT。他们分别对应了下图的五个位置。

iptables小弟学富五车,手拿生死簿,记载了乱臣贼子的具体情况,netfilter大哥就是按照生死簿的记载检查每个数据包,以辨忠奸。

二 四章生死簿

生死簿内所载内容分为四个章节:raw、mangle、nat、filter

raw、mangle记载了极高深的内容,正所谓曲高和寡,平常极少用到。filter里记录了过滤规则;nat表记录了地址转换和端口映射相关规则。

三 iptables命令

iptables [-t tablename] {-A|-D|-I|-F|-L|-Z|-P} 链名 rule-specification

-t 指定表名,默认为filter表

-A 追加防火墙规则

-D 删除规则

-I 插入规则

-F 情况规则

-L 列出规则

-R 替换规则

-Z 清空计数

-P 设置链默认规则

链管理:

-N 创建新链

-X 删除用户自定义引用计数为0的空链

-E 自定义链重命名

-S 列出选定链的规则

[!] -p 匹配协议

[!] -s 匹配源地址

[!] -d 匹配目标地址

[!] -i 匹配入站网卡地址

[!] -o 匹配出站网卡地址

[!] –sport 匹配源端口

[!] –dport 匹配目的端口

[!] –src-range 匹配源地址范围

[!] –dst-range 匹配目的地址范围

[!] –limit 匹配数据表速率

[!] –mac-source 匹配mac地址

[!] –state 匹配状态(INVALID ESTABLISHED NEW RELATED)

[!] –string 匹配应用层字串

触发动作:

ACCEPT 允许数据包通过

DROP 丢弃数据包

REJECT 拒绝数据包通过

LOG 将数据包信息记录syslog日志

DNAT 目标地址转换

SNAT 源地址转换

MASQUERADE 地址欺骗

REDIRRECT 重定向

 四 filter表规则

filter表是最常被使用的表,是iptables命令默认修改的表。它包含了3条链,分别是input、forward和output,分别用来制定进入本机、转发和离开本机的数据包规则。

1  修改默认规则

使用iptables -P命令修改默认规则,例如:

iptables -P INPUT ACCEPT

建议在input链最后添加DROP规则,例如:

iptables -A INPUT -p tcp -d 172.18.55.7 -j
DROP

这样即使清空规则后也不会断网。

2 增、删、改规则

使用-A在链尾增加规则;使用-I可以指定添加规则的位置,如不指定位置序号,则在开头增加,例如除了22端口以外,禁止连接本机的端口:

iptables -A INPUT -p tcp -d 172.18.55.7 -j
DROP

iptables -I INPUT -d 172.18.55.7 -p tcp
–dport 22 ACCEPT

使用-D可以删除某条规则,例如删除某一条规则

iptabels -D INPUT 1

3 扩展规则

扩展规则分为显式扩展和隐式扩展,显式扩展是指使用-m参数;隐式扩展是指在-p参数后可以省略-m参数。

隐式扩展包括的参数有:

-p tcp

[!] –source-port,–sport port[:port]

[!] –destination-port,–dport port[:port]

[!] –tcp-flags mask comp

[!] –syn

-p udp

[!] –source-port,–sport port[:port]

[!] –destination-port,–dport port[:port]

-p icmp

[!] –icmp-type {type[/code]|typename}

0/0: echo reply

8/0:echo request

显式扩展包括的参数有:

-m multiport

以离散或连续的
方式定义多端口匹配条件,最多15个;

[!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;

[!] –destination-ports,–dports
port[,port|,port:port]…:指定多个目标端口;

例:# iptables -I INPUT  -d
172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -j ACCEPT

-m iprange

以连续地址块的方式来指明多IP地址匹配条件;

[!] –src-range from[-to]

[!] –dst-range from[-to]

例:# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport –dports
22,80,139,445,3306 -m iprange –src-range 172.16.0.61-172.16.0.70 -j REJECT

-m time

以时间或日期作为包过滤条件

–timestart hh:mm[:ss]

–timestop hh:mm[:ss]

[!] –weekdays day[,day…]

[!] –monthdays day[,day…]

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–kerneltz:使用内核配置的时区而非默认的UTC;

-m string

以字符串为条件过滤数据包

–algo {bm|kmp}

[!] –string pattern

[!] –hex-string pattern

–from offset

–to offset

~]# iptables -I OUTPUT -m string –algo bm
–string “gay” -j REJECT

-m connlimit

限制每个IP连接服务器的连接数

–connlimit-upto n

–connlimit-above n

~]# iptables -I INPUT -d 172.16.0.7 -p tcp
–syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

-m limit

限制连接速率

–limit rate[/second|/minute|/hour|/day]

–limit-burst number

~]# iptables -I OUTPUT -s 172.16.0.7 -p
icmp –icmp-type 0 -j ACCEPT

-m state

“state”扩展是对”conntrack”子模块的扩展。  “state”扩展可以依照连接的状态过滤数据包。

[!] –state state

INVALID, ESTABLISHED, NEW, RELATED or
UNTRACKED.

NEW: 新连接请求;

ESTABLISHED:已建立的连接;

INVALID:无法识别的连接;

RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;

UNTRACKED:未追踪的连接;

state扩展:

内核模块装载:

nf_conntrack

nf_conntrack_ipv4

手动装载:

nf_conntrack_ftp

追踪到的连接:

/proc/net/nf_conntrack

调整可记录的连接数量最大值:

/proc/sys/net/nf_conntrack_max

调整超时时长:

/proc/sys/net/netfilter/*timeout*

4 处理动作(跳转目标)

-j targetname [per-target-options]

简单target:

ACCEPT, DROP

扩展target:

REJECT

–reject-with type

LOG

–log-level

–log-prefix

5保存和载入规则:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE

重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE

-n, –noflush:不清除原有规则

-t, –test:仅分析生成规则集,但不提交

五 nat表规则

iptables不仅可以实现数据包过滤,还可以实现网络地址转换,这项功能是通过修改nat表实现的。nat表一般作用在PREROUTING和POSTRONTING链上,然后通过FORWARD链过滤流经的数据包。

示例:将流经网关的数据包的源地址改为192.168.10.254

iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -j SNAT –to-source
192.168.10.254

如果是拨号地址,那么可以用MASQUERADE参数

示例:将流入网关80端口的数据包转发给192.168.10.2

iptables -t nat -A PREROUTING -d 172.18.55.7 -p tcp –dport 80 -j DNAT
–to-destination 192.168.10.2

 

原创文章,作者:realmaster,如若转载,请注明出处:http://www.178linux.com/74849

(3)
realmasterrealmaster
上一篇 2017-05-06 18:43
下一篇 2017-05-06 19:46

相关推荐

  • Centos7 PHP-FPM源码安装

    PHP-FPM源码安装 安装必要组件 yum install -y openssl-devel traceroute libtool unzip gcc gcc-c++ autoconf net-snmp-devel vim wget sysstat lrzsz  man tree mysql-devel ntpdate rsync libxml2…

    系统运维 2016-09-06
  • Linux网络配置基础二(网络模块与nmcli命令)

    Linux网络配置基础二 相关命令 lsmod命令 lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。第一列:表示模块的名称第二列:表示模块的大小第三列:表示…

    Linux干货 2016-09-09
  • 第一周作业

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echou、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及共用规定。

    Linux干货 2017-12-03
  • 用户 组 和权限 以及权限的 分类

    关于文件的安全我们要从3A验证 说起     1  Authentication:认证      2  Authorization:授权      3  Accouting|Audition:审计 由于系统文件的用户太多为了便于管理 我们便把系统的用…

    系统运维 2016-08-04
  • 第一周博客 计算机组成及Linux基础入门

    1、描述计算机组成及其功能。
    2、描述罗列Linux的发行版,并描述不同发行版之间的联系和区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释。
    4、说明Linux系统上命令的使用格式,详细介绍ifconfig、echo、tty、startx、export、pwd、history、
    shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例说明阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分。
    6、请罗列Linux发行版的基础目录名称命名法则及功能规定。

    2017-12-02
  • Linux的简介

    Linux的简介 冯诺依曼体系结构 主要特点:使用存储器,采用二进制(据说,采用二进制的灵感来源于中国的八卦,2变4,4变8…) 体系介绍:其由几大部分组成,输入设备,运算器,控制器,内部存储器,外部存储器,输出设备。 目前,输入设备就是指键盘鼠标, 运算器和控制器现在统称CPU。其实已经内置了两个功能。 内部存储器就是内存,某种意义上,缓存也算…

    Linux干货 2016-10-28