iptables

定义:工作于网络或主机边缘,对进出本网络或本主机的网络报文按照事先设定好的匹配规则进行检查,对能够被规则所匹配的报文按照规则定义的处理机制进行处理的组件
1、处理tcp、ip数据是工作在内核层次上的,所以linux处理防火墙必须在内核实现,2.0之前没有实现
2、用于匹配报文的 有 源ip,目标ip,源端口,目标端口,TCP。防火墙工作再传输层和网络层
3、越是工作在低层的防火墙(网络层),性能越好,越是高层的防火墙(应用层),越能理解实际需求
4、并不是有防火墙就可以万无一失了,还应该有入侵防御系统
5、进入电脑的5个布局位置
6、默认规则是关闭的,还需要写关闭的规则,规则是有次序的。规则越严格的,越早判断越好
7、iptables 就是写这些规则并管理这些规则的次序的一个管理软件,最后还是要经过netfilter来实现,netfilter的实现离不开iptables的规则,所以防火墙的实现对于他们俩是相辅相成的
8、规则的功能(四个表,放置在5个检查点)

        filter:过滤
        nat:转换
          SNAT:源地址ip
          DNAT:目标地址ip
          PAT:端口转换(一般目标端口)
        mangle:把报文首部拆开,改标志位等,改完后再封装起来(5个位置都可以)
        raw:
          在一个地方实现两个功能,比如filter 和 mangle 

9、五个内置链:(每个点可以放不同功能)

    PREROUTING
    INPUT
    FORWARD
    OUTPUT
    POSTROUTING

10、在写iptables要指明那个点,和那个功能(表)
11、iptables

    大写字母选项:子命令
    小写字母选项:定义匹配标准及其它:
        -t{filter|nat|mangle|raw}默认filter
        -L:list  不加-t 是默认的filter的chain
        -n:数字格式,不做反向解析显示ip和端口,如果不加,都会反解析为主机名和服务名
        -v:详细信息。(显示两个计数器 package和bytes)
        --line-numbers:显示链中规则的行号
        -x:显示精确值,不要做单位换算
    其他子命令:
        管理链:
            -F:清空链 
                   iptables -t filter -F INPUT 清空filter表的INPUT链
                   iptables -F 清空filter(默认)表的所有链
            -P:设定默认策略
                   iptables -t filter -P INPUT DROP 设定INPUT链的默认策略为丢弃{ACCEPT|DROP}
            -N:新建一条自定义链(只能附加在内置链才能工作) iptables -N FILTER_WEB
            -X:删除自定义空链(删除之前先清空)
            -Z:重置计数器(-v 显示的那个计数器)
            -E:重命名自定义链
                管理规则:
                    -A:append 添加到尾部
                    -I[n]:插入为第n条,原来的第n条变为+1条
                    -D[n]:删除第n条规则
                    -R[n]:替换第n条规则

12、表和链对应的关系:

    filter:INPUT,FORWARD,OUTPUT
    nat:PREROUTING,POSTROUTING,OUTPUT
    mangle:PREROUTING,POSTROUTING,OUTPUT,INPUT,FORWARD
    raw:PREROUTING,OUTPUT

13、每个链都有其默认策略,policy ACCEPT 通常只需要修改filter表的默认策略
14、规则和默认策略都有两个计数器:

    package:被本规则所匹配到的包的个数
    bytes:所有被匹配到的包的大小和

