概述:

iptables:基于软件的形式实现的一种防火墙的软件程序

Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是两者的组合





主机防火墙:工作于主机边缘,只能对一台主机起到保护作用

网络防火墙:工作于网络边缘,对多台主机起到保护作用

 

网络层:网络防火墙

应用层:网关





IDS:入侵检测

   HIDS:OSSEC

   NIDS:snort

   Filesystem:tireware





IPS:入侵防御系统





honeypot:蜜罐





系统评估安全工具:

  Nessus,nmap 





iptables/netfilter:基于网络层的防火墙,连接追踪(状态检测)





ipfw ipchains iptables





iptables:防火墙规则编写工具

    netfiter:网络过滤器,是一个框架

        hook_function

    INPUT

    OUTPUT

    FORWARD

    POATROUTING

    PRERROUTING





过滤:做报文筛选

NAT:Network Address Transltion

     DNAT

     SNAT

mangle:

raw:





FORWARD:

    filter

    mangle

INPUT

    filter

    mangle

OUT

    filter

    mangle

    nat

PREROUTING

     mangle 

     nat

POSTOUTING

     mangle 

     nat





将控制强的放在前面,应用访问频繁的也要放在前面





四表:

   fileter,net,mangle,raw

五链

   PREROUTING(路由前) INPUT FOREARD OUTPUT POSTROUTING(路由后)





表和链的对应关系

     filer:INPUT,FORWARD.OUTPUT

     nat:PREROUTING OUTPUT POSTROUTING

     mangle:PREROUTING FORWARD POSTROUTING INPUT OUTPUT





规则:检查条件,处理机制,





通:白名单,默认为堵,只对能识别的进行放行

堵:黑名单,默认为通,只对能识别的进行阻截





检查条件:

   IP:SIP,DIP

   TCP:SPORT,DPORT,FLags

   UDP:SPORT,DPORT

   ICMP:ICMP-TYPE





扩展机制:

  time string state(connection-tracking)





处理机制:

    DROP(丢弃),

    REJECT(拒绝,并返回)

    ACCEPT(允许)

    SNAT

    DNAT

    RETURN(返回)

    REDIRECT(端口转发)

    LOG(只记录日志)



mangle:做防火墙标记

如何写规则

-t 表 -L 列出 -n 以数值方式显示

  iptables [-t table] -N chain

     创建一条自定义的空规则链

  iptables [-t table] -X chain

     产出一条自定义的空规则链

  iptables [-t table] -E old-chin-name new-chain-name

    为链修改名

 iptables [-t table] -P chain—name target

    为链指定默认策略,修改默认的属性

  iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

  -F 清空链中的规则

     规则由编号,在链中自上而下,从1开始

  -L list 列出表中的所有规则

     -n:数字格式显示ip和port

     -v:显示信息,

        pkts:packets,被本规则所有匹配到的报文的个数

        baytes:被本规则所匹配到的所有报文的大小子和,单位是字节,会执行单位换算 

         target:目标,即处理机制

         port:协议一般为(TCP|UDP|ICMP)

         opt:可选项

         in:数据包的流入端口

         out:数据包的流出接口

         scource:源地址

         destination:目标地址

      -vv:

      -vvv:

      -x:exactly:精确值,不执行单位换

      --line-nambers:显示各规则的行号

      -Z:zero,清零:

    把规则的计数器清零





打印iptables列表

# iptables -t filter -L -n





建立新的规则mychain

# iptables -t filter -N mychain

删除mychain

# iptables -X mychain





网络192.168.0.0/16访问192.168.8.40允许

# iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.8.40 -j ACCEPT





主机192.168.8.40访问192.168.0.0/16网段允许

# iptables -t filter -A OUTPUT -s 192.168.8.40 -d 192.168.0.0/16 -j ACCEPT





网段192.168.11.0访问192.168.8.40 icmp协议丢弃

# iptables -A INPUT -i eth0 -s 192.168.11.0/24 -d 192.168.8.40 -p icmp -j DROP

拒绝

# iptables -A INPUT -i eth0 -d 192.168.8.40 -p icmp -j REJECT

# iptables -A OUTPUT -o eth0 -s 192.168.8.40 -p icmp -j REJECT





iptables [-t table] {-A|-D} chain rule-specification

  -A:append,附加一条规则

     rule-specification

     匹配条件 -j 处理机制

匹配条件:

