#开启DHCP上网 #dhcpd eth0 #加载相关的内核模块 /sbin/modprobe ip_tables /sbin/modprobe ip_nat_ftp /sbin/modprobe ip_conntrack_ftp # 清除预设表 filter 中,所有规则链中的规则 /sbin/iptables -F # 清除nat表中,所有规则链中的规则 /sbin/iptables -F -t nat # 清除预设表 filter 中,使用者自订链中的规则 /sbin/iptables -X #将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具 /sbin/iptables -Z # 清除mangle表中,所有规则链中的规则 #iptables -F -t mangle # 清除mangle表中,使用者自订链中的规则 #iptables -t mangle -X # 清除nat表中,使用者自订链中的规则 #iptables -t nat -X #定义链的规则(设定预设规则) 本文来自第一学习网 www.d1xxw.com /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT ACCEPT # 打开 forward 功能 (或在/etc/sysconfig/network 中添加 FORWARD_IPV4=yes 打开转发功能,实现各网段互访) echo "1"> /proc/sys/net/ipv4/ip_forward # IP转发 #echo "1">/proc/sys/net/ipv4/ip_forward #echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_all #echo "8184000">/proc/sys/net/ipv4/ip_conntrack_max #echo "1024">/proc/sys/net/ipv4/neigh/default/gc_thresh1 #echo "2048">/proc/sys/net/ipv4/neigh/default/gc_thresh2 #echo "4096">/proc/sys/net/ipv4/neigh/default/gc_thresh3 #将返回给CERNET DNS客户数据包的源端口(53端口)伪装成53端口,只要正确的改这里,下面的机器可以改成任意的dns。 iptables -t nat -A PREROUTING -p udp -d 0.0.0.0/0 --dport 53 -j DNAT --to 218.30.19.40:53
第一学习网 www.d1xxw.com
#iptables -t nat -A PREROUTING -p udp -d 192.168.1.1 --dport 53 -j DNAT --to 61.134.1.9:53 #IP 伪装(SNAT应用) #使内网的封包经过伪装之后,使用对外的 eth0 网卡当作代理号,对外连线,进行IP地址伪装,使得内部的主机的数据包能通过服务器与外界联系! /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE /sbin/iptables -A FORWARD -s 0/0 -d 0/0 -j ACCEPT #禁止ping #ping #iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP #iptables -A INPUT -p icmp --icmp-type 0 -s 0/0 -j ACCEPT # 设置icmp阔值 ,并对攻击者记录在案,小型的防火墙! iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: " iptables -A INPUT -p icmp -m limit --limit 6/m -j ACCEPT iptables -A INPUT -p icmp -j DROP # 打开 syncookie (轻量级预防 DOS 攻击) sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null 第一学习网 www.d1xxw.com # 设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数) sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null # 设置支持最大连接树为 30W(这个根据内存和 iptables 版本来,每个 connection 需要 300 多个字节) #sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null # 允许要转向的包 iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -A FORWARD -i eth0 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # 防止SYN攻击 轻量 iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -A syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
第一学习网 www.d1xxw.com
iptables -A syn-flood -j REJECT # 对于不管来自哪里的ip碎片都进行控制,允许每秒通过100个碎片 iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # icmp包通过的控制,防止icmp黑客攻击 iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT # 丢弃坏的TCP包 iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:" iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP #drop pp poco(禁止PP POCO) iptables -I FORWARD -p tcp -s 0/0 --dport 2881 -j DROP iptables -I FORWARD -p tcp -s 0/0 --dport 5354 -j DROP iptables -I FORWARD -p tcp -s 0/0 --dport 9099 -j DROP iptables -I FORWARD -p udp -s 0/0 --dport 8094 -j DROP iptables -I OUTPUT -d 61.145.118.224 -j REJECT iptables -I OUTPUT -d 210.192.122.147 -j REJECT
本文来自第一学习网 www.d1xxw.com
iptables -I OUTPUT -d 207.46.196.108 -j REJECT #drop QQLive(禁止QQLive) iptables -I FORWARD -p udp --dport 13000:14000 -j DROP #drop www(禁止网页) #iptables -I FORWARD -d www.baidu.com -j DROP # dorp mac(通过禁止mac禁止上网) #iptables -t nat -I PREROUTING -m mac --mac-source 00:14:78:30:3E:DE -j DROP #drop ip(通过禁止ip禁止上网) #iptables -I FORWARD -s 192.168.1.35 -j DROP #accept all(允许某个ip上网) #iptables -I INPUT -s 192.168.1.6 -j ACCEPT #iptables -I FORWARD -s 192.168.1.6 -j ACCEPT #端口映射 #movie iptables -t nat -A PREROUTING -d 124.114.130.178 -p tcp -m tcp --dport 25001 -j DNAT --to-destination 192.168.100.3:3389 iptables -t nat -A POSTROUTING -d 192.168.100.3 -p tcp -m tcp --dport 3389 -j SNAT --to-source 192.168.100.1 第一学习网 www.d1xxw.com #game iptables -t nat -A PREROUTING -d 124.114.130.178 -p tcp -m tcp --dport 25002 -j DNAT --to-destination 192.168.100.252:3389 iptables -t nat -A POSTROUTING -d 192.168.100.252 -p tcp -m tcp --dport 3389 -j SNAT --to-source 192.168.100.1 #ftp iptables -t nat -A PREROUTING -d 124.114.130.178 -p tcp -m tcp --dport 1021 -j DNAT --to-destination 192.168.100.3:21 iptables -t nat -A POSTROUTING -d 192.168.100.3 -p tcp -m tcp --dport 21 -j SNAT --to-source 192.168.100.1 iptables -t nat -A PREROUTING -d 124.114.130.178 -p tcp -m tcp --dport 1022 -j DNAT --to-destination 192.168.100.252:21 iptables -t nat -A POSTROUTING -d 192.168.100.252 -p tcp -m tcp --dport 21 -j SNAT --to-source 192.168.100.1 #flim #iptables -t nat -A PREROUTING -d 124.114.130.178 -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.251:80 #iptables -t nat -A POSTROUTING -d 192.168.1.251 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.100.1 第一学习网 www.d1xxw.com
本文来自第一学习网 www.d1xxw.com
第一学习网 www.d1xxw.com
本文来自第一学习网 www.d1xxw.com
=============================== 有两点我们要注意. -conntrack最大数量.叫做conntrack_max -存储这些conntrack的hash表的大小,叫做hashsize 当conntrack入口数大于conntrack_max时,在hash表中每一个conntrack list中的存储的入口将不可控.(conntrack_mark/hashsize 为每个list所能存储的入口的数量) hash表存在于固定的的不可swap的内存中. conntrack_mark决定占用多少这些不可swap的内存. 缺省的hashsize -------------------------------- conntrack_max=hashsize*8 i386中 hashsize=conntrack_max/8=ramsize(in bytes)/131072=ramsize(in MegaBytes)*8. 所以32位pc,512M内存可以存512*1024^2/128/1024=512*8=4096(连接池list) 但是正确的算法是: hashsize=conntrack_max/8=ramsize(in bytes)/131072/(x/32) x表示使用的指针类型是(32位还是64的) ----------------------------\ 读取conntrack_max值 cat /proc/sys/net/ipv4/ip_conntrack_max 读取hashsize值 cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets 本文来自第一学习网 www.d1xxw.com ------------------------------ 你可修改这两个值以适应高负载的netfilter的应用 系统默认为conntrack_max:hashsize是8:1,你可以设成1:1以提高性能. ------------------------- 设置conntrack_max echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max 设置hashsize 如果(netfilter conntrack静态编译在内核中),2.4中可以在编译时设置,2.6可以在启动中(boot时)加入ip_conntrack.hashsize=$hashsize 如果为modules,则可以使用 modprobe ip_conntrack hashsize=$hashsize -------------------------- conntrack使用的内存计算 size_of_mem_used_by_conntrack (in bytes) = CONNTRACK_MAX * sizeof(struct ip_conntrack) + HASHSIZE * sizeof(struct list_head) 其中sizeof(struct ip_conntrack)大概在192-352字节之间. sizeof(struct list_head) = 2 * size_of_a_pointer(i386中为4字节) 一个例子512m内存,使用384m来用于conntrack则 384*1024*1024/(352+8)(使用它是保守计算) =~1143901 (此为conntrack:hashszie为1:1,352为sizeof(ip_conntrack),8为sizeof(list_head).
本文来自第一学习网 www.d1xxw.com
由于hash最好设为2的乘方的数,所以为1048576(2^20). --------------------- 附相关设置及命令:ip_conntrack timeout 原值432000秒(5天) 可改为10小时,echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established ip_conntrack buffer使用情况 grep conn /proc/slabinfo 例ip_conntrack 188069 229570 336 11 1 : tunables 54 27 8 : slabdata 20870
本文来自第一学习网 www.d1xxw.com
相关修改: echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo "1048576" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max echo "1" > /proc/sys/net/ipv4/ip_forward echo "268435456" >/proc/sys/kernel/shmall echo "536870912" >/proc/sys/kernel/shmmax echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established echo "1024" > /proc/sys/net/ipv4/neigh/default/gc_thresh1 echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2 echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3 echo "52428800" > /proc/sys/net/ipv4/route/max_size echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp 本文来自第一学习网 www.d1xxw.com echo "1" > /proc/sys/net/ipv4/tcp_window_scaling 第一学习网 www.d1xxw
|