15、编写规则语法:

    目标:DROP(上策)、ACCEPT、REJECT、RETURN(自定义链返回主链)
        REDIRECT:端口重定向  
        DNAT:目标地址转换 
        SNAT:源地址转换 
        LOG:记录日志(--log-prefix "日志前缀") 
        MARK:标记(负载均衡要用) 也可以是自定义链(要返回RETURN)
        iptables [-t 表] 大写选项字命令 [规则号] 链名 匹配标准 -j 目标   
    匹配标准:
        通用匹配:
            -s|--src|--source [!] IP/NETWORK  叹号表示取反
            -d|--dst|--destination [!] IP/NETWORK
                例:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -j ACCEPT
            设定默认:iptables -P INPUT DROP
                service iptables save 将目前rules写入到配置文件中 /etc/sysconfic/iptables
                iptables-save>/root/iptables.rules 将目前rules写入到重定向的文件中
                iptables-restore < /path/to/iptables.rules 生效文件中的规则
            -i incoming_interface:指定数据报文流入接口 INPUT FORWARD PREROUTING
            -o outing_interface:指定数据报文流出接口 OUTPUT FORWARD POSTROUTING
                iptables -R INPUT 1 -s 172.16.0.0/16 -d 172.16.100.1 -i eth0 -j ACCEPT
            -p {tcp|udp|icmp}明确说明哪一种协议
        扩展匹配:要使用     -m 扩展名称来引用,而每个模块一般都具有自己的专用选项,这些选项中,有些是必备的
            隐含扩展
                -p tcp
                    --sport 连续端口,不能间断,而且可以取反
                    --dport 连续端口,不能间断,而且可以取反
                    --tcp-flags 要检查的标志  必须为1的标记  (除了为1的标记,其他的标记都是0)
                        --tcp-flags SYN,ACK,RST,FIN  SYN
                        (前边是一个要检查的标记的表,后边是必须为1的标记,剩下的要必须为0 简写:--syn) 
                        ALL 所有标志位 NONE 所有标志位都为0
                            例:放行对web服务器的访问:
                                iptables -A INPUT -d 192.168.159.12 -p tcp --dport 80 -j ACCEPT
                                iptables -A OUTPUT -s 192.168.159.12 -p tcp --sport 80 -j ACCEPT
                -p udp
                    --sport
                    --dport 用法机制和tcp一样的
                        例如: 本地DNS服务器,INPUT OUTPUT 默认为DROP,本机地址172.161.100.1,要本地客户端做递归查询
                            iptables -A INPUT -d 172.16.100.1 -p udp --dport 53 -j ACCEPT
                            iptables -A OUTPUT-s 172.16.100.1 -p udp --sport 53 -j ACCEPT
                            iptables -A OUTPUT-s 172.16.100.1 -p udp --dport 53 -j ACCEPT
                            iptables -A INPUT -d 172.16.100.1 -p udp --sport 53 -j ACCEPT
                -p icmp
                    --icmp-type
                        请求:8  响应:0
                        例:放行192.168.159.0/24 网段的主机可以ping 本机,本机也可以ping 0/24的所有主机
                            iptables -A OUTPUT -s 192.168.159.12 -d 192.168.159.0/24 -p icmp --icmp-type 8 -j ACCEPT
                            iptables -A INPUT -s 192.168.159.0/24 -d 192.168.159.12 -p icmp --icmp-type 0 -j ACCEPT
                            iptables -A OUTPUT -s 192.168.159.12 -d 192.168.159.0/24 -p icmp --icmp-type 0 -j ACCEPT
                            iptables -A INPUT -s 192.168.159.0/24 -d 192.168.159.12 -p icmp --icmp-type 8 -j ACCEPT 
            显式扩展
                -m state --state
                    NEW,ESTABLISHED,RELATED,INVALID
                    ftp服务器需要装载,nf_conntrack_ftp模块,可以使用modprobe命令,也可以编辑/etc/sysconfig/iptables-config文件实现
                -m mulitport:可以指定15个以内的离散端口 21-23,80
                    --source-ports
                    --destination-ports
                    --ports
                        iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state NEW -m multiport --destination-prots 21,22,80 -j ACCEPT
                -m iprange:指定匹配的ip地址范围
                    172.16.100.1-172.16.109.254
                    --src-range
                    --dst-range
                -m limit 
                    --limit 20/min 
                    --limit-burst 2
                        iptables -I INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state NEW -m limit --limit 12/min --limit-burst 2  设置每分钟最多的次数,还有一次性进来的次数
                -m string 报文中字符串匹配 应用层
                    --string '' --algo kmp/bm
                        iptables -I OUTPUT 1 -d 172.16.0.0/16 -s 172.16.100.1 -p tcp --sport 80 -m string --string 'hello' --algo kmp -j REJECT http服务器返回字符串包含hello就不会被放行
                -m time
                    --datestart
                    --datestop
                    --timestart
                    --timestop
                    --weekdays
                    --monthdays
                -m connlimit 
                    --connlimit-above [num] 限制一个客户端最高发起的连接数
                        iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT
                -m hashlimit
                    原来的limit 只能限制总共访问的速率,而不能限制单个ip的访问速度,hashlimit 可以限制每个ip的速率
                -m recent
                    利用iptables的recent模块来抵御DOS攻击:22,建立一个列表,保存有所有访问过指定服务的客户端IP
                        iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
                    建立一个名字为SSH的列表,存储新建立的访问22端口的ip地址
                        iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --uptate --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attack" 先记录日志然后在DROP 日志放在var/log/message下
                        iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --uptate --seconds 300 --hitcount 3 --name SSH -j DROP
                    当用户访问22端口的时候会给列表中的字段自动更新,当在300秒之内,计数器打到3以后,就会拒绝此ip的访问(默认拒绝5分钟?)

