iptables之tcp_wrapper

Iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max 链接碰到各种状态的超时后就会从表中删除

所以解决方法有两个:

加大ip_conntrack_max

Vi/etc/sysctl.conf

                     Net.ipv4.ip_conntrack_max=393216

                     Net.ipv4.netfilter.ip_conntrack_max=393216

       降低ip_conntrack timeout 时间

              Vi/etc/sysctl.conf

              Net.ipv4.netfilter.ip_conntrack_tcp_timeout_established= 300

              Net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120

              Net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60

              Net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

 

通过自定义链,禁用广播ping

Iptables –N clean_in

Iptables –A clean_in –d 255.255.255.255 –p icmp –jDROP

Iptables –A clean_in –d 172.16.255.255 –p icmp –jDROP

Iptables –A clean_in  -p tcp ! –syn –m state –state NEW –j DROP

Iptables –A clean_in –p tcp –tcp-flags ALL ALL –jDROP

Iptables –A clean_in –p tcp –tcp-flags ALL NONE –jDROP

Iptables –A clean_in –d 172.16.100.7 –j RETURN     #检查完后返回到主链中

Iptables –A INPUT –d 172.16.100.7 –j clean_in        # 所有到172.16.100.7的数据先要经过clean_in链赛选后才能通过

Iptables –A INPUT –I lo –j ACCEPT   #本地内部进程通信

Iptables –A OUTPUT –o lo –j      ACCEPT#本地内部进程通信

 

 

禁用共享服务:

Iptables –A INPUT –I eth0  –m multiport –p tcp –dports53,113,135,137,139,445 –j DROP

Iptables –A INPUT –I eth0  -m multiport –p udp –dports53,113,135,137,139,445 –j DROP

Iptables –A INPUT –I eth0 –p udp –dport 1026 –jDROP

Iptables –A INPUT –I eth0 –m multiport –p tcp–dports 1433,4899 –j DROP

 

ICMP速率进行限制:

Iptables –A INPUT –p icmp –m limit –limit 10/second–j ACCEPT

 

 

利用iptables recent模块来抵御DOS攻击:

Iptables –I INPUT –p tcp –dport 22 –m connlimit–connlimit-above 3 –j DROP

 

利用connlimit模块将单IP的并发量设置为3,会误杀使用NAT上网的用户,可以根据实际情况增大这个值

利用recentstate模块限制单IP300s内只能与本机建立2个新连接,被限制5分钟后即可恢复访问

Iptables –I INPUT –p tcp –dport 22 –m state –stateNEW –m recent –set –name SSH

Iptables –IINPUT –P tcp –dport 22 –m state –state NEW –m recent –update –seconds 300–hitcount 3 –name SSH –j LOG –log-prefix ‘SSH Attach:’

Iptables –I INPUT –p tcp –dport 22 –m state –stateNEW –m recent –update –seconds 300 –hitcount 3 –name SSH –j DROP

 

Recent模块,layer7模块

 

 

Tcp_wrapper:tcp包装器

对基于tcp协议开发并提供服务的应用程序,提供的一层访问控制工具:

基于库调用实现其功能:

       Libwrap

 

判断服务是否能够由tcp_wrapper进行访问控制:

动态编译:ldd命令显示出连接至libwrap

[root@localhost~]# ldd `which sshd`

       linux-vdso.so.1 =>  (0x00007fffadca5000)

       libfipscheck.so.1 =>/lib64/libfipscheck.so.1 (0x00007f7184104000)

       libwrap.so.0 => /lib64/libwrap.so.0(0x00007f7183ef9000) #表示sshd可以受到tcp_wrapper控制

 

静态编译:strings命令查看应用程序文件,其结果中如果出现

                     Hosts.allow

                     Hosts.deny

 

在配置文件中在为各服务分别定义访问控制规则实现访问控制

              /etc/hosts.allow

              /etc/hosts.deny

匹配规则:

       先检查hosts.allow文件,再检查hosts.deny,默认是allow允许的

 

 

 

 

配置文件语法;

              Daemon_list: client_list[:options]

              Daemon_list:

                            表示应用程序的文件名称,而非服务名(named,dns)

                            应用程序文件名称列表,彼此间使用逗号分隔

                            Eg: sshd,vsftpd

                                   ALL: 表示所有受tcp_wrapper服务

      

                     Client_list:

                            Ip地址:

                            主机名

                            网络地址:必须使用完整格式的掩码,不能使用前缀式掩码,172.16.0.0/16不合要求

                            简短格式的网络地址:eg:172.16.  表示172.16.0.0/255.255.0.0

                            ALL:表示所有来源主机

                            KNOWN:

                            UNKNOWN

                            PARANOID

配置实例:

 Vsftpd服务不允许172.16.100.1访问

                     Vim/etc/hosts.deny

                            Vsftpd:172.16.100.1

                     Systemctlstart vsftpd.service

                     Ss–tln

 

仅允许指定的IP地址访问;

       Vim/etc/hosts.allow

              Vsftpd:172.16.100.1

       Vim/etc/hosts.deny

              Vsftpd:ALL

 

 

排除指定的主机除外:

方法一:

    vim /etc/host.allow

        vsftpd: 172.16.  EXCEPT172.16.100.0/255.255.255.0  EXCEPT172.16.100.6

 

       vim/etc/host.deny 为空

 

方法二:

    vim /etc/host.allow 为空

    vim /etc/host.deny

        vsftpd: ALL EXCEPT 172.16.

 

 

 

 

[:options]

            deny:拒绝,主要用于host.allow文件中

            allow:允许,用于hosts.deny文件中,用于实现allow的功能

            spawn:启动额外应用程序

eg:

            vim /etc/hosts.allow

                        vsftpd:172.16. :deny      #禁止172.16网络访问vsftpd

            vim /etc/hosts.deny 为空

 

eg:        记录拒绝主机的访问日志信息

            vim /etc/hosts.allow 为空

            vim /etc/hosts.deny

                        vsftpd: ALL:spawn /bin/echo `date` login attempt from %c to %s,%d>>/var/log/vsftpd.deny.log

                        %c:       client ip

                        %s:       server ip

                        %d:       daemon name

            [root@node229 ~]# cat/var/log/vsftpd.deny.log

            Fri Sep 15 09:23:37 CST2017 login attenpt from 192.168.2.220 to vsftpd@192.168.2.229,vsftpd

 

 

 

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS