iptables -I INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT
iptables -I OUTPUT -o eth0 -p tcp --sport 3690 -j ACCEPT
这里很多人会想到/etc/rc.d/init.d/iptables save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。
具体方法是:
只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables restart,然后才调用/etc/rc.d/init.d/iptables save, 因为/etc/rc.d/init.d/iptables save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rc.d/init.d/iptables save那么你 的/etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,
/sbin/iptables-save > /root/iptables-works
加时间戳的配置文件
/sbin/iptables-save > /root/iptables-works-`data+%F`
每次创建iptables配置文件副本时,都创建一个指向最新的文件的链接。
ln -s /root/iptables-works-`date +%F` /root/iptables-works-latest
避免在策略顶部使用如下的一些通用规则:
iptable -A INPUT -p tcp --dport 22 -j DROP
规则中指定的条件越多,封锁自己的可能性就越小,如下:
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0.0/8 -d 192.168.100.101 -j DROP
此规则表示在 INPUT 链尾追加一条新规则,将源地址为 10.0.0.0/8、 目的地址是 192.168.100.101、目的端口号是 22 (--dport 22 ) 的 TCP(-p tcp )数据包通通丢弃掉。
2.在策略规则顶部将你的ip列入白名单,可以有效的避免封锁自己的设置:
iptables -I INPUT -s -j ACCEPT
应用场景:给工作站配置具有限制性策略的防火墙。
iptables -P INPUT DROP
设置filter表INPUT链的默认规则是DROP。
#set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
#Accept any related or established connections
-I INPUT 1 -m state --state RELATED,ESABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED,ESABLISHED -j ACCEPT
#Allow all traffic on the loopback interface
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
#Allow outbound DHCP request
-A output -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
#Allow inbound SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
#Allow outbound email
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT
#outbound DNS lookups
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
#Outbound PING requests
-A OUTPUT -o eth0 -p icmp -j ACCEPT
#Outbound Network Time Protocol (NTP) requests
-A OUTPUT -o eth0 -p udp --dport 123 --sport 123 -j ACCEPT
#outbound HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 0m state --state NEW -j ACCEPT
COMMIT
host -t a www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum: 31.13.64.0 - 31.13.127.255
然后使用 CIDR 到 IPv4 转换 页面来将其转换为 CIDR 表示法。然后你得到 31.13.64.0/18 的地址。输入以下命令来阻止对 Facebook 的访问:
iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 –timestop 13:00 –d 31.13.64.0/18 -j ACCEPT
该命令中指定在中午12点(–timestart 12:00)到下午 1 点(–timestop 13:00)之间允许(-j ACCEPT)到 Facebook.com (-d [31.13.64.0/18][5])的 http 以及 https (-m multiport --dport http,https)的访问。
5. 按时间规定做限制 - 场景2
应用场景:在计划系统维护期间,你需要设置凌晨 2 点到 3 点之间拒绝所有的 TCP 和 UDP 访问,这样维护任务就不会受到干扰。使用两个 iptables 规则可实现:
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP
该规则禁止(-j DROP)在凌晨2点(–timestart 02:00)到凌晨3点(–timestop 03:00)之间的 TCP 和 UDP (-p tcp and -p udp)的数据进入(-A INPUT)访问。
6. 限制连接数量
应用场景:你的 web 服务器有可能受到来自世界各地的 DoS 攻击,为了避免这些攻击,你可以限制单个 IP 地址到你的 web 服务器创建连接的数量:
iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset
如果单个主机在一分钟之内新建立(-p tcp -syn)超过 20 个(-connlimit-above 20)到你的 web 服务器(–dport http,https)的连接,服务器将拒绝(-j REJECT)建立新的连接,然后通知对方新建连接被拒绝(–reject-with-tcp-reset)。
7. 监控 iptables 规则
由于数据包会遍历链中的规则,iptables 遵循 “首次匹配获胜” 的原则,因此经常匹配的规则应该靠近策略的顶部,而不太频繁匹配的规则应该接近底部。 你怎么知道哪些规则使用最多或最少,可以在顶部或底部附近监控?
1.iptables -L -v -n –line-numbers //-L:列出所有规则,-v详细信息,-n显示数字格式的数据包和字节计数器,
2.iptables -nvL | grep -v "0 0" //找到从来没有用过的规则删掉
注意:两个数字 0 之间不是 Tab 键,而是 5 个空格。
3.监控正在发生什么:
watch --interval=5 'iptables -nvL | grep -v "0 0"'
watch命令通过参数iptables -nvL|grep-v “0 0” 每隔5秒输出iptables的动态。
4.输出日志,使用第三方工具,例:FWLogwatch