欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 28_02 _iptables系列之基本应用及显式扩展 有大用

tcp/ip 协议栈属于内核


iptables/netfilter

表:

   raw,mangle,nat,filter

    PRETOUTING ,INPUT,OUTPUT,FORWARD OUTPUT,POSTROUTING

filter

    INPUT,OUTPUT,FORWARD 

nat

    PRETOUTING,OUTPUT,POSTROUTING(SNAT)

mangle

    PRETOUTING ,INPUT,OUTPUT,FORWARD OUTPUT,POSTROUTING

raw

    PRETOUTING  OUTPUT


netfilter: Framework         TC/IP协议站,内核中


iptables:写规则,并送到至netfilter的某一条链,但它必须要先属于某张表


iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件(匹配标准) -j 处理动作(处理办法)

        num 指的是链中的第几条规则 

        -t (table)可以省略,默认为 filter


匹配条件:


        通用匹配 (普通匹配)

            -s,--src  指定源ip地址,源网络

            -d,--dst  指定目标ip地址,目标网络

            -p {tcp|udp|icmp}  指定协议

            -i INTERFACE  (input interface)(比如 ethX网卡,pptX网络接口):指定数据报文流入的接口 (进来的)

                        PREROUTING,INPUT,FORWARD 用在这些链上,可用于定义的标准链

            -o INTERFACE  (output interface)(比如 ethX网卡,pptX网络接口):指定数据报文流出的接口 (出去的)

                        POSTROUTING,OUTPUT,FORWARD 用在这些链上,可用于定义的标准链

     

        扩展匹配:使用netfilter的扩展模块才能完成的匹配

                隐含扩展(隐式扩展):(当我们使用-p实施某协议之后)不需要明确指定(特别指明)由哪个模块扩展,因为此时使用了 -p {tcp|udp|icmp}

                    -p tcp

                            --sport PORT[-PORT]:源端口, (source port)         例如 80-100 只能是连续的端口,不能是隔开的端口

                            --dport PORT[-PORT]:目标端口,(destination port)       例如 80-100 只能是连续的端口,不能是隔开的端口

                            --tcp-flags: mask comp  (compare) :只检查mask指定的标志位,是逗号分隔的标志位列表. comp (compare):此列表中的位必须为1,而comp中未出现且mask中出现的必须为0

                                    --tcp-flags SYN,FIN,RST,ACK SYN,ACK         ( 这里SYN,ACK必须为1,FIN,RST必须为0)

                                    --tcp-flags SYN,FIN,RST,ACK SYN    =    --syn    (这是三次握手的第一次因为它用得比较多,所以用 --syn来简写它)

                            --syn   (--tcp-flags SYN,FIN,RST,ACK SYN 的简写,因为它用得比较多)  这是三次握手的第一次


                    -p icmp

                            --icmp-type:(icmp报文的类型)   类型对照表 /node-admin/12464

                                0:echo-replay 响应报文

                                8:echo-request 请求报文

                    -p udp

                            --sport PORT[-PORT]:源端口, (source port)     

                            --dport PORT[-PORT]:目标端口,(destination port)    


                    隐含扩展也可以使用显式扩展的(比如 -p tcp --dport 可以写成 -p tcp -m tcp --dport)



                显式扩展:必须指明由哪个模块进行的扩展,在 iptables中使用-m选项可完成此功能  使用额外的条件匹配机制(比如报文的速度,追踪会话连接的状态,可以根据时间来放行数据报文的) -m 是match的意思  MATCH EXTENSIONS 匹配扩展

                    -m EXTENSION  --spe-opt       (--spe-opt 指定选项,指定独有选项)

                        state: 状态扩展

                            结合ip_conntrack追踪会话的状态 (与TCP协议状态其实不一样,是根据ip来的)(可以追踪三种协议  tcp udp icmp)

                                    NEW: 新连接请求 (相当于TCP/IP握手的第一次),但是ping别人第一次也是NEW,udp第一次也是NEW

                                    ESTABLISHED: 已建立的连接 (对新请求的响应)        

                                    INVALID: 非法连接(非法报文)    (比如报文 SYN=1,FIN=1) 

                                    RELATED: 相关联的  (比如 ftp 命令连接和数据连接,数据连接由于命令连接中的某个命令激活的,比如get mget,put,mput都可以激活) 由命令连接激活的另一个连接,这种两个关系叫做RELATED  (它其实是专为ftp服务器而设定的)

                                (例子 -m state --state NEW -j ACCEPT ,,,,-m state --state NEW,ESTABLISHED -j ACCEPT)

                                (NEW,ESTABLISHED 可以用逗号隔开两个状态,表示这两个状态的都一律放行)

                                