练习:

     1、限制本地主机的web服务器在周一不允许访问;且新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
     2、在工作时间,既周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;
     3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许相应报文通过其服务端口离开本机;
     4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
     5、允许本机ping别的主机;但不开放别的主机ping本机;
SNAT:代理内部客户端访问外部网络。在iptables的POSTROUTING
    -j SNAT --to-source IP 适用static地址
    -j MASQUERADE 自动将source ip 设置为外网ip(拨号)
DNAT:将内部服务器发布至外部网络。在iptables的PREROUTING
    -j DNAT --to-destination IP:port
        不但能转换目标地址,还能映射目标端口
        iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 22 -j DNAT --to-destination 172.16.100.17  
            转换目标地址 然后就是在FORWARD链上加数据过滤规则就可以打到既转发又过滤的效果
        映射目标端口
            iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 80 -j DNAT  --to-destination 172.16.100.177:8080
                (将真实服务器的80端口改成8080,然后访问前一个主机的80)
            iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 6789 -j DNAT --to-destination 172.16.100.17:3306
                (将mysql服务器的真实3306端口隐藏起来,让用户去访问前一个主机的6789端口)
            iptables -A FORWARD -d 172.16.100.17 -p tcp --dport 3306 -m state --state ESTABLISHED
                (放行转换了端口的数据)
        主机实现不同网络间的转发 
            /proc/sys/net/ipv4/ip_forward 设置为1
            iptables -t nat -A POSTROUTING -s 192.168.117.0/24 -j SNAT --to-source 192.168.253.2
                将所有192.168.117.0网段的访问外网的请求的源地址改成192.168.253.2
            iptables -P FORWARD DROP 报文转发全部拒绝
FTP设置防火墙
    ftp链接的默认模式为被动模式
    主动模式配置
        port_enable=yes
        connect_from_port_20=YES
        iptables需要开启21端口的访问权限
            iptables -I INPUT -p tcp --dport 22 -j ACCEPT
            iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    被动模式设置
        1、设置开放端口
            iptables -I INPUT -p tcp --dport 21 -j ACCEPT
            /etc/vsftpd/vsftpd.conf
                pasv_min_port=50000
                pasv_max_port=60000
            iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
        2、加入内核追踪模块
            iptbales -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
            iptables -I INPUT -p tcp --dport 21 -j ACCEPT
            modprobe nf_conntrack_ftp
            vim /etc/sysconfig/iptables-config(开机自动加载)
            IPTABLIS_MODULES="nf_conntrack_ftp"
NAT
    SNAT
        iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
    DNAT
        iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容