通用匹配

     -s 匹配原地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16 相当于 --src,或 --source

     -d  匹配目标地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16

     -p  匹配协议,通常只能使用{TCP|UDP|ICMP}三者之一

     -i  数据报文流入的接口,通常只用于INPUT,FORWARD和PREROUTING

     -o  数据报文流出的接口,通常只用OUTPUT,FORWARD和POSTROUTING





     保存规则:

       service iptables save 

        规则会被保存至/etc/sysconfig/iptables文件中:

        默认,start时也会读取次文件中的内容以设置规则

        iptables-save > /path/to/some_rulefile 保存iptables至别的位置

        iptables-restore < /path/to/some_rulefile 从自定义的位置读取并使之生效

规则命令:

  -A:添加

  -D:删除

  iptables [-t table] -D chain rulenum

    当一条被删除,另外的一条会被补上

删除INPUT和OUTPUT中的第二条规则

# iptables -t filter -D INPUT 2

# iptables -t filter -D OUTPUT 2

插入规则

  iptables [-t table] -I chain [rulenum] rule-specification

   

  替换规则(覆盖指定规则)

  iptables [-t table] -R chain rulenum rule-specification





  显示指定链上的规则添加命令

  iptables [-t table] -S [chain [rulenum]]

扩展匹配

隐含扩展:使用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展

       -p tcp

          --dport m[-n],匹配的目标端口,可以是连续的多个端口

          --sport:m[-n],匹配的源端口,可以是连续的多个端口

          --tcp-flags

URG PSH PST SYN ACK FIN

显式扩展:必须要明确指定的扩展模块

      -m 扩展模块名称 --专用选项1 --专用选项2





      multiport:多端口匹配,一次指定多个离散端口

        --source-ports --sport ports{port1 port2}

        --destination-ports, --dports

        --ports





     iprange:ip地址服务 

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

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





     time 指定时间范围

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

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





        --timestart hh:mm[:ss]

        --timestart hh:mm[:ss]





        [!] --weekdays day[,day....]





     string 字符串匹配

        --alog {bm|kmp} :字符匹配查找时使用的算法

        --string “STRING” :要查找的字符串

        --hex-string "HEX-STRING" 要查找的字符,先编码成16进制格式





      connlimit:每IP对指定服务的最大并发连接数

       [!] --connlimit-above





      limit:报文速率控制

        --limit #[/second|/minute|/hour|/day]

        --limit-burst # 

        hping3:安装此包,做测试





      state:状态追踪

          ip_conntrack,nf_conntrack





          netfilter:会话

           

         --state

             NEW

             ESTABLISHED

             RELATED

             INVALID

             

      调整连接追踪功能所能容纳的最大连接数

          cat /proc/sys/net/nf_conntrack_max

              定义了连接追踪的最大值,因此,建议按需调大此值

          cat /proc/net/nf_conntrack

             记录了当前追踪的所有连接

          cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established 

          超时时间





          法则:

          1.对于进入状态为ESTABLISHED都应该放行

          2.对于返回状态为ESTABLISHED都应该放行

          3.严格检查进入的状态为NEW的链接

          4.所有状态为INVALID都应该拒绝

  iptable -I lean_in 5 -d 172.16.100.7 -m state --state INVALID -j DROP





      -j target

            RETURN:返回调用链

常见服务规则案例:

放行来自于网络192.168.11.0/24对本机192.168.8.40 ssh服务的访问:

# iptables -t filter -A INPUT -s 192.168.11.0/24 -d 192.168.8.40 -p tcp --dport 22 -j ACCEPT

# iptables -t filter -A OUTPUT -s 192.168.8.40 -d 192.168.11.0/24 -p tcp --sport 22 -j ACCEPT

拒绝来自192.168.11.0网段对192.168.8.40 web 80端口的访问

# iptables -A INPUT -s 192.168.11.0/24 -d 192.168.8.40 -p tcp --dport 80 -j DROP

# iptables -A OUTPUT -s 192.168.8.40 -d 192.168.11.0/24 -p tcp --sport 80 -j DROP

-p udp

          --dport m[-n],匹配的目标端口,可以是连续的多个端口

          --sport:m[-n],匹配的源端口,可以是连续的多个端口





放行本机的tftp服务

# iptables -A INPUT -s 192.168.11.0/24 -d 192.168.8.40 -p udp --dport 69 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -d 192.168.11.0/24 -p udp --sport 69 -j ACCEPT





放行本机的DNS服务

# iptables -A INPUT -s 192.168.0.0/16 -d 192.168.8.40 -p udp --dport 53 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -d 192.168.0.0/16 -p udp --sport 53 -j ACCEPT

查询互联网dns

# iptables -A OUTPUT -s 192.168.8.40 -p udp --dport 53 -j ACCEPT