要使用 ftp 功能,首先要装载 ip_conntrack_ftp和 ip_nat_ftp模块


                    multiport:离散的多端口匹配扩展

                            --source-ports

                            --destination-ports

                            --ports  (不指定源或目标端口,只要是端口就行,包括源和目标)

                                    (比如 -m multiport --destination-ports 21,22,80 -j ACCEPT)

                                            (这里端口不连续用逗号)(端口连续的话 用冒号) (最多支持15个端口)

image.png

    



条件取反 !                   -s ! 192.168.1.15  (感叹号表示取反,除了它之外的都可以作为源地址)


保存规则

# service iptables save   或  (/etc/rc.d/init.d/iptables save)

 或(iptables-save > /etc/sysconfig/iptables.2013041801)  

# service iptables restart 不会自动读取  /etc/sysconfig/iptables.2013041801 所以重启后不会生效

所以 要使用 # iptables-restore < /etc/sysconfig/iptables.2013041801 (从这个文件读取iptables规则,并让它生效,难道此时不必重启iptables?)






iptables 命令:

    管理规则的命令

        -A: (append)附加一条规则,添加在链的尾部

        -I CHAIN [num]: (insert)插入一条规则,插入为对应CHAIN上的第num条,如果省略了num,则插入为第一条

        -D CHAIN [num]: (delete)删除指定链中第num条规则   (-D后面可以跟上匹配条件,也能够删除对应的规则)

        -R CHAIN [num]: (replace)替换(修改)指定链中第num条规则   (-D后面可以跟上匹配条件,也能够替换(修改)对应的规则)

            

    管理链的命令:

        -F [CHAIN]: (flush)    清空指定规则链  有点类似于批量执行 -D  ,如果省略了 CHAIN,只指定表,则清空(删除)对应表中的所有链

                    (# iptables -F  不指定链,那么会清空功能表filter中的所有的链)        

        -P CHAIN (ACCEPT或DROP或REJECT): (policy策略) 设指定链的默认规则(策略)

        -N:  (new)自定义一个新的空链

        -X:  (--delete-chain)删除一个自定义的空链 (必须要删除空的,非空的必须要先-F把它清空)

        -Z: (zero)置零(清空)指定链中所有规则的计数器

        -E: ( --rename-chain old-chain new-chain)重命名一条自定义的链


    查看链的命令:

        -L: (list) 显示指定表中的所有规则    (它是分链进行显示的) (它试图将ip反解为主机名,将端口反解为服务名,比如将25号端口反解为smtp)

    (尤其是反解ip地址为主机名的时候,如果没有配置dns服务器的时候,反解过程可能会很慢 ,这跟使用netstat 或route命令一个道理,使用我们再使用-n) 

                -n:(numberic)以数字格式显示主机地址和端口号

                -v: (verbose 冗长的 )显示链及规则的详细信息 (显示的报文的大小之和,它可能是M,G等,是近似值) 

                -vv: 显示链及规则的更详细信息      

                -vvv: 显示链及规则的更更详细信息      

                -x: (exact 精确的)显示计数器的精确值 

                --line-number:显示规则号码   (对修改或删除第几条规则有很大作用,不用人工数了)         


命令 -L, --list

范例: iptables -L INPUT

说明:列出INPUT规则链中的所有规则。

                                                                           

     

iptables 动作(target) (action): 用  -j 指定  (-j, --jump target)

        ACCEPT:放行,允许通过

        DROP:丢弃,

        REJECT:拒绝,明确告知对方拒绝会返回一条信息,告知客户端的,就不让你过

        DNAT (destination NAT) 目标地址转换

        SNAT (source NAT) 源地址转换

        REDIRECT 端口重定向

        MASQUERADE 地址伪装(说白了,也是目标地址转换(是源地址伪装?) DNAT) This target is only valid in the nat table, in the  POSTROUTING  chain. 主要目的就是为了postrouting实现nat地址转换的

                     (masquerade image.png 伪装;假扮;乔装;冒充)

        LOG:记录日志,配置到哪个报文做log

        MARK:做标识,给一个报文打上标记


    



-t (table)可以省略,默认为 filter

iptables -t filter -A  INPUT -s 172.16.2.2.16/16 -j DROP



172.16.100.7, sshd: 22/tcp

放行来自于172.16.0.0对于本机的 ssh 的访问

iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT

iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT



service iptables stop     service iptables start     service iptables restart      service iptables status     

iptables 不是服务,是内核中的规则,内核中的规则是即时生效的

              但有服务脚本,服务脚本的主要目的在于管理(生效,清除,重新载入等等)保存的规则的,

(我们写的规则都是放在内核的内存空间上的,一旦一关机,规则就没有了)

iptables  服务的启动和停止   本身就是装载或移除 iptables/netfilter 相关的内核模块

iptables_filter,iptables_nat,iptables_mangle,iptables_raw,ip_nat(ip报文实现nat功能的补充模块),iptables_conntrack(connection track 转换的报文连接追踪)

一旦启动服务,这些模块就被装载进来了,而且此前所保存的规则也就生效起来了,其实装载它们可以自己手动写脚本进行,没必要非得使用iptables服务,

因为它们根本(本身)就不是服务



Server:192.168.1.15

sshd,httpd





# man iptables

image.png

 iptables -t tables 是可以省略的 默认的表为 filter ,不指的话为filter


[root@localhost ~]# iptables -L -n

image.png


[root@localhost ~]# iptables -t filter  -L -n

image.png


[root@localhost ~]# iptables -t nat -L -n

image.png


[root@localhost ~]# iptables -t mangle -L -n

image.png


pkts 数据包的个数

bytes 报文的大小之和

[root@localhost ~]# iptables -L -n -v   (-v显示详细信息) (81M是近似值)

image.png

image.png

[root@localhost ~]# iptables -L -n -vv   (-vv显示更详细信息)

image.png

[root@localhost ~]# iptables -L -n -vvv   (-vvv显示更更详细信息)

image.png


[root@localhost ~]# iptables -L -n -v -x  (不再做单位换数,明确告知多少字节)

image.png


# man iptables

image.png


image.png

image.pngimage.png

NOTRACK,不做任何追踪,用于raw表,在实现连接追踪的时候,禁止追踪某一个相应的报文

image.png


image.png



[root@localhost ~]# service iptables status            (看看iptables 服务有没有启动,只要看到下面的一大堆链出来,说明iptables 就是启动的)

image.png



# lsmod   (列出内核装载的模块)    (内核启动模块之后.这些模块都会被装载进来,这表示服务已经启动了)

image.png


[root@localhost ~]# lsmod | grep ip

image.png


[root@localhost ~]# service iptables stop        (停止iptables服务 一般来说,就是内核中移除这些模块)

image.png

[root@localhost ~]# lsmod | grep ip          (此时关于iptables的模块就没有了)

image.png


service iptables stop     service iptables start     service iptables restart      service iptables status     

iptables  服务的启动和停止 本身就是让内核装载或移除(卸载)iptables 相关的模块



[root@localhost ~]# iptables -t filter  -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT

[root@localhost ~]#

[root@localhost ~]# iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

[root@localhost ~]#

[root@localhost ~]# iptables -L -n

image.png


[root@localhost ~]# iptables -L -n -v

image.png

[root@localhost ~]# iptables -L -n -vv

image.png

[root@localhost ~]# iptables -L -n -vvv

image.png


[root@localhost yum.repos.d]# yum install httpd vsftpd mysql-server -y


[root@localhost yum.repos.d]# service httpd start

image.png



[root@localhost yum.repos.d]# netstat -tnlp

image.png

[root@localhost yum.repos.d]# setenforce 0

setenforce: SELinux is disabled


可能由于防火墙的问题  浏览器打不开这个80端口,在 /etc/sysconfig/iptables 要加上这一行

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT


然后 浏览器可以打开 httpd  80端口

image.png





让 ssh 通过 22 端口

image.png

修改默认策略

[root@localhost yum.repos.d]# iptables -P INPUT DROP

[root@localhost yum.repos.d]# iptables -P OUTPUT DROP

[root@localhost yum.repos.d]# iptables -P FORWARD DROP


# iptables -L -n

image.png


此时 因为 drop 所以 80端口打不开了

image.png


-s 0.0.0.0/0 任意地址的时候 可以不用写

(-I 的插入的意思 如果 -I 后的INPUT 后面 没有跟位置(一个数字),就是插入第一条)

[root@localhost ~]# iptables -I INPUT -s 0.0.0.0/0 -d 192.168.1.15 -p tcp --dport 80 -j ACCEPT

                                 ( iptables -I INPUT  -d 192.168.1.15 -p tcp --dport 80 -j ACCEPT )

image.png



[root@localhost ~]# iptables -t filter -I OUTPUT -s 192.168.1.15 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT


进去的 80 和 出去的 80 都是 accept了 所以现在可以访问了

image.png




[root@localhost html]# echo hello > /var/www/html/index.html

image.png

此时看到效果了

image.png

ping 不能 啥原因?  因为ping 请求用的是icmp协议

image.png


# ping 127.0.0.1     (虽然是本地回环地址,但从网强的角度,仍然需要从output链出去,再从input链进来)

image.png

放行自己对自己的访问

(-i 表示进来的网卡 input interface )(-o 表示出去的网卡 output interface ) ( lo 表示本地回环网卡 ) 

[root@localhost html]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT

[root@localhost html]# iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

[root@localhost html]#

# ping 127.0.0.1             现在可以了

image.png


别人 ping 还是不行

image.png


ping 别人也是不行

[root@localhost html]# ping 192.168.1.101

image.png


image.png


ping 别人 出去的 request --icmp-type 8 

[root@localhost html]# iptables -A OUTPUT -s 192.168.1.15 -p icmp --icmp-type 8 -j ACCEPT

ping 别人 进来的 replay --icmp-type 0

[root@localhost html]# iptables -A INPUT -d 192.168.1.15 -p icmp --icmp-type 0 -j ACCEPT


[root@localhost html]# ping 192.168.1.101            (现在可以ping通别人了)

image.png


dns 服务既要考虑 udp,也要考虑 tcp

udp 需要4条 tcp 也需要4条,共8条

客户端请求我,然后 我再作为客户端请求另外一个服务器

image.png



image.png


连接追踪的功能 

image.png



/proc/ 目录下 ,其实是在内存当中的,


ip_conntrack 是根据ip地址来追踪的

image.png



[root@localhost html]# cat /proc/net/ip_conntrack  (就是ip的追踪信息)image.png






[root@localhost html]# iptstate  (全称就是 iptables state能够查看连接信息,专门用于追踪iptables的状态)  (只能查看tcp信息,不能查看udp,icmp)

image.png



[root@localhost html]# man iptstate

image.png




[root@localhost html]# iptstate -t    (能显示当前所有连接的个数)

image.png


它( cat /proc/net/ip_conntrack ,  iptstate  )不会追踪icmp和udp的信息

(它只保留tcp相关的连接信息)


ip_conntrack 是根据ip地址来追踪的,应该tcp,udp,icmp都能够追踪吧,这里保留的仅仅是tcp的模板,跟tcp相关的连接信息



能够实现对用户请求进来的报文,放行为new状态,

出去的报文仅允许为已建立的(出去的必须为响应的),

这样就能够避免反弹性木马对我们的攻击





[root@localhost html]# lsmod | grep ip

     ip_contrack 追踪报文(追踪地址转换的报文) (地址转换的报文要通过它自动管理)

image.png


# man modprobe

image.png

modprobe    (-r remove 移除)(-f force  强制)

[root@localhost html]# modprobe -r ip_conntrack

FATAL: Module ip_conntrack is in use.

[root@localhost html]#


[root@localhost html]# modprobe -r -f ip_conntrack

FATAL: Module ip_conntrack is in use.



[root@localhost html]# modprobe -r nfnetlink

FATAL: Module nfnetlink is in use.



[root@localhost html]# service iptables stop

清除防火墙规则:                                           [确定]

把 chains 设置为 ACCEPT 策略:filter                       [确定]

正在卸载 Iiptables 模块:                                  [确定]




[root@localhost html]# lsmod | grep ip

ipt_REJECT             38849  0

ip6t_REJECT            38721  1

ip6table_filter        36033  1

ip6_tables             50177  1 ip6table_filter

x_tables               50505  4 ipt_REJECT,ip6t_REJECT,xt_tcpudp,ip6_tables

ipv6                  438625  90 ip6t_REJECT,rdma_cm,ib_addr,cnic

xfrm_nalgo             43333  1 ipv6

acpiphp                58841  0

dm_multipath           58969  0

scsi_dh                42561  1 dm_multipath

dm_mod                103313  11 dm_multipath,dm_raid45,dm_snapshot,dm_zero,dm_mirror,dm_log

[root@localhost html]#


[root@localhost html]# cat /proc/net/ip_contrack   (一旦ip_contrack这个模块移除(service iptables stop 肯定会移除iptables相关的模块),这个文件就没有了)

image.png


[root@localhost html]# modprobe ip_conntrack  (装载 ip_conntrack  模块)

[root@localhost html]# cat /proc/net/ip_conntrack  (装载 ip_conntrack  模块后,可以看到追踪的情况了)

tcp      6 431999 ESTABLISHED src=192.168.1.15 dst=192.168.1.101 sport=22 dport=3618 packets=24 bytes=2256 src=192.168.1.101 dst=192.168.1.15 sport=3618 dport=22 packets=35 bytes=2544 [ASSURED] mark=0 secmark=0 use=1

[root@localhost html]#


ip_conntrack  这个文件最多能保存(同时追踪)多少条目

(如果超过的话,那些连接就会因为超时而被丢弃)

# cat /proc/sys/net/ipv4/ip_conntrack_max

image.png



[root@localhost html]# lsmod | grep ip_conntrack (只要 ip_conntrack 一装载,马上就会主动追踪所有条目,

假如服务器非常繁忙,如果装载了这个模块,后续的用户请求无法正常建立连接,这是非常致命的,

在非常非常繁忙的服务器下,因此最好的办法就是不要触发启动这个模块;;;;当然有时场景上,我们启动这个模块,尽量调大它的ip_conntrack的值

)

