9、放行web条目,放行已建立的链接,新请求不放行
# iptables -A INPUT -d 172.16.50.5 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 172.16.50.5 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
10、查看建立的条目及行号
[root@localhost ~]# iptables -L -n --line-numbers
# iptables -I OUTPUT -s 172.16.50.5 -m state --state ESTABLISHED -j ACCEPT
此时就可以把上面的三个条目给删了,默认匹配第一条的。
11、放行ftp(21号端口)
# iptables -A INPUT -d 172.16.50.5 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -o lo -j ACCEPT
[root@localhost ~]# service vsftpd restart 启动ftp服务
注意:装载模块(不需要手动装载,只需要修改配置文件)
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" #添加要加载的模块,如果有多个模块,用空格隔开
# iptables -A INPUT -d 172.16.50.5 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -R OUTPUT 1 -s 172.16.50.5 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@localhost ~]# service iptables save 保存原来的配置条目
[root@localhost ~]# service iptables restart 重启iptables服务
使用远程登录ftp
条目中几乎都有ESTABLISHED,可以使用一个命令完成,提高工作效率
# iptables -I INPUT -d 172.16.50.5 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
可以添加多个条目为NEW
#iptables -I INPUT 2 -d 172.16.50.5 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
上面所添加的条目都可以使用一条命令完成,可以很好的提高工作效率
12、放行指定Ip地址池之内的和放行指定IP地址池之外的
# iptables -A INPUT -p tcp -m iprange --src-range 172.16.50.1-172.16.50.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp -m iprange ! --src-range 172.16.50.1-172.16.50.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
13、设定某个特定IP最多能发起几个连接数、控制单位时间内的流量上限、限定用户访问的字符串
# iptables -A INPUT -d 172.16.50.10 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT(低于2个放行)
# iptables -R OUTPUT -s 172.16.50.10 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT
# iptables -I OUTPUT -s 172.16.50.10 -m string --algo kmp --string "拒绝的字符串" -j REJECT
14、限定当前主机的ping请求,记录ping成功的请求的信息
上面我们已经添加了icmp的条目,如果再添加一个条目在之前条目的下面是不会生效的,需要添加在原来条目的上面才能匹配到
iptables -I INPUT 8 -d 172.16.50.5 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall log for icmp--"
如果此时有其他主机ping我们的主机,可以查看日志
[root@localhost ~]# tail /var/log/messages
15、iptables不是服务,但有脚本;服务脚本的主要作用在于管理保存的规则.我们所写的规则是直接保存在内核空间中的内存上,关机后就没有了。装载及移除iptables/netfilter相关的内核模块:
iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack,一启动服务,这些模块就会被装载进来,此前所保存的规则也会生效起来的
[root@localhost ~]#lsmod这个命令时检查iptables的模块是否装在进来
ip_conntrack:实时记录这当前主机上、客户端、服务器端彼此正在建立的连接的连接关系,并且能够
追踪到哪一个连接和另外连接正处于什么状态,拥有什么样的关系。
[root@localhost ~]#cat /proc/net/ip_conntrack 查看iptables的状态,追踪表
# iptables -A INPUT -d 172.16.50.5 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -s 172.16.50.5 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

10、查看建立的条目及行号
[root@localhost ~]# iptables -L -n --line-numbers

# iptables -I OUTPUT -s 172.16.50.5 -m state --state ESTABLISHED -j ACCEPT
此时就可以把上面的三个条目给删了,默认匹配第一条的。
11、放行ftp(21号端口)
# iptables -A INPUT -d 172.16.50.5 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -o lo -j ACCEPT
[root@localhost ~]# service vsftpd restart 启动ftp服务
注意:装载模块(不需要手动装载,只需要修改配置文件)
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" #添加要加载的模块,如果有多个模块,用空格隔开
# iptables -A INPUT -d 172.16.50.5 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -R OUTPUT 1 -s 172.16.50.5 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@localhost ~]# service iptables save 保存原来的配置条目
[root@localhost ~]# service iptables restart 重启iptables服务
使用远程登录ftp

条目中几乎都有ESTABLISHED,可以使用一个命令完成,提高工作效率
# iptables -I INPUT -d 172.16.50.5 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
可以添加多个条目为NEW
#iptables -I INPUT 2 -d 172.16.50.5 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
上面所添加的条目都可以使用一条命令完成,可以很好的提高工作效率
12、放行指定Ip地址池之内的和放行指定IP地址池之外的
# iptables -A INPUT -p tcp -m iprange --src-range 172.16.50.1-172.16.50.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp -m iprange ! --src-range 172.16.50.1-172.16.50.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
13、设定某个特定IP最多能发起几个连接数、控制单位时间内的流量上限、限定用户访问的字符串
# iptables -A INPUT -d 172.16.50.10 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT(低于2个放行)
# iptables -R OUTPUT -s 172.16.50.10 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT
# iptables -I OUTPUT -s 172.16.50.10 -m string --algo kmp --string "拒绝的字符串" -j REJECT
14、限定当前主机的ping请求,记录ping成功的请求的信息
上面我们已经添加了icmp的条目,如果再添加一个条目在之前条目的下面是不会生效的,需要添加在原来条目的上面才能匹配到
iptables -I INPUT 8 -d 172.16.50.5 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall log for icmp--"
如果此时有其他主机ping我们的主机,可以查看日志
[root@localhost ~]# tail /var/log/messages

15、iptables不是服务,但有脚本;服务脚本的主要作用在于管理保存的规则.我们所写的规则是直接保存在内核空间中的内存上,关机后就没有了。装载及移除iptables/netfilter相关的内核模块:
iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack,一启动服务,这些模块就会被装载进来,此前所保存的规则也会生效起来的
[root@localhost ~]#lsmod这个命令时检查iptables的模块是否装在进来
ip_conntrack:实时记录这当前主机上、客户端、服务器端彼此正在建立的连接的连接关系,并且能够
追踪到哪一个连接和另外连接正处于什么状态,拥有什么样的关系。
[root@localhost ~]#cat /proc/net/ip_conntrack 查看iptables的状态,追踪表

[root@localhost ~]#iptstate:此命令可以追踪当前主机上每个请求
切记:/proc/sys/net/ipv4/ip_conntrack_max:定义ip_conntrack最多同时追踪多少个链接,如果超出一个数目,那些链接会因为超时被丢弃在某些非常繁忙的服务器上,不要触发这个模块
修改max值:
切记:/proc/sys/net/ipv4/ip_conntrack_max:定义ip_conntrack最多同时追踪多少个链接,如果超出一个数目,那些链接会因为超时被丢弃在某些非常繁忙的服务器上,不要触发这个模块
修改max值:

不会永久有效,需要写在配置文件中
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]#iptables -t nat -L 此命令可以自动激活ip_conntrack及它所依赖的库,在服务器非常繁忙的系统上是非常危险的,重启iptables,会清空原有所设置的表及表中的每一个链所设置的规则需要保存的,保存规则:
[root@localhost ~]# service iptables save 保存在/etc/sysconfig/iptables,重启服务后也不会丢弃
[root@localhost ~]#iptables-save > /etc/sysconfig/iptables.2013041801 使用输出重定向也可以保存,但不会生效
[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables.2013041801 使用输入重定向可以让其生效
16、自己也可以定义一个规则链
# iptables -N clean_in 新建规则链
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
检查tcp的标志位
# 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 -d 172.16.50.5 -j RETURN
# iptables -I INPUT -j clean_in (被主链调用,先由clean_in处理,没有问题就交由主链)
# iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
# iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
17、利用iptables的recent模块来抵御DOS(拒绝服务)攻击
ssh: 远程连接
# iptables -I INPUT 2 -d 172.16.50.5 -p tcp --dport 22 -m connlimit --connlimit-above 6 -j DROP
利用connlimit模块将单IP的并发设置为6;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
# iptables -I INPUT 3 -d 172.16.50.5 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
记录访问tcp 22端口的新连接,记录名称为SSH,--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
# iptables -I INPUT 4 -d 172.16.50.5 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。
指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
iptables的记录:/proc/net/ipt_recent/SSH,也可以使用下面的这句记录日志:
# iptables -A INPUT -d 172.16.50.5-p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]#iptables -t nat -L 此命令可以自动激活ip_conntrack及它所依赖的库,在服务器非常繁忙的系统上是非常危险的,重启iptables,会清空原有所设置的表及表中的每一个链所设置的规则需要保存的,保存规则:
[root@localhost ~]# service iptables save 保存在/etc/sysconfig/iptables,重启服务后也不会丢弃
[root@localhost ~]#iptables-save > /etc/sysconfig/iptables.2013041801 使用输出重定向也可以保存,但不会生效
[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables.2013041801 使用输入重定向可以让其生效

16、自己也可以定义一个规则链
# iptables -N clean_in 新建规则链
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
检查tcp的标志位
# 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 -d 172.16.50.5 -j RETURN
# iptables -I INPUT -j clean_in (被主链调用,先由clean_in处理,没有问题就交由主链)
# iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
# iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
17、利用iptables的recent模块来抵御DOS(拒绝服务)攻击
ssh: 远程连接
# iptables -I INPUT 2 -d 172.16.50.5 -p tcp --dport 22 -m connlimit --connlimit-above 6 -j DROP
利用connlimit模块将单IP的并发设置为6;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
# iptables -I INPUT 3 -d 172.16.50.5 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
记录访问tcp 22端口的新连接,记录名称为SSH,--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
# iptables -I INPUT 4 -d 172.16.50.5 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制五分钟后即可恢复访问。
指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
iptables的记录:/proc/net/ipt_recent/SSH,也可以使用下面的这句记录日志:
# iptables -A INPUT -d 172.16.50.5-p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"