os之iptables
修改默认策略为堵,堵之前先放行ssh,一进一出,避免将自己挡在门外,无法操作
iptables -t filter -A INPUT -s 192.168.43.0/24 -d 192.168.43.56 -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -s 192.168.43.56 -d 192.168.43.0/24 -p tcp --sport 22 -j ACCEPT iptables -t filter -A INPUT -s 172.20.0.0/16 -d 172.20.10.8 -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -s 172.20.10.8 -d 172.20.0.0/16 -p tcp --sport 22 -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
放行80
iptables -t filter -I INPUT -d 192.168.43.56 -p tcp --dport 80 -j ACCEPT iptables -t filter -I OUTPUT -s 192.168.43.56 -p tcp --sport 80 -j ACCEPT
ping 127.0.0.1
解决ping: sendmsg: Operation not permitted,
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
允许自己ping 192.168.43.192
iptables -A OUTPUT -s 192.168.43.56 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -d 192.168.43.56 -p icmp --icmp-type 0 -j ACCEPT
#####ip_conntrack
放行yum
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT # iptables -A INPUT -i lo -j ACCEPT # iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -p tcp -m tcp -m state --state NEW --dport 80 -j ACCEPT # iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT # iptables -A OUTPUT -o lo -j ACCEPT # iptables -A OUTPUT -p tcp --sport 10000:65535 -j ACCEPT # service iptables save # iptables-save > /PATH/TO/SOMEFILE ip addr flush dev ens33
#####关于nf_conntrack追踪功能
当前连接,centos7已经为nf_conntrack cat /proc/net/nf_conntrack cat /proc/sys/net/netfilter/nf_conntrack_max 65536 cat /proc/sys/net/nf_conntrack_max 65536 iptables -t nat -L #会自动激活nf_conntrack
iptstate
显式扩展: 使用额外的匹配机制 -m EXTESTION --spe-opt state: 状态扩展 结合ip_conntrack追踪会话的状态 NEW: 新连接请求 ESTABLISHED:已建立的连接 INVALID:非法连接 RELATED:相关联的 -m state --state NEW,ESTABLISHED -j ACCEPT 首先要装载ip_conntrack_ftp和ip_nat_ftp模块 iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT multiport: 离散的多端口匹配扩展 --source-ports --destination-ports --ports -m multiport --destination-ports 21,22,80 -j ACCEPT
条件取反:!,-s ! 172.16.100.6
保存规则:
iptables-save >/etc/sysconfig/iptables iptables-restore </etc/sysconfig/iptables
严密放行ssh,http
iptables -A INPUT -d 192.168.43.56 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.43.56 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -d 192.168.43.56 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.43.56 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP
sysctl -w net.nf_conntrack_max=65536 cat /proc/sys/net/nf_conntrack_max 65536 #调整tcp的established的timeout ls /proc/sys/net/ipv4/netfileter/
#放行被ping iptables -A INPUT -d 192.168.43.56 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.43.56 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT #整合下规则,只要是本机出去的都放行,放到第一条,-I插入 iptables -I OUTPUT -s 192.168.43.56 -m state --state ESTABLISHED -j ACCEPT iptables -L -n --line-numbers #放行ftp iptables -A INPUT -d 192.168.43.56 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT #放行本地到本地 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #放行ftp相关的数据端口,使用related iptables -A INPUT -d 192.168.43.56 -p tcp -m state --state RELATED -j ACCEPT iptables -R OUTPUT 1 -s 192.168.43.56 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -R INPUT 6 -d 192.168.43.56 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #然而在ftp中使用数据链路还是不可以,需要装载模块ip_conntrack_ftp和ip_nat_ftp #可以在iptables配置文件/etc/sysconfig/iptables-config中写入,IPTABLES_MODULES='ip_conntrack_ftp ip_nat_ftp'
#####multiport:离散的多端口匹配扩展
--source-ports --destination-ports --ports example: iptables -I INPUT 2 -d 192.168.43.56 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
-m iprange --src-range --dst-range -s, -d -s IP, NET 172.16.0.0/16, 172.16.100.3-172.16.100.100 iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m connlimit: 连接数限制 ! --connlimit-above n iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j ACCEPT -m limit --limit RATE #速率 --limit-burst #爆发 iptables -I INPUT -d 192.168.43.56 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6 -j ACCEPT -m string --algo {bm|kmp} --string "STRING" iptables -N clean_in iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP iptables -A clean_in -d 192.168.43.255 -p icmp -j DROP iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP #clean_in链的最后一条要返回主链 iptables -A clean_in -d 192.168.43.56 -j RETURN #进入input链的先转到clean_in链 iptables -I INPUT -j clean_in iptables -L -n -v 看到Chain clean_in (1 references),证明有一个引用,input chain那有相关target来引用
利用iptables的recent模块来抵御DOS攻击 ssh: 远程连接, iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP 1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值; 2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。 下面对最后两句做一个说明: 1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH --set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目 2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。 --update 是指每次建立连接都更新列表; --seconds必须与--rcheck或者--update同时使用 --hitcount必须与--rcheck或者--update同时使用 3.iptables的记录:/proc/net/ipt_recent/SSH 也可以使用下面的这句记录日志: iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"
#####NAT
待续。。。