# iptables -A INPUT -d 192.168.8.40 -p udp --sport 53 -j ACCEPT





       -p icmp

           --icmp-type

8:ping请求

0:ping响应

放开本机的ping响应

# iptables -A INPUT -d 192.168.8.40 -p icmp --icmp-type 8 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p icmp --icmp-type 0 -j ACCEPT







将input、output和forward都禁用

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP

# iptables -P FORWARD DROP





放行192.168.11.0/24网络对80端口访问

# iptables -t filter -A INPUT -s 192.168.11.0/24 -d 192.168.8.40 -p tcp --dport 80 -j ACCEPT

# iptables -t filter -A OUTPUT -s 192.168.8.40 -d 192.168.11.0/24 -p tcp --sport 80 -j ACCEPT

放行3306端口对所有主机的访问

# iptables -t filter -A INPUT -d 192.168.8.40 -p tcp --dport 3306 -j ACCEPT

# iptables -t filter -A OUTPUT -s 192.168.8.40 -p tcp --sport 3306 -j ACCEPT





放行对本地回环口的访问:

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT

保存规则

# service iptables save

扩展匹配之状态追踪案例

初始化
# iptables -P INPUT ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -F

放行对192.168.8.40 新建立、已经建立连接的ssh服务访问
# iptables -A INPUT -d 192.168.8.40 -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP




//对每秒2次,高峰5次的ping包给予响应

# iptables -A INPUT -d 192.168.8.40 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 5 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT





//放行80端口

# iptables -A INPUT -d 192.168.8.40 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT





验证

# curl -I http://192.168.8.40/index.html

HTTP/1.1 200 OK

Date: Mon, 28 Dec 2015 15:11:36 GMT

Server: Apache/2.4.9 (Unix)

Last-Modified: Sun, 27 Dec 2015 19:39:40 GMT

ETag: "1c-527e659749c1c"

Accept-Ranges: bytes

Content-Length: 28

Content-Type: text/html





//对输入、输出已经建立的连接放行

# iptables -I INPUT -d 192.168.8.40 -m state --state ESTABLISHED -j ACCEPT

# iptables -I OUTPUT -s 192.168.8.40 -m state --state ESTABLISHED -j ACCEPT





对规则进行合并

# iptables -I INPUT 2 -d 192.168.8.40 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT





删除无用规则

# iptables -L -n -v --line-numbers

# iptables -D INPUT 3

# iptables -D INPUT 4





# iptables -D OUTPUT 2

# iptables -D OUTPUT 2

# iptables -D OUTPUT 2





# iptables -L -n -v --line-numbers





通过命令观察数据变化

# watch -n .3 "iptables -L -n -v"

扩展案例之RETURN:返回调用链

# iptables -t filter -N clean_in

//对数据包进行清洗

# iptables -A clean_in -d 192.168.8.40 -p tcp --tcp-flags ALL ALL -j DROP

# iptables -A clean_in -d 192.168.8.40 -p tcp --tcp-flags ALL NONE -j DROP

# iptables -A clean_in -d 192.168.255.255 -p icmp -j DROP

# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP





//应用clean_in规则

# iptables -A clean_in -d 192.168.8.40 -j RETURN

# iptables -I INPUT -d 192.168.8.40 -j clean_in





将INVALID状态的连接放弃

# iptables -I clean_in 5 -d 192.168.8.40 -m state --state INVALID -j DROP

放行工作于被动模式的ftp服务

1、确保iptables加载ftp协议支持的模块,ip_nat_ftp,ip_conntrack_ftp

      编辑/etc/syconfig/iftables-config文件,定义如下参数:

      IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

    2、放行请求报文的RELATED和ESTABLISHED状态,放行响应报文的ESTABLISHED状态





具体步骤:

初始化:放行所有出和入的请求,开放ssh服务22号端口的访问并关闭所有进出请求

# iptables -P INPUT ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -F





# iptables -A INPUT -d 192.168.8.40 -p tcp --dport 22 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p tcp --sport 22 -j ACCEPT

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP





# iptables -A INPUT -d 192.168.8.40 -p tcp --dport 21 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p tcp --sport 21 -j ACCEPT





放开21号端口不能访问FTP服务,继续放开20号端口依旧不能访问192.168.8.40的FTP服务(21号端口主要用来建立会话、认证,20号端口用来传输数据)

# iptables -A INPUT -d 192.168.8.40 -p tcp --dport 20 -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -p tcp --sport 20 -j ACCEPT





删除这两条无用的规则

# iptables -D INPUT 3