ip_conntrack           92004  0

nfnetlink              40457  1 ip_conntrack



[root@localhost html]# service iptables restart

应用 iptables 防火墙规则:                                 [确定]

载入额外 iptables 模块:ip_conntrack_netbios_ns            [确定]


[root@localhost html]# service iptables stop

清除防火墙规则:                                           [确定]

把 chains 设置为 ACCEPT 策略:filter                       [确定]

正在卸载 Iiptables 模块:                                  [确定]



[root@localhost html]# lsmod | grep ip    (此时没有启动ip_conntrack)

image.png

[root@localhost html]# iptables -t nat -L        (它会激活 iptable_nat 和 ip_nat 因为  iptable_nat 和 ip_nat  与 ip_conntrack有依赖关系,所以 ip_conntrack也会被激活)

image.png



# lsmod | grep ip

image.png

image.png



[root@localhost html]# rpm -ql iptables        

image.png




   




[root@localhost ~]# iptables -t filter -A INPUT -d 192.168.1.15 -p tcp --dport 22 -j ACCEPT

[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.1.15 -p tcp --sport 22 -j ACCEPT

[root@localhost ~]#

[root@localhost ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.15        tcp dpt:22


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     tcp  --  192.168.1.15         0.0.0.0/0           tcp spt:22

[root@localhost ~]# iptables -L -n -v

Chain INPUT (policy ACCEPT 814 packets, 67157 bytes)

 pkts bytes target     prot opt in     out     source               destination 

  197 14276 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.15        tcp dpt:22


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination 


Chain OUTPUT (policy ACCEPT 278 packets, 28405 bytes)

 pkts bytes target     prot opt in     out     source               destination 

   33  3484 ACCEPT     tcp  --  *      *       192.168.1.15         0.0.0.0/0           tcp spt:22

[root@localhost ~]#



[root@localhost ~]# service iptables restart        (重启后刚加的条目就没有了) (重启iptables,会使用iptables命令清空整个表中的每一个链,还会重新加载它的配置文件 /etc/sysconfig/iptables) 这个文件保存有此前我们写过的规则

(如果文件没有保存,在启动的时候 就是读取这个配置文件来设定规则的)

[root@localhost ~]# iptables -L -n -v

image.png





[root@localhost ~]# iptables -t filter -A INPUT -d 192.168.1.15 -p tcp --dport 22 -j ACCEPT

[root@localhost ~]# service iptables save        (所以添加了规则后,即要内存中运行的规则, 要 保存到文件中)

将当前规则保存到 /etc/sysconfig/iptables:                 [确定]

[root@localhost ~]# cat /etc/sysconfig/iptables        (此时可以看到新添加的规则)


image.png





[root@localhost ~]# service iptables restart

image.png


[root@localhost ~]# iptables -L -n -v            (此时可以看到条目有了)

image.png



[root@localhost ~]# iptables -F        (清空filter功能表中的所有链)

[root@localhost ~]# iptables -t filter -A INPUT -d 192.168.1.15 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

(这个命令一写 ip_conntrack 这个模块应该很可能被加载进来了)

[root@localhost ~]# lsmod | grep ip  (放行进来的NEW,ESTABLISHED )

image.png



[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.1.15 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

(放行出去的ESTABLISHED )

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -P OUTPUT DROP

[root@localhost ~]#


[root@localhost ~]# iptables -t filter -A INPUT -d 192.168.1.15 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.1.15 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT


[root@localhost ~]# iptables -L -n

image.png


可以打开

image.png

[root@localhost ~]# iptstate

image.png

image.png


(设置连接追踪最大连接数)  

[root@localhost ~]# sysctl -w net.ipv4.ip_conntrack_max=65536 (不会永久有效)

net.ipv4.ip_conntrack_max = 65536


(vim /etc/sysctl.conf 永久有效)

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_conntrack_max

65536

[root@localhost ~]#


image.png



[root@localhost ~]# ls /proc/sys/net/ipv4/netfilter/        (有关于tcp的最多,udp,icmp只有超时)

ip_conntrack_buckets            ip_conntrack_tcp_timeout_close_wait

ip_conntrack_checksum           ip_conntrack_tcp_timeout_established

ip_conntrack_count              ip_conntrack_tcp_timeout_fin_wait

ip_conntrack_generic_timeout    ip_conntrack_tcp_timeout_last_ack

ip_conntrack_icmp_timeout       ip_conntrack_tcp_timeout_max_retrans

ip_conntrack_log_invalid        ip_conntrack_tcp_timeout_syn_recv

ip_conntrack_max                ip_conntrack_tcp_timeout_syn_sent

ip_conntrack_tcp_be_liberal     ip_conntrack_tcp_timeout_time_wait

ip_conntrack_tcp_loose          ip_conntrack_udp_timeout

ip_conntrack_tcp_max_retrans    ip_conntrack_udp_timeout_stream



icmp  超时是30秒

[root@localhost ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout

30

[root@localhost ~]#

[root@localhost ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

432000

[root@localhost ~]#


别人ping 进来的请求

[root@localhost ~]# iptables -t filter -A INPUT -d 192.168.1.15 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT


别人ping 出去的响应

[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.1.15 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT


此时 别人可以ping 通

image.png



[root@localhost ~]# iptables -L -n --line-numbers            (--line-numbers显示行号)

image.png



[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.15 -m state --state ESTABLIS        (-I 插入第几条,没有的话就是默认为1)

[root@localhost ~]#


[root@localhost ~]# iptables -L -n --line-numbers

[root@localhost ~]# iptables -L -n --line-numbers -v        

(被第一条规则匹配到,它就不会匹配第二条规则了)

image.png

匹配到第一条,后面的它就不检查了

[root@localhost ~]# iptables -D OUTPUT 2

[root@localhost ~]# iptables -D OUTPUT 2

[root@localhost ~]# iptables -D OUTPUT 2

[root@localhost ~]# iptables -L -n --line-numbers -v

image.png


[root@localhost ~]# iptables -A INPUT -d 192.168.1.15 -p tcp --dport 21 -m state --state NEW,ESTABLISH -j ACCEPT

image.png


[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT        (因为登录vsftp时本地要连mysql数据库,所以放行本地)

[root@localhost ~]# iptables -A OUTPUT -o lo -j ACCEPT            (因为登录vsftp时本地要连mysql数据库,所以放行本地)


[root@localhost ~]# ping 127.0.0.1

image.png



[root@localhost ~]# cd /etc/vsftpd/

[root@localhost vsftpd]# ls

ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh


这是关于ftp的内容 ,暂时我还不懂

image.png

image.png

PORT 是主动模式            PASV 是被动模式  


[root@localhost vsftpd]# iptables -A INPUT -d 192.168.1.15 -p tcp -m state --state RELATED -j ACCEPT


[root@localhost vsftpd]# iptables -L -n --line-numbers

image.png


image.png


image.png

vsftp 命令连接和数据连接 (数据连接PASV被动模式下,接受客户端的数据连接端口(这个端口是服务端发出随机端口的))

(但是我们不能开放1023的所有端口,因为不安全)

image.png


[root@localhost vsftpd]# iptables -R INPUT 6 -d 192.168.1.15 -m state --state RELATED,ESTABLISHED -j ACCEPT


image.png


看 现在可以了        (下面 ftp 的时候是21端口 但是 ls 的时候 是随机的一个端口 大约是1023以上的随机端口吧)

image.png



[root@localhost vsftpd]# vim /etc/sysconfig/iptables-config    (装载模块   ip_conntrack_ftp和 ip_nat_ftp模块)

多个模块的话,彼此间用空格隔开

image.png

然后 service iptables save 再然后  service iptables reload







 放行  vsftp( ftp ) 

1) 使用 vsftp (ftp) 需要装载 ip_conntrack_ftp和 ip_nat_ftp 这两个模块

2) iptables 的input链和output链中 放行 RELATED,ESTABLISHED


[root@localhost vsftpd]# iptables -L -n

image.png


 

[root@localhost vsftpd]# service iptables save

将当前规则保存到 /etc/sysconfig/iptables:                 [确定]




[root@localhost vsftpd]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.15        tcp dpt:22 state NEW,ESTABLISHED

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.15        tcp dpt:80 state NEW,ESTABLISHED

ACCEPT     icmp --  0.0.0.0/0            192.168.1.15        icmp type 8 state NEW,ESTABLISHED

ACCEPT     tcp  --  0.0.0.0/0            192.168.1.15        tcp dpt:21 state NEW,ESTABLISHED

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

ACCEPT     all  --  0.0.0.0/0            192.168.1.15        state RELATED,ESTABLISHED


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination


Chain OUTPUT (policy DROP)

target     prot opt source               destination

ACCEPT     all  --  192.168.1.15         0.0.0.0/0           state RELATED,ESTABLISHED

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0


Chain RH-Firewall-1-INPUT (0 references)

target     prot opt source               destination




[root@localhost vsftpd]# iptables -I INPUT -d 192.168.1.15 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

[root@localhost vsftpd]# iptables -L -n

image.png


[root@localhost vsftpd]# iptables -L -n --line-numbers

[root@localhost vsftpd]# iptables -D INPUT 7


[root@localhost vsftpd]# iptables -L -n

image.png



[root@localhost vsftpd]# iptables -L -n -v

image.png


image.png



[root@localhost vsftpd]# service iptables save

将当前规则保存到 /etc/sysconfig/iptables:                 [确定]

# vim /etc/sysconfig/iptables

image.png

image.png


[root@localhost vsftpd]# service iptables reload         (重新载入一下)

[root@localhost vsftpd]# iptables -L -n

image.png



# man iptables                (冒号:是连续端口  逗号,是一个一个的端口)

image.png



[root@localhost ~]# iptables -L -n

image.png


[root@localhost ~]# iptables -A INPUT -d 192.168.1.15 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT

[root@localhost ~]# iptables -L -n

image.png

普通分类: