歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

20個Linux防火牆應用技巧

1.顯示防火牆的狀態   以root權限運行下面的命令:   # iptables -L -n -v    參數說明:   -L:列出規則。   -v:顯示詳細信息。此選項會顯示接口名稱、規則選項和TOS掩碼,以及封包和字節計數。   -n:以數字形式顯示IP地址和端口,不使用DNS解析。   如果希望輸出的結果中顯示行號,可以運行:   # iptables -L -n -v --line-nmubers    這樣,就可以按照行號在防火牆中添加、刪除規則。   要顯示輸入或輸出鏈規則,可以運行:   # iptables -L INPUT -n -v   # iptables -L OUTPUT -n -v --line-numbers    2.停止、開啟和重啟防火牆   如果你使用的是RHEL/Fedora/CentOS系統,可以運行:   # service iptables stop   # service iptables start   # service iptables restart    我們也可以使用iptables命令停止防火牆並刪除所有規則:   # iptables -F   # iptables -X   # iptables -t nat -F   # iptables -t nat -X   # iptables -t mangle -F   # iptables -t mangle -X   # iptables -P INPUT ACCEPT   # iptables -P OUTPUT ACCEPT   # iptables -P FORWARD ACCEPT    參數說明:   -F:刪除所有的規則 -X:刪除鏈 -t table_name:匹配表(稱為nat或mangle) -P:設置默認策略(如DROP、REJECT或ACCEPT)   3.刪除防火牆規則   以帶行號的形式顯示已有的防火牆規則,請運行:   # iptables -L INPUT -n --line-numbers   # iptables -L OUTPUT -n --line-numbers   # iptables -L OUTPUT -n --line-numbers | less   # iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1  下面我們使用行號刪除規則:   # iptables -D INPUT 4  將IP地址202.54.1.1從規則中刪除:   # iptables -D INPUT -s 202.54.1.1 -j DROP    參數說明:   -D:從選擇的鏈中刪除一條或多條規則   4.插入防火牆規則   首先運行下面的命令:   # iptables -L INPUT -n --line-numbers    得到運行結果:   Chain INPUT (policy DROP)   num  target    prot opt source     destination   1   DROP      all  --  202.54.1.1  0.0.0.0/0   2   ACCEPT    all  --  0.0.0.0/0    0.0.0.0/0  在行1和行2之間插入規則:   # iptables -I INPUT 2 -s 202.54.1.2 -j DROP    查看更新後的規則,會發現插入成功,下面是示例:   Chain INPUT (policy DROP)   Num  target    prot opt source    destination      1     DROP    all  --  202.54.1.1  0.0.0.0/0   2     DROP    all  --  202.54.1.2  0.0.0.0/0   3     ACCEPT  all  --  0.0.0.0/0    0.0.0.0/0    5.保存防火牆規則   在RHEL/Fedora/CentOS Linux下,可以使用下面的命令保存防火牆規則:   # service iptables save  在其它Linux發行版(如Ubuntu)上,可以使用iptables-save命令保存防火牆規則:   # iptables-save > /root/my.active.firewall.rules   # cat /root/my.active.firewall.rules    6.重新加載防火牆規則   我們可以使用iptables-restore命令重新加載使用iptables-save命令保存的防火牆規則:   # iptables-restore < /root/my.active.firewall.rules    我們還可以利用這種特性來快速部署防火牆規則。   7.設置默認防火牆策略   我們首先來配置一個防火牆策略,它默認丟棄所有的網絡數據包:   # iptables -P INPUT DROP   # iptables -P OUTPUT DROP   # iptables -P FORWARD DROP   # iptables -L -v -n #連接失敗,因為防火牆丟棄所有的網絡數據包   # ping cyberciti.biz   # wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2    在此基礎上,我們只關閉入站連接:   # iptables -P INPUT DROP   # iptables -P FORWARD DROP   # iptables -P OUTPUT ACCEPT   # iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT   # iptables -L -v -n   #ping和wget可以正常工作   # ping cyberciti.biz   # wget http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.2-rc5.tar.bz2    8.在公網網絡接口上停用私有網絡地址   我們可以從公網網絡接口上刪除私有IPv4網段,以防止IP欺騙。運行下面的命令,沒有源路由地址的數據包會被丟棄:   # iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP   # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP    下面是私有網絡IPv4地址范圍,請確認在公網接口予以屏蔽:   10.0.0.0/8 -j (A) 172.16.0.0/12 (B) 192.168.0.0/16 (C) 224.0.0.0/4 (多播 D) 240.0.0.0/5 (E) 127.0.0.0/8 (回環)   9.屏蔽IP地址訪問   如果我們想屏蔽一個IP地址,比如1.2.3.4,可以運行:   # iptables -A INPUT -s 1.2.3.4 -j DROP   # iptables -A INPUT -s 192.168.0.0/24 -j DROP    10.屏蔽入棧端口請求   如果我們想80端口上屏蔽所有的服務請求,可以運行:   # iptables -A INPUT -p tcp --dport 80 -j DROP   # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP    只想屏蔽IP地址1.2.3.4對80端口的請求,可以運行:   # iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP   # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP    11.屏蔽出棧IP地址   現在我們來演示如何屏蔽對主機名和IP地址的出棧訪問。   首先,我們來獲取一個域名的IP地址:   # host -t a cyberciti.biz    輸出示例:   cyberciti.biz has address 75.126.153.206    要屏蔽訪問域名cyberciti.biz的網絡數據包,可以運行:   # iptables -A OUTPUT -d 75.126.153.206 -j DROP    下面是使用子網掩碼的示例:   # iptables -A OUTPUT -d 192.168.1.0/24 -j DROP   # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP    下面我們以屏蔽facebook.com為例,進行說明。首先,我們需要facebook的所有IP地址:   # host -t a www.facebook.com    示例輸出:   www.facebook.com has address 69.171.228.40    找出IP地址69.171.228.40的CIDR:   # whois 69.171.228.40 | grep CIDR    示例輸出:   CIDR:69.171.224.0/19    現在我們來阻止對facebook.com的訪問:   # iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP    我們也可以直接屏蔽域名:   # iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP   # iptables -A OUTPUT -p tcp -d facebook.com -j DROP    12.記錄並丟棄數據包   在公網網絡接口上記錄並丟棄IP地址欺騙數據包:   # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "   # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP    默認情況下日志記錄在/var/log/messages文件中:   # tail -f /var/log/messages   # grep --color 'IP SPOOF' /var/log/messages    我們還可以用-m參數對日志記錄進行限制,以防止日志文件過度膨脹。   # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "   # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP    13.根據MAC地址允許或阻止數據包的傳入   我們可以根據MAC地址允許或阻止數據包的傳入:   # iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP   14.屏蔽ICMP ping請求   我們可以通過允許下面的命令屏蔽ping請求:   # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP   # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP    也可以按照特定的網段和主機限制ping請求:   # iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT    以下命令只接受受限制的ping請求:   #假定默認INPUT策略為丟棄數據包   # iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT   # iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT   # iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT   #所有的服務器都對ping請求作出應答   # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT    15.開啟端口序列   下面的命令可以允許7000到7010范圍內的TCP端口訪問:   # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT    16.允許一系列IP地址訪問   下面的命令可以允許IP地址范圍   #運行IP地址范圍192.168.1.100 到192.168.1.200 訪問80端口   # iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT   #NAT示例   # iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25    17.建立連接並重啟防火牆   當重啟iptables服務時,它會斷開所有已建立的連接。這是因為在重啟防火牆時,會卸載IPTABLES_MODULES_UNLOAD模塊。   要解決這個問題,可以編輯/etc/sysconfig/iptables-config   IPTABLES_MODULES_UNLOAD = no  18.使用Crit日志級別   # iptables -A INPUT -s 1.2.3.4 -p tcp --destination-port 80 -j LOG --log-level crit    19.屏蔽或開啟常見端口   屏蔽或開啟常用的TCP、UDP端口:   #可以使用DROP替換ACCEPT,實現端口屏蔽。   #打開22端口(SSH)   # iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT   #打開TCP/UDP631端口(打印服務)   # iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT   # iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT   # 打開123端口,允許局域網用戶進行NTP時間同步   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT   #打開25端口(SMTP)   # iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT   # 打開DNS端口   # iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT   # iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT   #打開http/https端口   # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT   # iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT   #打開TCP110端口(POP3)   # iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT   #打開TCP143端口   # iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT   #為局域網用戶開啟Samba訪問   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT   #為局域網用戶開啟代理服務器訪問   # iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT   #為局域網用戶開啟MySQL訪問   # iptables -I INPUT -p tcp --dport 3306 -j ACCEPT    20.限制客戶端IP的並發連接數   我們可以使用connlimit模塊限制客戶端IP的並發連接數。下面的命令允許每個客戶端只能並發3個ssh連接:   # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT  設置HTTP並發連接為20個:   # iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP    參數說明:   --connlimit-above 3:連接數超過3個自動匹配 --connlimit-mask 24:子網掩碼匹配   更好的使用iptables   首先,我們要學會查看man手冊:   $ man iptables     我們還可以這樣查看幫助:   # iptables -h    我們還可以查看特定命令的幫助:   # iptables -j DROP -h    測試防火牆   測試端口是否開放:   # netstat -tulpn    測試TCP 80端口是否開放:   # netstat -tulpn | grep :80    如果80端口未開放,請確保啟動Apache服務器:   # service httpd start    並確保打開iptables防火牆80端口:   # iptables -L INPUT -v -n | grep 80    如果80端口沒有開放,可以運行下面的命令:   # iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT   # service iptables save    下面使用telnet命令測試是否可以連接到80端口:   $ telnet www.cyberciti.biz 80    下面是示例輸出:   Trying 75.126.153.206...   Connected to www.cyberciti.biz.   Escape character is '^]'.   ^]   telnet> quit   Connection closed.    最後,我們也推薦使用嗅探工具(如tcpdump、ngrep)對防火牆設置進行測試。   以上只是一些基本的防火牆配置策略,如果你想構造更復雜的防火牆策略,需要對TCP/IP和Linux內核配置文件sysctl.conf進行更深入的學習。
Copyright © Linux教程網 All Rights Reserved