# iptables -D OUTPUT 3





# iptables -A INPUT -d 192.168.8.40 -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -s 192.168.8.40 -m state --state ESTABLISHED -j ACCEPT





加载FTP扩展模块(临时有效)

# modprobe ip_nat_ftp

# modprobe ip_conntrack_ftp





想长期有效需要修改配置文件

# vim /etc/sysconfig/iptables-config 

修改:

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"





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

优化之 开放21,22,80端口的访问

# iptables -I INPUT -d 192.168.8.40 -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -D INPUT 4





# iptables -I INPUT 2 -d 192.168.8.40 -p tcp -m multiport --dport 21,22,80 -m state --state NEW -j ACCEPT

# iptables -D INPUT 3

# iptables -D INPUT 3





# iptables -I OUTPUT -s 192.168.8.40 -m state --state ESTABLISHED -j ACCEPT

# iptables -D OUTPUT 2

# iptables -D OUTPUT 2

# iptables -D OUTPUT 2





保存规则





# iptables-save > /etc/sysconfig/iptables-v1





清空规则

# echo "" > /etc/sysconfig/iptables

# sed -i "/^$/d" /etc/sysconfig/iptables





恢复规则

# iptables-restore < /etc/sysconfig/iptables-v1

centos6中iptables单机网络防火墙的使用的更多相关文章

  1. iptables详解(11):iptables之网络防火墙

    我们一起来回顾一下之前的知识,在第一篇介绍iptables的文章中,我们就描述过防火墙的概念,我们说过,防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防 ...

  2. iptables实现网络防火墙及地址转换

    iptables主机防火墙功能及常用命令 FSM:Finite State Machine 有限状态机 客户端:closed -->syn_sent -->established --&g ...

  3. Centos中iptables和firewall防火墙开启、关闭、查看状态、基本设置等(转)

    iptables防火墙 1.基本操作 # 查看防火墙状态 service iptables status   # 停止防火墙 service iptables stop   # 启动防火墙 servi ...

  4. 【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作

    1.黑白名单当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单&qu ...

  5. 4.iptables 网络防火墙

    [1] #如果想要iptables作为网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文. [2] #使用如下命令查看当前主机是否已经开启了核心转发,0表示为开启,1表示已开启 c ...

  6. Linux之iptables(四、网络防火墙及NAT)

    网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...

  7. iptables网络防火墙和SNAT原理实战

    网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...

  8. 网络防火墙和NAT地址转换

    网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...

  9. 网络防火墙之iptables的前世今生和归宿

    任何事物都有一个从无到有,再归于无的过程.是的,我这里用了一个绝对词:任何. 防火墙 在计算机领域中,防火墙(英文:Firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的 ...

随机推荐

  1. Luogu 1083 借教室(二分,差分)

    Luogu 1083 借教室(二分,差分) Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不 ...

  2. C# 面向对象的封装、继承、多态

    一.封装: 封装:把客观的事物封装成类,使用和修改方便: 作用和结构体使用方法相似,程序执行流程不同: 要点:成员变量,属性,成员方法,构造函数,成员方法的静态和非静态,命名空间,常用的访问修饰符pu ...

  3. A1071. Speech Patterns

    People often have a preference among synonyms of the same word. For example, some may prefer "t ...

  4. sys模块(二十一)

    用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Pyt ...

  5. typescript函数(笔记非干货)

    函数类型 Function Type 为函数定义类型 Define types for functions 我们可以给每个参数添加类型之后再为函数本身添加返回值类型. TypeScript能够根据返回 ...

  6. 有趣的async

    在项目的开发过程中,同步异步是一个很重要的概念.但是在js中,又会有稍微的不同. 依据微软的MSDN上的解说: (1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所 ...

  7. Spring Schedule整合配置

    Spring Schedule是spring提供的任务调度框架.很简单,也很强大,简单是因为只需要在spring配置文件中写一行代码配置一下.就ok,强大是因为调度表达式.这里会给出一个网站,在线生成 ...

  8. Python 爬虫: 抓取花瓣网图片

    接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...

  9. Python HTML操作(HTMLParser)

    HTML操作是编程中很重要的一块,下面用Python3.x中的html.parser中的HTMLParser类来进行HTML的解析. HTMLParser类定义及常用方法 标准库中的定义 class ...

  10. wireshark数据包分析

    最近有不少同事开始学习Wireshark,他们遇到的第一个困难就是理解不了主界面上的提示信息,于是跑来问我.问的人多了,我也总结成一篇文章,希望对大家有所帮助.Wireshark的提示可是其最有价值之 ...